Subject: [PATCH] Built motion from commit bcd50b9.|0.0.29

From: Motion Team <[email-masked]>
Date: Tue, 19 Jan 2016 16:42:54 +0100

---
 package.json                                       |    3 +-
 public/app/4942fdcb.vendor.js                      |  114 +
 public/app/67dd0d05.vendor.css                     |   38 +
 public/app/76616549.app.js                         |   55 +
 public/app/7b2a74e6.app.css                        |    1 -
 public/app/9210b25d.app.js                         |   55 -
 public/app/bff60da8.vendor.js                      |   99 -
 public/app/ec36ec5b.app.css                        |    1 +
 public/app/f3572dd3.vendor.css                     |   38 -
 public/assets/css/global/custom.css                |   11 +
 public/assets/css/jstree-metronic/32px.png         |  Bin 0 -> 2574 bytes
 public/assets/css/jstree-metronic/32px_line.png    |  Bin 0 -> 2387 bytes
 .../assets/css/jstree-metronic/32px_original.png   |  Bin 0 -> 3121 bytes
 public/assets/css/jstree-metronic/40px.png         |  Bin 0 -> 1413 bytes
 public/assets/css/jstree-metronic/style.css        |  952 +
 public/assets/css/jstree-metronic/style.min.css    |    1 +
 public/assets/css/jstree-metronic/throbber.gif     |  Bin 0 -> 1720 bytes
 public/assets/images/demo.png                      |  Bin 0 -> 4245 bytes
 public/assets/languages/locale-en_EN.json          |    7 +
 public/assets/languages/locale-it.json             |    5 +
 public/assets/plugins/jscripty/js/Actions.js       |  631 +
 public/assets/plugins/jscripty/js/Dialogs.js       | 1007 +
 public/assets/plugins/jscripty/js/Editor.js        |  888 +
 public/assets/plugins/jscripty/js/EditorUi.js      | 1308 +
 public/assets/plugins/jscripty/js/Graph.js         |  748 +
 public/assets/plugins/jscripty/js/Menus.js         |  716 +
 public/assets/plugins/jscripty/js/Shapes.js        | 1234 +
 public/assets/plugins/jscripty/js/Sidebar.js       |  787 +
 public/assets/plugins/jscripty/js/Toolbar.js       |  407 +
 public/assets/plugins/jscripty/js/custom.js        |  283 +
 public/assets/plugins/jscripty/resources/dia.txt   |  280 +
 .../assets/plugins/jscripty/resources/dia_am.txt   |  255 +
 .../assets/plugins/jscripty/resources/dia_ar.txt   |  255 +
 .../assets/plugins/jscripty/resources/dia_bg.txt   |  255 +
 .../assets/plugins/jscripty/resources/dia_bn.txt   |  255 +
 .../assets/plugins/jscripty/resources/dia_bs.txt   |  255 +
 .../assets/plugins/jscripty/resources/dia_ca.txt   |  255 +
 .../assets/plugins/jscripty/resources/dia_cs.txt   |  255 +
 .../assets/plugins/jscripty/resources/dia_da.txt   |  255 +
 .../assets/plugins/jscripty/resources/dia_de.txt   |  255 +
 .../assets/plugins/jscripty/resources/dia_el.txt   |  255 +
 .../plugins/jscripty/resources/dia_es-AR.txt       |  255 +
 .../assets/plugins/jscripty/resources/dia_es.txt   |  255 +
 .../assets/plugins/jscripty/resources/dia_et.txt   |  255 +
 .../assets/plugins/jscripty/resources/dia_fa.txt   |  255 +
 .../assets/plugins/jscripty/resources/dia_fi.txt   |  255 +
 .../assets/plugins/jscripty/resources/dia_fil.txt  |  255 +
 .../assets/plugins/jscripty/resources/dia_fr.txt   |  255 +
 .../assets/plugins/jscripty/resources/dia_gu.txt   |  255 +
 .../assets/plugins/jscripty/resources/dia_he.txt   |  255 +
 .../assets/plugins/jscripty/resources/dia_hi.txt   |  255 +
 .../assets/plugins/jscripty/resources/dia_hr.txt   |  255 +
 .../assets/plugins/jscripty/resources/dia_hu.txt   |  255 +
 .../assets/plugins/jscripty/resources/dia_id.txt   |  255 +
 .../assets/plugins/jscripty/resources/dia_it.txt   |  404 +
 .../assets/plugins/jscripty/resources/dia_ja.txt   |  255 +
 .../assets/plugins/jscripty/resources/dia_kn.txt   |  255 +
 .../assets/plugins/jscripty/resources/dia_ko.txt   |  255 +
 .../assets/plugins/jscripty/resources/dia_lt.txt   |  255 +
 .../assets/plugins/jscripty/resources/dia_lv.txt   |  255 +
 .../assets/plugins/jscripty/resources/dia_ml.txt   |  255 +
 .../assets/plugins/jscripty/resources/dia_mr.txt   |  255 +
 .../assets/plugins/jscripty/resources/dia_ms.txt   |  255 +
 .../assets/plugins/jscripty/resources/dia_nl.txt   |  255 +
 .../assets/plugins/jscripty/resources/dia_no.txt   |  255 +
 .../assets/plugins/jscripty/resources/dia_pl.txt   |  255 +
 .../plugins/jscripty/resources/dia_pt-br.txt       |  255 +
 .../assets/plugins/jscripty/resources/dia_pt.txt   |  255 +
 .../assets/plugins/jscripty/resources/dia_ro.txt   |  255 +
 .../assets/plugins/jscripty/resources/dia_ru.txt   |  255 +
 .../assets/plugins/jscripty/resources/dia_sk.txt   |  255 +
 .../assets/plugins/jscripty/resources/dia_sl.txt   |  255 +
 .../assets/plugins/jscripty/resources/dia_sr.txt   |  255 +
 .../assets/plugins/jscripty/resources/dia_sv.txt   |  255 +
 .../assets/plugins/jscripty/resources/dia_sw.txt   |  255 +
 .../assets/plugins/jscripty/resources/dia_ta.txt   |  255 +
 .../assets/plugins/jscripty/resources/dia_te.txt   |  255 +
 .../assets/plugins/jscripty/resources/dia_th.txt   |  255 +
 .../assets/plugins/jscripty/resources/dia_tr.txt   |  255 +
 .../assets/plugins/jscripty/resources/dia_uk.txt   |  255 +
 .../assets/plugins/jscripty/resources/dia_zh.txt   |  255 +
 .../assets/plugins/jscripty/resources/help_it.html |   10 +
 .../plugins/jscripty/stencils/email_128x128.png    |  Bin 0 -> 7469 bytes
 .../plugins/jscripty/stencils/end_128x128.png      |  Bin 0 -> 6551 bytes
 .../assets/plugins/jscripty/stencils/general.xml   |   58 +
 .../plugins/jscripty/stencils/input_128x128.png    |  Bin 0 -> 1003 bytes
 .../plugins/jscripty/stencils/question_128x128.png |  Bin 0 -> 2404 bytes
 .../plugins/jscripty/stencils/start_128x128.png    |  Bin 0 -> 5631 bytes
 .../plugins/jscripty/templates/images/aws1.png     |  Bin 0 -> 14950 bytes
 .../plugins/jscripty/templates/images/bpmn1.png    |  Bin 0 -> 12907 bytes
 .../plugins/jscripty/templates/images/compare1.png |  Bin 0 -> 11640 bytes
 .../jscripty/templates/images/flowchart1.png       |  Bin 0 -> 13007 bytes
 .../jscripty/templates/images/flowchart2.png       |  Bin 0 -> 6606 bytes
 .../plugins/jscripty/templates/images/gantt1.png   |  Bin 0 -> 15699 bytes
 .../plugins/jscripty/templates/images/lean1.png    |  Bin 0 -> 17148 bytes
 .../plugins/jscripty/templates/images/mindmap1.png |  Bin 0 -> 30976 bytes
 .../jscripty/templates/images/orgchart1.png        |  Bin 0 -> 17824 bytes
 .../jscripty/templates/images/orgchart2.png        |  Bin 0 -> 14114 bytes
 .../plugins/jscripty/templates/images/package1.png |  Bin 0 -> 12484 bytes
 .../plugins/jscripty/templates/images/pid1.png     |  Bin 0 -> 12276 bytes
 .../jscripty/templates/images/plcladder1.png       |  Bin 0 -> 3315 bytes
 .../plugins/jscripty/templates/images/seqdiag1.png |  Bin 0 -> 10392 bytes
 .../plugins/jscripty/templates/images/sitemap1.png |  Bin 0 -> 18466 bytes
 .../plugins/jscripty/templates/images/socnet1.png  |  Bin 0 -> 19817 bytes
 .../jscripty/templates/images/stardelta.png        |  Bin 0 -> 7197 bytes
 .../jscripty/templates/images/statemachine1.png    |  Bin 0 -> 15022 bytes
 .../plugins/jscripty/templates/images/uml1.png     |  Bin 0 -> 6388 bytes
 .../plugins/jscripty/templates/images/usecase1.png |  Bin 0 -> 25313 bytes
 .../plugins/jscripty/templates/images/venn1.png    |  Bin 0 -> 9761 bytes
 .../plugins/jscripty/templates/images/wf1.png      |  Bin 0 -> 7413 bytes
 .../assets/plugins/jscripty/templates/xml/aws1.xml |    1 +
 .../plugins/jscripty/templates/xml/bpmn1.xml       |    1 +
 .../plugins/jscripty/templates/xml/compare1.xml    |    1 +
 .../plugins/jscripty/templates/xml/flowchart1.xml  |    1 +
 .../plugins/jscripty/templates/xml/flowchart2.xml  |    1 +
 .../plugins/jscripty/templates/xml/gantt1.xml      |    1 +
 .../plugins/jscripty/templates/xml/lean1.xml       |    1 +
 .../plugins/jscripty/templates/xml/mindmap1.xml    |    1 +
 .../plugins/jscripty/templates/xml/orgchart1.xml   |    1 +
 .../plugins/jscripty/templates/xml/orgchart2.xml   |    1 +
 .../plugins/jscripty/templates/xml/package1.xml    |    1 +
 .../assets/plugins/jscripty/templates/xml/pid1.xml |    1 +
 .../plugins/jscripty/templates/xml/plcladder1.xml  |    1 +
 .../plugins/jscripty/templates/xml/seqdiag1.xml    |    1 +
 .../plugins/jscripty/templates/xml/sitemap1.xml    |    1 +
 .../plugins/jscripty/templates/xml/socnet1.xml     |    1 +
 .../plugins/jscripty/templates/xml/stardelta.xml   |    1 +
 .../jscripty/templates/xml/statemachine1.xml       |    1 +
 .../assets/plugins/jscripty/templates/xml/uml1.xml |    1 +
 .../plugins/jscripty/templates/xml/usecase1.xml    |    1 +
 .../plugins/jscripty/templates/xml/venn1.xml       |    1 +
 .../assets/plugins/jscripty/templates/xml/wf1.xml  |    1 +
 public/assets/plugins/mxgraph/images/warning.gif   |  Bin 0 -> 22231 bytes
 public/assets/plugins/mxgraph/images/warning.png   |  Bin 0 -> 24526 bytes
 public/assets/plugins/mxgraph/js/Actions.js        |  631 -
 public/assets/plugins/mxgraph/js/Dialogs.js        |  949 -
 public/assets/plugins/mxgraph/js/Editor.js         |  888 -
 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       |27615 ++++----
 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 5966 -> 0 bytes
 .../stencils/call_management/callback_128x128.png  |  Bin 2377 -> 0 bytes
 .../stencils/call_management/dial_128x128.png      |  Bin 5782 -> 0 bytes
 .../stencils/call_management/ext_dial_128x128.png  |  Bin 5385 -> 0 bytes
 .../stencils/call_management/hangup_128x128.png    |  Bin 7477 -> 0 bytes
 .../stencils/call_management/queue_128x128.png     |  Bin 6290 -> 0 bytes
 .../stencils/call_management/voicemail_128x128.png |  Bin 7469 -> 0 bytes
 .../mxgraph/stencils/callflow/gotoc_128x128.png    |  Bin 5581 -> 0 bytes
 .../mxgraph/stencils/callflow/gotoif_128x128.png   |  Bin 7130 -> 0 bytes
 .../stencils/callflow/gotoifmultitime_128x128.png  |  Bin 9851 -> 0 bytes
 .../stencils/callflow/gotoiftime_128x128.png       |  Bin 7388 -> 0 bytes
 .../mxgraph/stencils/callflow/vswitch_128x128.png  |  Bin 5410 -> 0 bytes
 .../plugins/mxgraph/stencils/entry/end_128x128.png |  Bin 6551 -> 0 bytes
 .../mxgraph/stencils/entry/finally_128x128.png     |  Bin 7568 -> 0 bytes
 .../mxgraph/stencils/entry/start_128x128.png       |  Bin 5631 -> 0 bytes
 public/assets/plugins/mxgraph/stencils/general.xml |   58 -
 .../mxgraph/stencils/general/agi_128x128.png       |  Bin 4113 -> 0 bytes
 .../stencils/general/custom_app_128x128.png        |  Bin 5273 -> 0 bytes
 .../mxgraph/stencils/general/noop_128x128.png      |  Bin 5933 -> 0 bytes
 .../stencils/general/subproject_128x128.png        |  Bin 5143 -> 0 bytes
 .../mxgraph/stencils/general/system_128x128.png    |  Bin 5866 -> 0 bytes
 .../stencils/integration_server/asr_128x128.png    |  Bin 9355 -> 0 bytes
 .../integration_server/database_128x128.png        |  Bin 5900 -> 0 bytes
 .../integration_server/ispeechasr_128x128.png      |  Bin 4918 -> 0 bytes
 .../stencils/playback/background_128x128.png       |  Bin 6874 -> 0 bytes
 .../stencils/playback/getdigits_128x128.png        |  Bin 4864 -> 0 bytes
 .../stencils/playback/ispeechtts_128x128.png       |  Bin 4830 -> 0 bytes
 .../mxgraph/stencils/playback/menu_128x128.png     |  Bin 5010 -> 0 bytes
 .../mxgraph/stencils/playback/playback_128x128.png |  Bin 4903 -> 0 bytes
 .../stencils/playback/saydigits_128x128.png        |  Bin 6105 -> 0 bytes
 .../stencils/playback/saynumber_128x128.png        |  Bin 7097 -> 0 bytes
 .../stencils/playback/sayphonetic_128x128.png      |  Bin 6642 -> 0 bytes
 .../mxgraph/stencils/playback/tts_128x128.png      |  Bin 5600 -> 0 bytes
 .../mxgraph/stencils/recording/record_128x128.png  |  Bin 5155 -> 0 bytes
 .../mxgraph/stencils/stats/goal_128x128.png        |  Bin 5807 -> 0 bytes
 .../mxgraph/stencils/stats/queuelog_128x128.png    |  Bin 4347 -> 0 bytes
 .../mxgraph/stencils/variable/math_128x128.png     |  Bin 6286 -> 0 bytes
 .../mxgraph/stencils/variable/set_128x128.png      |  Bin 5854 -> 0 bytes
 .../plugins/mxgraph/templates/images/aws1.png      |  Bin 14950 -> 0 bytes
 .../plugins/mxgraph/templates/images/bpmn1.png     |  Bin 12907 -> 0 bytes
 .../plugins/mxgraph/templates/images/compare1.png  |  Bin 11640 -> 0 bytes
 .../mxgraph/templates/images/flowchart1.png        |  Bin 13007 -> 0 bytes
 .../mxgraph/templates/images/flowchart2.png        |  Bin 6606 -> 0 bytes
 .../plugins/mxgraph/templates/images/gantt1.png    |  Bin 15699 -> 0 bytes
 .../plugins/mxgraph/templates/images/lean1.png     |  Bin 17148 -> 0 bytes
 .../plugins/mxgraph/templates/images/mindmap1.png  |  Bin 30976 -> 0 bytes
 .../plugins/mxgraph/templates/images/orgchart1.png |  Bin 17824 -> 0 bytes
 .../plugins/mxgraph/templates/images/orgchart2.png |  Bin 14114 -> 0 bytes
 .../plugins/mxgraph/templates/images/package1.png  |  Bin 12484 -> 0 bytes
 .../plugins/mxgraph/templates/images/pid1.png      |  Bin 12276 -> 0 bytes
 .../mxgraph/templates/images/plcladder1.png        |  Bin 3315 -> 0 bytes
 .../plugins/mxgraph/templates/images/seqdiag1.png  |  Bin 10392 -> 0 bytes
 .../plugins/mxgraph/templates/images/sitemap1.png  |  Bin 18466 -> 0 bytes
 .../plugins/mxgraph/templates/images/socnet1.png   |  Bin 19817 -> 0 bytes
 .../plugins/mxgraph/templates/images/stardelta.png |  Bin 7197 -> 0 bytes
 .../mxgraph/templates/images/statemachine1.png     |  Bin 15022 -> 0 bytes
 .../plugins/mxgraph/templates/images/uml1.png      |  Bin 6388 -> 0 bytes
 .../plugins/mxgraph/templates/images/usecase1.png  |  Bin 25313 -> 0 bytes
 .../plugins/mxgraph/templates/images/venn1.png     |  Bin 9761 -> 0 bytes
 .../plugins/mxgraph/templates/images/wf1.png       |  Bin 7413 -> 0 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/square/js/Actions.js         |  631 +
 public/assets/plugins/square/js/Dialogs.js         |  949 +
 public/assets/plugins/square/js/Editor.js          |  888 +
 public/assets/plugins/square/js/EditorUi.js        | 1481 +
 public/assets/plugins/square/js/Graph.js           |  748 +
 public/assets/plugins/square/js/Menus.js           |  716 +
 public/assets/plugins/square/js/Shapes.js          | 1234 +
 public/assets/plugins/square/js/Sidebar.js         |  903 +
 public/assets/plugins/square/js/Toolbar.js         |  407 +
 public/assets/plugins/square/js/custom.js          |  283 +
 public/assets/plugins/square/resources/dia.txt     |  256 +
 public/assets/plugins/square/resources/dia_am.txt  |  255 +
 public/assets/plugins/square/resources/dia_ar.txt  |  255 +
 public/assets/plugins/square/resources/dia_bg.txt  |  255 +
 public/assets/plugins/square/resources/dia_bn.txt  |  255 +
 public/assets/plugins/square/resources/dia_bs.txt  |  255 +
 public/assets/plugins/square/resources/dia_ca.txt  |  255 +
 public/assets/plugins/square/resources/dia_cs.txt  |  255 +
 public/assets/plugins/square/resources/dia_da.txt  |  255 +
 public/assets/plugins/square/resources/dia_de.txt  |  255 +
 public/assets/plugins/square/resources/dia_el.txt  |  255 +
 .../assets/plugins/square/resources/dia_es-AR.txt  |  255 +
 public/assets/plugins/square/resources/dia_es.txt  |  255 +
 public/assets/plugins/square/resources/dia_et.txt  |  255 +
 public/assets/plugins/square/resources/dia_fa.txt  |  255 +
 public/assets/plugins/square/resources/dia_fi.txt  |  255 +
 public/assets/plugins/square/resources/dia_fil.txt |  255 +
 public/assets/plugins/square/resources/dia_fr.txt  |  255 +
 public/assets/plugins/square/resources/dia_gu.txt  |  255 +
 public/assets/plugins/square/resources/dia_he.txt  |  255 +
 public/assets/plugins/square/resources/dia_hi.txt  |  255 +
 public/assets/plugins/square/resources/dia_hr.txt  |  255 +
 public/assets/plugins/square/resources/dia_hu.txt  |  255 +
 public/assets/plugins/square/resources/dia_id.txt  |  255 +
 public/assets/plugins/square/resources/dia_it.txt  |  396 +
 public/assets/plugins/square/resources/dia_ja.txt  |  255 +
 public/assets/plugins/square/resources/dia_kn.txt  |  255 +
 public/assets/plugins/square/resources/dia_ko.txt  |  255 +
 public/assets/plugins/square/resources/dia_lt.txt  |  255 +
 public/assets/plugins/square/resources/dia_lv.txt  |  255 +
 public/assets/plugins/square/resources/dia_ml.txt  |  255 +
 public/assets/plugins/square/resources/dia_mr.txt  |  255 +
 public/assets/plugins/square/resources/dia_ms.txt  |  255 +
 public/assets/plugins/square/resources/dia_nl.txt  |  255 +
 public/assets/plugins/square/resources/dia_no.txt  |  255 +
 public/assets/plugins/square/resources/dia_pl.txt  |  255 +
 .../assets/plugins/square/resources/dia_pt-br.txt  |  255 +
 public/assets/plugins/square/resources/dia_pt.txt  |  255 +
 public/assets/plugins/square/resources/dia_ro.txt  |  255 +
 public/assets/plugins/square/resources/dia_ru.txt  |  255 +
 public/assets/plugins/square/resources/dia_sk.txt  |  255 +
 public/assets/plugins/square/resources/dia_sl.txt  |  255 +
 public/assets/plugins/square/resources/dia_sr.txt  |  255 +
 public/assets/plugins/square/resources/dia_sv.txt  |  255 +
 public/assets/plugins/square/resources/dia_sw.txt  |  255 +
 public/assets/plugins/square/resources/dia_ta.txt  |  255 +
 public/assets/plugins/square/resources/dia_te.txt  |  255 +
 public/assets/plugins/square/resources/dia_th.txt  |  255 +
 public/assets/plugins/square/resources/dia_tr.txt  |  255 +
 public/assets/plugins/square/resources/dia_uk.txt  |  255 +
 public/assets/plugins/square/resources/dia_zh.txt  |  255 +
 .../assets/plugins/square/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
 .../square/stencils/callflow/gotoc_128x128.png     |  Bin 0 -> 5581 bytes
 .../square/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
 .../square/stencils/callflow/vswitch_128x128.png   |  Bin 0 -> 5410 bytes
 .../plugins/square/stencils/entry/end_128x128.png  |  Bin 0 -> 6551 bytes
 .../square/stencils/entry/finally_128x128.png      |  Bin 0 -> 7568 bytes
 .../square/stencils/entry/start_128x128.png        |  Bin 0 -> 5631 bytes
 public/assets/plugins/square/stencils/general.xml  |   58 +
 .../square/stencils/general/agi_128x128.png        |  Bin 0 -> 4113 bytes
 .../square/stencils/general/custom_app_128x128.png |  Bin 0 -> 5273 bytes
 .../square/stencils/general/noop_128x128.png       |  Bin 0 -> 5933 bytes
 .../square/stencils/general/subproject_128x128.png |  Bin 0 -> 5143 bytes
 .../square/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
 .../square/stencils/playback/getdigits_128x128.png |  Bin 0 -> 4864 bytes
 .../stencils/playback/ispeechtts_128x128.png       |  Bin 0 -> 4830 bytes
 .../square/stencils/playback/menu_128x128.png      |  Bin 0 -> 5010 bytes
 .../square/stencils/playback/playback_128x128.png  |  Bin 0 -> 4903 bytes
 .../square/stencils/playback/saydigits_128x128.png |  Bin 0 -> 6105 bytes
 .../square/stencils/playback/saynumber_128x128.png |  Bin 0 -> 7097 bytes
 .../stencils/playback/sayphonetic_128x128.png      |  Bin 0 -> 6642 bytes
 .../square/stencils/playback/tts_128x128.png       |  Bin 0 -> 5600 bytes
 .../square/stencils/recording/record_128x128.png   |  Bin 0 -> 5155 bytes
 .../plugins/square/stencils/stats/goal_128x128.png |  Bin 0 -> 5807 bytes
 .../square/stencils/stats/queuelog_128x128.png     |  Bin 0 -> 4347 bytes
 .../square/stencils/variable/math_128x128.png      |  Bin 0 -> 6286 bytes
 .../square/stencils/variable/set_128x128.png       |  Bin 0 -> 5854 bytes
 .../plugins/square/templates/images/aws1.png       |  Bin 0 -> 14950 bytes
 .../plugins/square/templates/images/bpmn1.png      |  Bin 0 -> 12907 bytes
 .../plugins/square/templates/images/compare1.png   |  Bin 0 -> 11640 bytes
 .../plugins/square/templates/images/flowchart1.png |  Bin 0 -> 13007 bytes
 .../plugins/square/templates/images/flowchart2.png |  Bin 0 -> 6606 bytes
 .../plugins/square/templates/images/gantt1.png     |  Bin 0 -> 15699 bytes
 .../plugins/square/templates/images/lean1.png      |  Bin 0 -> 17148 bytes
 .../plugins/square/templates/images/mindmap1.png   |  Bin 0 -> 30976 bytes
 .../plugins/square/templates/images/orgchart1.png  |  Bin 0 -> 17824 bytes
 .../plugins/square/templates/images/orgchart2.png  |  Bin 0 -> 14114 bytes
 .../plugins/square/templates/images/package1.png   |  Bin 0 -> 12484 bytes
 .../plugins/square/templates/images/pid1.png       |  Bin 0 -> 12276 bytes
 .../plugins/square/templates/images/plcladder1.png |  Bin 0 -> 3315 bytes
 .../plugins/square/templates/images/seqdiag1.png   |  Bin 0 -> 10392 bytes
 .../plugins/square/templates/images/sitemap1.png   |  Bin 0 -> 18466 bytes
 .../plugins/square/templates/images/socnet1.png    |  Bin 0 -> 19817 bytes
 .../plugins/square/templates/images/stardelta.png  |  Bin 0 -> 7197 bytes
 .../square/templates/images/statemachine1.png      |  Bin 0 -> 15022 bytes
 .../plugins/square/templates/images/uml1.png       |  Bin 0 -> 6388 bytes
 .../plugins/square/templates/images/usecase1.png   |  Bin 0 -> 25313 bytes
 .../plugins/square/templates/images/venn1.png      |  Bin 0 -> 9761 bytes
 .../assets/plugins/square/templates/images/wf1.png |  Bin 0 -> 7413 bytes
 .../assets/plugins/square/templates/xml/aws1.xml   |    1 +
 .../assets/plugins/square/templates/xml/bpmn1.xml  |    1 +
 .../plugins/square/templates/xml/compare1.xml      |    1 +
 .../plugins/square/templates/xml/flowchart1.xml    |    1 +
 .../plugins/square/templates/xml/flowchart2.xml    |    1 +
 .../assets/plugins/square/templates/xml/gantt1.xml |    1 +
 .../assets/plugins/square/templates/xml/lean1.xml  |    1 +
 .../plugins/square/templates/xml/mindmap1.xml      |    1 +
 .../plugins/square/templates/xml/orgchart1.xml     |    1 +
 .../plugins/square/templates/xml/orgchart2.xml     |    1 +
 .../plugins/square/templates/xml/package1.xml      |    1 +
 .../assets/plugins/square/templates/xml/pid1.xml   |    1 +
 .../plugins/square/templates/xml/plcladder1.xml    |    1 +
 .../plugins/square/templates/xml/seqdiag1.xml      |    1 +
 .../plugins/square/templates/xml/sitemap1.xml      |    1 +
 .../plugins/square/templates/xml/socnet1.xml       |    1 +
 .../plugins/square/templates/xml/stardelta.xml     |    1 +
 .../plugins/square/templates/xml/statemachine1.xml |    1 +
 .../assets/plugins/square/templates/xml/uml1.xml   |    1 +
 .../plugins/square/templates/xml/usecase1.xml      |    1 +
 .../assets/plugins/square/templates/xml/venn1.xml  |    1 +
 public/assets/plugins/square/templates/xml/wf1.xml |    1 +
 .../angular-bootstrap/ui-bootstrap-tpls.js         | 6326 +--
 .../angular-dashboard-framework.css                |    5 +-
 .../angular-dashboard-framework.js                 |  394 +-
 public/bower_components/pdfmake/pdfmake.js         |68149 ++++++++++++++++++++
 public/bower_components/pdfmake/vfs_fonts.js       |    1 +
 public/index.html                                  |    8 +-
 release-notes/changelog_0.0.28.txt                 |   49 -
 release-notes/changelog_0.0.29.txt                 |   57 +
 server/api/agent/agent.controller.js               |    2 +-
 server/api/agent/agent.socket.js                   |    2 +-
 server/api/agent/agent.spec.js                     |    2 +-
 server/api/agent/index.js                          |    2 +-
 server/api/ami/ami.ami.js                          |    2 +-
 server/api/ami/ami.controller.js                   |    2 +-
 server/api/ami/ami.socket.js                       |    2 +-
 server/api/ami/ami.spec.js                         |    2 +-
 server/api/ami/index.js                            |    2 +-
 server/api/automation/automation.controller.js     |    2 +-
 server/api/automation/automation.socket.js         |    2 +-
 server/api/automation/automation.spec.js           |    2 +-
 server/api/automation/index.js                     |    2 +-
 .../business_action/business_action.controller.js  |    2 +-
 .../api/business_action/business_action.socket.js  |    2 +-
 server/api/business_action/business_action.spec.js |    2 +-
 server/api/business_action/index.js                |    2 +-
 .../business_condition.controller.js               |    2 +-
 .../business_condition.socket.js                   |    2 +-
 .../business_condition/business_condition.spec.js  |    2 +-
 server/api/business_condition/index.js             |    2 +-
 .../chat_application.controller.js                 |    2 +-
 .../chat_application/chat_application.socket.js    |    2 +-
 .../api/chat_application/chat_application.spec.js  |    2 +-
 server/api/chat_application/index.js               |    2 +-
 server/api/chat_enquiry/enquiry.controller.js      |    2 +-
 server/api/chat_enquiry/enquiry.socket.js          |    2 +-
 server/api/chat_enquiry/index.js                   |    2 +-
 server/api/chat_message/chat_message.controller.js |    2 +-
 server/api/chat_message/chat_message.socket.js     |    2 +-
 server/api/chat_message/chat_message.spec.js       |    2 +-
 server/api/chat_message/index.js                   |    2 +-
 server/api/chat_queue/chat_queue.controller.js     |    2 +-
 server/api/chat_queue/chat_queue.socket.js         |    2 +-
 server/api/chat_queue/chat_queue.spec.js           |    2 +-
 server/api/chat_queue/index.js                     |    2 +-
 server/api/chat_room/chat_room.controller.js       |    2 +-
 server/api/chat_room/chat_room.socket.js           |    2 +-
 server/api/chat_room/chat_room.spec.js             |    2 +-
 server/api/chat_room/index.js                      |    2 +-
 server/api/chat_visitor/chat_visitor.controller.js |    2 +-
 server/api/chat_visitor/chat_visitor.socket.js     |    2 +-
 server/api/chat_visitor/chat_visitor.spec.js       |    2 +-
 server/api/chat_visitor/index.js                   |    2 +-
 server/api/chat_website/chat_website.controller.js |    2 +-
 server/api/chat_website/chat_website.socket.js     |    2 +-
 server/api/chat_website/chat_website.spec.js       |    2 +-
 server/api/chat_website/index.js                   |    2 +-
 server/api/company/company.controller.js           |    2 +-
 server/api/company/company.socket.js               |    2 +-
 server/api/company/company.spec.js                 |    2 +-
 server/api/company/index.js                        |    2 +-
 server/api/contact/contact.controller.js           |    2 +-
 server/api/contact/contact.model.js                |    2 +-
 server/api/contact/contact.socket.js               |    2 +-
 server/api/contact/contact.spec.js                 |    2 +-
 server/api/contact/index.js                        |    2 +-
 .../contact_manager/contact_manager.controller.js  |    2 +-
 .../api/contact_manager/contact_manager.socket.js  |    2 +-
 server/api/contact_manager/contact_manager.spec.js |    2 +-
 server/api/contact_manager/index.js                |    2 +-
 server/api/custom_field/custom_field.controller.js |    2 +-
 server/api/custom_field/custom_field.socket.js     |    2 +-
 server/api/custom_field/custom_field.spec.js       |    2 +-
 server/api/custom_field/index.js                   |    2 +-
 .../api/custom_report/custom_report.controller.js  |    2 +-
 server/api/custom_report/custom_report.socket.js   |    2 +-
 server/api/custom_report/custom_report.spec.js     |    2 +-
 server/api/custom_report/index.js                  |    2 +-
 server/api/dashboard/dashboard.controller.js       |    2 +-
 server/api/dashboard/dashboard.socket.js           |    2 +-
 server/api/dashboard/dashboard.spec.js             |    2 +-
 server/api/dashboard/index.js                      |    2 +-
 .../default_report/default_report.controller.js    |    2 +-
 server/api/default_report/default_report.socket.js |    2 +-
 server/api/default_report/default_report.spec.js   |    2 +-
 server/api/default_report/index.js                 |    2 +-
 server/api/desk_account/desk_account.controller.js |    2 +-
 server/api/desk_account/desk_account.socket.js     |    2 +-
 server/api/desk_account/desk_account.spec.js       |    2 +-
 server/api/desk_account/index.js                   |    2 +-
 .../desk_configuration.controller.js               |    2 +-
 .../desk_configuration.socket.js                   |    2 +-
 server/api/desk_configuration/index.js             |    2 +-
 server/api/desk_configuration/index.spec.js        |    2 +-
 server/api/desk_field/desk_field.controller.js     |    2 +-
 server/api/desk_field/desk_field.socket.js         |    2 +-
 server/api/desk_field/index.js                     |    2 +-
 server/api/desk_field/index.spec.js                |    2 +-
 server/api/event/event.controller.js               |    2 +-
 server/api/event/event.socket.js                   |    2 +-
 server/api/event/event.spec.js                     |    2 +-
 server/api/event/index.js                          |    2 +-
 server/api/fax_account/fax_account.controller.js   |    2 +-
 server/api/fax_account/fax_account.socket.js       |    2 +-
 server/api/fax_account/fax_account.spec.js         |    2 +-
 server/api/fax_account/index.js                    |    2 +-
 .../fax_application/fax_application.controller.js  |    2 +-
 .../api/fax_application/fax_application.socket.js  |    2 +-
 server/api/fax_application/fax_application.spec.js |    2 +-
 server/api/fax_application/index.js                |    2 +-
 .../fax_business_automation.controller.js          |    2 +-
 .../fax_business_automation.socket.js              |    2 +-
 .../fax_business_automation.spec.js                |    2 +-
 server/api/fax_business_automation/index.js        |    2 +-
 server/api/fax_message/fax_message.ami.js          |    2 +-
 server/api/fax_message/fax_message.controller.js   |    2 +-
 server/api/fax_message/fax_message.socket.js       |    2 +-
 server/api/fax_message/fax_message.spec.js         |    2 +-
 server/api/fax_message/index.js                    |    2 +-
 server/api/fax_queue/fax_queue.controller.js       |    2 +-
 server/api/fax_queue/fax_queue.socket.js           |    2 +-
 server/api/fax_queue/fax_queue.spec.js             |    2 +-
 server/api/fax_queue/index.js                      |    2 +-
 server/api/fax_room/fax_room.controller.js         |    2 +-
 server/api/fax_room/fax_room.kue.js                |    2 +-
 server/api/fax_room/fax_room.socket.js             |    2 +-
 server/api/fax_room/fax_room.spec.js               |    2 +-
 server/api/fax_room/index.js                       |    2 +-
 .../freshdesk_account.controller.js                |    2 +-
 .../freshdesk_account/freshdesk_account.socket.js  |    2 +-
 server/api/freshdesk_account/index.js              |    2 +-
 server/api/freshdesk_account/index.spec.js         |    2 +-
 .../freshdesk_configuration.controller.js          |    2 +-
 .../freshdesk_configuration.socket.js              |    2 +-
 server/api/freshdesk_configuration/index.js        |    2 +-
 server/api/freshdesk_configuration/index.spec.js   |    2 +-
 .../freshdesk_field/freshdesk_field.controller.js  |    2 +-
 .../api/freshdesk_field/freshdesk_field.socket.js  |    2 +-
 server/api/freshdesk_field/index.js                |    2 +-
 server/api/freshdesk_field/index.spec.js           |    2 +-
 server/api/integration/index.js                    |    2 +-
 server/api/integration/integration.controller.js   |    2 +-
 server/api/integration/integration.socket.js       |    2 +-
 server/api/integration/integration.spec.js         |    2 +-
 server/api/interval/index.js                       |    2 +-
 server/api/interval/interval.controller.js         |    2 +-
 server/api/interval/interval.socket.js             |    2 +-
 server/api/interval/interval.spec.js               |    2 +-
 server/api/license/index.js                        |    2 +-
 server/api/license/license.controller.js           |    2 +-
 server/api/license/license.socket.js               |    2 +-
 server/api/mail_account/index.js                   |    2 +-
 server/api/mail_account/mail_account.controller.js |    2 +-
 server/api/mail_account/mail_account.socket.js     |    2 +-
 server/api/mail_account/mail_account.spec.js       |    2 +-
 server/api/mail_application/index.js               |    2 +-
 .../mail_application.controller.js                 |    2 +-
 .../mail_application/mail_application.socket.js    |    2 +-
 .../api/mail_application/mail_application.spec.js  |    2 +-
 server/api/mail_attachment/index.js                |    2 +-
 .../mail_attachment/mail_attachment.controller.js  |    2 +-
 .../api/mail_attachment/mail_attachment.socket.js  |    2 +-
 server/api/mail_attachment/mail_attachment.spec.js |    1 -
 server/api/mail_business_automation/index.js       |    2 +-
 .../mail_business_automation.controller.js         |    2 +-
 .../mail_business_automation.socket.js             |    2 +-
 .../mail_business_automation.spec.js               |    2 +-
 server/api/mail_message/index.js                   |    2 +-
 server/api/mail_message/mail_message.controller.js |    2 +-
 server/api/mail_message/mail_message.socket.js     |    2 +-
 server/api/mail_queue/index.js                     |    2 +-
 server/api/mail_queue/mail_queue.controller.js     |    2 +-
 server/api/mail_queue/mail_queue.socket.js         |    2 +-
 server/api/mail_queue/mail_queue.spec.js           |    2 +-
 server/api/mail_room/index.js                      |    2 +-
 server/api/mail_room/mail_room.controller.js       |    2 +-
 server/api/mail_room/mail_room.socket.js           |    2 +-
 server/api/mail_server_in/index.js                 |    2 +-
 .../mail_server_in/mail_server_in.controller.js    |    2 +-
 server/api/mail_server_in/mail_server_in.socket.js |    2 +-
 server/api/mail_server_out/index.js                |    2 +-
 .../mail_server_out/mail_server_out.controller.js  |    2 +-
 .../api/mail_server_out/mail_server_out.socket.js  |    2 +-
 server/api/mail_template/index.js                  |    2 +-
 .../api/mail_template/mail_template.controller.js  |    2 +-
 server/api/mail_template/mail_template.socket.js   |    2 +-
 server/api/metric/index.js                         |    2 +-
 server/api/metric/metric.controller.js             |    2 +-
 server/api/metric/metric.socket.js                 |    2 +-
 server/api/metric/metric.spec.js                   |    2 +-
 server/api/module/index.js                         |    2 +-
 server/api/module/module.controller.js             |    2 +-
 server/api/module/module.socket.js                 |    2 +-
 server/api/module/module.spec.js                   |    2 +-
 server/api/module/setting/index.js                 |    2 +-
 server/api/module/setting/setting.controller.js    |    2 +-
 server/api/module/setting/setting.socket.js        |    2 +-
 server/api/module/setting/setting.spec.js          |    2 +-
 server/api/motionbar/index.js                      |    2 +-
 server/api/motionbar/motionbar.controller.js       |    2 +-
 server/api/motionbar/motionbar.socket.js           |    2 +-
 server/api/motionbar/motionbar.spec.js             |    2 +-
 server/api/report_agent/index.js                   |    2 +-
 server/api/report_agent/report_agent.controller.js |    2 +-
 server/api/report_agent/report_agent.socket.js     |    2 +-
 server/api/report_chat/index.js                    |    2 +-
 server/api/report_chat/report_chat.controller.js   |    2 +-
 server/api/report_chat/report_chat.socket.js       |    2 +-
 server/api/report_chat/report_chat.spec.js         |    2 +-
 server/api/report_chat_session/index.js            |    2 +-
 .../report_chat_session.controller.js              |    2 +-
 .../report_chat_session.socket.js                  |    2 +-
 .../report_chat_session.spec.js                    |    2 +-
 server/api/report_integration/index.js             |    2 +-
 .../report_integration.controller.js               |    2 +-
 .../report_integration.socket.js                   |    2 +-
 server/api/report_mail/index.js                    |    2 +-
 server/api/report_mail/report_mail.controller.js   |    2 +-
 server/api/report_mail/report_mail.socket.js       |    2 +-
 server/api/report_mail/report_mail.spec.js         |    2 +-
 server/api/report_mail_session/index.js            |    2 +-
 .../report_mail_session.controller.js              |    2 +-
 .../report_mail_session.socket.js                  |    2 +-
 .../report_mail_session.spec.js                    |    2 +-
 server/api/report_queue/index.js                   |    2 +-
 server/api/report_queue/report_queue.controller.js |    2 +-
 server/api/report_queue/report_queue.socket.js     |    2 +-
 server/api/report_tree/index.js                    |    2 +-
 server/api/report_tree/report_tree.controller.js   |    2 +-
 server/api/report_tree/report_tree.socket.js       |    2 +-
 server/api/report_tree/report_tree.spec.js         |    2 +-
 server/api/salesforce_account/index.js             |    2 +-
 server/api/salesforce_account/index.spec.js        |    2 +-
 .../salesforce_account.controller.js               |    2 +-
 .../salesforce_account.socket.js                   |    2 +-
 server/api/salesforce_configuration/index.js       |    2 +-
 server/api/salesforce_configuration/index.spec.js  |    2 +-
 .../salesforce_configuration.controller.js         |    2 +-
 .../salesforce_configuration.socket.js             |    2 +-
 server/api/salesforce_field/index.js               |    2 +-
 server/api/salesforce_field/index.spec.js          |    2 +-
 .../salesforce_field.controller.js                 |    2 +-
 .../salesforce_field/salesforce_field.socket.js    |    2 +-
 server/api/setting/index.js                        |    2 +-
 server/api/setting/setting.controller.js           |    2 +-
 server/api/setting/setting.socket.js               |    2 +-
 server/api/setting/setting.spec.js                 |    2 +-
 server/api/square_odbc/index.js                    |    2 +-
 server/api/square_odbc/square_odbc.controller.js   |    2 +-
 server/api/square_odbc/square_odbc.socket.js       |    2 +-
 server/api/square_odbc/square_odbc.spec.js         |    2 +-
 server/api/square_project/index.js                 |    2 +-
 .../square_project/square_project.controller.js    |    2 +-
 server/api/square_project/square_project.socket.js |    2 +-
 server/api/square_project/square_project.spec.js   |    2 +-
 server/api/sugarcrm_account/index.js               |    2 +-
 server/api/sugarcrm_account/index.spec.js          |    2 +-
 .../sugarcrm_account.controller.js                 |    2 +-
 .../sugarcrm_account/sugarcrm_account.socket.js    |    2 +-
 server/api/sugarcrm_configuration/index.js         |    2 +-
 server/api/sugarcrm_configuration/index.spec.js    |    2 +-
 .../sugarcrm_configuration.controller.js           |    2 +-
 .../sugarcrm_configuration.socket.js               |    2 +-
 server/api/sugarcrm_field/index.js                 |    2 +-
 server/api/sugarcrm_field/index.spec.js            |    2 +-
 .../sugarcrm_field/sugarcrm_field.controller.js    |    2 +-
 server/api/sugarcrm_field/sugarcrm_field.socket.js |    2 +-
 server/api/tag/index.js                            |    2 +-
 server/api/tag/tag.controller.js                   |    2 +-
 server/api/tag/tag.socket.js                       |    2 +-
 server/api/tag/tag.spec.js                         |    2 +-
 server/api/team/index.js                           |    2 +-
 server/api/team/team.controller.js                 |    2 +-
 server/api/team/team.socket.js                     |    2 +-
 server/api/team/team.spec.js                       |    2 +-
 server/api/thing/index.js                          |    2 +-
 server/api/thing/thing.controller.js               |    2 +-
 server/api/thing/thing.socket.js                   |    2 +-
 server/api/thing/thing.spec.js                     |    2 +-
 server/api/trigger/index.js                        |    2 +-
 server/api/trigger/trigger.controller.js           |    2 +-
 server/api/trigger/trigger.socket.js               |    2 +-
 server/api/trigger/trigger.spec.js                 |    2 +-
 server/api/trunk/index.js                          |    2 +-
 server/api/trunk/trunk.ami.js                      |    2 +-
 server/api/trunk/trunk.controller.js               |    2 +-
 server/api/trunk/trunk.socket.js                   |    2 +-
 server/api/trunk/trunk.spec.js                     |    2 +-
 server/api/update/index.js                         |    2 +-
 server/api/update/update.controller.js             |    2 +-
 server/api/update/update.js                        |    2 +-
 server/api/update/update.socket.js                 |    2 +-
 server/api/update/update.spec.js                   |    2 +-
 server/api/upload/index.js                         |    2 +-
 server/api/upload/upload.controller.js             |    2 +-
 server/api/upload/upload.socket.js                 |    2 +-
 server/api/upload/upload.spec.js                   |    2 +-
 server/api/user/index.js                           |    2 +-
 server/api/user/user.ami.js                        |    2 +-
 server/api/user/user.controller.js                 |    2 +-
 server/api/user/user.socket.js                     |    2 +-
 server/api/user_has_chat_queue/index.js            |    2 +-
 .../user_has_chat_queue.controller.js              |    2 +-
 .../user_has_chat_queue.socket.js                  |    2 +-
 .../user_has_chat_queue.spec.js                    |    2 +-
 server/api/user_has_chat_room/index.js             |    2 +-
 .../user_has_chat_room.controller.js               |    2 +-
 .../user_has_chat_room.socket.js                   |    2 +-
 .../user_has_chat_room/user_has_chat_room.spec.js  |    2 +-
 server/api/user_has_fax_queue/index.js             |    2 +-
 .../user_has_fax_queue.controller.js               |    2 +-
 .../user_has_fax_queue.socket.js                   |    2 +-
 .../user_has_fax_queue/user_has_fax_queue.spec.js  |    2 +-
 server/api/user_has_mail_queue/index.js            |    2 +-
 .../user_has_mail_queue.controller.js              |    2 +-
 .../user_has_mail_queue.socket.js                  |    2 +-
 .../user_has_mail_queue.spec.js                    |    2 +-
 server/api/user_has_team/index.js                  |    2 +-
 .../api/user_has_team/user_has_team.controller.js  |    2 +-
 server/api/user_has_team/user_has_team.model.js    |    2 +-
 server/api/user_has_team/user_has_team.socket.js   |    2 +-
 server/api/user_has_team/user_has_team.spec.js     |    2 +-
 server/api/user_has_voice_queue/index.js           |    2 +-
 .../user_has_voice_queue.controller.js             |    2 +-
 .../user_has_voice_queue.socket.js                 |    2 +-
 .../user_has_voice_queue.spec.js                   |    2 +-
 server/api/variable/index.js                       |    2 +-
 server/api/variable/variable.controller.js         |    2 +-
 server/api/variable/variable.socket.js             |    2 +-
 server/api/variable/variable.spec.js               |    2 +-
 server/api/voice_context/index.js                  |    2 +-
 server/api/voice_context/voice_context.ami.js      |    2 +-
 .../api/voice_context/voice_context.controller.js  |    2 +-
 server/api/voice_context/voice_context.socket.js   |    2 +-
 server/api/voice_context/voice_context.spec.js     |    2 +-
 server/api/voice_extension/index.js                |    2 +-
 .../voice_extension/voice_extension.controller.js  |    2 +-
 .../api/voice_extension/voice_extension.socket.js  |    2 +-
 server/api/voice_extension/voice_extension.spec.js |    2 +-
 server/api/voice_musiconhold/index.js              |    2 +-
 .../voice_musiconhold.controller.js                |    2 +-
 .../voice_musiconhold/voice_musiconhold.socket.js  |    2 +-
 .../voice_musiconhold/voice_musiconhold.spec.js    |    2 +-
 server/api/voice_queue/index.js                    |    2 +-
 server/api/voice_queue/voice_queue.controller.js   |    2 +-
 server/api/voice_queue/voice_queue.socket.js       |    2 +-
 server/api/voice_queue/voice_queue.spec.js         |    2 +-
 server/api/voice_voicemail/index.js                |    2 +-
 .../voice_voicemail/voice_voicemail.controller.js  |    2 +-
 .../api/voice_voicemail/voice_voicemail.socket.js  |    2 +-
 server/api/voice_voicemail/voice_voicemail.spec.js |    2 +-
 server/api/widget/index.js                         |    2 +-
 server/api/widget/widget.controller.js             |    2 +-
 server/api/widget/widget.spec.js                   |    2 +-
 server/api/xchatty/index.js                        |    2 +-
 server/api/xchatty/xchatty.controller.js           |    2 +-
 server/api/xchatty/xchatty.socket.js               |    2 +-
 server/api/zendesk_account/index.js                |    2 +-
 .../zendesk_account/zendesk_account.controller.js  |    2 +-
 .../api/zendesk_account/zendesk_account.socket.js  |    2 +-
 server/api/zendesk_account/zendesk_account.spec.js |    2 +-
 server/api/zendesk_configuration/index.js          |    2 +-
 .../zendesk_configuration.controller.js            |    2 +-
 .../zendesk_configuration.socket.js                |    2 +-
 .../zendesk_configuration.spec.js                  |    2 +-
 server/api/zendesk_field/index.js                  |    2 +-
 .../api/zendesk_field/zendesk_field.controller.js  |    2 +-
 server/api/zendesk_field/zendesk_field.socket.js   |    2 +-
 server/api/zendesk_field/zendesk_field.spec.js     |    2 +-
 server/app.js                                      |    2 +-
 server/auth/auth.service.js                        |    2 +-
 server/auth/facebook/index.js                      |    2 +-
 server/auth/facebook/passport.js                   |    2 +-
 server/auth/google/index.js                        |    2 +-
 server/auth/google/passport.js                     |    2 +-
 server/auth/index.js                               |    2 +-
 server/auth/local/index.js                         |    2 +-
 server/auth/local/local.ami.js                     |    2 +-
 server/auth/local/passport.js                      |    2 +-
 server/auth/twitter/index.js                       |    2 +-
 server/auth/twitter/passport.js                    |    2 +-
 server/config/agi.js                               |    2 +-
 server/config/ami/acw.js                           |    2 +-
 server/config/ami/agent.js                         |    2 +-
 server/config/ami/call.js                          |    2 +-
 server/config/ami/dial.js                          |    2 +-
 server/config/ami/index.js                         |    2 +-
 server/config/ami/member.js                        |    2 +-
 server/config/ami/queue_caller.js                  |    2 +-
 server/config/ami/queue_member.js                  |    2 +-
 server/config/analytics.js                         |    2 +-
 server/config/autodialer/index.js                  |    2 +-
 server/config/autodialer/process.js                |    2 +-
 server/config/automations/fax.js                   |    2 +-
 server/config/automations/mail.js                  |    2 +-
 server/config/environment/development.js           |    2 +-
 server/config/environment/index.js                 |    2 +-
 server/config/environment/production.js            |    2 +-
 server/config/environment/test.js                  |    2 +-
 server/config/express.js                           |    2 +-
 server/config/fax.js                               |    2 +-
 server/config/history.js                           |    2 +-
 server/config/imap/imap.js                         |    2 +-
 server/config/imap/index.js                        |    2 +-
 server/config/integration.js                       |    2 +-
 server/config/kue.chat.js                          |    2 +-
 server/config/kue.fax.js                           |    2 +-
 server/config/kue.mail.js                          |    2 +-
 server/config/license/index.js                     |    2 +-
 server/config/license/license.service.js           |    2 +-
 server/config/local.env.sample.js                  |    2 +-
 server/config/logger.js                            |    2 +-
 server/config/seed.js                              |    2 +-
 server/config/seedp.js                             |    2 +-
 server/config/smtp/index.js                        |    2 +-
 server/config/smtp/smtp.js                         |    2 +-
 server/config/socketio.js                          |    2 +-
 server/config/triggers/chat.js                     |    2 +-
 server/config/triggers/cm.js                       |    2 +-
 server/config/triggers/index.js                    |    2 +-
 server/config/triggers/mail.js                     |    2 +-
 server/config/triggers/util.js                     |    2 +-
 server/config/triggers/voice.js                    |    2 +-
 server/files/integrations/zendesk/app.js           |    2 +-
 server/migrations/20151202190300-test.js           |    2 +-
 server/models/asterisk_manager.js                  |    2 +-
 server/models/asterisk_manager_interface.js        |    2 +-
 server/models/autodialer_contact.js                |    2 +-
 server/models/autodialer_process.js                |    2 +-
 server/models/automation.js                        |    2 +-
 server/models/business_action.js                   |    2 +-
 server/models/business_condition.js                |    2 +-
 server/models/channel.js                           |    2 +-
 server/models/chat_application.js                  |    2 +-
 server/models/chat_enquiry.js                      |    2 +-
 server/models/chat_message.js                      |    2 +-
 server/models/chat_queue.js                        |    2 +-
 server/models/chat_room.js                         |    2 +-
 server/models/chat_visitor.js                      |    2 +-
 server/models/chat_website.js                      |    2 +-
 server/models/company.js                           |    2 +-
 server/models/contact.js                           |    2 +-
 server/models/contact_email.js                     |    2 +-
 server/models/contact_has_custom_field.js          |    2 +-
 server/models/contact_phone.js                     |    2 +-
 server/models/custom_field.js                      |    2 +-
 server/models/custom_report.js                     |    2 +-
 server/models/dashboard.js                         |    2 +-
 server/models/default_report.js                    |    2 +-
 server/models/desk_account.js                      |    2 +-
 server/models/desk_configuration.js                |    2 +-
 server/models/desk_field.js                        |    2 +-
 server/models/event.js                             |    2 +-
 server/models/fax_account.js                       |    2 +-
 server/models/fax_application.js                   |    2 +-
 server/models/fax_business_automation.js           |    2 +-
 server/models/fax_message.js                       |    2 +-
 server/models/fax_queue.js                         |    2 +-
 server/models/fax_room.js                          |    2 +-
 server/models/freshdesk_account.js                 |    2 +-
 server/models/freshdesk_configuration.js           |    2 +-
 server/models/freshdesk_field.js                   |    2 +-
 server/models/history/report_agent_history.js      |    2 +-
 server/models/history/report_call_history.js       |    2 +-
 server/models/history/report_dial_history.js       |    2 +-
 .../models/history/report_integration_history.js   |    2 +-
 .../models/history/report_mail_session_history.js  |    2 +-
 server/models/history/report_member_history.js     |    2 +-
 server/models/history/report_queue_history.js      |    2 +-
 server/models/index.js                             |    2 +-
 server/models/integration.js                       |    2 +-
 server/models/interval.js                          |    2 +-
 server/models/mail_account.js                      |    2 +-
 server/models/mail_application.js                  |    2 +-
 server/models/mail_attachment.js                   |    2 +-
 server/models/mail_automation.js                   |    2 +-
 server/models/mail_business_automation.js          |    2 +-
 server/models/mail_message.js                      |    2 +-
 server/models/mail_queue.js                        |    2 +-
 server/models/mail_room.js                         |    2 +-
 server/models/mail_room_status.js                  |    2 +-
 server/models/mail_server_in.js                    |    2 +-
 server/models/mail_server_out.js                   |    2 +-
 server/models/mail_template.js                     |    2 +-
 server/models/mail_trigger.js                      |    2 +-
 server/models/metric.js                            |    2 +-
 server/models/module.js                            |    2 +-
 server/models/motionbar.js                         |    2 +-
 server/models/report_agent.js                      |    2 +-
 server/models/report_call.js                       |    2 +-
 server/models/report_chat.js                       |    2 +-
 server/models/report_chat_session.js               |    2 +-
 server/models/report_dial.js                       |    2 +-
 server/models/report_field.js                      |    2 +-
 server/models/report_integration.js                |    2 +-
 server/models/report_mail.js                       |    2 +-
 server/models/report_mail_session.js               |    2 +-
 server/models/report_member.js                     |    2 +-
 server/models/report_queue.js                      |    2 +-
 server/models/report_square.js                     |    2 +-
 server/models/report_square_detail.js              |    2 +-
 server/models/report_tree.js                       |    2 +-
 server/models/salesforce_account.js                |    2 +-
 server/models/salesforce_configuration.js          |    2 +-
 server/models/salesforce_field.js                  |    2 +-
 server/models/settings.js                          |    2 +-
 server/models/square_odbc.js                       |    2 +-
 server/models/square_project.js                    |    2 +-
 server/models/sugarcrm_account.js                  |    2 +-
 server/models/sugarcrm_configuration.js            |    2 +-
 server/models/sugarcrm_field.js                    |    2 +-
 server/models/tag.js                               |    2 +-
 server/models/team.js                              |    2 +-
 server/models/telephone.js                         |    2 +-
 server/models/trigger.js                           |    2 +-
 server/models/trunk.js                             |    2 +-
 server/models/update.js                            |    2 +-
 server/models/upload.js                            |    2 +-
 server/models/user.js                              |    2 +-
 server/models/user_has_chat_queue.js               |    2 +-
 server/models/user_has_chat_room.js                |    2 +-
 server/models/user_has_fax_queue.js                |    2 +-
 server/models/user_has_mail_queue.js               |    2 +-
 server/models/user_has_team.js                     |    2 +-
 server/models/user_has_voice_queue.js              |    2 +-
 server/models/variable.js                          |    2 +-
 server/models/voice_context.js                     |    2 +-
 server/models/voice_extension.js                   |    2 +-
 server/models/voice_musiconhold.js                 |    2 +-
 server/models/voice_queue.js                       |    2 +-
 server/models/voice_voicemail.js                   |    2 +-
 server/models/voice_voicemail_messages.js          |    2 +-
 server/models/zendesk_account.js                   |    2 +-
 server/models/zendesk_configuration.js             |    2 +-
 server/models/zendesk_field.js                     |    2 +-
 server/routes.js                                   |    2 +-
 958 files changed, 129261 insertions(+), 39819 deletions(-)
 create mode 100644 public/app/4942fdcb.vendor.js
 create mode 100644 public/app/67dd0d05.vendor.css
 create mode 100644 public/app/76616549.app.js
 delete mode 100644 public/app/7b2a74e6.app.css
 delete mode 100644 public/app/9210b25d.app.js
 delete mode 100644 public/app/bff60da8.vendor.js
 create mode 100644 public/app/ec36ec5b.app.css
 delete mode 100644 public/app/f3572dd3.vendor.css
 create mode 100644 public/assets/css/jstree-metronic/32px.png
 create mode 100644 public/assets/css/jstree-metronic/32px_line.png
 create mode 100644 public/assets/css/jstree-metronic/32px_original.png
 create mode 100644 public/assets/css/jstree-metronic/40px.png
 create mode 100644 public/assets/css/jstree-metronic/style.css
 create mode 100644 public/assets/css/jstree-metronic/style.min.css
 create mode 100644 public/assets/css/jstree-metronic/throbber.gif
 create mode 100644 public/assets/images/demo.png
 create mode 100644 public/assets/plugins/jscripty/js/Actions.js
 create mode 100644 public/assets/plugins/jscripty/js/Dialogs.js
 create mode 100644 public/assets/plugins/jscripty/js/Editor.js
 create mode 100644 public/assets/plugins/jscripty/js/EditorUi.js
 create mode 100644 public/assets/plugins/jscripty/js/Graph.js
 create mode 100644 public/assets/plugins/jscripty/js/Menus.js
 create mode 100644 public/assets/plugins/jscripty/js/Shapes.js
 create mode 100644 public/assets/plugins/jscripty/js/Sidebar.js
 create mode 100644 public/assets/plugins/jscripty/js/Toolbar.js
 create mode 100644 public/assets/plugins/jscripty/js/custom.js
 create mode 100644 public/assets/plugins/jscripty/resources/dia.txt
 create mode 100644 public/assets/plugins/jscripty/resources/dia_am.txt
 create mode 100644 public/assets/plugins/jscripty/resources/dia_ar.txt
 create mode 100644 public/assets/plugins/jscripty/resources/dia_bg.txt
 create mode 100644 public/assets/plugins/jscripty/resources/dia_bn.txt
 create mode 100644 public/assets/plugins/jscripty/resources/dia_bs.txt
 create mode 100644 public/assets/plugins/jscripty/resources/dia_ca.txt
 create mode 100644 public/assets/plugins/jscripty/resources/dia_cs.txt
 create mode 100644 public/assets/plugins/jscripty/resources/dia_da.txt
 create mode 100644 public/assets/plugins/jscripty/resources/dia_de.txt
 create mode 100644 public/assets/plugins/jscripty/resources/dia_el.txt
 create mode 100644 public/assets/plugins/jscripty/resources/dia_es-AR.txt
 create mode 100644 public/assets/plugins/jscripty/resources/dia_es.txt
 create mode 100644 public/assets/plugins/jscripty/resources/dia_et.txt
 create mode 100644 public/assets/plugins/jscripty/resources/dia_fa.txt
 create mode 100644 public/assets/plugins/jscripty/resources/dia_fi.txt
 create mode 100644 public/assets/plugins/jscripty/resources/dia_fil.txt
 create mode 100644 public/assets/plugins/jscripty/resources/dia_fr.txt
 create mode 100644 public/assets/plugins/jscripty/resources/dia_gu.txt
 create mode 100644 public/assets/plugins/jscripty/resources/dia_he.txt
 create mode 100644 public/assets/plugins/jscripty/resources/dia_hi.txt
 create mode 100644 public/assets/plugins/jscripty/resources/dia_hr.txt
 create mode 100644 public/assets/plugins/jscripty/resources/dia_hu.txt
 create mode 100644 public/assets/plugins/jscripty/resources/dia_id.txt
 create mode 100644 public/assets/plugins/jscripty/resources/dia_it.txt
 create mode 100644 public/assets/plugins/jscripty/resources/dia_ja.txt
 create mode 100644 public/assets/plugins/jscripty/resources/dia_kn.txt
 create mode 100644 public/assets/plugins/jscripty/resources/dia_ko.txt
 create mode 100644 public/assets/plugins/jscripty/resources/dia_lt.txt
 create mode 100644 public/assets/plugins/jscripty/resources/dia_lv.txt
 create mode 100644 public/assets/plugins/jscripty/resources/dia_ml.txt
 create mode 100644 public/assets/plugins/jscripty/resources/dia_mr.txt
 create mode 100644 public/assets/plugins/jscripty/resources/dia_ms.txt
 create mode 100644 public/assets/plugins/jscripty/resources/dia_nl.txt
 create mode 100644 public/assets/plugins/jscripty/resources/dia_no.txt
 create mode 100644 public/assets/plugins/jscripty/resources/dia_pl.txt
 create mode 100644 public/assets/plugins/jscripty/resources/dia_pt-br.txt
 create mode 100644 public/assets/plugins/jscripty/resources/dia_pt.txt
 create mode 100644 public/assets/plugins/jscripty/resources/dia_ro.txt
 create mode 100644 public/assets/plugins/jscripty/resources/dia_ru.txt
 create mode 100644 public/assets/plugins/jscripty/resources/dia_sk.txt
 create mode 100644 public/assets/plugins/jscripty/resources/dia_sl.txt
 create mode 100644 public/assets/plugins/jscripty/resources/dia_sr.txt
 create mode 100644 public/assets/plugins/jscripty/resources/dia_sv.txt
 create mode 100644 public/assets/plugins/jscripty/resources/dia_sw.txt
 create mode 100644 public/assets/plugins/jscripty/resources/dia_ta.txt
 create mode 100644 public/assets/plugins/jscripty/resources/dia_te.txt
 create mode 100644 public/assets/plugins/jscripty/resources/dia_th.txt
 create mode 100644 public/assets/plugins/jscripty/resources/dia_tr.txt
 create mode 100644 public/assets/plugins/jscripty/resources/dia_uk.txt
 create mode 100644 public/assets/plugins/jscripty/resources/dia_zh.txt
 create mode 100644 public/assets/plugins/jscripty/resources/help_it.html
 create mode 100644 public/assets/plugins/jscripty/stencils/email_128x128.png
 create mode 100644 public/assets/plugins/jscripty/stencils/end_128x128.png
 create mode 100644 public/assets/plugins/jscripty/stencils/general.xml
 create mode 100644 public/assets/plugins/jscripty/stencils/input_128x128.png
 create mode 100644 public/assets/plugins/jscripty/stencils/question_128x128.png
 create mode 100644 public/assets/plugins/jscripty/stencils/start_128x128.png
 create mode 100644 public/assets/plugins/jscripty/templates/images/aws1.png
 create mode 100644 public/assets/plugins/jscripty/templates/images/bpmn1.png
 create mode 100644 public/assets/plugins/jscripty/templates/images/compare1.png
 create mode 100644 public/assets/plugins/jscripty/templates/images/flowchart1.png
 create mode 100644 public/assets/plugins/jscripty/templates/images/flowchart2.png
 create mode 100644 public/assets/plugins/jscripty/templates/images/gantt1.png
 create mode 100644 public/assets/plugins/jscripty/templates/images/lean1.png
 create mode 100644 public/assets/plugins/jscripty/templates/images/mindmap1.png
 create mode 100644 public/assets/plugins/jscripty/templates/images/orgchart1.png
 create mode 100644 public/assets/plugins/jscripty/templates/images/orgchart2.png
 create mode 100644 public/assets/plugins/jscripty/templates/images/package1.png
 create mode 100644 public/assets/plugins/jscripty/templates/images/pid1.png
 create mode 100644 public/assets/plugins/jscripty/templates/images/plcladder1.png
 create mode 100644 public/assets/plugins/jscripty/templates/images/seqdiag1.png
 create mode 100644 public/assets/plugins/jscripty/templates/images/sitemap1.png
 create mode 100644 public/assets/plugins/jscripty/templates/images/socnet1.png
 create mode 100644 public/assets/plugins/jscripty/templates/images/stardelta.png
 create mode 100644 public/assets/plugins/jscripty/templates/images/statemachine1.png
 create mode 100644 public/assets/plugins/jscripty/templates/images/uml1.png
 create mode 100644 public/assets/plugins/jscripty/templates/images/usecase1.png
 create mode 100644 public/assets/plugins/jscripty/templates/images/venn1.png
 create mode 100644 public/assets/plugins/jscripty/templates/images/wf1.png
 create mode 100644 public/assets/plugins/jscripty/templates/xml/aws1.xml
 create mode 100644 public/assets/plugins/jscripty/templates/xml/bpmn1.xml
 create mode 100644 public/assets/plugins/jscripty/templates/xml/compare1.xml
 create mode 100644 public/assets/plugins/jscripty/templates/xml/flowchart1.xml
 create mode 100644 public/assets/plugins/jscripty/templates/xml/flowchart2.xml
 create mode 100644 public/assets/plugins/jscripty/templates/xml/gantt1.xml
 create mode 100644 public/assets/plugins/jscripty/templates/xml/lean1.xml
 create mode 100644 public/assets/plugins/jscripty/templates/xml/mindmap1.xml
 create mode 100644 public/assets/plugins/jscripty/templates/xml/orgchart1.xml
 create mode 100644 public/assets/plugins/jscripty/templates/xml/orgchart2.xml
 create mode 100644 public/assets/plugins/jscripty/templates/xml/package1.xml
 create mode 100644 public/assets/plugins/jscripty/templates/xml/pid1.xml
 create mode 100644 public/assets/plugins/jscripty/templates/xml/plcladder1.xml
 create mode 100644 public/assets/plugins/jscripty/templates/xml/seqdiag1.xml
 create mode 100644 public/assets/plugins/jscripty/templates/xml/sitemap1.xml
 create mode 100644 public/assets/plugins/jscripty/templates/xml/socnet1.xml
 create mode 100644 public/assets/plugins/jscripty/templates/xml/stardelta.xml
 create mode 100644 public/assets/plugins/jscripty/templates/xml/statemachine1.xml
 create mode 100644 public/assets/plugins/jscripty/templates/xml/uml1.xml
 create mode 100644 public/assets/plugins/jscripty/templates/xml/usecase1.xml
 create mode 100644 public/assets/plugins/jscripty/templates/xml/venn1.xml
 create mode 100644 public/assets/plugins/jscripty/templates/xml/wf1.xml
 create mode 100644 public/assets/plugins/mxgraph/images/warning.gif
 create mode 100644 public/assets/plugins/mxgraph/images/warning.png
 delete mode 100644 public/assets/plugins/mxgraph/js/Actions.js
 delete mode 100644 public/assets/plugins/mxgraph/js/Dialogs.js
 delete mode 100644 public/assets/plugins/mxgraph/js/Editor.js
 delete mode 100644 public/assets/plugins/mxgraph/js/EditorUi.js
 delete mode 100644 public/assets/plugins/mxgraph/js/Graph.js
 delete mode 100644 public/assets/plugins/mxgraph/js/Menus.js
 delete mode 100644 public/assets/plugins/mxgraph/js/Shapes.js
 delete mode 100644 public/assets/plugins/mxgraph/js/Sidebar.js
 delete mode 100644 public/assets/plugins/mxgraph/js/Toolbar.js
 delete mode 100644 public/assets/plugins/mxgraph/js/custom.js
 delete mode 100644 public/assets/plugins/mxgraph/resources/dia.txt
 delete mode 100644 public/assets/plugins/mxgraph/resources/dia_am.txt
 delete mode 100644 public/assets/plugins/mxgraph/resources/dia_ar.txt
 delete mode 100644 public/assets/plugins/mxgraph/resources/dia_bg.txt
 delete mode 100644 public/assets/plugins/mxgraph/resources/dia_bn.txt
 delete mode 100644 public/assets/plugins/mxgraph/resources/dia_bs.txt
 delete mode 100644 public/assets/plugins/mxgraph/resources/dia_ca.txt
 delete mode 100644 public/assets/plugins/mxgraph/resources/dia_cs.txt
 delete mode 100644 public/assets/plugins/mxgraph/resources/dia_da.txt
 delete mode 100644 public/assets/plugins/mxgraph/resources/dia_de.txt
 delete mode 100644 public/assets/plugins/mxgraph/resources/dia_el.txt
 delete mode 100644 public/assets/plugins/mxgraph/resources/dia_es-AR.txt
 delete mode 100644 public/assets/plugins/mxgraph/resources/dia_es.txt
 delete mode 100644 public/assets/plugins/mxgraph/resources/dia_et.txt
 delete mode 100644 public/assets/plugins/mxgraph/resources/dia_fa.txt
 delete mode 100644 public/assets/plugins/mxgraph/resources/dia_fi.txt
 delete mode 100644 public/assets/plugins/mxgraph/resources/dia_fil.txt
 delete mode 100644 public/assets/plugins/mxgraph/resources/dia_fr.txt
 delete mode 100644 public/assets/plugins/mxgraph/resources/dia_gu.txt
 delete mode 100644 public/assets/plugins/mxgraph/resources/dia_he.txt
 delete mode 100644 public/assets/plugins/mxgraph/resources/dia_hi.txt
 delete mode 100644 public/assets/plugins/mxgraph/resources/dia_hr.txt
 delete mode 100644 public/assets/plugins/mxgraph/resources/dia_hu.txt
 delete mode 100644 public/assets/plugins/mxgraph/resources/dia_id.txt
 delete mode 100644 public/assets/plugins/mxgraph/resources/dia_it.txt
 delete mode 100644 public/assets/plugins/mxgraph/resources/dia_ja.txt
 delete mode 100644 public/assets/plugins/mxgraph/resources/dia_kn.txt
 delete mode 100644 public/assets/plugins/mxgraph/resources/dia_ko.txt
 delete mode 100644 public/assets/plugins/mxgraph/resources/dia_lt.txt
 delete mode 100644 public/assets/plugins/mxgraph/resources/dia_lv.txt
 delete mode 100644 public/assets/plugins/mxgraph/resources/dia_ml.txt
 delete mode 100644 public/assets/plugins/mxgraph/resources/dia_mr.txt
 delete mode 100644 public/assets/plugins/mxgraph/resources/dia_ms.txt
 delete mode 100644 public/assets/plugins/mxgraph/resources/dia_nl.txt
 delete mode 100644 public/assets/plugins/mxgraph/resources/dia_no.txt
 delete mode 100644 public/assets/plugins/mxgraph/resources/dia_pl.txt
 delete mode 100644 public/assets/plugins/mxgraph/resources/dia_pt-br.txt
 delete mode 100644 public/assets/plugins/mxgraph/resources/dia_pt.txt
 delete mode 100644 public/assets/plugins/mxgraph/resources/dia_ro.txt
 delete mode 100644 public/assets/plugins/mxgraph/resources/dia_ru.txt
 delete mode 100644 public/assets/plugins/mxgraph/resources/dia_sk.txt
 delete mode 100644 public/assets/plugins/mxgraph/resources/dia_sl.txt
 delete mode 100644 public/assets/plugins/mxgraph/resources/dia_sr.txt
 delete mode 100644 public/assets/plugins/mxgraph/resources/dia_sv.txt
 delete mode 100644 public/assets/plugins/mxgraph/resources/dia_sw.txt
 delete mode 100644 public/assets/plugins/mxgraph/resources/dia_ta.txt
 delete mode 100644 public/assets/plugins/mxgraph/resources/dia_te.txt
 delete mode 100644 public/assets/plugins/mxgraph/resources/dia_th.txt
 delete mode 100644 public/assets/plugins/mxgraph/resources/dia_tr.txt
 delete mode 100644 public/assets/plugins/mxgraph/resources/dia_uk.txt
 delete mode 100644 public/assets/plugins/mxgraph/resources/dia_zh.txt
 delete mode 100644 public/assets/plugins/mxgraph/resources/help_it.html
 delete mode 100644 public/assets/plugins/mxgraph/stencils/call_management/answer_128x128.png
 delete mode 100644 public/assets/plugins/mxgraph/stencils/call_management/callback_128x128.png
 delete mode 100644 public/assets/plugins/mxgraph/stencils/call_management/dial_128x128.png
 delete mode 100644 public/assets/plugins/mxgraph/stencils/call_management/ext_dial_128x128.png
 delete mode 100644 public/assets/plugins/mxgraph/stencils/call_management/hangup_128x128.png
 delete mode 100644 public/assets/plugins/mxgraph/stencils/call_management/queue_128x128.png
 delete mode 100644 public/assets/plugins/mxgraph/stencils/call_management/voicemail_128x128.png
 delete mode 100644 public/assets/plugins/mxgraph/stencils/callflow/gotoc_128x128.png
 delete mode 100644 public/assets/plugins/mxgraph/stencils/callflow/gotoif_128x128.png
 delete mode 100644 public/assets/plugins/mxgraph/stencils/callflow/gotoifmultitime_128x128.png
 delete mode 100644 public/assets/plugins/mxgraph/stencils/callflow/gotoiftime_128x128.png
 delete mode 100644 public/assets/plugins/mxgraph/stencils/callflow/vswitch_128x128.png
 delete mode 100644 public/assets/plugins/mxgraph/stencils/entry/end_128x128.png
 delete mode 100644 public/assets/plugins/mxgraph/stencils/entry/finally_128x128.png
 delete mode 100644 public/assets/plugins/mxgraph/stencils/entry/start_128x128.png
 delete mode 100644 public/assets/plugins/mxgraph/stencils/general.xml
 delete mode 100644 public/assets/plugins/mxgraph/stencils/general/agi_128x128.png
 delete mode 100644 public/assets/plugins/mxgraph/stencils/general/custom_app_128x128.png
 delete mode 100644 public/assets/plugins/mxgraph/stencils/general/noop_128x128.png
 delete mode 100644 public/assets/plugins/mxgraph/stencils/general/subproject_128x128.png
 delete mode 100644 public/assets/plugins/mxgraph/stencils/general/system_128x128.png
 delete mode 100644 public/assets/plugins/mxgraph/stencils/integration_server/asr_128x128.png
 delete mode 100644 public/assets/plugins/mxgraph/stencils/integration_server/database_128x128.png
 delete mode 100644 public/assets/plugins/mxgraph/stencils/integration_server/ispeechasr_128x128.png
 delete mode 100644 public/assets/plugins/mxgraph/stencils/playback/background_128x128.png
 delete mode 100644 public/assets/plugins/mxgraph/stencils/playback/getdigits_128x128.png
 delete mode 100644 public/assets/plugins/mxgraph/stencils/playback/ispeechtts_128x128.png
 delete mode 100644 public/assets/plugins/mxgraph/stencils/playback/menu_128x128.png
 delete mode 100644 public/assets/plugins/mxgraph/stencils/playback/playback_128x128.png
 delete mode 100644 public/assets/plugins/mxgraph/stencils/playback/saydigits_128x128.png
 delete mode 100644 public/assets/plugins/mxgraph/stencils/playback/saynumber_128x128.png
 delete mode 100644 public/assets/plugins/mxgraph/stencils/playback/sayphonetic_128x128.png
 delete mode 100644 public/assets/plugins/mxgraph/stencils/playback/tts_128x128.png
 delete mode 100644 public/assets/plugins/mxgraph/stencils/recording/record_128x128.png
 delete mode 100644 public/assets/plugins/mxgraph/stencils/stats/goal_128x128.png
 delete mode 100644 public/assets/plugins/mxgraph/stencils/stats/queuelog_128x128.png
 delete mode 100644 public/assets/plugins/mxgraph/stencils/variable/math_128x128.png
 delete mode 100644 public/assets/plugins/mxgraph/stencils/variable/set_128x128.png
 delete mode 100644 public/assets/plugins/mxgraph/templates/images/aws1.png
 delete mode 100644 public/assets/plugins/mxgraph/templates/images/bpmn1.png
 delete mode 100644 public/assets/plugins/mxgraph/templates/images/compare1.png
 delete mode 100644 public/assets/plugins/mxgraph/templates/images/flowchart1.png
 delete mode 100644 public/assets/plugins/mxgraph/templates/images/flowchart2.png
 delete mode 100644 public/assets/plugins/mxgraph/templates/images/gantt1.png
 delete mode 100644 public/assets/plugins/mxgraph/templates/images/lean1.png
 delete mode 100644 public/assets/plugins/mxgraph/templates/images/mindmap1.png
 delete mode 100644 public/assets/plugins/mxgraph/templates/images/orgchart1.png
 delete mode 100644 public/assets/plugins/mxgraph/templates/images/orgchart2.png
 delete mode 100644 public/assets/plugins/mxgraph/templates/images/package1.png
 delete mode 100644 public/assets/plugins/mxgraph/templates/images/pid1.png
 delete mode 100644 public/assets/plugins/mxgraph/templates/images/plcladder1.png
 delete mode 100644 public/assets/plugins/mxgraph/templates/images/seqdiag1.png
 delete mode 100644 public/assets/plugins/mxgraph/templates/images/sitemap1.png
 delete mode 100644 public/assets/plugins/mxgraph/templates/images/socnet1.png
 delete mode 100644 public/assets/plugins/mxgraph/templates/images/stardelta.png
 delete mode 100644 public/assets/plugins/mxgraph/templates/images/statemachine1.png
 delete mode 100644 public/assets/plugins/mxgraph/templates/images/uml1.png
 delete mode 100644 public/assets/plugins/mxgraph/templates/images/usecase1.png
 delete mode 100644 public/assets/plugins/mxgraph/templates/images/venn1.png
 delete mode 100644 public/assets/plugins/mxgraph/templates/images/wf1.png
 delete mode 100644 public/assets/plugins/mxgraph/templates/xml/aws1.xml
 delete mode 100644 public/assets/plugins/mxgraph/templates/xml/bpmn1.xml
 delete mode 100644 public/assets/plugins/mxgraph/templates/xml/compare1.xml
 delete mode 100644 public/assets/plugins/mxgraph/templates/xml/flowchart1.xml
 delete mode 100644 public/assets/plugins/mxgraph/templates/xml/flowchart2.xml
 delete mode 100644 public/assets/plugins/mxgraph/templates/xml/gantt1.xml
 delete mode 100644 public/assets/plugins/mxgraph/templates/xml/lean1.xml
 delete mode 100644 public/assets/plugins/mxgraph/templates/xml/mindmap1.xml
 delete mode 100644 public/assets/plugins/mxgraph/templates/xml/orgchart1.xml
 delete mode 100644 public/assets/plugins/mxgraph/templates/xml/orgchart2.xml
 delete mode 100644 public/assets/plugins/mxgraph/templates/xml/package1.xml
 delete mode 100644 public/assets/plugins/mxgraph/templates/xml/pid1.xml
 delete mode 100644 public/assets/plugins/mxgraph/templates/xml/plcladder1.xml
 delete mode 100644 public/assets/plugins/mxgraph/templates/xml/seqdiag1.xml
 delete mode 100644 public/assets/plugins/mxgraph/templates/xml/sitemap1.xml
 delete mode 100644 public/assets/plugins/mxgraph/templates/xml/socnet1.xml
 delete mode 100644 public/assets/plugins/mxgraph/templates/xml/stardelta.xml
 delete mode 100644 public/assets/plugins/mxgraph/templates/xml/statemachine1.xml
 delete mode 100644 public/assets/plugins/mxgraph/templates/xml/uml1.xml
 delete mode 100644 public/assets/plugins/mxgraph/templates/xml/usecase1.xml
 delete mode 100644 public/assets/plugins/mxgraph/templates/xml/venn1.xml
 delete mode 100644 public/assets/plugins/mxgraph/templates/xml/wf1.xml
 create mode 100644 public/assets/plugins/square/js/Actions.js
 create mode 100644 public/assets/plugins/square/js/Dialogs.js
 create mode 100644 public/assets/plugins/square/js/Editor.js
 create mode 100644 public/assets/plugins/square/js/EditorUi.js
 create mode 100644 public/assets/plugins/square/js/Graph.js
 create mode 100644 public/assets/plugins/square/js/Menus.js
 create mode 100644 public/assets/plugins/square/js/Shapes.js
 create mode 100644 public/assets/plugins/square/js/Sidebar.js
 create mode 100644 public/assets/plugins/square/js/Toolbar.js
 create mode 100644 public/assets/plugins/square/js/custom.js
 create mode 100644 public/assets/plugins/square/resources/dia.txt
 create mode 100644 public/assets/plugins/square/resources/dia_am.txt
 create mode 100644 public/assets/plugins/square/resources/dia_ar.txt
 create mode 100644 public/assets/plugins/square/resources/dia_bg.txt
 create mode 100644 public/assets/plugins/square/resources/dia_bn.txt
 create mode 100644 public/assets/plugins/square/resources/dia_bs.txt
 create mode 100644 public/assets/plugins/square/resources/dia_ca.txt
 create mode 100644 public/assets/plugins/square/resources/dia_cs.txt
 create mode 100644 public/assets/plugins/square/resources/dia_da.txt
 create mode 100644 public/assets/plugins/square/resources/dia_de.txt
 create mode 100644 public/assets/plugins/square/resources/dia_el.txt
 create mode 100644 public/assets/plugins/square/resources/dia_es-AR.txt
 create mode 100644 public/assets/plugins/square/resources/dia_es.txt
 create mode 100644 public/assets/plugins/square/resources/dia_et.txt
 create mode 100644 public/assets/plugins/square/resources/dia_fa.txt
 create mode 100644 public/assets/plugins/square/resources/dia_fi.txt
 create mode 100644 public/assets/plugins/square/resources/dia_fil.txt
 create mode 100644 public/assets/plugins/square/resources/dia_fr.txt
 create mode 100644 public/assets/plugins/square/resources/dia_gu.txt
 create mode 100644 public/assets/plugins/square/resources/dia_he.txt
 create mode 100644 public/assets/plugins/square/resources/dia_hi.txt
 create mode 100644 public/assets/plugins/square/resources/dia_hr.txt
 create mode 100644 public/assets/plugins/square/resources/dia_hu.txt
 create mode 100644 public/assets/plugins/square/resources/dia_id.txt
 create mode 100644 public/assets/plugins/square/resources/dia_it.txt
 create mode 100644 public/assets/plugins/square/resources/dia_ja.txt
 create mode 100644 public/assets/plugins/square/resources/dia_kn.txt
 create mode 100644 public/assets/plugins/square/resources/dia_ko.txt
 create mode 100644 public/assets/plugins/square/resources/dia_lt.txt
 create mode 100644 public/assets/plugins/square/resources/dia_lv.txt
 create mode 100644 public/assets/plugins/square/resources/dia_ml.txt
 create mode 100644 public/assets/plugins/square/resources/dia_mr.txt
 create mode 100644 public/assets/plugins/square/resources/dia_ms.txt
 create mode 100644 public/assets/plugins/square/resources/dia_nl.txt
 create mode 100644 public/assets/plugins/square/resources/dia_no.txt
 create mode 100644 public/assets/plugins/square/resources/dia_pl.txt
 create mode 100644 public/assets/plugins/square/resources/dia_pt-br.txt
 create mode 100644 public/assets/plugins/square/resources/dia_pt.txt
 create mode 100644 public/assets/plugins/square/resources/dia_ro.txt
 create mode 100644 public/assets/plugins/square/resources/dia_ru.txt
 create mode 100644 public/assets/plugins/square/resources/dia_sk.txt
 create mode 100644 public/assets/plugins/square/resources/dia_sl.txt
 create mode 100644 public/assets/plugins/square/resources/dia_sr.txt
 create mode 100644 public/assets/plugins/square/resources/dia_sv.txt
 create mode 100644 public/assets/plugins/square/resources/dia_sw.txt
 create mode 100644 public/assets/plugins/square/resources/dia_ta.txt
 create mode 100644 public/assets/plugins/square/resources/dia_te.txt
 create mode 100644 public/assets/plugins/square/resources/dia_th.txt
 create mode 100644 public/assets/plugins/square/resources/dia_tr.txt
 create mode 100644 public/assets/plugins/square/resources/dia_uk.txt
 create mode 100644 public/assets/plugins/square/resources/dia_zh.txt
 create mode 100644 public/assets/plugins/square/resources/help_it.html
 create mode 100644 public/assets/plugins/square/stencils/call_management/answer_128x128.png
 create mode 100644 public/assets/plugins/square/stencils/call_management/callback_128x128.png
 create mode 100644 public/assets/plugins/square/stencils/call_management/dial_128x128.png
 create mode 100644 public/assets/plugins/square/stencils/call_management/ext_dial_128x128.png
 create mode 100644 public/assets/plugins/square/stencils/call_management/hangup_128x128.png
 create mode 100644 public/assets/plugins/square/stencils/call_management/queue_128x128.png
 create mode 100644 public/assets/plugins/square/stencils/call_management/voicemail_128x128.png
 create mode 100644 public/assets/plugins/square/stencils/callflow/gotoc_128x128.png
 create mode 100644 public/assets/plugins/square/stencils/callflow/gotoif_128x128.png
 create mode 100644 public/assets/plugins/square/stencils/callflow/gotoifmultitime_128x128.png
 create mode 100644 public/assets/plugins/square/stencils/callflow/gotoiftime_128x128.png
 create mode 100644 public/assets/plugins/square/stencils/callflow/vswitch_128x128.png
 create mode 100644 public/assets/plugins/square/stencils/entry/end_128x128.png
 create mode 100644 public/assets/plugins/square/stencils/entry/finally_128x128.png
 create mode 100644 public/assets/plugins/square/stencils/entry/start_128x128.png
 create mode 100644 public/assets/plugins/square/stencils/general.xml
 create mode 100644 public/assets/plugins/square/stencils/general/agi_128x128.png
 create mode 100644 public/assets/plugins/square/stencils/general/custom_app_128x128.png
 create mode 100644 public/assets/plugins/square/stencils/general/noop_128x128.png
 create mode 100644 public/assets/plugins/square/stencils/general/subproject_128x128.png
 create mode 100644 public/assets/plugins/square/stencils/general/system_128x128.png
 create mode 100644 public/assets/plugins/square/stencils/integration_server/asr_128x128.png
 create mode 100644 public/assets/plugins/square/stencils/integration_server/database_128x128.png
 create mode 100644 public/assets/plugins/square/stencils/integration_server/ispeechasr_128x128.png
 create mode 100644 public/assets/plugins/square/stencils/playback/background_128x128.png
 create mode 100644 public/assets/plugins/square/stencils/playback/getdigits_128x128.png
 create mode 100644 public/assets/plugins/square/stencils/playback/ispeechtts_128x128.png
 create mode 100644 public/assets/plugins/square/stencils/playback/menu_128x128.png
 create mode 100644 public/assets/plugins/square/stencils/playback/playback_128x128.png
 create mode 100644 public/assets/plugins/square/stencils/playback/saydigits_128x128.png
 create mode 100644 public/assets/plugins/square/stencils/playback/saynumber_128x128.png
 create mode 100644 public/assets/plugins/square/stencils/playback/sayphonetic_128x128.png
 create mode 100644 public/assets/plugins/square/stencils/playback/tts_128x128.png
 create mode 100644 public/assets/plugins/square/stencils/recording/record_128x128.png
 create mode 100644 public/assets/plugins/square/stencils/stats/goal_128x128.png
 create mode 100644 public/assets/plugins/square/stencils/stats/queuelog_128x128.png
 create mode 100644 public/assets/plugins/square/stencils/variable/math_128x128.png
 create mode 100644 public/assets/plugins/square/stencils/variable/set_128x128.png
 create mode 100644 public/assets/plugins/square/templates/images/aws1.png
 create mode 100644 public/assets/plugins/square/templates/images/bpmn1.png
 create mode 100644 public/assets/plugins/square/templates/images/compare1.png
 create mode 100644 public/assets/plugins/square/templates/images/flowchart1.png
 create mode 100644 public/assets/plugins/square/templates/images/flowchart2.png
 create mode 100644 public/assets/plugins/square/templates/images/gantt1.png
 create mode 100644 public/assets/plugins/square/templates/images/lean1.png
 create mode 100644 public/assets/plugins/square/templates/images/mindmap1.png
 create mode 100644 public/assets/plugins/square/templates/images/orgchart1.png
 create mode 100644 public/assets/plugins/square/templates/images/orgchart2.png
 create mode 100644 public/assets/plugins/square/templates/images/package1.png
 create mode 100644 public/assets/plugins/square/templates/images/pid1.png
 create mode 100644 public/assets/plugins/square/templates/images/plcladder1.png
 create mode 100644 public/assets/plugins/square/templates/images/seqdiag1.png
 create mode 100644 public/assets/plugins/square/templates/images/sitemap1.png
 create mode 100644 public/assets/plugins/square/templates/images/socnet1.png
 create mode 100644 public/assets/plugins/square/templates/images/stardelta.png
 create mode 100644 public/assets/plugins/square/templates/images/statemachine1.png
 create mode 100644 public/assets/plugins/square/templates/images/uml1.png
 create mode 100644 public/assets/plugins/square/templates/images/usecase1.png
 create mode 100644 public/assets/plugins/square/templates/images/venn1.png
 create mode 100644 public/assets/plugins/square/templates/images/wf1.png
 create mode 100644 public/assets/plugins/square/templates/xml/aws1.xml
 create mode 100644 public/assets/plugins/square/templates/xml/bpmn1.xml
 create mode 100644 public/assets/plugins/square/templates/xml/compare1.xml
 create mode 100644 public/assets/plugins/square/templates/xml/flowchart1.xml
 create mode 100644 public/assets/plugins/square/templates/xml/flowchart2.xml
 create mode 100644 public/assets/plugins/square/templates/xml/gantt1.xml
 create mode 100644 public/assets/plugins/square/templates/xml/lean1.xml
 create mode 100644 public/assets/plugins/square/templates/xml/mindmap1.xml
 create mode 100644 public/assets/plugins/square/templates/xml/orgchart1.xml
 create mode 100644 public/assets/plugins/square/templates/xml/orgchart2.xml
 create mode 100644 public/assets/plugins/square/templates/xml/package1.xml
 create mode 100644 public/assets/plugins/square/templates/xml/pid1.xml
 create mode 100644 public/assets/plugins/square/templates/xml/plcladder1.xml
 create mode 100644 public/assets/plugins/square/templates/xml/seqdiag1.xml
 create mode 100644 public/assets/plugins/square/templates/xml/sitemap1.xml
 create mode 100644 public/assets/plugins/square/templates/xml/socnet1.xml
 create mode 100644 public/assets/plugins/square/templates/xml/stardelta.xml
 create mode 100644 public/assets/plugins/square/templates/xml/statemachine1.xml
 create mode 100644 public/assets/plugins/square/templates/xml/uml1.xml
 create mode 100644 public/assets/plugins/square/templates/xml/usecase1.xml
 create mode 100644 public/assets/plugins/square/templates/xml/venn1.xml
 create mode 100644 public/assets/plugins/square/templates/xml/wf1.xml
 create mode 100644 public/bower_components/pdfmake/pdfmake.js
 create mode 100644 public/bower_components/pdfmake/vfs_fonts.js
 delete mode 100644 release-notes/changelog_0.0.28.txt
 create mode 100644 release-notes/changelog_0.0.29.txt
 delete mode 100644 server/api/mail_attachment/mail_attachment.spec.js

diff --git a/package.json b/package.json
index 0c796f7..82be1c1 100644
--- a/package.json
+++ b/package.json
@@ -1,6 +1,6 @@
 {
   "name": "motion",
-  "version": "0.0.29",
+  "version": "0.0.30",
   "main": "server/app.js",
   "dependencies": {
     "accept-language-parser": "^1.0.2",
@@ -82,6 +82,7 @@
     "grunt-angular-templates": "^0.5.7",
     "grunt-asset-injector": "^0.1.0",
     "grunt-autoprefixer": "3.0.0",
+    "grunt-bower-task": "^0.4.0",
     "grunt-build-control": "DaftMonk/grunt-build-control",
     "grunt-changelog": "^0.3.1",
     "grunt-concurrent": "~2.0.0",
diff --git a/public/app/4942fdcb.vendor.js b/public/app/4942fdcb.vendor.js
new file mode 100644
index 0000000..5fc8ea5
--- /dev/null
+++ b/public/app/4942fdcb.vendor.js
@@ -0,0 +1,114 @@
+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"),
+"¨":" ̈","¯":" ̄","´":" ́","µ":"μ","¸":" ̧","Ĳ":"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;
+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)});
+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",
+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","\\|","%"];
+invalidCsv:"Tiedostoa ei voitu käsitellä, oliko se CSV-muodossa?",invalidJson:"Tiedostoa ei voitu käsitellä, oliko se JSON-muodossa?",jsonNotArray:"Tiedosto ei sisältänyt taulukkoa, lopetetaan."}}),a}])}])}(),function(){angular.module("ui.grid").config(["$provide",function(a){a.decorator("i18nService",["$delegate",function(a){return a.add("fr",{aggregate:{label:"éléments"},groupPanel:{description:"Faites glisser une en-tête de colonne ici pour créer un groupe de colonnes."},search:{placeholder:"Recherche...",showingItems:"Affichage des éléments :",selectedItems:"Éléments sélectionnés :",totalItems:"Nombre total d'éléments:",size:"Taille de page:",first:"Première page",next:"Page Suivante",previous:"Page précédente",last:"Dernière page"},menu:{text:"Choisir des colonnes :"},sort:{ascending:"Trier par ordre croissant",descending:"Trier par ordre décroissant",remove:"Enlever le tri"},column:{hide:"Cacher la colonne"},aggregation:{count:"lignes totales: ",sum:"total: ",avg:"moy: ",min:"min: ",max:"max: "},pinning:{pinLeft:"Épingler à gauche",pinRight:"Épingler à droite",unpin:"Détacher"},gridMenu:{columns:"Colonnes:",importerTitle:"Importer un fichier",exporterAllAsCsv:"Exporter toutes les données en CSV",exporterVisibleAsCsv:"Exporter les données visibles en CSV",exporterSelectedAsCsv:"Exporter les données sélectionnées en CSV",exporterAllAsPdf:"Exporter toutes les données en PDF",exporterVisibleAsPdf:"Exporter les données visibles en PDF",exporterSelectedAsPdf:"Exporter les données sélectionnées en PDF",clearAllFilters:"Nettoyez tous les filtres"},importer:{noHeaders:"Impossible de déterminer le nom des colonnes, le fichier possède-t-il une en-tête ?",noObjects:"Aucun objet trouvé, le fichier possède-t-il des données autres que l'en-tête ?",invalidCsv:"Le fichier n'a pas pu être traité, le CSV est-il valide ?",invalidJson:"Le fichier n'a pas pu être traité, le JSON est-il valide ?",jsonNotArray:"Le fichier JSON importé doit contenir un tableau, abandon."},pagination:{sizes:"éléments par page",totalItems:"éléments",of:"sur"},grouping:{group:"Grouper",ungroup:"Dégrouper",aggregate_count:"Agg: Compte",aggregate_sum:"Agg: Somme",aggregate_max:"Agg: Max",aggregate_min:"Agg: Min",aggregate_avg:"Agg: Moy",aggregate_remove:"Agg: Retirer"}}),a}])}])}(),function(){angular.module("ui.grid").config(["$provide",function(a){a.decorator("i18nService",["$delegate",function(a){return a.add("he",{aggregate:{label:"items"},groupPanel:{description:"גרור עמודה לכאן ושחרר בכדי לקבץ עמודה זו."},search:{placeholder:"חפש...",showingItems:"מציג:",selectedItems:'סה"כ נבחרו:',totalItems:'סה"כ רשומות:',size:"תוצאות בדף:",first:"דף ראשון",next:"דף הבא",previous:"דף קודם",last:"דף אחרון"},menu:{text:"בחר עמודות:"},sort:{ascending:"סדר עולה",descending:"סדר יורד",remove:"בטל"},column:{hide:"טור הסתר"},aggregation:{count:"total rows: ",sum:"total: ",avg:"avg: ",min:"min: ",max:"max: "},gridMenu:{columns:"Columns:",importerTitle:"Import file",exporterAllAsCsv:"Export all data as csv",exporterVisibleAsCsv:"Export visible data as csv",exporterSelectedAsCsv:"Export selected data as csv",exporterAllAsPdf:"Export all data as pdf",exporterVisibleAsPdf:"Export visible data as pdf",exporterSelectedAsPdf:"Export selected data as pdf",clearAllFilters:"Clean all filters"},importer:{noHeaders:"Column names were unable to be derived, does the file have a header?",noObjects:"Objects were not able to be derived, was there data in the file other than headers?",invalidCsv:"File was unable to be processed, is it valid CSV?",invalidJson:"File was unable to be processed, is it valid Json?",jsonNotArray:"Imported json file must contain an array, aborting."}}),a}])}])}(),function(){angular.module("ui.grid").config(["$provide",function(a){a.decorator("i18nService",["$delegate",function(a){return a.add("hy",{aggregate:{label:"տվյալներ"},groupPanel:{description:"Ըստ սյան խմբավորելու համար քաշեք և գցեք վերնագիրն այստեղ։"},search:{placeholder:"Փնտրում...",showingItems:"Ցուցադրված տվյալներ՝",selectedItems:"Ընտրված:",totalItems:"Ընդամենը՝",size:"Տողերի քանակը էջում՝",first:"Առաջին էջ",next:"Հաջորդ էջ",previous:"Նախորդ էջ",last:"Վերջին էջ"},menu:{text:"Ընտրել սյուները:"},sort:{ascending:"Աճման կարգով",descending:"Նվազման կարգով",remove:"Հանել "},column:{hide:"Թաքցնել սյունը"},aggregation:{count:"ընդամենը տող՝ ",sum:"ընդամենը՝ ",avg:"միջին՝ ",min:"մին՝ ",max:"մաքս՝ "},pinning:{pinLeft:"Կպցնել ձախ կողմում",pinRight:"Կպցնել աջ կողմում",unpin:"Արձակել"},gridMenu:{columns:"Սյուներ:",importerTitle:"Ներմուծել ֆայլ",exporterAllAsCsv:"Արտահանել ամբողջը CSV",exporterVisibleAsCsv:"Արտահանել երևացող տվյալները CSV",exporterSelectedAsCsv:"Արտահանել ընտրված տվյալները CSV",exporterAllAsPdf:"Արտահանել PDF",exporterVisibleAsPdf:"Արտահանել երևացող տվյալները PDF",exporterSelectedAsPdf:"Արտահանել ընտրված տվյալները PDF",clearAllFilters:"Մաքրել բոլոր ֆիլտրերը"},importer:{noHeaders:"Հնարավոր չեղավ որոշել սյան վերնագրերը։ Արդյո՞ք ֆայլը ունի վերնագրեր։",noObjects:"Հնարավոր չեղավ կարդալ տվյալները։ Արդյո՞ք ֆայլում կան տվյալներ։",invalidCsv:"Հնարավոր չեղավ մշակել ֆայլը։ Արդյո՞ք այն վավեր CSV է։",invalidJson:"Հնարավոր չեղավ մշակել ֆայլը։ Արդյո՞ք այն վավեր Json է։",jsonNotArray:"Ներմուծված json ֆայլը պետք է պարունակի զանգված, կասեցվում է։"}}),a}])}])}(),function(){angular.module("ui.grid").config(["$provide",function(a){a.decorator("i18nService",["$delegate",function(a){return a.add("it",{aggregate:{label:"elementi"},groupPanel:{description:"Trascina un'intestazione all'interno del gruppo della colonna."},search:{placeholder:"Ricerca...",showingItems:"Mostra:",selectedItems:"Selezionati:",totalItems:"Totali:",size:"Tot Pagine:",first:"Prima",next:"Prossima",previous:"Precedente",last:"Ultima"},menu:{text:"Scegli le colonne:"},sort:{ascending:"Asc.",descending:"Desc.",remove:"Annulla ordinamento"},column:{hide:"Nascondi"},aggregation:{count:"righe totali: ",sum:"tot: ",avg:"media: ",min:"minimo: ",max:"massimo: "},pinning:{pinLeft:"Blocca a sx",pinRight:"Blocca a dx",unpin:"Blocca in alto"},gridMenu:{columns:"Colonne:",importerTitle:"Importa",exporterAllAsCsv:"Esporta tutti i dati in CSV",exporterVisibleAsCsv:"Esporta i dati visibili in CSV",exporterSelectedAsCsv:"Esporta i dati selezionati in CSV",exporterAllAsPdf:"Esporta tutti i dati in PDF",exporterVisibleAsPdf:"Esporta i dati visibili in PDF",exporterSelectedAsPdf:"Esporta i dati selezionati in PDF",clearAllFilters:"Pulire tutti i filtri"},importer:{noHeaders:"Impossibile reperire i nomi delle colonne, sicuro che siano indicati all'interno del file?",noObjects:"Impossibile reperire gli oggetti, sicuro che siano indicati all'interno del file?",invalidCsv:"Impossibile elaborare il file, sicuro che sia un CSV?",invalidJson:"Impossibile elaborare il file, sicuro che sia un JSON valido?",jsonNotArray:"Errore! Il file JSON da importare deve contenere un array."},grouping:{group:"Raggruppa",ungroup:"Separa",aggregate_count:"Agg: N. Elem.",aggregate_sum:"Agg: Somma",aggregate_max:"Agg: Massimo",aggregate_min:"Agg: Minimo",aggregate_avg:"Agg: Media",aggregate_remove:"Agg: Rimuovi"}}),a}])}])}(),function(){angular.module("ui.grid").config(["$provide",function(a){a.decorator("i18nService",["$delegate",function(a){return a.add("ja",{aggregate:{label:"項目"},groupPanel:{description:"ここに列ヘッダをドラッグアンドドロップして、その列でグループ化します。"},search:{placeholder:"検索...",showingItems:"表示中の項目:",selectedItems:"選択した項目:",totalItems:"項目の総数:",size:"ページサイズ:",first:"最初のページ",next:"次のページ",previous:"前のページ",last:"前のページ"},menu:{text:"列の選択:"},sort:{ascending:"昇順に並べ替え",descending:"降順に並べ替え",remove:"並べ替えの解除"},column:{hide:"列の非表示"},aggregation:{count:"合計行数: ",sum:"合計: ",avg:"平均: ",min:"最小: ",max:"最大: "},pinning:{pinLeft:"左に固定",pinRight:"右に固定",unpin:"固定解除"},gridMenu:{columns:"列:",importerTitle:"ファイルのインポート",exporterAllAsCsv:"すべてのデータをCSV形式でエクスポート",exporterVisibleAsCsv:"表示中のデータをCSV形式でエクスポート",exporterSelectedAsCsv:"選択したデータをCSV形式でエクスポート",exporterAllAsPdf:"すべてのデータをPDF形式でエクスポート",exporterVisibleAsPdf:"表示中のデータをPDF形式でエクスポート",exporterSelectedAsPdf:"選択したデータをPDF形式でエクスポート",clearAllFilters:"すべてのフィルタを清掃してください"},importer:{noHeaders:"列名を取得できません。ファイルにヘッダが含まれていることを確認してください。",noObjects:"オブジェクトを取得できません。ファイルにヘッダ以外のデータが含まれていることを確認してください。",invalidCsv:"ファイルを処理できません。ファイルが有効なCSV形式であることを確認してください。",invalidJson:"ファイルを処理できません。ファイルが有効なJSON形式であることを確認してください。",jsonNotArray:"インポートしたJSONファイルには配列が含まれている必要があります。処理を中止します。"},pagination:{sizes:"項目/ページ",totalItems:"項目"}}),a}])}])}(),function(){angular.module("ui.grid").config(["$provide",function(a){a.decorator("i18nService",["$delegate",function(a){return a.add("ko",{aggregate:{label:"아이템"},groupPanel:{description:"컬럼으로 그룹핑하기 위해서는 컬럼 헤더를 끌어 떨어뜨려 주세요."},search:{placeholder:"검색...",showingItems:"항목 보여주기:",selectedItems:"선택 항목:",totalItems:"전체 항목:",size:"페이지 크기:",first:"첫번째 페이지",next:"다음 페이지",previous:"이전 페이지",last:"마지막 페이지"},menu:{text:"컬럼을 선택하세요:"},sort:{ascending:"오름차순 정렬",descending:"내림차순 정렬",remove:"소팅 제거"},column:{hide:"컬럼 제거"},aggregation:{count:"전체 갯수: ",sum:"전체: ",avg:"평균: ",min:"최소: ",max:"최대: "},pinning:{pinLeft:"왼쪽 핀",pinRight:"오른쪽 핀",unpin:"핀 제거"},gridMenu:{columns:"컬럼:",importerTitle:"파일 가져오기",exporterAllAsCsv:"csv로 모든 데이터 내보내기",exporterVisibleAsCsv:"csv로 보이는 데이터 내보내기",exporterSelectedAsCsv:"csv로 선택된 데이터 내보내기",exporterAllAsPdf:"pdf로 모든 데이터 내보내기",exporterVisibleAsPdf:"pdf로 보이는 데이터 내보내기",exporterSelectedAsPdf:"pdf로 선택 데이터 내보내기",clearAllFilters:"모든 필터를 청소"},importer:{noHeaders:"컬럼명이 지정되어 있지 않습니다. 파일에 헤더가 명시되어 있는지 확인해 주세요.",noObjects:"데이터가 지정되어 있지 않습니다. 데이터가 파일에 있는지 확인해 주세요.",invalidCsv:"파일을 처리할 수 없습니다. 올바른 csv인지 확인해 주세요.",invalidJson:"파일을 처리할 수 없습니다. 올바른 json인지 확인해 주세요.",jsonNotArray:"json 파일은 배열을 포함해야 합니다."},pagination:{sizes:"페이지당 항목",totalItems:"전체 항목"}}),a}])}])}(),function(){angular.module("ui.grid").config(["$provide",function(a){a.decorator("i18nService",["$delegate",function(a){return a.add("nl",{aggregate:{label:"items"},groupPanel:{description:"Sleep hier een kolomnaam heen om op te groeperen."},search:{placeholder:"Zoeken...",showingItems:"Getoonde items:",selectedItems:"Geselecteerde items:",totalItems:"Totaal aantal items:",size:"Items per pagina:",first:"Eerste pagina",next:"Volgende pagina",previous:"Vorige pagina",last:"Laatste pagina"},menu:{text:"Kies kolommen:"},sort:{ascending:"Sorteer oplopend",descending:"Sorteer aflopend",remove:"Verwijder sortering"},column:{hide:"Verberg kolom"},aggregation:{count:"Aantal rijen: ",sum:"Som: ",avg:"Gemiddelde: ",min:"Min: ",max:"Max: "},pinning:{pinLeft:"Zet links vast",pinRight:"Zet rechts vast",unpin:"Maak los"},gridMenu:{columns:"Kolommen:",importerTitle:"Importeer bestand",exporterAllAsCsv:"Exporteer alle data als csv",exporterVisibleAsCsv:"Exporteer zichtbare data als csv",exporterSelectedAsCsv:"Exporteer geselecteerde data als csv",exporterAllAsPdf:"Exporteer alle data als pdf",exporterVisibleAsPdf:"Exporteer zichtbare data als pdf",exporterSelectedAsPdf:"Exporteer geselecteerde data als pdf",clearAllFilters:"Reinig alle filters"},importer:{noHeaders:"Kolomnamen kunnen niet worden afgeleid. Heeft het bestand een header?",noObjects:"Objecten kunnen niet worden afgeleid. Bevat het bestand data naast de headers?",invalidCsv:"Het bestand kan niet verwerkt worden. Is het een valide csv bestand?",invalidJson:"Het bestand kan niet verwerkt worden. Is het valide json?",jsonNotArray:"Het json bestand moet een array bevatten. De actie wordt geannuleerd."},pagination:{sizes:"items per pagina",totalItems:"items",of:"van de"},grouping:{group:"Groepeer",ungroup:"Groepering opheffen",aggregate_count:"Agg: Aantal",aggregate_sum:"Agg: Som",aggregate_max:"Agg: Max",aggregate_min:"Agg: Min",aggregate_avg:"Agg: Gem",aggregate_remove:"Agg: Verwijder"}}),a}])}])}(),function(){angular.module("ui.grid").config(["$provide",function(a){a.decorator("i18nService",["$delegate",function(a){return a.add("pt-br",{aggregate:{label:"itens"},groupPanel:{description:"Arraste e solte uma coluna aqui para agrupar por essa coluna"},search:{placeholder:"Procurar...",showingItems:"Mostrando os Itens:",selectedItems:"Items Selecionados:",totalItems:"Total de Itens:",size:"Tamanho da Página:",first:"Primeira Página",next:"Próxima Página",previous:"Página Anterior",last:"Última Página"},menu:{text:"Selecione as colunas:"},sort:{ascending:"Ordenar Ascendente",descending:"Ordenar Descendente",remove:"Remover Ordenação"},column:{hide:"Esconder coluna"},aggregation:{count:"total de linhas: ",sum:"total: ",avg:"med: ",min:"min: ",max:"max: "},pinning:{pinLeft:"Fixar Esquerda",pinRight:"Fixar Direita",unpin:"Desprender"},gridMenu:{columns:"Colunas:",importerTitle:"Importar arquivo",exporterAllAsCsv:"Exportar todos os dados como csv",exporterVisibleAsCsv:"Exportar dados visíveis como csv",exporterSelectedAsCsv:"Exportar dados selecionados como csv",exporterAllAsPdf:"Exportar todos os dados como pdf",exporterVisibleAsPdf:"Exportar dados visíveis como pdf",exporterSelectedAsPdf:"Exportar dados selecionados como pdf",clearAllFilters:"Limpar todos os filtros"},importer:{noHeaders:"Nomes de colunas não puderam ser derivados. O arquivo tem um cabeçalho?",noObjects:"Objetos não puderam ser derivados. Havia dados no arquivo, além dos cabeçalhos?",invalidCsv:"Arquivo não pode ser processado. É um CSV válido?",invalidJson:"Arquivo não pode ser processado. É um Json válido?",jsonNotArray:"Arquivo json importado tem que conter um array. Abortando."},pagination:{sizes:"itens por página",totalItems:"itens"},grouping:{group:"Agrupar",ungroup:"Desagrupar",aggregate_count:"Agr: Contar",aggregate_sum:"Agr: Soma",aggregate_max:"Agr: Max",aggregate_min:"Agr: Min",aggregate_avg:"Agr: Med",aggregate_remove:"Agr: Remover"}}),a}])}])}(),function(){angular.module("ui.grid").config(["$provide",function(a){a.decorator("i18nService",["$delegate",function(a){return a.add("pt",{aggregate:{label:"itens"},groupPanel:{description:"Arraste e solte uma coluna aqui para agrupar por essa coluna"},search:{placeholder:"Procurar...",showingItems:"Mostrando os Itens:",selectedItems:"Itens Selecionados:",totalItems:"Total de Itens:",size:"Tamanho da Página:",first:"Primeira Página",next:"Próxima Página",previous:"Página Anterior",last:"Última Página"},menu:{text:"Selecione as colunas:"},sort:{ascending:"Ordenar Ascendente",descending:"Ordenar Descendente",remove:"Remover Ordenação"},column:{hide:"Esconder coluna"},aggregation:{count:"total de linhas: ",sum:"total: ",avg:"med: ",min:"min: ",max:"max: "},pinning:{pinLeft:"Fixar Esquerda",pinRight:"Fixar Direita",unpin:"Desprender"},gridMenu:{columns:"Colunas:",importerTitle:"Importar ficheiro",exporterAllAsCsv:"Exportar todos os dados como csv",exporterVisibleAsCsv:"Exportar dados visíveis como csv",exporterSelectedAsCsv:"Exportar dados selecionados como csv",exporterAllAsPdf:"Exportar todos os dados como pdf",exporterVisibleAsPdf:"Exportar dados visíveis como pdf",exporterSelectedAsPdf:"Exportar dados selecionados como pdf",clearAllFilters:"Limpar todos os filtros"},importer:{noHeaders:"Nomes de colunas não puderam ser derivados. O ficheiro tem um cabeçalho?",noObjects:"Objetos não puderam ser derivados. Havia dados no ficheiro, além dos cabeçalhos?",invalidCsv:"Ficheiro não pode ser processado. É um CSV válido?",invalidJson:"Ficheiro não pode ser processado. É um Json válido?",jsonNotArray:"Ficheiro json importado tem que conter um array. Interrompendo."},pagination:{sizes:"itens por página",totalItems:"itens",of:"de"},grouping:{group:"Agrupar",ungroup:"Desagrupar",aggregate_count:"Agr: Contar",aggregate_sum:"Agr: Soma",aggregate_max:"Agr: Max",aggregate_min:"Agr: Min",aggregate_avg:"Agr: Med",aggregate_remove:"Agr: Remover"}}),a}])}])}(),function(){angular.module("ui.grid").config(["$provide",function(a){a.decorator("i18nService",["$delegate",function(a){return a.add("ru",{aggregate:{label:"элементы"},groupPanel:{description:"Для группировки по столбцу перетащите сюда его название."},search:{placeholder:"Поиск...",showingItems:"Показать элементы:",selectedItems:"Выбранные элементы:",totalItems:"Всего элементов:",size:"Размер страницы:",first:"Первая страница",next:"Следующая страница",previous:"Предыдущая страница",last:"Последняя страница"},menu:{text:"Выбрать столбцы:"},sort:{ascending:"По возрастанию",descending:"По убыванию",remove:"Убрать сортировку"},column:{hide:"Спрятать столбец"},aggregation:{count:"всего строк: ",sum:"итого: ",avg:"среднее: ",min:"мин: ",max:"макс: "},pinning:{pinLeft:"Закрепить слева",pinRight:"Закрепить справа",unpin:"Открепить"},gridMenu:{columns:"Столбцы:",importerTitle:"Import file",exporterAllAsCsv:"Экспортировать всё в CSV",exporterVisibleAsCsv:"Экспортировать видимые данные в CSV",exporterSelectedAsCsv:"Экспортировать выбранные данные в CSV",exporterAllAsPdf:"Экспортировать всё в PDF",exporterVisibleAsPdf:"Экспортировать видимые данные в PDF",exporterSelectedAsPdf:"Экспортировать выбранные данные в PDF",clearAllFilters:"Очистите все фильтры"},importer:{noHeaders:"Column names were unable to be derived, does the file have a header?",noObjects:"Objects were not able to be derived, was there data in the file other than headers?",invalidCsv:"File was unable to be processed, is it valid CSV?",invalidJson:"File was unable to be processed, is it valid Json?",jsonNotArray:"Imported json file must contain an array, aborting."}}),a}])}])}(),function(){angular.module("ui.grid").config(["$provide",function(a){a.decorator("i18nService",["$delegate",function(a){return a.add("sk",{aggregate:{label:"items"},groupPanel:{description:"Pretiahni sem názov stĺpca pre zoskupenie podľa toho stĺpca."},search:{placeholder:"Hľadaj...",showingItems:"Zobrazujem položky:",selectedItems:"Vybraté položky:",totalItems:"Počet položiek:",size:"Počet:",first:"Prvá strana",next:"Ďalšia strana",previous:"Predchádzajúca strana",last:"Posledná strana"},menu:{text:"Vyberte stĺpce:"},sort:{ascending:"Zotriediť vzostupne",descending:"Zotriediť zostupne",remove:"Vymazať triedenie"},aggregation:{count:"total rows: ",sum:"total: ",avg:"avg: ",min:"min: ",max:"max: "},gridMenu:{columns:"Columns:",importerTitle:"Import file",exporterAllAsCsv:"Export all data as csv",exporterVisibleAsCsv:"Export visible data as csv",exporterSelectedAsCsv:"Export selected data as csv",exporterAllAsPdf:"Export all data as pdf",exporterVisibleAsPdf:"Export visible data as pdf",exporterSelectedAsPdf:"Export selected data as pdf",clearAllFilters:"Clear all filters"},importer:{noHeaders:"Column names were unable to be derived, does the file have a header?",noObjects:"Objects were not able to be derived, was there data in the file other than headers?",invalidCsv:"File was unable to be processed, is it valid CSV?",invalidJson:"File was unable to be processed, is it valid Json?",jsonNotArray:"Imported json file must contain an array, aborting."}}),a}])}])}(),function(){angular.module("ui.grid").config(["$provide",function(a){a.decorator("i18nService",["$delegate",function(a){return a.add("sv",{aggregate:{label:"Artiklar"},groupPanel:{description:"Dra en kolumnrubrik hit och släpp den för att gruppera efter den kolumnen."},search:{placeholder:"Sök...",showingItems:"Visar artiklar:",selectedItems:"Valda artiklar:",totalItems:"Antal artiklar:",size:"Sidstorlek:",first:"Första sidan",next:"Nästa sida",previous:"Föregående sida",last:"Sista sidan"},menu:{text:"Välj kolumner:"},sort:{ascending:"Sortera stigande",descending:"Sortera fallande",remove:"Inaktivera sortering"},column:{hide:"Göm kolumn"},aggregation:{count:"Antal rader: ",sum:"Summa: ",avg:"Genomsnitt: ",min:"Min: ",max:"Max: "},pinning:{pinLeft:"Fäst vänster",pinRight:"Fäst höger",unpin:"Lösgör"},gridMenu:{columns:"Kolumner:",importerTitle:"Importera fil",exporterAllAsCsv:"Exportera all data som CSV",exporterVisibleAsCsv:"Exportera synlig data som CSV",exporterSelectedAsCsv:"Exportera markerad data som CSV",exporterAllAsPdf:"Exportera all data som PDF",exporterVisibleAsPdf:"Exportera synlig data som PDF",exporterSelectedAsPdf:"Exportera markerad data som PDF",clearAllFilters:"Rengör alla filter"},importer:{noHeaders:"Kolumnnamn kunde inte härledas. Har filen ett sidhuvud?",noObjects:"Objekt kunde inte härledas. Har filen data undantaget sidhuvud?",invalidCsv:"Filen kunde inte behandlas, är den en giltig CSV?",invalidJson:"Filen kunde inte behandlas, är den en giltig JSON?",jsonNotArray:"Importerad JSON-fil måste innehålla ett fält. Import avbruten."},pagination:{sizes:"Artiklar per sida",totalItems:"Artiklar"}}),a}])}])}(),function(){angular.module("ui.grid").config(["$provide",function(a){a.decorator("i18nService",["$delegate",function(a){return a.add("ta",{aggregate:{label:"உருப்படிகள்"},groupPanel:{description:"ஒரு பத்தியை குழுவாக அமைக்க அப்பத்தியின் தலைப்பை இங்கே  இழுத்து வரவும் "},search:{placeholder:"தேடல் ...",showingItems:"உருப்படிகளை காண்பித்தல்:",selectedItems:"தேர்ந்தெடுக்கப்பட்ட  உருப்படிகள்:",totalItems:"மொத்த உருப்படிகள்:",size:"பக்க அளவு: ",first:"முதல் பக்கம்",next:"அடுத்த பக்கம்",previous:"முந்தைய பக்கம் ",last:"இறுதி பக்கம்"},menu:{text:"பத்திகளை தேர்ந்தெடு:"},sort:{ascending:"மேலிருந்து கீழாக",descending:"கீழிருந்து மேலாக",remove:"வரிசையை நீக்கு"},column:{hide:"பத்தியை மறைத்து வை "},aggregation:{count:"மொத்த வரிகள்:",sum:"மொத்தம்: ",avg:"சராசரி: ",min:"குறைந்தபட்ச: ",max:"அதிகபட்ச: "},pinning:{pinLeft:"இடதுபுறமாக தைக்க ",pinRight:"வலதுபுறமாக தைக்க",unpin:"பிரி"},gridMenu:{columns:"பத்திகள்:",importerTitle:"கோப்பு : படித்தல்",exporterAllAsCsv:"எல்லா தரவுகளையும் கோப்பாக்கு: csv",exporterVisibleAsCsv:"இருக்கும் தரவுகளை கோப்பாக்கு: csv",exporterSelectedAsCsv:"தேர்ந்தெடுத்த தரவுகளை கோப்பாக்கு: csv",exporterAllAsPdf:"எல்லா தரவுகளையும் கோப்பாக்கு: pdf",exporterVisibleAsPdf:"இருக்கும் தரவுகளை கோப்பாக்கு: pdf",exporterSelectedAsPdf:"தேர்ந்தெடுத்த தரவுகளை கோப்பாக்கு: pdf",clearAllFilters:"Clear all filters"},importer:{noHeaders:"பத்தியின் தலைப்புகளை பெற இயலவில்லை, கோப்பிற்கு தலைப்பு உள்ளதா?",noObjects:"இலக்குகளை உருவாக்க முடியவில்லை, கோப்பில் தலைப்புகளை தவிர தரவு ஏதேனும் உள்ளதா? ",invalidCsv:"சரிவர நடைமுறை படுத்த இயலவில்லை, கோப்பு சரிதானா? - csv",invalidJson:"சரிவர நடைமுறை படுத்த இயலவில்லை, கோப்பு சரிதானா? - json",jsonNotArray:"படித்த கோப்பில் வரிசைகள் உள்ளது, நடைமுறை ரத்து செய் : json"},pagination:{sizes:"உருப்படிகள் / பக்கம்",totalItems:"உருப்படிகள் "},grouping:{group:"குழு",ungroup:"பிரி",aggregate_count:"மதிப்பீட்டு : எண்ணு",aggregate_sum:"மதிப்பீட்டு : கூட்டல்",aggregate_max:"மதிப்பீட்டு : அதிகபட்சம்",aggregate_min:"மதிப்பீட்டு : குறைந்தபட்சம்",aggregate_avg:"மதிப்பீட்டு : சராசரி",aggregate_remove:"மதிப்பீட்டு : நீக்கு"}}),a}])}])}(),function(){var a=["uiT","uiTranslate"],b=["t","uiTranslate"],c=angular.module("ui.grid.i18n");c.constant("i18nConstants",{MISSING:"[MISSING]",UPDATE_EVENT:"$uiI18n",LOCALE_DIRECTIVE_ALIAS:"uiI18n",DEFAULT_LANG:"en"}),c.service("i18nService",["$log","i18nConstants","$rootScope",function(a,b,c){var d={_langs:{},current:null,get:function(a){return this._langs[a.toLowerCase()]},add:function(a,b){var c=a.toLowerCase();this._langs[c]||(this._langs[c]={}),angular.extend(this._langs[c],b)},getAllLangs:function(){var a=[];if(!this._langs)return a;for(var b in this._langs)a.push(b);return a},setCurrent:function(a){this.current=a.toLowerCase()},getCurrentLang:function(){return this.current}},e={add:function(a,b){"object"==typeof a?angular.forEach(a,function(a){a&&d.add(a,b)}):d.add(a,b)},getAllLangs:function(){return d.getAllLangs()},get:function(a){var b=a?a:e.getCurrentLang();return d.get(b)},getSafeText:function(a,c){var f=c?c:e.getCurrentLang(),g=d.get(f);if(!g)return b.MISSING;for(var h=a.split("."),i=g,j=0;j<h.length;++j){if(void 0===i[h[j]]||null===i[h[j]])return b.MISSING;i=i[h[j]]}return i},setCurrentLang:function(a){a&&(d.setCurrent(a),c.$broadcast(b.UPDATE_EVENT))},getCurrentLang:function(){var a=d.getCurrentLang();return a||(a=b.DEFAULT_LANG,d.setCurrent(a)),a}};return e}]);var d=function(a,b){return{compile:function(){return{pre:function(c,d,e){var f=b.LOCALE_DIRECTIVE_ALIAS,g=c.$eval(e[f]);g?c.$watch(e[f],function(){a.setCurrentLang(g)}):e.$$observers&&e.$observe(f,function(){a.setCurrentLang(e[f]||b.DEFAULT_LANG)})}}}}};c.directive("uiI18n",["i18nService","i18nConstants",d]);var e=function(b,c,d){return{restrict:"EA",compile:function(){return{pre:function(e,f,g){var h,i=a[0],j=a[1],k=g[i]||g[j]||f.html(),l=d.MISSING+k;if(g.$$observers){var m=g[i]?i:j;h=g.$observe(m,function(a){a&&f.html(b(a)(c.getCurrentLang())||l)})}var n=b(k),o=e.$on(d.UPDATE_EVENT,function(a){h?h(g[i]||g[j]):f.html(n(c.get())||l)});e.$on("$destroy",o),f.html(n(c.get())||l)}}}}};angular.forEach(a,function(a){c.directive(a,["$parse","i18nService","i18nConstants",e])});var f=function(a,b,c){return function(d){var e=a(d);return e(b.get())||c.MISSING+d}};angular.forEach(b,function(a){c.filter(a,["$parse","i18nService","i18nConstants",f])})}(),function(){angular.module("ui.grid").config(["$provide",function(a){a.decorator("i18nService",["$delegate",function(a){return a.add("zh-cn",{headerCell:{aria:{defaultFilterLabel:"列过滤器",removeFilter:"移除过滤器",columnMenuButtonLabel:"列菜单"},priority:"优先级:",filterLabel:"列过滤器: "},aggregate:{label:"行"},groupPanel:{description:"拖曳表头到此处进行分组"},search:{placeholder:"查找",showingItems:"已显示行数：",selectedItems:"已选择行数：",totalItems:"总行数：",size:"每页显示行数：",first:"首页",next:"下一页",previous:"上一页",last:"末页"},menu:{text:"选择列："},sort:{ascending:"升序",descending:"降序",none:"无序",remove:"取消排序"},column:{hide:"隐藏列"},aggregation:{count:"计数：",sum:"求和：",avg:"均值：",min:"最小值：",max:"最大值："},pinning:{pinLeft:"左侧固定",pinRight:"右侧固定",unpin:"取消固定"},columnMenu:{close:"关闭"},gridMenu:{aria:{buttonLabel:"表格菜单"},columns:"列：",importerTitle:"导入文件",exporterAllAsCsv:"导出全部数据到CSV",exporterVisibleAsCsv:"导出可见数据到CSV",exporterSelectedAsCsv:"导出已选数据到CSV",exporterAllAsPdf:"导出全部数据到PDF",exporterVisibleAsPdf:"导出可见数据到PDF",exporterSelectedAsPdf:"导出已选数据到PDF",clearAllFilters:"清除所有过滤器"},importer:{noHeaders:"无法获取列名，确定文件包含表头？",noObjects:"无法获取数据，确定文件包含数据？",invalidCsv:"无法处理文件，确定是合法的CSV文件？",invalidJson:"无法处理文件，确定是合法的JSON文件？",jsonNotArray:"导入的文件不是JSON数组！"},pagination:{aria:{pageToFirst:"第一页",pageBack:"上一页",pageSelected:"当前页",pageForward:"下一页",pageToLast:"最后一页"},sizes:"行每页",totalItems:"行",through:"至",of:"共"},grouping:{group:"分组",ungroup:"取消分组",aggregate_count:"合计: 计数",aggregate_sum:"合计: 求和",aggregate_max:"合计: 最大",aggregate_min:"合计: 最小",aggregate_avg:"合计: 平均",aggregate_remove:"合计: 移除"}}),a}])}])}(),function(){angular.module("ui.grid").config(["$provide",function(a){a.decorator("i18nService",["$delegate",function(a){return a.add("zh-tw",{aggregate:{label:"行"},groupPanel:{description:"拖曳表頭到此處進行分組"},search:{placeholder:"查找",showingItems:"已顯示行數：",selectedItems:"已選擇行數：",totalItems:"總行數：",size:"每頁顯示行數：",first:"首頁",next:"下壹頁",previous:"上壹頁",last:"末頁"},menu:{text:"選擇列："},sort:{ascending:"升序",descending:"降序",remove:"取消排序"},column:{hide:"隱藏列"},aggregation:{count:"計數：",sum:"求和：",avg:"均值：",min:"最小值：",max:"最大值："},pinning:{pinLeft:"左側固定",pinRight:"右側固定",unpin:"取消固定"},gridMenu:{columns:"列：",importerTitle:"導入文件",exporterAllAsCsv:"導出全部數據到CSV",exporterVisibleAsCsv:"導出可見數據到CSV",exporterSelectedAsCsv:"導出已選數據到CSV",exporterAllAsPdf:"導出全部數據到PDF",exporterVisibleAsPdf:"導出可見數據到PDF",exporterSelectedAsPdf:"導出已選數據到PDF",clearAllFilters:"清除所有过滤器"},importer:{noHeaders:"無法獲取列名，確定文件包含表頭？",noObjects:"無法獲取數據，確定文件包含數據？",invalidCsv:"無法處理文件，確定是合法的CSV文件？",invalidJson:"無法處理文件，確定是合法的JSON文件？",jsonNotArray:"導入的文件不是JSON數組！"},pagination:{sizes:"行每頁",totalItems:"行"}}),a}])}])}(),function(){"use strict";var a=angular.module("ui.grid.autoResize",["ui.grid"]);a.directive("uiGridAutoResize",["$timeout","gridUtil",function(a,b){return{require:"uiGrid",scope:!1,link:function(a,c,d,e){function f(){i=b.elementHeight(c),h=b.elementWidth(c)}function g(){clearTimeout(j),j=setTimeout(function(){var d=b.elementHeight(c),j=b.elementWidth(c);d!==i||j!==h?(e.grid.gridHeight=d,e.grid.gridWidth=j,a.$apply(function(){e.grid.refresh().then(function(){f(),g()})})):g()},250)}var h,i;f();var j;g(),a.$on("$destroy",function(){clearTimeout(j)})}}}])}(),function(){"use strict";var a=angular.module("ui.grid.cellNav",["ui.grid"]);a.constant("uiGridCellNavConstants",{FEATURE_NAME:"gridCellNav",CELL_NAV_EVENT:"cellNav",direction:{LEFT:0,RIGHT:1,UP:2,DOWN:3,PG_UP:4,PG_DOWN:5},EVENT_TYPE:{KEYDOWN:0,CLICK:1,CLEAR:2}}),a.factory("uiGridCellNavFactory",["gridUtil","uiGridConstants","uiGridCellNavConstants","GridRowColumn","$q",function(a,b,c,d,e){var f=function(a,b,c,d){this.rows=a.visibleRowCache,this.columns=b.visibleColumnCache,this.leftColumns=c?c.visibleColumnCache:[],this.rightColumns=d?d.visibleColumnCache:[],this.bodyContainer=a};return f.prototype.getFocusableCols=function(){var a=this.leftColumns.concat(this.columns,this.rightColumns);return a.filter(function(a){return a.colDef.allowCellFocus})},f.prototype.getFocusableRows=function(){return this.rows.filter(function(a){return a.allowCellFocus!==!1})},f.prototype.getNextRowCol=function(a,b,d){switch(a){case c.direction.LEFT:return this.getRowColLeft(b,d);case c.direction.RIGHT:return this.getRowColRight(b,d);case c.direction.UP:return this.getRowColUp(b,d);case c.direction.DOWN:return this.getRowColDown(b,d);case c.direction.PG_UP:return this.getRowColPageUp(b,d);case c.direction.PG_DOWN:return this.getRowColPageDown(b,d)}},f.prototype.initializeSelection=function(){var a=this.getFocusableCols(),b=this.getFocusableRows();if(0===a.length||0===b.length)return null;return new d(b[0],a[0])},f.prototype.getRowColLeft=function(a,b){var c=this.getFocusableCols(),e=this.getFocusableRows(),f=c.indexOf(b),g=e.indexOf(a);-1===f&&(f=1);var h=0===f?c.length-1:f-1;return h>f?0===g?new d(a,c[h]):new d(e[g-1],c[h]):new d(a,c[h])},f.prototype.getRowColRight=function(a,b){var c=this.getFocusableCols(),e=this.getFocusableRows(),f=c.indexOf(b),g=e.indexOf(a);-1===f&&(f=0);var h=f===c.length-1?0:f+1;return f>h?g===e.length-1?new d(a,c[h]):new d(e[g+1],c[h]):new d(a,c[h])},f.prototype.getRowColDown=function(a,b){var c=this.getFocusableCols(),e=this.getFocusableRows(),f=c.indexOf(b),g=e.indexOf(a);return-1===f&&(f=0),g===e.length-1?new d(a,c[f]):new d(e[g+1],c[f])},f.prototype.getRowColPageDown=function(a,b){var c=this.getFocusableCols(),e=this.getFocusableRows(),f=c.indexOf(b),g=e.indexOf(a);-1===f&&(f=0);var h=this.bodyContainer.minRowsToRender();return g>=e.length-h?new d(e[e.length-1],c[f]):new d(e[g+h],c[f])},f.prototype.getRowColUp=function(a,b){var c=this.getFocusableCols(),e=this.getFocusableRows(),f=c.indexOf(b),g=e.indexOf(a);return-1===f&&(f=0),0===g?new d(a,c[f]):new d(e[g-1],c[f])},f.prototype.getRowColPageUp=function(a,b){var c=this.getFocusableCols(),e=this.getFocusableRows(),f=c.indexOf(b),g=e.indexOf(a);-1===f&&(f=0);var h=this.bodyContainer.minRowsToRender();return 0>g-h?new d(e[0],c[f]):new d(e[g-h],c[f])},f}]),a.service("uiGridCellNavService",["gridUtil","uiGridConstants","uiGridCellNavConstants","$q","uiGridCellNavFactory","GridRowColumn","ScrollEvent",function(a,b,c,d,e,f,g){var h={initializeGrid:function(a){a.registerColumnBuilder(h.cellNavColumnBuilder),a.cellNav={},a.cellNav.lastRowCol=null,a.cellNav.focusedCells=[],h.defaultGridOptions(a.options);var b={events:{cellNav:{navigate:function(a,b){},viewPortKeyDown:function(a,b){},viewPortKeyPress:function(a,b){}}},methods:{cellNav:{scrollToFocus:function(b,c){return h.scrollToFocus(a,b,c)},getFocusedCell:function(){return a.cellNav.lastRowCol},getCurrentSelection:function(){return a.cellNav.focusedCells},rowColSelectIndex:function(b){for(var c=-1,d=0;d<a.cellNav.focusedCells.length;d++)if(a.cellNav.focusedCells[d].col.uid===b.col.uid&&a.cellNav.focusedCells[d].row.uid===b.row.uid){c=d;break}return c}}}};a.api.registerEventsFromObject(b.events),a.api.registerMethodsFromObject(b.methods)},defaultGridOptions:function(a){a.modifierKeysToMultiSelectCells=a.modifierKeysToMultiSelectCells===!0},decorateRenderContainers:function(a){var b=a.hasRightContainer()?a.renderContainers.right:null,c=a.hasLeftContainer()?a.renderContainers.left:null;null!==c&&(a.renderContainers.left.cellNav=new e(a.renderContainers.body,c,b,a.renderContainers.body)),null!==b&&(a.renderContainers.right.cellNav=new e(a.renderContainers.body,b,a.renderContainers.body,c)),
+"Roboto-Italic.ttf":"AAEAAAAOAIAAAwBgR0RFRgsuCy8AATmYAAAASEdQT1OC3T4oAAE54AAAkPhHU1VCeolvLwABytgAAANsT1MvMrivKS4AAAFoAAAAYFZETVhu6nZPAAASPAAABeBjbWFwg/CFnwAAGBwAAA7yZ2x5ZqugYnAAACcQAADhjGhlYWQVl+THAAAA7AAAADZoaGVhK3TmIgAAASQAAAAkaG10eH7tDo8AAAHIAAAQdGxvY2H/CzayAAEInAAACDxtYXhwBDwA9gAAAUgAAAAgbmFtZW3ArcAAARDYAAAEb3Bvc3QJy9dbAAEVSAAAJE0AAQAAAAEAAERFNtJfDzz1AAkIAAAAAADE8BEuAAAAAM2Cslz6t9PdKU8IYgACAAkAAgAAAAAAAAABAAAHbP4MAAAJA/q32vUpTwABAAAAAAAAAAAAAAAAAAAEHQABAAAEHQCWABYAXgAFAAEAAAAAAAAAAAAAAAAAAwABAAMEQQGQAAUAAAWaBTMAAAEfBZoFMwAAA9EAZgIAAAAAAAAAAAAAAAAA4AAC/1AAIFsAAAAgAAAAAHB5cnMAAQAA//0GAP4AAGYHmgIAIAABn08BAAAEOgWwAAAAIAACAeMAAAAAAAAB4wAAAeMAAAJ1AMUErABDBDoARwV7ANMErAAbAVcAxgKBAFcCiP+MA0AAoQRCAHIBgf+YAhUAPgIGAEYDH/+mBDoAUAQ6AXAEOgAtBDoANQQ6ACcEOgBoBDoAZwQ6ANgEOgA1BDoAfwHpAEYB8f/GA9EAZQQ6AI4D7gBWA5IAwga0ABME/v/VBMsAWATBAGIE8ABYBGIAWARfAFgFJgBoBVgAWAIkAGIEJQAPBH4APgQgAFgGkgBYBVkAWAUcAF4EzQBYBTsAXgT4AFcEjQBDBHoA7AUSAGcE3QDNBpUA7AS9//wEpgDuBDIAIAIKABIDHAD3Agr/lwMnAHwDa/+WAl0A8wQgADoERAA1A/wARwREAEQD+QBHApsAigRDADcERAA1AegARAH2/x0D2QA2AegARAaLADUERAA1BEQARgRE/+IERABEAqQANQPuADsCaQBvBEQAWgPIAJcFrACyA8j/6QPI/7wDyAAIApEAUQHhADYCkf+pBRgAggHh/+sEHQBXBGAALQVVACYEjgBxAdkAAQSc/8gDvwEnBd4AUgNeAMIDjABwBCsApgXfAFIDewEDAtABBQQGAE4DMQCnAzgAqgJoAPsERP/rA7EAhwH/AMMB4//OAg8BBANtAM8DiwA1BdUBDgY7ARsGgQC6A7f/8wcF/54EBABIBR0AJgRvAEgEeQAwBlIABARnACYESgBqBEUATARY/+sFRABVAegAPgQxAD4D8wBJAhEARwUwAEYERAA1BygATwbHAEQB6ABEApb/ZgUjAFkETgBGBToAZwSuAFoB7/8bA/kAPAOWAUgDYgFeAzgBCwINAUECkQEiAhP/twOXAQgCzwEHAnoAHQAK/fIACv5BAAr9WAAK/kYACv1LAAr83AHzAWQD1AFBAgAAwwQuAFcFS//MBR0ATwTs/94ETQAiBVoAWARN//EFXwBXBS8AigUAAB0EPwBABHL/9QPIALMERABBBAsAKQPsAIsERAA1BEYAVgJ5AH4EKv/RA7AAOgR6AHAERP/iBAsASQREAEMD7gC3BBwAWgVNAD8FRABDBisAXQSiAFoD/wCzBeEAZAWfANsFEgBmCAj/3ggTAFcGGgDyBVoAVwS7AEgFqv+WBtP/ygR0ACAFWQBYBU//3gS3AKMF0QBbBX8AVwUnANEHDgBXB0cAVwWrAMkGggBXBLkASAURAIcGrABiBM4ADAQnAEQETgBAAygAPgSQ/5oFvP/DA9IAHgRaAEAEFQBABFv/1QWSAEAEWQBABFoAQAOfAJAFbwBABHkAQAQYAH8GEgBABjoANQSlAIYF2ABABBYAQAQLADMGHgBABCH/1QRFADUEDABRBlj/1QZzAEAERQA1BFoAQAaRAGgFtwBFBBQAPga2AGMFmQA8BIb/2AQF/7wGmAB0BaoAXQZrADoFigA6CHsAYgddAD4D5f/HA5//xgUdAF0ERQBGBL4A6APIALMFHQBPBEUARgaLAGwFtwBIBpIAaAW4AEUE5ABkBAgASgSyAFUACv09AAr9ZAAK/m8ACv6QAAr6twAK+tYEFAA+BMsAVwRD/+IEHwBIA1wANQSXAFcDyQA1BL0ASAQ+AD4GJADzBTQApQdEAFcFVQA1B6kAVwaGADUFjQBlBIkATga/AOgFCwCIBR0A0QQmAJcFHQDQBc8ArgR0ACUEvQBIBBsAPgVYAFcERAA1BSsARgRgADYEYP/tBHIACgMY//sEtQA2BjQANgZzAEAF7wDoBNkAiAQIAM8DywC8B0H/8QYM/+wHfQBOBjUANQSoAGAD3gBGBVIA1wTPAKwFEQBqA9UAAAehAAAD1QAAB6EAAAKSAAAB7wAAAU4AAAQ4AAACEwAAAY8AAADMAAAACgAABS8A6QYSAQADb/9oAY0A1gGNALEBjP+kAY7/YQK7ANYCwgC9Aqn/pAQkAJUESQAQApAArwOPAEcFDABHByYArgJGAIACRgAhA24ACQN0AIsDLgCjBGAALQYmAEkD/gBgBYkA4wOXAGcIOABOBLQBIwTGAHwGUAD+BtwArAcIAKoGbQEeBFkAJgU/ADkEZ/+7BEoAzwSIAGgHqABJAfL/OwQ7AFAD7wCOA/YASAP9AEcDyQBnAjYAjwJ1AJQB7f/mBC0AaAAKAAAHq/+1B6wAhwPfAB8DXAAnBDoAUQLg/+AB6P8dAhH/egF+/8IDbQE3A2wBNwNsATcDyAEPA9ABCwPIAF8DxwEXA20BDQHrAS8Eb//UBDIAPgRJAE0EYAA+BAQAPgPfAD4EhgBKBKsAPgHoAD4DzwALBBwAPgOEAD4FlwA+BMoAPgR/AE0ElQBNBGMAPgQrACMD7gC9BLMAWARwAL4FoQDUBEH/4wQcALUD/v/5BDMASgJNAKwDqQAPA9YAIAQjACUEJQAeA+8ATgOEAL0D7gAjA+cAbQIPAH8DKAAiAzgAJQLTAO0DRwArA0gAQALjAI8DTwAuAzgAZANtAD4DZwC5ApEBKwMbAPUEOgAuBDoAJwQ6AGEESwBkA/n/kQQBAOsEMP/OBDoANQR7AEAERABBBPAAWAQgADcE3gBXBNMAWAPZADYE7ABYA9gANgQ6AH0EMgA+AzgBCwHjAAACFQA+BTMAXgUzAF4EYgBTBHoA7AJpAAcE/v/VBP7/1QT+/9UE/v/VBP7/1QT+/9UE/v/VBMsAYgRiAFgEYgBYBGIAWARiAFgCJABiAiQAYgIkAGICJABiBVkAWAU7AF4FOwBeBTsAXgU7AF4FOwBeBRIAZwUSAGcFEgBnBRIAZwSmAO4EIAA6BCAAOgQgADoEIAA6BCAAOgQgADoEIAA6A/wARwP5AEcD+QBHA/kARwP5AEcB6AA+AegAPgHoAD4B6AA+BEQANQREAEYERABGBEQARgREAEYERABGBEQAWgREAFoERABaBEQAWgPI/7wDyP+8BP7/1QQgADoE/v/VBCAAOgT+/9UEIAA6BMsAYgP8AEcEywBiA/wARwTLAGID/ABHBMsAYgP8AEcFFQBYBNoARARiAFgD+QBHBGIAWAP5AEcEYgBYA/kARwRiAFgD+QBHBGIAWAP5AEcFJgBoBEMANwUmAGgEQwA3BSYAaARDADcFJgBoBEMANwVYAFgERAA1AiQAYgHoAD4CJABiAegAPgIkAGIB6AA+AiT/mgHo/3sCJABiBkkAYgPeAEQEJQAPAe//GwTTAD4D2QA2BCAAWAHoAEQEIABYAej/qAQgAFgCfgBEBCAAWALEAEQFWQBYBEQANQVZAFgERAA1BVkAWAREADUERAA1BTsAXgREAEYFOwBeBEQARgU7AF4ERABGBPgAVwKkADUE+ABXAqT/pgT4AFcCpAA1BJgAQwPuADsEmABDA+4AOwSYAEMD7gA7BJgAQwPuADsEmABDA+4AOwR6AOwCaQBFBHoA7AJpAG8EegDsApEAbwUSAGcERABaBRIAZwREAFoFEgBnBEQAWgUSAGcERABaBRIAZwREAFoFEgBnBEQAWgaVAOwFrACyBKYA7gPI/7wEpgDuBH0AIAPIAAgEfQAgA8gACAR9ACADyAAIBwX/ngZSAAQFHQAmBEUATARgAAsEYAALA+4AvQRv/9QEb//UBG//1ARv/9QEb//UBG//1ARv/9QESQBNBAQAPgQEAD4EBAA+BAQAPgHoAD4B6AA+AegAPgHoAD4EygA+BH8ATQR/AE0EfwBNBH8ATQR/AE0EswBYBLMAWASzAFgEswBYBBwAtQRv/9QEb//UBG//1ARJAE0ESQBNBEkATQRJAE0EYAA+BAQAPgQEAD4EBAA+BAQAPgQEAD4EhgBKBIYASgSGAEoEhgBKBKsAPgHoAD4B6AA+AegAPgHo/3MB6AA+A88ACwQcAD4DhAA+A4QAPgOEAD4DhAA+BMoAPgTKAD4EygA+BH8ATQR/AE0EfwBNBGMAPgRjAD4EYwA+BCsAIwQrACMEKwAjBCsAIwPuAJcD7gC9BLMAWASzAFgEswBYBLMAWASzAFgEswBYBaEA1AQcALUEHAC1A/7/+QP+//kD/v/5CFYAIwT+/9UExgCbBbwAvAKIAMYFTwByBQoASQUUADECeQBsBP7/1QTLAFgEYgBYBH0AIAVYAFgCJABiBNMAPgaSAFgFWQBYBTsAXgTNAFgEegDsBKYA7gS9//wCJABiBKYA7gQ/AEAECwApBEQANQJ5AH4EHABaBDEAPgREAEYERP/rA8gAlwPI/+kCeQB+BBwAWgREAEYEHABaBisAXQRiAFgELgBXBJgAQwIkAGICJABiBCUADwTTAD4E0wA+BLcAowT+/9UEywBYBC4AVwRiAFgFWQBYBpIAWAVYAFgFOwBeBVoAWATNAFgEywBiBHoA7AS9//wEIAA6A/kARwRaAEAERABGBET/4gP8AEcDyP+8A8j/6QP5AEcDKAA+A+4AOwHoAEQB6AA+Afb/HQQVAEADyP+8BpUA7AWsALIGlQDsBawAsgaVAOwFrACyBKYA7gPI/7wBVwDGAnUAxQP6AE8EgwCKAe//GwGNALEGkgBYBosANQT+/9UEIAA6BTsAAQbIAIoHHgCKBGIAWAVZAFgD+QBHBFoAQAUvAIoFRABDBL4A6APIALMIDABGCQMAXgR0ACAD0gAeBMsAYgP8AEcEpgDuA8gAswIkAGIG0//KBbz/wwIkAGIE/v/VBCAAOgT+/9UEIAA6BwX/ngZSAAQEYgBYA/kARwUrAEYD+QA8A/kAPAbT/8oFvP/DBHQAIAPSAB4FWQBYBFoAQAVZAFgEWgBABTsAXgREAEYFHQBdBEUARgUdAF0ERQBGBREAhwQLADMEtwCjA8j/vAS3AKMDyP+8BLcAowPI/7wFJwDRBBgAfwaCAFcF2ABABL3//API/+kERABEBU//3gRb/9UE/v/VBCAAOgT+/9UEIAA6BP7/1QQgADoE/v/VBCAAOgT+/9UEIAA6BP7/1QQgADoE/v/VBCAAOgT+/9UEIAA6BP7/1QQgADoE/v/VBCAAOgT+/9UEIAA6BP7/1QQgADoEYgBYA/kARwRiAFgD+QBHBGIAWAP5AEcEYgBYA/kARwRiAFgD+QBHBGIAWAP5AEcEYgBYA/kARwRiAFgD+QBHAiQAYgHoAD4CJAAXAej/+gU7AF4ERABGBTsAXgREAEYFOwBeBEQARgU7AF4ERABGBTsAXgREAEYFOwBeBEQARgU7AF4ERABGBSMAWQROAEYFIwBZBE4ARgUjAFkETgBGBSMAWQROAEYFIwBZBE4ARgUSAGcERABaBRIAZwREAFoFOgBnBK4AWgU6AGcErgBaBToAZwSuAFoFOgBnBK4AWgU6AGcErgBaBKYA7gPI/7wEpgDuA8j/vASmAO4DyP+8BGIARARiABME0wA+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////1QAABH8HiAImACMAAAAHAJ4BkgGo////1QAABMYHnwImACMAAAAHAdQBiQEs//8AYv5EBPgFxQAmACUAAAAHAHcBt//3//8AWAAABPIHIgImACcAAAAHAEIBNwFd//8AWAAABPIHHwImACcAAAAHAHMB4wFZ//8AWAAABPIHRgImACcAAAAHAJoA0gFd//8AWAAABPIHDAImACcAAAAHAGgA0wFc//8AYgAAAkQHIgImACsAAAAHAEL//AFd//8AYgAAA1MHHwImACsAAAAHAHMApwFZ//8AYgAAAx4HRgImACsAAAAHAJr/lwFd//8AYgAAA10HDAImACsAAAAHAGj/mAFc//8AWAAABXoHUQImADAAAAAHAKABTgFg//8AXv/rBTYHNwAmADEAAAAHAEIBjAFy//8AXv/rBTYHNAAmADEAAAAHAHMCOAFu//8AXv/rBTYHWwAmADEAAAAHAJoBJwFy//8AXv/rBTYHZgAmADEAAAAHAKABRgF1//8AXv/rBTYHIQAmADEAAAAHAGgBKAFx//8AZ//rBVcHIgImADcAAAAHAEIBdwFd//8AZ//rBVcHHwImADcAAAAHAHMCIwFZ//8AZ//rBVcHRgImADcAAAAHAJoBEgFd//8AZ//rBVcHDAImADcAAAAHAGgBEwFc//8A7gAABVMHHQImADsAAAAHAHMB6QFX//8AOv/sA/cF4AImAEMAAAAHAEIAswAb//8AOv/sBAsF3QImAEMAAAAHAHMBXwAX//8AOv/sA/cGBAImAEMAAAAGAJpOGwAA//8AOv/sBBwGDwImAEMAAAAGAKBtHgAA//8AOv/sBBQFygImAEMAAAAGAGhPGgAA//8AOv/sA/cGRgImAEMAAAAHAJ4A2gBm//8AOv/sBA4GXgImAEMAAAAHAdQA0f/r//8AR/5EA/sETgImAEUAAAAHAHcBOf/3//8AR//sA+sF4QImAEcAAAAHAEIAkQAc//8AR//sA+sF3gImAEcAAAAHAHMBPQAY//8AR//sA+sGBQImAEcAAAAGAJosHAAA//8AR//sA/IFywImAEcAAAAGAGgtGwAA//8APgAAAd0FywImAIoAAAAGAEKVBgAA//8APgAAAuwFyAImAIoAAAAGAHNAAgAA//8APgAAArcF7wImAIoAAAAHAJr/MAAG//8APgAAAvYFtQIm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//8A7gAABVMHRAImADsAAAAHAJoA2AFb////vP5LBCoF7wImAFsAAAAGAJokBgAA//8A7gAABVMHCgImADsAAAAHAGgA2QFa//8AIAAABH0HHwAmADwAAAAHAHMB0QFZ//8ACAAAA+oFyAImAFwAAAAHAHMBPgAC//8AIAAABFsHDQAmADwAAAAHAJ0BgQFd//8ACAAAA98FtgImAFwAAAAHAJ0A7gAG//8AIAAABH8HRwAmADwAAAAHAJsA1gFe//8ACAAAA+wF8AImAFwAAAAGAJtDBwAA////ngAAB3UHHwImAH8AAAAHAHMDAQFZ//8ABP/rBmAF3gImAIQAAAAHAHMCegAY//8AJv+jBWsHXQImAIEAAAAHAHMCMQGX//8ATP95BDgF3AImAIcAAAAHAHMBUAAW//8ACwAABEkEjQImAakAAAAHAdP/Uv97//8ACwAABEkEjQImAakAAAAHAdP/Uv97//8AvQAABCUEjQImAbgAAAAGAdMo9wAA////1AAAA+gF3wImAaYAAAAHAEIA2QAa////1AAABDEF3AImAaYAAAAHAHMBhQAW////1AAAA/sGAwImAaYAAAAGAJp0GgAA////1AAABEIGDgImAaYAAAAHAKAAkwAd////1AAABDoFyQImAaYAAAAGAGh1GQAA////1AAAA+gGRQImAaYAAAAHAJ4BAABl////1AAABDQGXQImAaYAAAAHAdQA9//q//8ATf5HBEIEnQImAagAAAAHAHcBU//6//8APgAABB0F3wImAaoAAAAHAEIAqgAa//8APgAABB0F3AImAaoAAAAHAHMBVgAW//8APgAABB0GAwImAaoAAAAGAJpFGgAA//8APgAABB0FyQImAaoAAAAGAGhGGQAA//8APgAAAd8F3wImAa4AAAAGAEKXGgAA//8APgAAAu4F3AImAa4AAAAGAHNCFgAA//8APgAAArkGAwImAa4AAAAHAJr/MgAa//8APgAAAvgFyQImAa4AAAAHAGj/MwAZ//8APgAABL4GDgImAbMAAAAHAKAAsQAd//8ATf/vBG8F7wImAbQAAAAHAEIA3QAq//8ATf/vBG8F7AImAbQAAAAHAHMBiQAm//8ATf/vBG8GEwImAbQAAAAGAJp4KgAA//8ATf/vBG8GHgImAbQAAAAHAKAAlwAt//8ATf/vBG8F2QIm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u9uwJyX+9czZ/uMwtSO4mmqrAUx3hEJIy8axsuzWi6F0V393R0/Hw7ir1uurgXIA//8AYgAAAjoFsAIGACsAAP//AGIAAANdBwwCJgArAAAABwBo/5gBXP//AA//6wRSBbACBgAsAAD//wA+AAAFNQWwAAYALQAA//8APgAABTUGxwAmAC0AAAAHAHMBxQEB//8Ao//rBUUHTAImANkAAAAHAJwBPgGc////1QAABH8FsAIGACMAAP//AFgAAATQBbACBgAkAAD//wBXAAAEuQWwAgYArAAA//8AWAAABPIFsAIGACcAAP//AFgAAAV6B0wCJgDXAAAABwCcAY4BnP//AFgAAAazBbACBgAvAAD//wBYAAAFeQWwAgYAKgAA//8AXv/rBTYFxQAGADEAAP//AFgAAAV7BbACBgCxAAD//wBYAAAFGAWwAgYAMgAA//8AYv/rBPgFxQAGACUAAP//AOwAAAULBbACBgA2AAD////8AAAFHQWwAgYAOgAA//8AOv/sA/cETgIGAEMAAP//AEf/7APrBE4CBgBHAAD//wBAAAAERwX1AiYA6wAAAAcAnADIAEX//wBG/+wEHAROAgYAUQAA////4v5gBCYETgIGAFIAAAABAEf/7AP7BE4AGwAAJTI2NzMGBCMiAj8BNgAzMhYHIzYmIyIGDwEGFgHxWqAPrBn+8qbXuyUHJwER4a7BGqwQameNpBoHHFWBeFyazwEy6ir1ASfeqmyG4qQqsdYAAP///7z+SwQqBDoCBgBbAAD////pAAAD8QQ6AgYAWgAA//8AR//sA/IFywImAEcAAAAGAGgtGwAA//8APgAAA5UFyAImAOcAAAAHAHMA5wAC//8AO//sA8kETgIGAFUAAP//AEQAAAIxBhgCBgBLAAD//wA+AAAC9gW1AiYAigAAAAcAaP8xAAX///8d/ksCOQYYAgYATAAA//8AQAAABGEFxwImAOwAAAAHAHMBTQAB////vP5LBCoF9QImAFsAAAAGAJx/RQAA//8A7AAABuwHIgImADkAAAAHAEICAQFd//8AsgAABfoFywImAFkAAAAHAEIBegAG//8A7AAABuwHHwImADkAAAAHAHMCrQFZ//8AsgAABfoFyAImAFkAAAAHAHMCJgAC//8A7AAABuwHDAImADkAAAAHAGgBnQFc//8AsgAABfoFtQIm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AEMAAAAHAKgEBQAA////1QAABH8HxgImACMAAAAHAKYE5QFT//8AOv/sA/cGhAImAEMAAAAHAKYELQAR////1QAABg4HqAImACMAAAAHAaMA8AEW//8AOv/sBVYGZwImAEMAAAAGAaM41QAA////1QAABLcHpQImACMAAAAHAaIA+gEl//8AOv/sA/8GZAImAEMAAAAGAaJC5AAA////1QAABZ4H2wImACMAAAAHAaEA9QEN//8AOv/sBOYGmgImAEMAAAAGAaE9zAAA////1QAABLYH5QImACMAAAAHAaAA9gET//8AOv/sA/4GpAImAEMAAAAGAaA+0gAA////1f6xBI0HRgImACMAAAAnAJoBBgFdAAcAqASsAAD//wA6/rED9wYEAiYAQwAAACYAmk4bAAcAqAQFAAAAAP///9UAAASqB90CJgAjAAAABwGfASkBVP//ADr/7AP3BpsCJgBDAAAABgGfcRIAAP///9UAAATOB+ACJgAjAAAABwGkAS8BZ///ADr/7AQWBp4CJgBDAAAABgGkdyUAAP///9UAAASVCEsCJgAjAAAABwGeASkBSf//ADr/7AP3BwkCJgBDAAAABgGecQcAAP///9UAAATMCB8CJgAjAAAABwGdASsBUf//ADr/7AQUBt0CJgBDAAAABgGdcw8AAP///9X+sQSwB0wCJgAjAAAAJwCcAWEBnAAHAKgErAAA//8AOv6xA/gGCgImAEMAAAAnAJwAqQBaAAcAqAQFAAD//wBY/rsE8gWwAiYAJwAAAAcAqAR3AAr//wBH/rED6wROAiYARwAAAAcAqARRAAD//wBYAAAE8gfGAiYAJwAAAAcApgSxAVP//wBH/+wD6waFAiYARwAAAAcApgQLABL//wBYAAAE8gdRAiYAJwAAAAcAoADxAWD//wBH/+wD+gYQAiYARwAAAAYAoEsfAAD//wBYAAAF2geoAiYAJwAAAAcBowC8ARb//wBH/+wFNAZoAiYARwAAAAYBoxbWAAD//wBYAAAE8gelAiYAJwAAAAcBogDGASX//wBH/+wD6wZlAiYARwAAAAYBoiDlAAD//wBYAAAFagfbAiYAJwAAAAcBoQDBAQ3//wBH/+wExAabAiYARwAAAAYBoRvNAAD//wBYAAAE8gflAiYAJwAAAAcBoADCARP//wBH/+wD6walAiYARwAAAAYBoBzTAAD//wBY/rsE8gdGAiYAJwAAACcAmgDSAV0ABwCoBHcACv//AEf+sQPrBgUCJgBHAAAAJgCaLBwABwCoBFEAAAAA//8AYgAAAwoHxgImACsAAAAHAKYDdQFT//8APgAAAqMGcAImAIoAAAAHAKYDDv/9//8AF/65AjoFsAImACsAAAAHAKgDOwAI////+v67AjEGGAImAEsAAAAHAKgDHgAK//8AXv6pBTYFxQAmADEAAAAHAKgEw//4//8ARv6oBBwETgImAFEAAAAHAKgEV//3//8AXv/rBTYH2wAmADEAAAAHAKYFBgFo//8ARv/sBBwGhAImAFEAAAAHAKYEIQAR//8AXv/rBi8HvQAmADEAAAAHAaMBEQEr//8ARv/sBUoGZwImAFEAAAAGAaMs1QAA//8AXv/rBTYHugAmADEAAAAHAaIBGwE6//8ARv/sBBwGZAImAFEAAAAGAaI25AAA//8AXv/rBb8H8AAmADEAAAAHAaEBFgEi//8ARv/sBNoGmgImAFEAAAAGAaExzAAA//8AXv/rBTYH+gAmADEAAAAHAaABFwEo//8ARv/sBBwGpAImAFEAAAAGAaAy0gAA//8AXv6pBTYHWwAmADEAAAAnAJoBJwFyAAcAqATD//j//wBG/qgEHAYEAiYAUQAAACYAmkIbAAcAqARX//cAAP//AFn/6wYlBw8CJgCUAAAABwBzAiQBSf//AEb/7AUJBd0CJgCVAAAABwBzAXgAF///AFn/6wYlBxICJgCUAAAABwBCAXgBTf//AEb/7AUJBeACJgCVAAAABwBCAMwAG///AFn/6wYlB7YCJgCUAAAABwCmBPIBQ///AEb/7AUJBoQCJgCVAAAABwCmBEYAEf//AFn/6wYlB0ECJgCUAAAABwCgATIBUP//AEb/7AUJBg8CJgCVAAAABwCgAIYAHv//AFn+sQYlBjYCJgCUAAAABwCoBLEAAP//AEb+qAUJBLACJgCVAAAABwCoBEj/9///AGf+qgVXBbACJgA3AAAABwCoBLL/+f//AFr+sQQ7BDoCJgBXAAAABwCoBAsAAP//AGf/6wVXB8YCJgA3AAAABwCmBPEBU///AFr/7AQ7BnACJgBXAAAABwCmBED//f//AGf/6walBx8CJgCWAAAABwBzAiIBWf//AFr/7AVXBcgCJgCXAAAABwBzAXIAAv//AGf/6walByICJgCWAAAABwBCAXYBXf//AFr/7AVXBcsCJgCXAAAABwBCAMYABv//AGf/6walB8YCJgCWAAAABwCmBPABU///AFr/7AVXBnACJgCXAAAABwCmBED//f//AGf/6walB1ECJgCWAAAABwCgATABYP//AFr/7AVXBfoCJgCXAAAABwCgAIAACf//AGf+qQalBg0CJgCWAAAABwCoBLH/+P//AFr+sQVXBJECJgCXAAAABwCoBAsAAP//AO7+uwVTBbACJgA7AAAABwCoBH0ACv///7z+FAQqBDoCJgBbAAAABwCoBKj/Y///AO4AAAVTB8QCJgA7AAAABwCmBLcBUf///7z+SwQqBnACJgBbAAAABwCmBAP//f//AO4AAAVTB08CJgA7AAAABwCgAPcBXv///7z+SwQqBfoCJgBbAAAABgCgQwkAAAACAET/6wUmBhgAGgAoAAABIwMjNycOASMiAj8BGgEzMhYXEyM3MzczBzMBBhYzMjY3Ey4BIyIGBwUItPedCQM8kFiwri8EOO7BWIcrN+oe6SS1JLX8AyRhiUx1M2Uba1R8nyYE0vsuaAI/QAE06hUBHAEUSEUBEZWxsfyis9FTTwH6RE/ZvQD//wAT/u4FJgYYACYARgAAACcB0wH8AkYABgBBfYMAAP//AD7+mQU1BbAAJgAtAAAABwGcA/QAAP//AED+mQRhBDoCJgDsAAAABwGcAxMAAP//AFj+mQV5BbACJgAqAAAABwGcBBwAAP//AED+mQRGBDoCJgDvAAAABwGcAzQAAP//AOz+mQULBbACJgA2AAAABwGcAggAAP//AJD+mQP3BDoCJgDxAAAABwGcAZgAAP////z+mQUdBbACJgA6AAAABwGcA5YAAP///+n+mQPxBDoCJgBaAAAABwGcAq4AAP//ANH+mQVIBbACJgDcAAAABwGcA+sAAP//AH/+mQQGBDsCJgD0AAAABwGcAvMAAP//ANH+mQVIBbACJgDcAAAABwGcAt8AAP//AH/+mQQGBDsCJgD0AAAABwGcAeYAAP//AFf+mQS5BbACJgCsAAAABwGcANMAAP//AD7+mQOVBDoCJgDnAAAABwGcAJsAAP///8r+mQddBbACJgDVAAAABwGcBeEAAP///8P+mQYBBDoCJgDpAAAABwGcBKoAAP//AK7+VAXu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ACoAKwAsAC0ALgAvADAAMQAyADMANAA1ADYANwA4ADkAOgA7ADwAPQA+AD8AQABBAEIAQwBEAEUARgBHAEgASQBKAEsATABNAE4ATwBQAFEAUgBTAFQAVQBWAFcAWABZAFoAWwBcAF0AXgBfAGAAYQCjAIQAhQC9AJYA6ACGAI4AiwCdAKkApACKAQMAgwCTAPIA8wCNAJcAiAEEAN4A8QCeAKoA9QD0APYAogCQAPAAkQDtAIkAoADqALgAoQDuAQUA1wEGAOIA4wEHAQgAsACxAQkApgEKAQsBDAENAQ4BDwDYAOEA2wDcAN0A4ADZAN8BEAERARIBEwEUARUBFgEXARgBGQEaARsBHAEdAR4BHwEgASEBIgCfASMBJAElASYBJwEoASkBKgErASwBLQCbAS4BLwEwATEBMgEzATQBNQE2ATcBOAE5AToBOwE8AT0BPgE/AUABQQFCAUMBRAFFAUYBRwFIAUkBSgFLAUwBTQFOAU8BUAFRAVIBUwFUAVUBVgFXAVgBWQFaAVsBXAFdAV4BXwFgAWEBYgFjAWQBZQFmAWcBaAFpAWoBawFsAW0BbgFvAXABcQFyAXMBdAF1AXYBdwF4AXkBegF7AXwBfQF+AX8BgAGBAYIBgwGEAYUBhgGHAYgBiQGKAYsBjAGNAY4BjwGQAZEBkgGTAZQBlQGWAZcBmAGZAZoBmwGcAZ0BngGfAaABoQGiAaMBpAGlAaYBpwGoAakBqgGrAawBrQGuAa8BsAGxAbIBswG0AbUBtgG3AbgBuQG6AbsBvAG9Ab4BvwHAAcEBwgHDAcQBxQHGAccByAHJAcoBywHMAc0AsgCzAc4AtgC3AMQBzwC0ALUAxQCCAMIAhwHQAKsAxgC+AL8AvAHRAdIB0wHUAdUB1gHXAdgAjAHZAdoB2wHcAd0AmACaAJkA7wClAJIAnACnAI8AlACVALkB3gHfAeAAwAHhAeIB4wHkAeUB5gHnAegB6QHqAesB7AHtAe4B7wHwAfEB8gHzAfQB9QH2AfcB+AH5AfoB+wH8Af0B/gH/AgACAQICAgMCBAIFAgYCBwIIAgkCCgILAgwCDQIOAg8CEAIRAhICEwIUAhUCFgIXAhgCGQIaAhsCHAIdAh4CHwIgAiECIgIjAiQCJQImAicCKAIpAioCKwIsAi0CLgIvAjACMQIyAjMCNAI1AjYCNwCsAjgCOQDpAjoCOwI8AK0AyQDHAK4AYgBjAj0AZADLAGUAyADKAM8AzADNAM4AZgDTANAA0QCvAGcA1gDUANUAaADrAGoAaQBrAG0AbABuAj4AbwBxAHAAcgBzAHUAdAB2AHcAeAB6AHkAewB9AHwAfwB+AIAAgQDsALoCPwJAAkECQgJDAkQA/QD+AkUCRgJHAkgA/wEAAkkCSgJLAkwCTQJOAk8CUAJRAlICUwJUAlUCVgD4APkCVwJYAlkCWgJbAlwCXQJeAl8CYAJhAmICYwJkAmUCZgJnAmgCaQJqAmsCbAJtAm4CbwJwAnECcgJzAnQCdQJ2AncCeAJ5AnoCewJ8An0CfgJ/AoACgQKCAoMChAKFAoYChwKIAokCigD7APwCiwKMAOQA5QKNAo4CjwKQApECkgKTApQClQKWApcCmAKZApoCmwKcAp0CngKfAqACoQKiALsCowKkAqUCpgDmAOcCpwKoAqkCqgKrAqwCrQKuAq8CsAKxArICswK0ArUCtgK3ArgCuQK6ArsCvAK9Ar4CvwLAAsECwgLDAsQCxQLGAscCyALJAsoCywLMAs0CzgLPAtAC0QLSAtMC1ALVAtYC1wLYAtkC2gLbAtwC3QLeAt8C4ALhAuIC4wLkAuUC5gLnAugC6QLqAusC7ALtAu4C7wLwAvEC8gLzAvQC9QL2AvcC+AL5AvoC+wL8Av0C/gL/AwADAQMCAwMDBAMFAwYDBwMIAwkDCgMLAwwDDQMOAw8DEAMRAxIDEwMUAxUDFgMXAxgDGQMaAxsDHAMdAx4DHwMgAyEDIgMjAyQDJQMmAycDKAMpAyoDKwMsAy0DLgMvAzADMQMyAzMDNAM1AzYDNwM4AzkDOgM7AzwDPQM+Az8DQANBA0IDQwNEA0UDRgNHA0gDSQNKA0sDTANNA04DTwNQA1EDUgNTA1QDVQNWA1cDWANZA1oDWwNcA10DXgNfA2ADYQNiA2MDZANlA2YDZwNoA2kDagNrA2wDbQNuA28DcANxA3IDcwN0A3UDdgN3A3gDeQN6A3sDfAN9A34DfwOAA4EDggODA4QDhQOGA4cDiAOJA4oDiwOMA40DjgOPA5ADkQOSA5MDlAOVA5YDlwOYA5kDmgObA5wDnQOeA58DoAOhA6IDowOkA6UDpgOnA6gDqQOqA6sDrAOtA64DrwOwA7EDsgOzA7QDtQO2A7cDuAO5A7oDuwO8A70DvgO/A8ADwQPCA8MDxAPFA8YDxwPIA8kDygPLA8wDzQPOA88D0APRA9ID0wPUA9UD1gPXA9gD2QPaA9sD3APdA94D3wPgA+ED4gPjA+QD5QPmA+cD6APpA+oD6wPsA+0D7gPvA/AD8QPyA/MD9AP1A/YD9wP4A/kD+gP7A/wD/QP+A/8EAAQBBAIEAwQEBAUEBgQHBAgECQQKBAsEDAQNBA4EDwQQBBEEEgQTBBQEFQQWBBcEGAQZBBoEGwQcBB0EHgQfBCAEIQD3BCIEIwQkAAQETlVMTAZtYWNyb24OcGVyaW9kY2VudGVyZWQESGJhcgxrZ3JlZW5sYW5kaWMDRW5nA2VuZwVsb25ncwVPaG9ybgVvaG9ybgVVaG9ybgV1aG9ybgd1bmkwMjM3BXNjaHdhB3VuaTAyRjMJZ3JhdmVjb21iCWFjdXRlY29tYgl0aWxkZWNvbWIEaG9vawd1bmkwMzBGCGRvdGJlbG93BXRvbm9zDWRpZXJlc2lzdG9ub3MJYW5vdGVsZWlhBUdhbW1hBURlbHRhBVRoZXRhBkxhbWJkYQJYaQJQaQVTaWdtYQNQaGkDUHNpBWFscGhhBGJldGEFZ2FtbWEFZGVsdGEHZXBzaWxvbgR6ZXRhA2V0YQV0aGV0YQRpb3RhBmxhbWJkYQJ4aQNyaG8Gc2lnbWExBXNpZ21hA3RhdQd1cHNpbG9uA3BoaQNwc2kFb21lZ2EHdW5pMDNEMQd1bmkwM0QyB3VuaTAzRDYHdW5pMDQwMgd1bmkwNDA0B3VuaTA0MDkHdW5pMDQwQQd1bmkwNDBCB3VuaTA0MEYHdW5pMDQxMQd1bmkwNDE0B3VuaTA0MTYHdW5pMDQxNwd1bmkwNDE4B3VuaTA0MUIHdW5pMDQyMwd1bmkwNDI0B3VuaTA0MjYHdW5pMDQyNwd1bmkwNDI4B3VuaTA0MjkHdW5pMDQyQQd1bmkwNDJCB3VuaTA0MkMHdW5pMDQyRAd1bmkwNDJFB3VuaTA0MkYHdW5pMDQzMQd1bmkwNDMyB3VuaTA0MzMHdW5pMDQzNAd1bmkwNDM2B3VuaTA0MzcHdW5pMDQzOAd1bmkwNDNBB3VuaTA0M0IHdW5pMDQzQwd1bmkwNDNEB3VuaTA0M0YHdW5pMDQ0Mgd1bmkwNDQ0B3VuaTA0NDYHdW5pMDQ0Nwd1bmkwNDQ4B3VuaTA0NDkHdW5pMDQ0QQd1bmkwNDRCB3VuaTA0NEMHdW5pMDQ0RAd1bmkwNDRFB3VuaTA0NEYHdW5pMDQ1Mgd1bmkwNDU0B3VuaTA0NTkHdW5pMDQ1QQd1bmkwNDVCB3VuaTA0NUYHdW5pMDQ2MAd1bmkwNDYxB3VuaTA0NjMHdW5pMDQ2NAd1bmkwNDY1B3VuaTA0NjYHdW5pMDQ2Nwd1bmkwNDY4B3VuaTA0NjkHdW5pMDQ2QQd1bmkwNDZCB3VuaTA0NkMHdW5pMDQ2RAd1bmkwNDZFB3VuaTA0NkYHdW5pMDQ3Mgd1bmkwNDczB3VuaTA0NzQHdW5pMDQ3NQd1bmkwNDdBB3VuaTA0N0IHdW5pMDQ3Qwd1bmkwNDdEB3VuaTA0N0UHdW5pMDQ3Rgd1bmkwNDgwB3VuaTA0ODEHdW5pMDQ4Mgd1bmkwNDgzB3VuaTA0ODQHdW5pMDQ4NQd1bmkwNDg2B3VuaTA0ODgHdW5pMDQ4OQd1bmkwNDhEB3VuaTA0OEUHdW5pMDQ4Rgd1bmkwNDkwB3VuaTA0OTEHdW5pMDQ5NAd1bmkwNDk1B3VuaTA0OUMHdW5pMDQ5RAd1bmkwNEEwB3VuaTA0QTEHdW5pMDRBNAd1bmkwNEE1B3VuaTA0QTYHdW5pMDRBNwd1bmkwNEE4B3VuaTA0QTkHdW5pMDRCNAd1bmkwNEI1B3VuaTA0QjgHdW5pMDRCOQd1bmkwNEJBB3VuaTA0QkMHdW5pMDRCRAd1bmkwNEMzB3VuaTA0QzQHdW5pMDRDNwd1bmkwNEM4B3VuaTA0RDgHdW5pMDRFMAd1bmkwNEUxB3VuaTA0RkEHdW5pMDRGQgd1bmkwNTAwB3VuaTA1MDIHdW5pMDUwMwd1bmkwNTA0B3VuaTA1MDUHdW5pMDUwNgd1bmkwNTA3B3VuaTA1MDgHdW5pMDUwOQd1bmkwNTBBB3VuaTA1MEIHdW5pMDUwQwd1bmkwNTBEB3VuaTA1MEUHdW5pMDUwRgd1bmkwNTEwB3VuaTIwMDAHdW5pMjAwMQd1bmkyMDAyB3VuaTIwMDMHdW5pMjAwNAd1bmkyMDA1B3VuaTIwMDYHdW5pMjAwNwd1bmkyMDA4B3VuaTIwMDkHdW5pMjAwQQd1bmkyMDBCDXVuZGVyc2NvcmVkYmwNcXVvdGVyZXZlcnNlZAd1bmkyMDI1B3VuaTIwNzQJbnN1cGVyaW9yBGxpcmEGcGVzZXRhBEV1cm8HdW5pMjEwNQd1bmkyMTEzB3VuaTIxMTYJZXN0aW1hdGVkCW9uZWVpZ2h0aAx0aHJlZWVpZ2h0aHMLZml2ZWVpZ2h0aHMMc2V2ZW5laWdodGhzCmNvbG9uLmxudW0JcXVvdGVkYmx4C2NvbW1hYWNjZW50B3VuaUZFRkYHdW5pRkZGQwd1bmlGRkZECWZpdmUuc21jcAhmb3VyLnN1cAl6ZXJvLmxudW0ObGFyZ2VyaWdodGhvb2sMY3lyaWxsaWNob29rEGN5cmlsbGljaG9va2xlZnQLY3lyaWxsaWN0aWMOYnJldmV0aWxkZWNvbWINYnJldmVob29rY29tYg5icmV2ZWFjdXRlY29tYhNjaXJjdW1mbGV4dGlsZGVjb21iEmNpcmN1bWZsZXhob29rY29tYhNjaXJjdW1mbGV4Z3JhdmVjb21iE2NpcmN1bWZsZXhhY3V0ZWNvbWIOYnJldmVncmF2ZWNvbWIRY29tbWFhY2NlbnRyb3RhdGUGQS5zbWNwBkIuc21jcAZDLnNtY3AGRC5zbWNwBkUuc21jcAZGLnNtY3AGRy5zbWNwBkguc21jcAZJLnNtY3AGSi5zbWNwBksuc21jcAZMLnNtY3AGTS5zbWNwBk4uc21jcAZPLnNtY3AGUS5zbWNwBlIuc21jcAZTLnNtY3AGVC5zbWNwBlUuc21jcAZWLnNtY3AGVy5zbWNwBlguc21jcAZZLnNtY3AGWi5zbWNwCXplcm8uc21jcAhvbmUuc21jcAh0d28uc21jcAp0aHJlZS5zbWNwCWZvdXIuc21jcAh0d28ubG51bQhzaXguc21jcApzZXZlbi5zbWNwCmVpZ2h0LnNtY3AJbmluZS5zbWNwB29uZS5zdXAHdHdvLnN1cAl0aHJlZS5zdXAIb25lLmxudW0IZml2ZS5zdXAHc2l4LnN1cAlzZXZlbi5zdXAJZWlnaHQuc3VwCG5pbmUuc3VwCHplcm8uc3VwCGNyb3NzYmFyCXJpbmdhY3V0ZQlkYXNpYW94aWEKdGhyZWUubG51bQlmb3VyLmxudW0JZml2ZS5sbnVtCHNpeC5sbnVtBWcuYWx0CnNldmVuLmxudW0HY2hpLmFsdAplaWdodC5sbnVtCWFscGhhLmFsdAlkZWx0YS5hbHQERC5jbgRhLmNuBVIuYWx0BUsuYWx0BWsuYWx0BksuYWx0MgZrLmFsdDIJbmluZS5sbnVtBlAuc21jcA1jeXJpbGxpY2JyZXZlB3VuaTAwQUQGRGNyb2F0BGhiYXIEVGJhcgR0YmFyCkFyaW5nYWN1dGUKYXJpbmdhY3V0ZQdBbWFjcm9uB2FtYWNyb24GQWJyZXZlBmFicmV2ZQdBb2dvbmVrB2FvZ29uZWsLQ2NpcmN1bWZsZXgLY2NpcmN1bWZsZXgHdW5pMDEwQQd1bmkwMTBCBkRjYXJvbgZkY2Fyb24HRW1hY3JvbgdlbWFjcm9uBkVicmV2ZQZlYnJldmUKRWRvdGFjY2VudAplZG90YWNjZW50B0VvZ29uZWsHZW9nb25lawZFY2Fyb24GZWNhcm9uC0djaXJjdW1mbGV4C2djaXJjdW1mbGV4B3VuaTAxMjAHdW5pMDEyMQxHY29tbWFhY2NlbnQMZ2NvbW1hYWNjZW50C0hjaXJjdW1mbGV4C2hjaXJjdW1mbGV4Bkl0aWxkZQZpdGlsZGUHSW1hY3JvbgdpbWFjcm9uBklicmV2ZQZpYnJldmUHSW9nb25lawdpb2dvbmVrCklkb3RhY2NlbnQCSUoCaWoLSmNpcmN1bWZsZXgLamNpcmN1bWZsZXgMS2NvbW1hYWNjZW50DGtjb21tYWFjY2VudAZMYWN1dGUGbGFjdXRlDExjb21tYWFjY2VudAxsY29tbWFhY2NlbnQGTGNhcm9uBmxjYXJvbgRMZG90BGxkb3QGTmFjdXRlBm5hY3V0ZQxOY29tbWFhY2NlbnQMbmNvbW1hYWNjZW50Bk5jYXJvbgZuY2Fyb24LbmFwb3N0cm9waGUHT21hY3JvbgdvbWFjcm9uBk9icmV2ZQZvYnJldmUNT2h1bmdhcnVtbGF1dA1vaHVuZ2FydW1sYXV0BlJhY3V0ZQZyYWN1dGUMUmNvbW1hYWNjZW50DHJjb21tYWFjY2VudAZSY2Fyb24GcmNhcm9uBlNhY3V0ZQZzYWN1dGULU2NpcmN1bWZsZXgLc2NpcmN1bWZsZXgHdW5pMDIxOAd1bmkwMjE5B3VuaTAyMUEHdW5pMDIxQgd1bmkwMTYyB3VuaTAxNjMGVGNhcm9uBnRjYXJvbgZVdGlsZGUGdXRpbGRlB1VtYWNyb24HdW1hY3JvbgZVYnJldmUGdWJyZXZlBVVyaW5nBXVyaW5nDVVodW5nYXJ1bWxhdXQNdWh1bmdhcnVtbGF1dAdVb2dvbmVrB3VvZ29uZWsLV2NpcmN1bWZsZXgLd2NpcmN1bWZsZXgLWWNpcmN1bWZsZXgLeWNpcmN1bWZsZXgGWmFjdXRlBnphY3V0ZQpaZG90YWNjZW50Cnpkb3RhY2NlbnQHQUVhY3V0ZQdhZWFjdXRlC09zbGFzaGFjdXRlC29zbGFzaGFjdXRlC0Rjcm9hdC5zbWNwCEV0aC5zbWNwCVRiYXIuc21jcAtBZ3JhdmUuc21jcAtBYWN1dGUuc21jcBBBY2lyY3VtZmxleC5zbWNwC0F0aWxkZS5zbWNwDkFkaWVyZXNpcy5zbWNwCkFyaW5nLnNtY3APQXJpbmdhY3V0ZS5zbWNwDUNjZWRpbGxhLnNtY3ALRWdyYXZlLnNtY3ALRWFjdXRlLnNtY3AQRWNpcmN1bWZsZXguc21jcA5FZGllcmVzaXMuc21jcAtJZ3JhdmUuc21jcAtJYWN1dGUuc21jcBBJY2lyY3VtZmxleC5zbWNwDklkaWVyZXNpcy5zbWNwC050aWxkZS5zbWNwC09ncmF2ZS5zbWNwC09hY3V0ZS5zbWNwEE9jaXJjdW1mbGV4LnNtY3ALT3RpbGRlLnNtY3AOT2RpZXJlc2lzLnNtY3ALVWdyYXZlLnNtY3ALVWFjdXRlLnNtY3AQVWNpcmN1bWZsZXguc21jcA5VZGllcmVzaXMuc21jcAtZYWN1dGUuc21jcAxBbWFjcm9uLnNtY3ALQWJyZXZlLnNtY3AMQW9nb25lay5zbWNwC0NhY3V0ZS5zbWNwEENjaXJjdW1mbGV4LnNtY3AMdW5pMDEwQS5zbWNwC0NjYXJvbi5zbWNwC0RjYXJvbi5zbWNwDEVtYWNyb24uc21jcAtFYnJldmUuc21jcA9FZG90YWNjZW50LnNtY3AMRW9nb25lay5zbWNwC0VjYXJvbi5zbWNwEEdjaXJjdW1mbGV4LnNtY3ALR2JyZXZlLnNtY3AMdW5pMDEyMC5zbWNwEUdjb21tYWFjY2VudC5zbWNwEEhjaXJjdW1mbGV4LnNtY3ALSXRpbGRlLnNtY3AMSW1hY3Jvbi5zbWNwC0licmV2ZS5zbWNwDElvZ29uZWsuc21jcA9JZG90YWNjZW50LnNtY3AQSmNpcmN1bWZsZXguc21jcBFLY29tbWFhY2NlbnQuc21jcAtMYWN1dGUuc21jcBFMY29tbWFhY2NlbnQuc21jcAtMY2Fyb24uc21jcAlMZG90LnNtY3ALTmFjdXRlLnNtY3ARTmNvbW1hYWNjZW50LnNtY3ALTmNhcm9uLnNtY3AMT21hY3Jvbi5zbWNwC09icmV2ZS5zbWNwEk9odW5nYXJ1bWxhdXQuc21jcAtSYWN1dGUuc21jcBFSY29tbWFhY2NlbnQuc21jcAtSY2Fyb24uc21jcAtTYWN1dGUuc21jcBBTY2lyY3VtZmxleC5zbWNwDVNjZWRpbGxhLnNtY3ALU2Nhcm9uLnNtY3ARVGNvbW1hYWNjZW50LnNtY3ALVGNhcm9uLnNtY3ALVXRpbGRlLnNtY3AMVW1hY3Jvbi5zbWNwC1VicmV2ZS5zbWNwClVyaW5nLnNtY3ASVWh1bmdhcnVtbGF1dC5zbWNwDFVvZ29uZWsuc21jcBBXY2lyY3VtZmxleC5zbWNwEFljaXJjdW1mbGV4LnNtY3AOWWRpZXJlc2lzLnNtY3ALWmFjdXRlLnNtY3APWmRvdGFjY2VudC5zbWNwC1pjYXJvbi5zbWNwD2dlcm1hbmRibHMuc21jcApBbHBoYXRvbm9zDEVwc2lsb250b25vcwhFdGF0b25vcwlJb3RhdG9ub3MMT21pY3JvbnRvbm9zDFVwc2lsb250b25vcwpPbWVnYXRvbm9zEWlvdGFkaWVyZXNpc3Rvbm9zBUFscGhhBEJldGEHRXBzaWxvbgRaZXRhA0V0YQRJb3RhBUthcHBhAk11Ak51B09taWNyb24DUmhvA1RhdQdVcHNpbG9uA0NoaQxJb3RhZGllcmVzaXMPVXBzaWxvbmRpZXJlc2lzCmFscGhhdG9ub3MMZXBzaWxvbnRvbm9zCGV0YXRvbm9zCWlvdGF0b25vcxR1cHNpbG9uZGllcmVzaXN0b25vcwVrYXBwYQdvbWljcm9uB3VuaTAzQkMCbnUDY2hpDGlvdGFkaWVyZXNpcw91cHNpbG9uZGllcmVzaXMMb21pY3JvbnRvbm9zDHVwc2lsb250b25vcwpvbWVnYXRvbm9zB3VuaTA0MDEHdW5pMDQwMwd1bmkwNDA1B3VuaTA0MDYHdW5pMDQwNwd1bmkwNDA4B3VuaTA0MUEHdW5pMDQwQwd1bmkwNDBFB3VuaTA0MTAHdW5pMDQxMgd1bmkwNDEzB3VuaTA0MTUHdW5pMDQxOQd1bmkwNDFDB3VuaTA0MUQHdW5pMDQxRQd1bmkwNDFGB3VuaTA0MjAHdW5pMDQyMQd1bmkwNDIyB3VuaTA0MjUHdW5pMDQzMAd1bmkwNDM1B3VuaTA0MzkHdW5pMDQzRQd1bmkwNDQwB3VuaTA0NDEHdW5pMDQ0Mwd1bmkwNDQ1B3VuaTA0NTEHdW5pMDQ1Mwd1bmkwNDU1B3VuaTA0NTYHdW5pMDQ1Nwd1bmkwNDU4B3VuaTA0NUMHdW5pMDQ1RQZXZ3JhdmUGd2dyYXZlBldhY3V0ZQZ3YWN1dGUJV2RpZXJlc2lzCXdkaWVyZXNpcwZZZ3JhdmUGeWdyYXZlBm1pbnV0ZQZzZWNvbmQJZXhjbGFtZGJsB3VuaUZCMDIHdW5pMDFGMAd1bmkwMkJDB3VuaTFFM0UHdW5pMUUzRgd1bmkxRTAwB3VuaTFFMDEHdW5pMUY0RAd1bmlGQjAzB3VuaUZCMDQHdW5pMDQwMAd1bmkwNDBEB3VuaTA0NTAHdW5pMDQ1RAd1bmkwNDcwB3VuaTA0NzEHdW5pMDQ3Ngd1bmkwNDc3B3VuaTA0NzkHdW5pMDQ3OAd1bmkwNDk4B3VuaTA0OTkHdW5pMDRBQQd1bmkwNEFCB3VuaTA0QUUHdW5pMDRBRgd1bmkwNEMwB3VuaTA0QzEHdW5pMDRDMgd1bmkwNENGB3VuaTA0RDAHdW5pMDREMQd1bmkwNEQyB3VuaTA0RDMHdW5pMDRENAd1bmkwNEQ1B3VuaTA0RDYHdW5pMDRENwd1bmkwNERBB3VuaTA0RDkHdW5pMDREQgd1bmkwNERDB3VuaTA0REQHdW5pMDRERQd1bmkwNERGB3VuaTA0RTIHdW5pMDRFMwd1bmkwNEU0B3VuaTA0RTUHdW5pMDRFNgd1bmkwNEU3B3VuaTA0RTgHdW5pMDRFOQd1bmkwNEVBB3VuaTA0RUIHdW5pMDRFQwd1bmkwNEVEB3VuaTA0RUUHdW5pMDRFRgd1bmkwNEYwB3VuaTA0RjEHdW5pMDRGMgd1bmkwNEYzB3VuaTA0RjQHdW5pMDRGNQd1bmkwNEY4B3VuaTA0RjkHdW5pMDRGQwd1bmkwNEZEB3VuaTA1MDEHdW5pMDUxMgd1bmkwNTEzB3VuaTFFQTAHdW5pMUVBMQd1bmkxRUEyB3VuaTFFQTMHdW5pMUVBNAd1bmkxRUE1B3VuaTFFQTYHdW5pMUVBNwd1bmkxRUE4B3VuaTFFQTkHdW5pMUVBQQd1bmkxRUFCB3VuaTFFQUMHdW5pMUVBRAd1bmkxRUFFB3VuaTFFQUYHdW5pMUVCMAd1bmkxRUIxB3VuaTFFQjIHdW5pMUVCMwd1bmkxRUI0B3VuaTFFQjUHdW5pMUVCNgd1bmkxRUI3B3VuaTFFQjgHdW5pMUVCOQd1bmkxRUJBB3VuaTFFQkIHdW5pMUVCQwd1bmkxRUJEB3VuaTFFQkUHdW5pMUVCRgd1bmkxRUMwB3VuaTFFQzEHdW5pMUVDMgd1bmkxRUMzB3VuaTFFQzQHdW5pMUVDNQd1bmkxRUM2B3VuaTFFQzcHdW5pMUVDOAd1bmkxRUM5B3VuaTFFQ0EHdW5pMUVDQgd1bmkxRUNDB3VuaTFFQ0QHdW5pMUVDRQd1bmkxRUNGB3VuaTFFRDAHdW5pMUVEMQd1bmkxRUQyB3VuaTFFRDMHdW5pMUVENAd1bmkxRUQ1B3VuaTFFRDYHdW5pMUVENwd1bmkxRUQ4B3VuaTFFRDkHdW5pMUVEQQd1bmkxRURCB3VuaTFFREMHdW5pMUVERAd1bmkxRURFB3VuaTFFREYHdW5pMUVFMAd1bmkxRUUxB3VuaTFFRTIHdW5pMUVFMwd1bmkxRUU0B3VuaTFFRTUHdW5pMUVFNgd1bmkxRUU3B3VuaTFFRTgHdW5pMUVFOQd1bmkxRUVBB3VuaTFFRUIHdW5pMUVFQwd1bmkxRUVEB3VuaTFFRUUHdW5pMUVFRgd1bmkxRUYwB3VuaTFFRjEHdW5pMUVGNAd1bmkxRUY1B3VuaTFFRjYHdW5pMUVGNwd1bmkxRUY4B3VuaTFFRjkGZGNyb2F0B3VuaTIwQUIHdW5pMDQ5QQd1bmkwNDlCB3VuaTA0QTIHdW5pMDRBMwd1bmkwNEFDB3VuaTA0QUQHdW5pMDRCMgd1bmkwNEIzB3VuaTA0QjYHdW5pMDRCNwd1bmkwNENCB3VuaTA0Q0MHdW5pMDRGNgd1bmkwNEY3B3VuaTA0OTYHdW5pMDQ5Nwd1bmkwNEJFB3VuaTA0QkYHdW5pMDRC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/+AA6AATATj/4QE5/+ABPP/hAUH/6QFJ/98BS//eAVP/3wFV//IAGACz/9QAvf/tAL8AEQDF/+AAx//nAMj/5QDJ/+4A1AASAOX/6QDx/9cBL//XATn/0wE7/9YBPP/FAUH/5wFJAA0BSwAMAVT/1gFV//IBqf/pAa3/5wG1/+cBtv/pAd//8AAFABn/8gDh//EBSf/yAUv/8gFT//IACADUABUA6AAVATj/5AE5/+UBO//kAUn/4wFL/+IBU//kAAgA1AAVAOgAFQE4/+QBOf/lATv/5AFJ/+MBS//iAVP/5AASANT/rgDhABIA5v/gAOj/rQDq/9YA+P/fAPz/0gEC/+ABF//OASf/3QEp/+IBLf/gATP/4AE5/+kBPP/aAUb/vQFQ/98BUwARAAgA1AAVAOgAFQE4/+QBOf/lATv/5AFJ/+MBS//iAVP/5AAIANQAFQDoABUBOP/kATn/5QE7/+QBSf/jAUv/4gFT/+QADADUABMA4f/mAOL/9ADoABIA8f/nAS//5wE4/+UBOf/oAUn/5gFL/+YBU//mAVT/5wAJAOH/wwDx/88BL//OATj/5wE7/98BSf/RAUv/7AFT/6ABVP/RAAkA4f/DAPH/zwEv/84BOP/nATv/3wFJ/9EBS//sAVP/oAFU/9EAAgDU/+IBU//kAAIA1P/hAOj/5AAGAOj/7gDx/+4BBP/0ARv/8QEv/+8BVP/vAAQA8f/0AQT/9QEv//UBVP/1AAIA6P/JARf/7gAGAOgAFADx/+0A9//iAS//7QE5/+0BVP/tAAEBF//xAAUBF//rAan/6wGt/+kBtf/rAbb/6wATAEgADQDC/6sAw//AAMf/1QDo/6oBF//iARsADAFKAAsBTAALAaf/vwGp/+4Brf/sAbX/7QG2/+wBuP/1AbkADgG7AA0BvgANAd//sAAGAMX/6gDo/+4A8f+wAS//7AFU/+wB3P/oAAYA6AAUAPH/8AD8AAwBL//wATn/5gFU//AABQDoADoA8f/jAS//4gE5/+MBVP/jAAgA8f+6AQT/zwEb/9sBL/9QATn/nQFK//ABTP/yAVT/TAAIAPH/ugEE/88BG//bAS//UAE5/50BSv/wAUz/8gFU/0wABgDF/+oA6P/uAPH/sAEv/+wBVP/sAdz/6AABAOj/7wAIAPH/ugEE/88BG//bAS//UAE5/50BSv/w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/8oBPP/dAUH/8gFJ/3UBS//KAVP/TwFU/4wBrf/1AbX/9QG5/8cBuv/xAbv/zQG8/90Bvv/EABwAIf/DAFb/7wBZ/98Alv/uALP/5QC0/9EAvwARAMX/yADUABMA4f/FAPH/ygEv/58BOP9RATn/ewE7/8oBPP/dAUH/8gFJ/3UBS//KAVP/TwFU/4wBrf/1AbX/9QG5/8cBuv/xAbv/zQG8/90Bvv/EABwAIf/DAFb/7wBZ/98Alv/uALP/5QC0/9EAvwARAMX/yADUABMA4f/FAPH/ygEv/58BOP9RATn/ewE7/8oBPP/dAUH/8gFJ/3UBS//KAVP/TwFU/4wBrf/1AbX/9QG5/8cBuv/xAbv/zQG8/90Bvv/EABwAIf/DAFb/7wBZ/98Alv/uALP/5QC0/9EAvwARAMX/yADUABMA4f/FAPH/ygEv/58BOP9RATn/ewE7/8oBPP/dAUH/8gFJ/3UBS//KAVP/TwFU/4wBrf/1AbX/9QG5/8cBuv/xAbv/zQG8/90Bvv/EAAQAC//mAD//9ABf/+8BPP/tAAUASP/uAFn/6gG7//ABvP/tAb7/8AAFAEj/7gBZ/+oBu//wAbz/7QG+//AABQBI/+4AWf/qAbv/8AG8/+0Bvv/wAAUASP/uAFn/6gG7//ABvP/tAb7/8AAIANQAFQDoABUBOP/kATn/5QE7/+QBSf/jAUv/4gFT/+QACADUABUA6AAVATj/5AE5/+UBO//kAUn/4wFL/+IBU//kAAgA1AAVAOgAFQE4/+QBOf/lATv/5AFJ/+MBS//iAVP/5AAIANQAFQDoABUBOP/kATn/5QE7/+QBSf/jAUv/4gFT/+QACADUABUA6AAVATj/5AE5/+UBO//kAUn/4wFL/+IBU//kAAkAf//fALD/8wCy//AAv//qANT/3wDh/+ABU//gAaf/7QG9//UACQB//98AsP/zALL/8AC//+oA1P/fAOH/4AFT/+ABp//tAb3/9QAJAH//3wCw//MAsv/wAL//6gDU/98A4f/gAVP/4AGn/+0Bvf/1AAkAf//fALD/8wCy//AAv//qANT/3wDh/+ABU//gAaf/7QG9//UACQB//98AsP/zALL/8AC//+oA1P/fAOH/4AFT/+ABp//tAb3/9QABAaf/6wABAaf/6wABAaf/6wABAaf/6wAkAAj/4gALABQADP/PAD8AEgBI/+oAVP/YAFb/6gBfABMAa/+uAHr/zQB//6AAhP/BAIf/wACz/9AAt//qALr/xgC7AA0Avf/pAL7/1gDB/+gAwv+6AMX/6QDH/8sAyP/aAMn/xwFu/9MBp/+rAan/zQGt/8sBtf/LAbb/ywG5//MBvP/zAb3/7wHc/+gB3//uAAcA8f/wAQT/8QEb//MBL//xAUr/8wFM/+kBVP/TAAcA8f/wAQT/8QEb//MBL//xAUr/8wFM/+kBVP/TAAcA8f/wAQT/8QEb//MBL//xAUr/8wFM/+kBVP/TAAcA8f/wAQT/8QEb//MBL//xAUr/8wFM/+kBVP/TAAcA8f/wAQT/8QEb//MBL//xAUr/8wFM/+kBVP/TAAcA8f/wAQT/8QEb//MBL//xAUr/8wFM/+kBVP/TAAcA8f/wAQT/8QEb//MBL//xAUr/8wFM/+kBVP/TAAEA8f/1AAEA8f/1AAEA8f/1AAEA8f/1AAEA8f/AAAkAxf/qAOj/uADx/+oBBP/wARv/8QEv/+sBSv/1AVT/7AHc/+oACQDF/+oA6P+4APH/6gEE//ABG//xAS//6wFK//UBVP/sAdz/6gAJAMX/6gDo/7gA8f/qAQT/8AEb//EBL//rAUr/9QFU/+wB3P/qAAkAxf/qAOj/uADx/+oBBP/wARv/8QEv/+sBSv/1AVT/7AHc/+oACQDF/+oA6P+4APH/6gEE//ABG//xAS//6wFK//UBVP/sAdz/6gAHAEgADQDBAAsAwv/qAMUADADo/8gBF//xAd//9QAHAEgADQDBAAsAwv/qAMUADADo/8gBF//xAd//9QAcACH/wwBW/+8AWf/fAJb/7gCz/+UAtP/RAL8AEQDF/8gA1AATAOH/xQDx/8oBL/+fATj/UQE5/3sBO//KATz/3QFB//IBSf91AUv/ygFT/08BVP+MAa3/9QG1//UBuf/HAbr/8QG7/80BvP/dAb7/xAAHAPH/8AEE//EBG//zAS//8QFK//MBTP/pAVT/0wAcACH/wwBW/+8AWf/fAJb/7gCz/+UAtP/RAL8AEQDF/8gA1AATAOH/xQDx/8oBL/+fATj/UQE5/3sBO//KATz/3QFB//IBSf91AUv/ygFT/08BVP+MAa3/9QG1//UBuf/HAbr/8QG7/80BvP/dAb7/xAAHAPH/8AEE//EBG//zAS//8QFK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AUH/5wFJAA0BSwAMAVT/1gFV//IBqf/pAa3/5wG1/+cBtv/pAd//8AAHAPH/8AEE//EBG//zAS//8QFK//MBTP/pAVT/0wABAPH/9QAJAMX/6gDo/7gA8f/qAQT/8AEb//EBL//rAUr/9QFU/+wB3P/qAAYAxf/qAOj/7gDx/7ABL//sAVT/7AHc/+gABwBIAA0AwQALAML/6gDFAAwA6P/IARf/8QHf//UAAQEX//EAAQDx//UAAgDo/8kBF//uAAcASAANAMEACwDC/+oAxQAMAOj/yAEX//EB3//1AAkACwAPAD8ADABU/+sAXwAOAaf/ywGp/+kBrf/nAbX/5wG2/+cACQALAA8APwAMAFT/6wBfAA4Bp//LAan/6QGt/+cBtf/nAbb/5wAJAAsADwA/AAwAVP/rAF8ADgGn/8sBqf/pAa3/5wG1/+cBtv/nACQACP/iAAsAFAAM/88APwASAEj/6gBU/9gAVv/qAF8AEwBr/64Aev/NAH//oACE/8EAh//AALP/0AC3/+oAuv/GALsADQC9/+kAvv/WAMH/6ADC/7oAxf/pAMf/ywDI/9oAyf/HAW7/0wGn/6sBqf/NAa3/ywG1/8sBtv/LAbn/8wG8//MBvf/vAdz/6AHf/+4ABwBIAA0AwQALAML/6gDFAAwA6P/IARf/8QHf//UAAQBZAAsAAQBZAAsAAQBZAAsACADUABUA6AAVATj/5AE5/+UBO//kAUn/4wFL/+IBU//kAAEA8f/AABwAIf/DAFb/7wBZ/98Alv/uALP/5QC0/9EAvwARAMX/yADUABMA4f/FAPH/ygEv/58BOP9RATn/ewE7/8oBPP/dAUH/8gFJ/3UBS//KAVP/TwFU/4wBrf/1AbX/9QG5/8cBuv/xAbv/zQG8/90Bvv/EAAcA8f/wAQT/8QEb//MBL//xAUr/8wFM/+kBVP/TAAkAf//fALD/8wCy//AAv//qANT/3wDh/+ABU//gAaf/7QG9//UABQBI/+4AWf/qAbv/8AG8/+0Bvv/wAAEA8f/1AAkACwAUAD8AEQBU/+IAXwATAaf/tAGp/9kBrf/ZAbX/2QG2/9kABwBIAA0AwQALAML/6gDFAAwA6P/IARf/8QHf//UABAAL/+YAP//0AF//7wE8/+0AJAAI/+IACwAUAAz/zwA/ABIASP/qAFT/2ABW/+oAXwATAGv/rgB6/80Af/+gAIT/wQCH/8AAs//QALf/6gC6/8YAuwANAL3/6QC+/9YAwf/oAML/ugDF/+kAx//LAMj/2gDJ/8cBbv/TAaf/qwGp/80Brf/LAbX/ywG2/8sBuf/zAbz/8wG9/+8B3P/oAd//7gAHAEgADQDBAAsAwv/qAMUADADo/8gBF//xAd//9QAIANQAFQDoABUBOP/kATn/5QE7/+QBSf/jAUv/4gFT/+QAGACz/9QAvf/tAL8AEQDF/+AAx//nAMj/5QDJ/+4A1AASAOX/6QDx/9cBL//XATn/0wE7/9YBPP/FAUH/5wFJAA0BSwAMAVT/1gFV//IBqf/pAa3/5wG1/+cBtv/pAd//8AABARf/8QAIANQAFQDoABUBOP/kATn/5QE7/+QBSf/jAUv/4gFT/+QAHAAh/8MAVv/vAFn/3wCW/+4As//lALT/0QC/ABEAxf/IANQAEwDh/8UA8f/KAS//nwE4/1EBOf97ATv/ygE8/90BQf/yAUn/dQFL/8oBU/9PAVT/jAGt//UBtf/1Abn/xwG6//EBu//NAbz/3QG+/8QABwDx//ABBP/xARv/8wEv//EBSv/zAUz/6QFU/9MAHAAh/8MAVv/vAFn/3wCW/+4As//lALT/0QC/ABEAxf/IANQAEwDh/8UA8f/KAS//nwE4/1EBOf97ATv/ygE8/90BQf/yAUn/dQFL/8oBU/9PAVT/jAGt//UBtf/1Abn/xwG6//EBu//NAbz/3QG+/8QABwDx//ABBP/xARv/8wEv//EBSv/zAUz/6QFU/9MABQBI/+4AWf/qAbv/8AG8/+0Bvv/wAAEA8f/1AAEA8f/1AAEA8f/1ABgAs//UAL3/7QC/ABEAxf/gAMf/5wDI/+UAyf/uANQAEgDl/+kA8f/XAS//1wE5/9MBO//WATz/xQFB/+cBSQANAUsADAFU/9YBVf/yAan/6QGt/+cBtf/nAbb/6QHf//AAAQEX//EACQB//98AsP/zALL/8AC//+oA1P/fAOH/4AFT/+ABp//tAb3/9QAJAMX/6gDo/7gA8f/qAQT/8AEb//EBL//rAUr/9QFU/+wB3P/qAAkAxf/qAOj/uADx/+oBBP/wARv/8QEv/+sBSv/1AVT/7AHc/+oABgDF/+oA6P/uAPH/sAEv/+wBVP/sAdz/6AASANT/rgDhABIA5v/gAOj/rQDq/9YA+P/fAPz/0gEC/+ABF//OASf/3QEp/+IBLf/gATP/4AE5/+kBPP/aAUb/vQFQ/98BUwARAAcASAANAMEACwDC/+oAxQAMAOj/yAEX//EB3//1ABIA1P+uAOEAEgDm/+AA6P+tAOr/1gD4/98A/P/SAQL/4AEX/84BJ//dASn/4gEt/+ABM//gATn/6QE8/9oBRv+9AVD/3wFTABEABwBIAA0AwQALAML/6gDFAAwA6P/IARf/8QHf//UAEgDU/64A4QASAOb/4ADo/60A6v/WAPj/3wD8/9IBAv/gARf/zgEn/90BKf/iAS3/4AEz/+ABOf/pATz/2gFG/70BUP/fAVMAEQAHAEgADQDBAAsAwv/qAMUADADo/8gBF//xAd//9QAYALP/1AC9/+0AvwARAMX/4ADH/+cAyP/lAMn/7gDUABIA5f/pAPH/1wEv/9cBOf/TATv/1gE8/8UBQf/nAUkADQFLAAwBVP/WAVX/8gGp/+kBrf/nAbX/5wG2/+kB3//wAAEBF//xABwAIf/DAFb/7wBZ/98Alv/uALP/5QC0/9EAvwARAMX/yADUABMA4f/FAPH/ygEv/58BOP9RATn/ewE7/8oBPP/dAUH/8gFJ/3UBS//KAVP/TwFU/4wBrf/1AbX/9QG5/8cBuv/xAbv/zQG8/90Bvv/EAAcA8f/wAQT/8QEb//MBL//xAUr/8wFM/+kBVP/TABwAIf/DAFb/7wBZ/98Alv/uALP/5QC0/9EAvwARAMX/yADUABMA4f/FAPH/ygEv/58BOP9RATn/ewE7/8oBPP/dAUH/8gFJ/3UBS//KAVP/TwFU/4wBrf/1AbX/9QG5/8cBuv/xAbv/zQG8/90Bvv/EAAcA8f/wAQT/8QEb//MBL//xAUr/8wFM/+kBVP/TABwAIf/DAFb/7wBZ/98Alv/uALP/5QC0/9EAvwARAMX/yADUABMA4f/FAPH/ygEv/58BOP9RATn/ewE7/8oBPP/dAUH/8gFJ/3UBS//KAVP/TwFU/4wBrf/1AbX/9QG5/8cBuv/xAbv/zQG8/90Bvv/EAAcA8f/wAQT/8QEb//MBL//xAUr/8wFM/+kBVP/TABwAIf/DAFb/7wBZ/98Alv/uALP/5QC0/9EAvwARAMX/yADUABMA4f/FAPH/ygEv/58BOP9RATn/ewE7/8oBPP/dAUH/8gFJ/3UBS//KAVP/TwFU/4wBrf/1AbX/9QG5/8cBuv/xAbv/zQG8/90Bvv/EAAcA8f/wAQT/8QEb//MBL//xAUr/8wFM/+kBVP/TABwAIf/DAFb/7wBZ/98Alv/uALP/5QC0/9EAvwARAMX/yADUABMA4f/FAPH/ygEv/58BOP9RATn/ewE7/8oBPP/dAUH/8gFJ/3UBS//KAVP/TwFU/4wBrf/1AbX/9QG5/8cBuv/xAbv/zQG8/90Bvv/EAAcA8f/wAQT/8QEb//MBL//xAUr/8wFM/+kBVP/TABwAIf/DAFb/7wBZ/98Alv/uALP/5QC0/9EAvwARAMX/yADUABMA4f/FAPH/ygEv/58BOP9RATn/ewE7/8oBPP/dAUH/8gFJ/3UBS//KAVP/TwFU/4wBrf/1AbX/9QG5/8cBuv/xAbv/zQG8/90Bvv/EAAcA8f/wAQT/8QEb//MBL//xAUr/8wFM/+kBVP/TABwAIf/DAFb/7wBZ/98Alv/uALP/5QC0/9EAvwARAMX/yADUABMA4f/FAPH/ygEv/58BOP9RATn/ewE7/8oBPP/dAUH/8gFJ/3UBS//KAVP/TwFU/4wBrf/1AbX/9QG5/8cBuv/xAbv/zQG8/90Bvv/EAAcA8f/wAQT/8QEb//MBL//xAUr/8wFM/+kBVP/TABwAIf/DAFb/7wBZ/98Alv/uALP/5QC0/9EAvwARAMX/yADUABMA4f/FAPH/ygEv/58BOP9RATn/ewE7/8oBPP/dAUH/8gFJ/3UBS//KAVP/TwFU/4wBrf/1AbX/9QG5/8cBuv/xAbv/zQG8/90Bvv/EAAcA8f/wAQT/8QEb//MBL//xAUr/8wFM/+kBVP/TABwAIf/DAFb/7wBZ/98Alv/uALP/5QC0/9EAvwARAMX/yADUABMA4f/FAPH/ygEv/58BOP9RATn/ewE7/8oBPP/dAUH/8gFJ/3UBS//KAVP/TwFU/4wBrf/1AbX/9QG5/8cBuv/xAbv/zQG8/90Bvv/EAAcA8f/wAQT/8QEb//MBL//xAUr/8wFM/+kBVP/TABwAIf/DAFb/7wBZ/98Alv/uALP/5QC0/9EAvwARAMX/yADUABMA4f/FAPH/ygEv/58BOP9RATn/ewE7/8oBPP/dAUH/8gFJ/3UBS//KAVP/TwFU/4wBrf/1AbX/9QG5/8cBuv/xAbv/zQG8/90Bvv/EAAcA8f/wAQT/8QEb//MBL//xAUr/8wFM/+kBVP/TABwAIf/DAFb/7wBZ/98Alv/uALP/5QC0/9EAvwARAMX/yADUABMA4f/FAPH/ygEv/58BOP9RATn/ewE7/8oBPP/dAUH/8gFJ/3UBS//KAVP/TwFU/4wBrf/1AbX/9QG5/8cBuv/xAbv/zQG8/90Bvv/EAAcA8f/wAQT/8QEb//MBL//xAUr/8wFM/+kBVP/TABwAIf/DAFb/7wBZ/98Alv/uALP/5QC0/9EAvwARAMX/yADUABMA4f/FAPH/ygEv/58BOP9RATn/ewE7/8oBPP/dAUH/8gFJ/3UBS//KAVP/TwFU/4wBrf/1AbX/9QG5/8cBuv/xAbv/zQG8/90Bvv/EAAcA8f/wAQT/8QEb//MBL//xAUr/8wFM/+kBVP/TAAUASP/uAFn/6gG7//ABvP/tAb7/8AABAPH/9QAFAEj/7gBZ/+oBu//wAbz/7QG+//AAAQDx//UABQBI/+4AWf/qAbv/8AG8/+0Bvv/wAAEA8f/1AAUASP/uAFn/6gG7//ABvP/tAb7/8AABAPH/9QAFAEj/7gBZ/+oBu//wAbz/7QG+//AAAQDx//UABQBI/+4AWf/qAbv/8AG8/+0Bvv/wAAEA8f/1AAUASP/uAFn/6gG7//ABvP/tAb7/8AABAPH/9QAFAEj/7gBZ/+oBu//wAbz/7QG+//AAAQDx//UACADUABUA6AAVATj/5AE5/+UBO//kAUn/4wFL/+IBU//kAAgA1AAVAOgAFQE4/+QBOf/lATv/5AFJ/+MBS//iAVP/5AAJAH//3wCw//MAsv/wAL//6gDU/98A4f/gAVP/4AGn/+0Bvf/1AAkAxf/qAOj/uADx/+oBBP/wARv/8QEv/+sBSv/1AVT/7AHc/+oACQB//98AsP/zALL/8AC//+oA1P/fAOH/4AFT/+ABp//tAb3/9QAJAMX/6gDo/7gA8f/qAQT/8AEb//EBL//rAUr/9QFU/+wB3P/qAAkAf//fALD/8wCy//AAv//qANT/3wDh/+ABU//gAaf/7QG9//UACQDF/+oA6P+4APH/6gEE//ABG//xAS//6wFK//UBVP/sAdz/6gAJAH//3wCw//MAsv/wAL//6gDU/98A4f/gAVP/4AGn/+0Bvf/1AAkAxf/qAOj/uADx/+oBBP/wARv/8QEv/+sBSv/1AVT/7AHc/+oACQB//98AsP/zALL/8AC//+oA1P/fAOH/4AFT/+ABp//tAb3/9QAJAMX/6gDo/7gA8f/qAQT/8AEb//EBL//rAUr/9QFU/+wB3P/qAAkAf//fALD/8wCy//AAv//qANT/3wDh/+ABU//gAaf/7QG9//UACQDF/+oA6P+4APH/6gEE//ABG//xAS//6wFK//UBVP/sAdz/6gAJAH//3wCw//MAsv/wAL//6gDU/98A4f/gAVP/4AGn/+0Bvf/1AAkAxf/qAOj/uADx/+oBBP/wARv/8QEv/+sBSv/1AVT/7AHc/+oACQDF/+oA6P+4APH/6gEE//ABG//xAS//6wFK//UBVP/sAdz/6gABAaf/6wABAaf/6wAkAAj/4gALABQADP/PAD8AEgBI/+oAVP/YAFb/6gBfABMAa/+uAHr/zQB//6AAhP/BAIf/wACz/9AAt//qALr/xgC7AA0Avf/pAL7/1gDB/+gAwv+6AMX/6QDH/8sAyP/aAMn/xwFu/9MBp/+rAan/zQGt/8sBtf/LAbb/ywG5//MBvP/zAb3/7wHc/+gB3//uAAcASAANAMEACwDC/+oAxQAMAOj/yAEX//EB3//1ACQACP/iAAsAFAAM/88APwASAEj/6gBU/9gAVv/qAF8AEwBr/64Aev/NAH//oACE/8EAh//AALP/0AC3/+oAuv/GALsADQC9/+kAvv/WAMH/6ADC/7oAxf/pAMf/ywDI/9oAyf/HAW7/0wGn/6sBqf/NAa3/ywG1/8sBtv/LAbn/8wG8//MBvf/vAdz/6AHf/+4ABwBIAA0AwQALAML/6gDFAAwA6P/IARf/8QHf//UAJAAI/+IACwAUAAz/zwA/ABIASP/qAFT/2ABW/+oAXwATAGv/rgB6/80Af/+gAIT/wQCH/8AAs//QALf/6gC6/8YAuwANAL3/6QC+/9YAwf/oAML/ugDF/+kAx//LAMj/2gDJ/8cBbv/TAaf/qwGp/80Brf/LAbX/ywG2/8sBuf/zAbz/8wG9/+8B3P/oAd//7gAHAEgADQDBAAsAwv/qAMUADADo/8gBF//xAd//9QATAFn/wQCz/8UAxf+0AOX/1wDx/7kBBP+yARf/0gEb/8gBL/+gATn/xQFB/+QBSv/MAUz/zAFU/8sBVf/vAan/6AGt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/+oDJP74Ayj/VgMzABQDNf/eAzb/6wM4/+sDOv/rAzv/6AM9/+sDRP/oA0z/6ANV/1YDVv/eA1z/6wNh/+gDYv/rA2f/6wNp/+gDbv9WA2//3gNw/1YDcf/eA3X/6wN3/+sDeP/rA4L/6wOE/+sDhv/rA4r/6AOM/+gDjv/oA5X/6wOY/1YDmf/eA5r/VgOb/94DnP9WA53/3gOe/1YDn//eA6D/VgOh/94Dov9WA6P/3gOk/1YDpf/eA6b/VgOn/94DqP9WA6n/3gOq/1YDq//eA6z/VgOt/94Drv9WA6//3gOx/+sDs//rA7X/6wO3/+sDuf/rA7v/6wO9/+sDv//rA8X/6wPH/+sDyf/rA8v/6wPN/+sDz//rA9H/6wPT/+sD1f/rA9f/6wPZ/+sD2//rA93/6gPf/+oD4f/qA+P/6gPl/+oD5//qA+n/6gPr/+gD7f/oA+//6AP2ABQAHwA2/9UAOP/kADn/7AA7/90Azf/VANH/1QEU/+QBLv/VATb/1QIL/90CgP/VAoL/1QKE/9UCkv/sApT/3QKW/90C/f/dAwz/3QMP/90DM//VA0X/7ANH/+wDSf/sA0v/3QNg/+QDaP/dA+r/3QPs/90D7v/dA/b/1QQT/90AGgA2/7AAOP/tADv/0ADN/7AA0f+wART/7QEu/7ABNv+wAgv/0AKA/7ACgv+wAoT/sAKU/9AClv/QAv3/0AMM/9ADD//QAzP/sANL/9ADYP/tA2j/0APq/9AD7P/QA+7/0AP2/7AEE//QABAALP/uADf/7gIH/+4CCP/uAgn/7gIK/+4CV//uAob/7gKI/+4Civ/uAoz/7gKO/+4CkP/uAyT/7gPc/+4D3v/uAEcABAAQAAkAEABF/+gARv/oAEf/6ABJ/+gAU//oAJH/6ACV/+gAtv/oAMP/6ADE/+gA8v/oAP7/6AEZ/+gBHf/oATX/6AFH/+gBSP/oAVL/6AFlABABZgAQAWgAEAFpABABagAQAhP/6AIU/+gCFf/oAhb/6AIX/+gCL//oAjH/6AIz/+gCNf/oAjf/6AI5/+gCO//oAj3/6AI//+gCQf/oAkP/6AJF/+gCR//oAkn/6AMQ/+gDNv/oAzr/6AM9/+gDTQAQA04AEANSABADXP/oA2L/6ANn/+gDdf/oA3f/6AN4/+gDhP/oA5X/6AOx/+gDs//oA7X/6AO3/+gDuf/oA7v/6AO9/+gDv//oA9P/6APV/+gD1//oA9v/6AA9AEX/7ABG/+wAR//sAEn/7ABT/+wAkf/sAJX/7AC2/+wAw//sAMT/7ADy/+wA/v/sARn/7AEd/+wBNf/sAUf/7AFI/+wBUv/sAhP/7AIU/+wCFf/sAhb/7AIX/+wCL//sAjH/7AIz/+wCNf/sAjf/7AI5/+wCO//sAj3/7AI//+wCQf/sAkP/7AJF/+wCR//sAkn/7AMQ/+wDNv/sAzr/7AM9/+wDXP/sA2L/7ANn/+wDdf/sA3f/7AN4/+wDhP/sA5X/7AOx/+wDs//sA7X/7AO3/+wDuf/sA7v/7AO9/+wDv//sA9P/7APV/+wD1//sA9v/7AAXAFH/7AET/+wCHf/sAh7/7AIf/+wCIP/sAiH/7AJr/+wCbf/sAm//7AMW/+wDHP/sAzj/7AOC/+wDhv/sA8X/7APH/+wDyf/sA8v/7APN/+wDz//sA9H/7APZ/+wABgAO/4QAEP+EAWf/hAFr/4QBb/+EAXD/hAAQACz/7AA3/+wCB//sAgj/7AIJ/+wCCv/sAlf/7AKG/+wCiP/sAor/7AKM/+wCjv/sApD/7AMk/+wD3P/sA97/7AABKSwABAAAACIATgDEAaoCkANqBAQGnghkCTYKLAvyDCQMVgzUDroPMBACEhQSyhQwFOoVcBXOFpAXBhcYF0IYlBrSGvQcChyIHLIc3AAdAAT/8gAJ//IAWP/zAFv/8wC4//MBFf/zAWX/8gFm//IBaP/yAWn/8gFq//ICJv/zAif/8wKV//MDGP/zAzv/8wNE//MDTP/zA03/8gNO//IDUv/yA2H/8wNp//MDiv/zA4z/8wOO//MD6//zA+3/8wPv//MAOQAl//MAKf/zADH/8wAz//MAgf/zAJD/8wCU//MArv/zAM7/8wED//MBEv/zARb/8wEY//MBGv/zARz/8wE0//MBUf/zAfj/8wIC//MCA//zAgT/8wIF//MCBv/zAi7/8wIw//MCMv/zAjT/8wJC//MCRP/zAkb/8wJI//MCav/zAmz/8wJu//MCn//zAvz/8wMJ//MDL//zAzL/8wNX//MDY//zA2b/8wOB//MDg//zA4X/8wPE//MDxv/zA8j/8wPK//MDzP/zA87/8wPQ//MD0v/zA9T/8wPW//MD2P/zA9r/8wA5ACX/5gAp/+YAMf/mADP/5gCB/+YAkP/mAJT/5gCu/+YAzv/mAQP/5gES/+YBFv/mARj/5gEa/+YBHP/mATT/5gFR/+YB+P/mAgL/5gID/+YCBP/mAgX/5gIG/+YCLv/mAjD/5gIy/+YCNP/mAkL/5gJE/+YCRv/mAkj/5gJq/+YCbP/mAm7/5gKf/+YC/P/mAwn/5gMv/+YDMv/mA1f/5gNj/+YDZv/mA4H/5gOD/+YDhf/mA8T/5gPG/+YDyP/mA8r/5gPM/+YDzv/mA9D/5gPS/+YD1P/mA9b/5gPY/+YD2v/mADYAI//kADr/0gA7/9MArf/kAK//5ADV/9IBCP/kAfH/5AHy/+QB8//kAfT/5AH1/+QB9v/kAff/5AIL/9MCKP/kAir/5AIs/+QClP/TApb/0wL4/+QC/f/TAwD/5AMM/9MDDf/SAw//0wMo/+QDNP/SA0v/0wNV/+QDaP/TA2v/0gNu/+QDcP/kA3n/0gOT/9IDmP/kA5r/5AOc/+QDnv/kA6D/5AOi/+QDpP/kA6b/5AOo/+QDqv/kA6z/5AOu/+QD6v/TA+z/0wPu/9MD+P/SBAD/0gQT/9MAJgAO/x4AEP8eACP/zQCt/80Ar//NAQj/zQFn/x4Ba/8eAW//HgFw/x4B8f/NAfL/zQHz/80B9P/NAfX/zQH2/80B9//NAij/zQIq/80CLP/NAvj/zQMA/80DKP/NA1X/zQNu/80DcP/NA5j/zQOa/80DnP/NA57/zQOg/80Dov/NA6T/zQOm/80DqP/NA6r/zQOs/80Drv/NAKYARf/cAEb/3ABH/9wASf/cAE//8wBQ//MAUf/WAFL/8wBT/9wAV//dAFj/4QBb/+EAkf/cAJX/3ACX/90Atv/cALj/4QC8//MAw//cAMT/3ADG/90A5//zAOv/8wDs//MA7v/zAO//8wDw//MA8v/cAPP/8wD1//MA9v/zAPn/8wD7//MA/v/cAQD/8wET/9YBFf/hARn/3AEd/9wBMf/zATX/3AFA//MBRf/zAUf/3AFI/9wBUv/cAhP/3AIU/9wCFf/cAhb/3AIX/9wCHP/zAh3/1gIe/9YCH//WAiD/1gIh/9YCIv/dAiP/3QIk/90CJf/dAib/4QIn/+ECL//cAjH/3AIz/9wCNf/cAjf/3AI5/9wCO//cAj3/3AI//9wCQf/cAkP/3AJF/9wCR//cAkn/3AJk//MCZv/zAmj/8wJp//MCa//WAm3/1gJv/9YCh//dAon/3QKL/90Cjf/dAo//3QKR/90Clf/hAxD/3AMS//MDFP/dAxb/1gMY/+EDG//dAxz/1gMd/90DNv/cAzf/8wM4/9YDOf/zAzr/3AM7/+EDPf/cAz7/8wND//MDRP/hA0z/4QNU//MDXP/cA13/8wNh/+EDYv/cA2f/3ANp/+EDdf/cA3f/3AN4/9wDfv/zA4D/8wOC/9YDhP/cA4b/1gOK/+EDjP/hA47/4QOS//MDlf/cA7H/3AOz/9wDtf/cA7f/3AO5/9wDu//cA73/3AO//9wDxf/WA8f/1gPJ/9YDy//WA83/1gPP/9YD0f/WA9P/3APV/9wD1//cA9n/1gPb/9wD3f/dA9//3QPh/90D4//dA+X/3QPn/90D6f/dA+v/4QPt/+ED7//hA/P/8wP1//MD///zBAz/8wQO//MEEP/zAHEABP/aAAn/2gBF//AARv/wAEf/8ABJ//AAU//wAFf/7wBY/9wAW//cAJH/8ACV//AAl//vALb/8AC4/9wAw//wAMT/8ADG/+8A8v/wAP7/8AEV/9wBGf/wAR3/8AE1//ABR//wAUj/8AFS//ABZf/aAWb/2gFo/9oBaf/aAWr/2gIT//ACFP/wAhX/8AIW//ACF//wAiL/7wIj/+8CJP/vAiX/7wIm/9wCJ//cAi//8AIx//ACM//wAjX/8AI3//ACOf/wAjv/8AI9//ACP//wAkH/8AJD//ACRf/wAkf/8AJJ//ACh//vAon/7wKL/+8Cjf/vAo//7wKR/+8Clf/cAxD/8AMU/+8DGP/cAxv/7wMd/+8DNv/wAzr/8AM7/9wDPf/wA0T/3ANM/9wDTf/aA07/2gNS/9oDXP/wA2H/3ANi//ADZ//wA2n/3AN1//ADd//wA3j/8AOE//ADiv/cA4z/3AOO/9wDlf/wA7H/8AOz//ADtf/wA7f/8AO5//ADu//wA73/8AO///AD0//wA9X/8APX//AD2//wA93/7wPf/+8D4f/vA+P/7wPl/+8D5//vA+n/7wPr/9wD7f/cA+//3AA0AAT/oAAJ/6AAV//xAFj/xQBb/8UAl//xALj/xQDG//EBFf/FAWX/oAFm/6ABaP+gAWn/oAFq/6ACIv/xAiP/8QIk//ECJf/xAib/xQIn/8UCh//xAon/8QKL//ECjf/xAo//8QKR//EClf/FAxT/8QMY/8UDG//xAx3/8QM7/8UDRP/FA0z/xQNN/6ADTv+gA1L/oANh/8UDaf/FA4r/xQOM/8UDjv/FA93/8QPf//ED4f/xA+P/8QPl//ED5//xA+n/8QPr/8UD7f/FA+//xQA9AEX/5wBG/+cAR//nAEn/5wBT/+cAkf/nAJX/5wC2/+cAw//nAMT/5wDy/+cA/v/nARn/5wEd/+cBNf/nAUf/5wFI/+cBUv/nAhP/5wIU/+cCFf/nAhb/5wIX/+cCL//nAjH/5wIz/+cCNf/nAjf/5wI5/+cCO//nAj3/5wI//+cCQf/nAkP/5wJF/+cCR//nAkn/5wMQ/+cDNv/nAzr/5wM9/+cDXP/nA2L/5wNn/+cDdf/nA3f/5wN4/+cDhP/nA5X/5wOx/+cDs//nA7X/5wO3/+cDuf/nA7v/5wO9/+cDv//nA9P/5wPV/+cD1//nA9v/5wBxAAQADAAJAAwARf/oAEb/6ABH/+gASf/oAFH/6gBT/+gAWAALAFsACwCR/+gAlf/oALb/6AC4AAsAw//oAMT/6ADy/+gA/v/oARP/6gEVAAsBGf/oAR3/6AE1/+gBR//oAUj/6AFS/+gBZQAMAWYADAFoAAwBaQAMAWoADAIT/+gCFP/oAhX/6AIW/+gCF//oAh3/6gIe/+oCH//qAiD/6gIh/+oCJgALAicACwIv/+gCMf/oAjP/6AI1/+gCN//oAjn/6AI7/+gCPf/oAj//6AJB/+gCQ//oAkX/6AJH/+gCSf/oAmv/6gJt/+oCb//qApUACwMQ/+gDFv/qAxgACwMc/+oDNv/oAzj/6gM6/+gDOwALAz3/6ANEAAsDTAALA00ADANOAAwDUgAMA1z/6ANhAAsDYv/oA2f/6ANpAAsDdf/oA3f/6AN4/+gDgv/qA4T/6AOG/+oDigALA4wACwOOAAsDlf/oA7H/6AOz/+gDtf/oA7f/6AO5/+gDu//oA73/6AO//+gDxf/qA8f/6gPJ/+oDy//qA83/6gPP/+oD0f/qA9P/6APV/+gD1//oA9n/6gPb/+gD6wALA+0ACwPvAAsADABa/+0AXP/tAOn/7QKY/+0Cmv/tApz/7QM8/+0DbP/tA3r/7QOU/+0D+f/tBAH/7QAMAFr/8gBc//IA6f/yApj/8gKa//ICnP/yAzz/8gNs//IDev/yA5T/8gP5//IEAf/yAB8AWP/0AFr/8gBb//QAXP/zALj/9ADp//IBFf/0Aib/9AIn//QClf/0Apj/8wKa//MCnP/zAxj/9AM7//QDPP/yA0T/9ANM//QDYf/0A2n/9ANs//IDev/yA4r/9AOM//QDjv/0A5T/8gPr//QD7f/0A+//9AP5//IEAf/yAHkABP/KAAn/ygA2/9IAOP/UADr/9AA7/9MAT//RAFD/0QBS/9EAWP/mAFr/7wBb/+YAuP/mALz/0QDN/9IA0f/SANX/9ADZ/+0A3P/hAOf/0QDp/+8A6//RAOz/0QDu/9EA7//RAPD/0QDz/9EA9f/RAPb/0QD5/9EA+//RAQD/0QEU/9QBFf/mAS7/0gEx/9EBNv/SAUD/0QFF/9EBZf/KAWb/ygFo/8oBaf/KAWr/ygIL/9MCHP/RAib/5gIn/+YCZP/RAmb/0QJo/9ECaf/RAoD/0gKC/9IChP/SApT/0wKV/+YClv/TAv3/0wMM/9MDDf/0Aw//0wMS/9EDGP/mAyf/7QMz/9IDNP/0Azf/0QM5/9EDO//mAzz/7wM+/9EDQ//RA0T/5gNL/9MDTP/mA03/ygNO/8oDUv/KA1T/0QNd/9EDYP/UA2H/5gNo/9MDaf/mA2v/9ANs/+8Def/0A3r/7wN+/9EDgP/RA4n/7QOK/+YDi//tA4z/5gON/+0Djv/mA4//4QOS/9EDk//0A5T/7wPq/9MD6//mA+z/0wPt/+YD7v/TA+//5gPz/9ED9f/RA/b/0gP4//QD+f/vA/r/4QP8/+ED///RBAD/9AQB/+8EDP/RBA7/0QQQ/9EEE//TAB0ANv++AFj/7wBb/+8AuP/vAM3/vgDR/74BFf/vAS7/vgE2/74CJv/vAif/7wKA/74Cgv++AoT/vgKV/+8DGP/vAzP/vgM7/+8DRP/vA0z/7wNh/+8Daf/vA4r/7wOM/+8Djv/vA+v/7wPt/+8D7//vA/b/vgA0ADb/5gA4/+cAOv/yADv/5wBa//EAzf/mANH/5gDV//IA2f/uANz/6ADp//EBFP/nAS7/5gE2/+YCC//nAoD/5gKC/+YChP/mApT/5wKW/+cC/f/nAwz/5wMN//IDD//nAyf/7gMz/+YDNP/yAzz/8QNL/+cDYP/nA2j/5wNr//IDbP/xA3n/8gN6//EDif/uA4v/7gON/+4Dj//oA5P/8gOU//ED6v/nA+z/5wPu/+cD9v/mA/j/8gP5//ED+v/oA/z/6AQA//IEAf/xBBP/5wCEACMAEAAl/+gAKf/oADH/6AAz/+gANv/gADj/4AA7/98Agf/oAJD/6ACU/+gArQAQAK7/6ACvABAAzf/gAM7/6ADPABAA0f/gANgAEADc/+EA7QAQAPT/4AD/ABABA//oAQgAEAES/+gBFP/gARb/6AEY/+gBGv/oARz/6AEu/+ABNP/oATb/4AFNABABUf/oAfEAEAHyABAB8wAQAfQAEAH1ABAB9gAQAfcAEAH4/+gCAv/oAgP/6AIE/+gCBf/oAgb/6AIL/98CKAAQAioAEAIsABACLv/oAjD/6AIy/+gCNP/oAkL/6AJE/+gCRv/oAkj/6AJq/+gCbP/oAm7/6AKA/+ACgv/gAoT/4AKU/98Clv/fAp//6AL4ABAC/P/oAv3/3wMAABADCf/oAwz/3wMP/98DKAAQAy//6AMy/+gDM//gA0v/3wNVABADV//oA2D/4ANj/+gDZv/oA2j/3wNuABADcAAQA4H/6AOD/+gDhf/oA4//4QOQ/+ADlgAQA5cAEAOYABADmgAQA5wAEAOeABADoAAQA6IAEAOkABADpgAQA6gAEAOqABADrAAQA64AEAPE/+gDxv/oA8j/6APK/+gDzP/oA87/6APQ/+gD0v/oA9T/6APW/+gD2P/oA9r/6APq/98D7P/fA+7/3wP2/+AD+v/hA/v/4AP8/+ED/f/gBBEAEAQSABAEE//fAC0ANv/xADj/9AA6//QAO//wAM3/8QDP//UA0f/xANX/9ADY//UA2f/zART/9AEu//EBNv/xAU3/9QIL//ACgP/xAoL/8QKE//EClP/wApb/8AL9//ADDP/wAw3/9AMP//ADJ//zAzP/8QM0//QDS//wA2D/9ANo//ADa//0A3n/9AOJ//MDi//zA43/8wOT//QDlv/1A+r/8APs//AD7v/wA/b/8QP4//QEAP/0BBH/9QQT//AAWQAjAA8ANv/mADj/5gA6AA4AO//mAK0ADwCvAA8Azf/mAM8ADgDR/+YA1QAOANgADgDZAAsA3P/lAO0ADwD0/+gA/wAPAQgADwEU/+YBLv/mATb/5gFNAA4B8QAPAfIADwHzAA8B9AAPAfUADwH2AA8B9wAPAgv/5gIoAA8CKgAPAiwADwKA/+YCgv/mAoT/5gKU/+YClv/mAvgADwL9/+YDAAAPAwz/5gMNAA4DD//mAycACwMoAA8DM//mAzQADgNL/+YDVQAPA2D/5gNo/+YDawAOA24ADwNwAA8DeQAOA4kACwOLAAsDjQALA4//5QOQ/+gDkwAOA5YADgOXAA8DmAAPA5oADwOcAA8DngAPA6AADwOiAA8DpAAPA6YADwOoAA8DqgAPA6wADwOuAA8D6v/mA+z/5gPu/+YD9v/mA/gADgP6/+UD+//oA/z/5QP9/+gEAAAOBBEADgQSAA8EE//mAC4ANv/jADr/5QA7/+QAzf/jAM//5QDR/+MA1f/lANj/5QDZ/+kA7f/qAP//6gEu/+MBNv/jAU3/5QIL/+QCgP/jAoL/4wKE/+MClP/kApb/5AL9/+QDDP/kAw3/5QMP/+QDJ//pAzP/4wM0/+UDS//kA2j/5ANr/+UDef/lA4n/6QOL/+kDjf/pA5P/5QOW/+UDl//qA+r/5APs/+QD7v/kA/b/4wP4/+UEAP/lBBH/5QQS/+oEE//kACEANv/iADr/5ADN/+IAz//kANH/4gDV/+QA2P/kANn/6QDt/+sA///rAS7/4gE2/+IBTf/kAoD/4gKC/+IChP/iAw3/5AMn/+kDM//iAzT/5ANr/+QDef/kA4n/6QOL/+kDjf/pA5P/5AOW/+QDl//rA/b/4gP4/+QEAP/kBBH/5AQS/+sAFwA2/+sAO//zAM3/6wDR/+sBLv/rATb/6wIL//MCgP/rAoL/6wKE/+sClP/zApb/8wL9//MDDP/zAw//8wMz/+sDS//zA2j/8wPq//MD7P/zA+7/8wP2/+sEE//zADAAT//vAFD/7wBS/+8AWv/wALz/7wDn/+8A6f/wAOv/7wDs/+8A7v/vAO//7wDw/+8A8//vAPX/7wD2/+8A+f/vAPv/7wEA/+8BMf/vAUD/7wFF/+8CHP/vAmT/7wJm/+8CaP/vAmn/7wMS/+8DN//vAzn/7wM8//ADPv/vA0P/7wNU/+8DXf/vA2z/8AN6//ADfv/vA4D/7wOS/+8DlP/wA/P/7wP1/+8D+f/wA///7wQB//AEDP/vBA7/7wQQ/+8AHQAE//IACf/yAFj/9QBb//UAuP/1ARX/9QFl//IBZv/yAWj/8gFp//IBav/yAib/9QIn//UClf/1Axj/9QM7//UDRP/1A0z/9QNN//IDTv/yA1L/8gNh//UDaf/1A4r/9QOM//UDjv/1A+v/9QPt//UD7//1AAQA9P/tA5D/7QP7/+0D/f/tAAoABP/1AAn/9QFl//UBZv/1AWj/9QFp//UBav/1A03/9QNO//UDUv/1AFQARf/wAEb/8ABH//AASf/wAFH/6wBT//AAkf/wAJX/8AC2//AAw//wAMT/8ADy//AA/v/wARP/6wEZ//ABHf/wATX/8AFH//ABSP/wAVL/8AIT//ACFP/wAhX/8AIW//ACF//wAh3/6wIe/+sCH//rAiD/6wIh/+sCL//wAjH/8AIz//ACNf/wAjf/8AI5//ACO//wAj3/8AI///ACQf/wAkP/8AJF//ACR//wAkn/8AJr/+sCbf/rAm//6wMQ//ADFv/rAxz/6wM2//ADOP/rAzr/8AM9//ADXP/wA2L/8ANn//ADdf/wA3f/8AN4//ADgv/rA4T/8AOG/+sDlf/wA7H/8AOz//ADtf/wA7f/8AO5//ADu//wA73/8AO///ADxf/rA8f/6wPJ/+sDy//rA83/6wPP/+sD0f/rA9P/8APV//AD1//wA9n/6wPb//AAjwAEAA0ACQANAEP/8ABF/7AARv+wAEf/sABJ/7AAUf/WAFP/sABYAAsAWwALAJH/sACV/7AAtv+wALgACwDE/7AA7f+vAPL/sAD+/7AA//+vARP/1gEVAAsBGf+wAR3/sAE1/7ABR/+wAUj/sAFS/7ABZQANAWYADQFoAA0BaQANAWoADQIM//ACDf/wAg7/8AIP//ACEP/wAhH/8AIS//ACE/+wAhT/sAIV/7ACFv+wAhf/sAId/9YCHv/WAh//1gIg/9YCIf/WAiYACwInAAsCKf/wAiv/8AIt//ACL/+wAjH/sAIz/7ACNf+wAjf/sAI5/7ACO/+wAj3/sAI//7ACQf+wAkP/sAJF/7ACR/+wAkn/sAJr/9YCbf/WAm//1gKVAAsDEP+wAxb/1gMYAAsDHP/WAzX/8AM2/7ADOP/WAzr/sAM7AAsDPf+wA0QACwNMAAsDTQANA04ADQNSAA0DVv/wA1z/sANhAAsDYv+wA2f/sANpAAsDb//wA3H/8AN1/7ADd/+wA3j/sAOC/9YDhP+wA4b/1gOKAAsDjAALA44ACwOV/7ADl/+vA5n/8AOb//ADnf/wA5//8AOh//ADo//wA6X/8AOn//ADqf/wA6v/8AOt//ADr//wA7H/sAOz/7ADtf+wA7f/sAO5/7ADu/+wA73/sAO//7ADxf/WA8f/1gPJ/9YDy//WA83/1gPP/9YD0f/WA9P/sAPV/7AD1/+wA9n/1gPb/7AD6wALA+0ACwPvAAsEEv+vAAgA7QAQAPT/8AD/ABADkP/wA5cAEAP7//AD/f/wBBIAEABFAEUADABGAAwARwAMAEkADABTAAwAkQAMAJUADAC2AAwAwwAMAMQADADtABgA8gAMAPT/9wD+AAwA/wAYARkADAEdAAwBNQAMAUcADAFIAAwBUgAMAhMADAIUAAwCFQAMAhYADAIXAAwCLwAMAjEADAIzAAwCNQAMAjcADAI5AAwCOwAMAj0ADAI/AAwCQQAMAkMADAJFAAwCRwAMAkkADAMQAAwDNgAMAzoADAM9AAwDXAAMA2IADANnAAwDdQAMA3cADAN4AAwDhAAMA5D/9wOVAAwDlwAYA7EADAOzAAwDtQAMA7cADAO5AAwDuwAMA70ADAO/AAwD0wAMA9UADAPXAAwD2wAMA/v/9wP9//cEEgAYAB8AWP/0AFr/8ABb//QAuP/0AOn/8ADt//MA///zARX/9AIm//QCJ//0ApX/9AMY//QDO//0Azz/8ANE//QDTP/0A2H/9ANp//QDbP/wA3r/8AOK//QDjP/0A47/9AOU//ADl//zA+v/9APt//QD7//0A/n/8AQB//AEEv/zAAoABP/WAAn/1gFl/9YBZv/WAWj/1gFp/9YBav/WA03/1gNO/9YDUv/WAAoABP/1AAn/9QFl//UBZv/1AWj/9QFp//UBav/1A03/9QNO//UDUv/1AF4ABAALAAkACwBF/+sARv/rAEf/6wBJ/+sAUf/pAFP/6wCR/+sAlf/rALb/6wDD/+sAxP/rAPL/6wD+/+sBE//pARn/6wEd/+sBNf/rAUf/6wFI/+sBUv/rAWUACwFmAAsBaAALAWkACwFqAAsCE//rAhT/6wIV/+sCFv/rAhf/6wId/+kCHv/pAh//6QIg/+kCIf/pAi//6wIx/+sCM//rAjX/6wI3/+sCOf/rAjv/6wI9/+sCP//rAkH/6wJD/+sCRf/rAkf/6wJJ/+sCa//pAm3/6QJv/+kDEP/rAxb/6QMc/+kDNv/rAzj/6QM6/+sDPf/r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ATEDUgNXATUDWgNaATsDXANcATwDYANhAT0DZgNmAT8DaANxAUADdAN1AUoDdwN6AUwDgQOCAVADhgOGAVIDiAOOAVMDkwOUAVoDmAPAAVwDwgPCAYUDxAPRAYYD2QPZAZQD3APcAZUD3gPeAZYD6gPvAZcD8gPyAZ0D9AP0AZ4D9gP2AZ8D+AP5AaAD/gQBAaIEBAQEAaYEBgQHAacECQQJAakEDQQNAaoEDwQPAasEEwQTAawAAQAKAAoAKAAzADQAPQBIAE0AVgBZAF0AAQAiAJkAsACyALMAtAC7AL4AvwDAAMUAxwDIAMkAzQDRANMA1ADWAN4A4gDjAOQA5QDmAOgA6gDsAPEA8wD2APsA/gEdAdwAAgB2AAQABAAAAAkACQABAA4ADgACABAAEAADACMAJwAEACoAMgAJADYAPAASAEMARQAZAEcARwAcAEoASgAdAE8AUgAeAFQAVAAiAFgAWAAjAFoAXAAkAIgAiAAnAKwArwAoALgAuAAsALwAvAAtAMIAwgAuAM8A0AAvANIA0gAxANUA1QAyANcA2QAzANsA2wA2AN0A3QA3AN8A3wA4AOEA4QA5AOcA5wA6AOkA6QA7APIA8gA8APcA9wA9APkA+gA+AP8BAABAAQUBBQBCAQgBCABDARMBFQBEAScBKQBHASwBLABKAS4BLgBLAUUBRQBMAWUBawBNAW8BcABUAewB7QBWAe8B7wBYAfECFwBZAhwCIQCAAiYCNgCGAjgCQQCXAkoCTAChAk4CTgCkAlACUAClAlICUgCmAlQCVACnAlcCVwCoAlkCWQCpAlsCWwCqAl0CXQCrAl8CXwCsAmECYQCtAmMCbwCuAnECcQC7AnMCcwC8AnUCdQC9AoACgAC+AoICggC/AoQChADAAoYChgDBAogCiADCAooCigDDAowCjADEAo4CjgDFApACkADGApICkgDHApQCnADIAvgC/QDRAwADDwDXAxIDEgDnAxYDFgDoAxgDGADpAxwDHADqAx8DIADrAyIDKwDtAy0DLwD3AzEDNgD6AzgDPgEAA0QDRQEHA0cDRwEJA0kDSQEKA0sDTgELA1IDVwEPA1oDWgEVA1wDXAEWA2ADYQEXA2YDcQEZA3QDdQElA3cDegEnA4EDggErA4YDhgEtA4gDjgEuA5MDlAE1A5gDwAE3A8IDwgFgA8QD0QFh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ABMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABcAAAAAAAAAAAAAABEAEQARABEAEQARABEABQAAAAAAAAAAAAAAAAAAAAAAAAAFAAUABQAFAAUABgAGAAYABgAOABoAGgAaABoAGgAaABoAFQAVABUAFQAVAAAAAAAAAAAAGAAIAAgACAAIAAgACwALAAsACwACAAIAEQAaABEAGgARABoABQAVAAUAFQAFABUABQAVAAAAFQAAABUAAAAVAAAAFQAAABUAAAAVAAUAFQAFABUABQAVAAUAFQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGAAAABgAAAAYABgABQAIAAUACAAFAAgAAAAAAAAAAAAAAAAAGQAbABkAGwAZABsAGQAbABkAGwAKAAAACgAAAAoAAAAGAAsABgALAAYACwAGAAsABgALAAYACwAJAAAADgACAA4AFAAMABQADAAUAAwAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARAAAAAAAAAAUADgAAAAAAEQAAAAAAFAAAAAAAAAAAAAAABQAAAAAADgASAAAADgAVAAAAGAAAAAsAAAAIAAAAAgAAAAAACwAIAAsAAAAAAAAAAAAAAAAAHAAAAAAAEAARAAAAAAAAAAAAAAAAAAUAAAAAAAUACgASABoAFQAYAAgAGAAVAAIAFgAVABgAGwAAAAAAAAAYAAIACQAAAAkAAAAJAAAADgACAAcABwAAAAAAAAAHAAAAGAARABoABQAAAAAAAAAAABUAGAAAAAAADQACABUABQAAAAAABQAVAA4AAgAAABIAFgAAABEAGgARABoAAAAAAAAAFQAAABUAFQASABYAAAAAAAAAGAAAABgABQAIAAUAFQAFAAgAAAAAABAAAgAQAAIAEAACAA8AAwAAABgAEgAWABUAAQAEABEAGgARABoAEQAaABEAGgARABoAEQAaABEAGgARABoAEQAaABEAGgARABoAEQAaAAAAFQAAABUAAAAVAAAAFQAAABUAAAAVAAAAFQAAABUAAAAAAAAAAAAFAAgABQAIAAUACAAFAAgABQAIAAUACAAFAAgABQAVAAUAFQAFABUABQAIAAUAFQAGAAsABgALAAAACwAAAAsAAAALAAAACwAAAAsADgACAA4AAgAOAAIAAAAAAAAAGAAAABgACgAAABIAFgAPAAMADwADAAAAGAASABYAAAAAAAAAAAAAAAAAAAAAAAAAAAAYAAAAGAAAABgAAQAEAA4AAAAAAAAAAAAAABcAAQAAAAoALACOAAFERkxUAAgABAAAAAD//wAIAAAAAQACAAMABAAFAAYABwAIbGlnYQAybG51bQA4c21jcAA+c3MwMQBEc3MwMgBKc3MwMwBQc3MwNABWc3MwNQBcAAAAAQABAAAAAQACAAAAAQAAAAAAAQADAAAAAQAEAAAAAQAFAAAAAQAGAAAAAQAHAAgAEgAaACIAKgAyADoAQgBKAAEAAAABAEAABAAAAAEB9gABAAAAAQIAAAEAAAABAhIAAQAAAAECEAABAAAAAQIOAAEAAAABAgwAAQAAAAECDgACAhAA3AGmAacBqAGpAaoBqwGsAa0BrgGvAbABsQGyAbMBtAHoAbUBtgG3AbgBuQG6AbsBvAG9Ab4BpgGnAagBqQGqAasBrAGtAa4BrwGwAbEBsgGzAbQB6AG1AbYBtwG4AbkBugG7AbwBvQG+AvcCogKhAqICowKjAqQCpQKmAqcCqAKpAqoCqwKsAq0CrgKvArACsQKyArMCtAK1ArYCtwK4ArkCugK7ArwCvQK+AqQCpQKmAqcCqAKpAqoCqwKsAq0CrgKvArACsQKyArMCtAK1ArYCtwK4ArkCugK7ArwCvQK+AvMCvwK/AsACwALBAsECwgLCAsMCwwLFAsUCxgLGAscCxwLIAsgCyQLJAsoCygLLAssCzALMAs0CzQLPAs8C0ALQAtEC0QLSAtIC0wLTAtQC1ALVAtYC1gLXAtcC2ALYAtkC2QLaAtoC2wLbAtwC3ALdAt0C3gLeAt8C3wLgAuAC4QLhAuIC4gLjAuMC5ALkAuUC5QLmAuYC5wLnAugC6P////8C6gLqAusC6wLsAuwC7QLtAu4C7gLvAu8C8ALwAvEC8QLyAvIC8wL0AvQC9QL1AvYC9gKhAAEApAABAAgAAQAEAZIAAgBLAAIAmAAKAZgBzAHEAdYB1wHYAdkB2wHdAecAAQCIAZEAAQCIASgAAQCIAa4AAgCIAAIB4wHkAAIAfgACAeUB5gACAA0AIwA8AAAAQwBcABoAgwCDADQAhQCFADUB7AHtADYB7wIxADgCNAJFAHsCSAJUAI0CVwJoAJoCagJ7AKwCfgJ/AL4CggKcAMAD8APwANsAAQABAEgAAgABABIAGwAAAAEAAQBJAAEAAQC2AAEAAQA0AAEAAgAtAE0=",
+"Roboto-Medium.ttf":"AAEAAAAOAIAAAwBgR0RFRgsuCy8AASxgAAAASEdQT1OQeyOPAAEsqAAAl/pHU1VCeolvLwABxKQAAANsT1MvMrkTKcoAAAFoAAAAYFZETVhu6nZPAAASOAAABeBjbWFwf76BZgAAGBgAAA7iZ2x5Zm8zqQ4AACb8AADUQGhlYWT1Pw7VAAAA7AAAADZoaGVhCx4JIwAAASQAAAAkaG10eLpNNCcAAAHIAAAQcGxvY2EEms7QAAD7PAAACDptYXhwBDsA9gAAAUgAAAAgbmFtZb10XwMAAQN4AAAEn3Bvc3Tfb5xiAAEIGAAAJEYAAQAAAAEAAF5SMstfDzz1AAkIAAAAAADE8BEuAAAAAM2CsnL6JP3VCYsIYgAAAAkAAgAAAAAAAAABAAAHbP4MAAAJnfok/V0JiwABAAAAAAAAAAAAAAAAAAAEHAABAAAEHACXABYAXQAFAAEAAAAAAAAAAAAAAAAAAwABAAME3gH0AAUAAAWaBTMAAAEfBZoFMwAAA9EAZgIAAAAAAAAAAAAAAAAA4AAC/1AAIFsAAAAgAAAAAHB5cnMAAAAA//0GAP4AAGYHmgIAIAABn08BAAAEOgWwAAAAIAACAf4AAAAAAAAB/gAAAf4AAAKYAFIE4gA8BIwAZAXgAGQFHQA+AVoAUgK3AIACvAARA38AGwR1AEQBwgAnAqAARwI8AJkDKgACBIwAaASMAMoEjABRBIwATwSMADgEjACBBIwAdASMAEUEjABhBIwAUgIlAJkCIABRBBEAPwSOAJEEKgCAA+QAKQchAEoFQgAaBSAAnwUgAHQFYgCfBKMAnwShAJ8FbQB0BbAAnwJNAK0EfAA6BSgAnwRkAJ8HAgCfBbAAnwWPAHQFKwCfBZAAdAVFAJ8E8wBTBOoANQV0AIYFKwAaBwIARAUUAC8FAwATBMAAWAIxAIQDVwAVAjEADANrADUDnAADApQASgRaAF4EiACABDMAUQSIAFMEPABZAs8AMQSIAFQEiAB9AhMAkAIZ/7AEMACBAhMAkAb1AIAEiAB+BIgAUwSIAIAEiABTAtoAgAQpAFECnQAZBIgAewQOACAF+gAlBA4AIQQOABAEDgBVAq8AOAICAK4CrwAbBVEAdQIeAI8EfQBoBLUAUQWdAF0E4AAaAfwAiAT4AFoEHgCkBkQAVwORAHQD4gBUBG0AfwZEAFcD2wCHAwoAfwRLAF8DYQBtA2MAYQKxAHgEuwCSBBAAPgJCAKACEABtAjUAZAOnAHcD4gBcBgwAmwZmAJMG0wBmBAEAYAeF//YERABNBXoAaQTKAJQE5wCIBsEANAS6ADwEkQBDBIkAUwSXAIcFogAYAhoAjwSYAI4EJAAbAj8AGwWSAJMEiAB+B7QAZQc6AFsCDACLAtD/3QWJAGYEnwBSBaUAhgTyAHsCJv+1BDwAWQPmAJsDsAB5A3wAdQJPAJoCsgCCAk0AKQPYAIADLwB6ApwAqwAA/NsAAP02AAD8eQAA/T4AAPwMAAD9IgJdANcEPACdAkIAoAR1AJ8FvQAaBXsAZgU5ACMEkQBwBbEAnwSRAEcF6wBLBacASAVbAGwEhABWBMYAlgQOACAEiABUBGAAYAQaAGEEiAB+BKIAcwKmAKkEagAWBBMAZAT3AE8EiACABDcAUgSQAFIELgBABGAAgAXQAEQFyQBPBpQAZgUuAHUEdf/uBnEAMwX/ACQFPgByCIoALgiRAJ8GXwA1BasAmQUIAJQGBwAmB5oAGATTAEoFqgCaBakALgUKAD8GYABPBfYAmQWIAI8HmgCeB/oAngYaABgG+QCfBQcAlAU8AIgHVACqBPsALQR9AFsEjwCPA1oAhQT2ACcGdgAXBBYATQSYAIYEbgCPBJoAHwYDAI8ElwCGBJgAhgP1ACMF0wBUBNMAhgRmAF8GjgCGBuwAfgUYAB8GbwCPBGgAjwQ8AFEGhACQBHAAJwSJ/+EEPQBYBtEAHwbkAIYEif/1BJgAhgdDAI0GTwBwBGf/4AcpAKIGAQCGBQcAIARgAAoHQgC2BjYAnQbtAIQF5gCCCTIArQf5AI8EIQApA/AAMwV7AGoEiQBSBRkAEQQOACAFewBqBIkAUwc+AI0GRAB0B0MAjQZQAHAFHQBqBEoAXAT/AG0AAPxmAAD8cwAA/XsAAP2lAAD6JP7p+k0EZ//gBRQAnwSHAIAEagCUA6IAfgS3AJ8EIAB+BSoAlASrAI4GlgA0BaQAPgfRAJ8FqwB+CEcAnwb1AH4GJQBpBP8AYQcyAC4FcQAmBXUAggRzAHQFhwCKBiYAIATE/84FHwCUBHgAjgWwAJ8EiAB+BYgAUwSmAF0EpgBdBMcAOwNTADQFBwBUBusAZgbdAF4GUwA7BSgALwR7AEkEPwB1B74AQwadAD8H/gCYBp4AdwUDAGIELABVBaoAIgUdAEQFVwCHBBQAAAgpAAAEFAAACCkAAAK5AAACCgAAAVwAAAR/AAACMAAAAaIAAADRAAAAAAAABYcArQaBALIDnQAEAcAAYAG8ADMBzgAyAagARwMUAGIDGwBAAwgAMgRdAEAEmQBcAssAiAP6AJwFpgCcB6gASwJyAGwCaQBUA5wALQOpAD8DXABpBLUATwa4AJkETQBLBeUAcQPiAEUIyACYBQkAZAUUAJYGyQBpB2EAageRAGoG7wBqBLsAQwWWAKYE2QBABIMAngSyADsIRQBkAiH/sgSOAGUETACYBEYAqgRLAKAEGgAkAlsAswKYAGMB8QBFBKgAGAAAAAAIMABZCDUAXAQyAE0DiwBNBJMAbAMn/58CEP+wAk0AGAGzAFwDoQB1A6EAdQOhAHUECwB5BAsAdQQL/0wECwB6A6EAWwIFAJAEyAAcBIwAjgSUAGgErwCOBEcAjgQqAI4E2wBoBRIAjgIVAI4EFwAuBHcAjgO9AI4GBgCOBSEAjgTKAGYE3QBoBKgAjgRwAE8EMgA8BQAAfgSxABwGDgA0BIwALARVABMETQBKBIYAbQKFAD4D/wBSBCIATQRlADkEfABRBD0AbQOvADwEQwBSBCoAPwIzAFcDVQBrA2YAYAL9ADgDdgBoA3YAcAMAAFIDgwBoA2YAYAOfAHADuQCXArIAlgNCAGwEjABPBIwAOASMAIEEmAB0BDsACgQ0ADIEYgA+BIwAYQS7AFYEiABTBUkAnwRaAGAFMgCfBSgAnwQwAIEFOgCfBC0AgQSNAFIEjACOA3wAdQH+AAACoABHBYAAJAWAACQEpv/9BOoANQKd/+cFQgAaBUIAGgVCABoFQgAaBUIAGgVCABoFQgAaBSAAdASjAJ8EowCfBKMAnwSjAJ8CTf/MAk0ArQJN/9gCTf+9BbAAnwWPAHQFjwB0BY8AdAWPAHQFjwB0BXQAhgV0AIYFdACGBXQAhgUDABMEWgBeBFoAXgRaAF4EWgBeBFoAXgRaAF4EWgBeBDMAUQQ8AFkEPABZBDwAWQQ8AFkCGv+vAhoAjwIa/7sCGv+gBIgAfgSIAFMEiABTBIgAUwSIAFMEiABTBIgAewSIAHsEiAB7BIgAewQOABAEDgAQBUIAGgRaAF4FQgAaBFoAXgVCABoEWgBeBSAAdAQzAFEFIAB0BDMAUQUgAHQEMwBRBSAAdAQzAFEFYgCfBR4AUwSjAJ8EPABZBKMAnwQ8AFkEowCfBDwAWQSjAJ8EPABZBKMAnwQ8AFkFbQB0BIgAVAVtAHQEiABUBW0AdASIAFQFbQB0BIgAVAWwAJ8EiAB9Ak3/vwIa/6ICTf+/Ahr/ogJN/+UCGv/IAk0AHAIT//4CTQCjBskArQQsAJAEfAA6Aib/tQUoAJ8EMACBBGQAnwITAJAEZACfAhMAWARkAJ8CqQCQBGQAnwLvAJAFsACfBIgAfgWwAJ8EiAB+BbAAnwSIAH4EiP/VBY8AdASIAFMFjwB0BIgAUwWPAHQEiABTBUUAnwLaAIAFRQCfAtoAVgVFAJ8C2gBDBPMAUwQpAFEE8wBTBCkAUQTzAFMEKQBRBPMAUwQpAFEE8wBTBCkAUQTqADUCnQAZBOoANQKdABkE6gA1AsUAGQV0AIYEiAB7BXQAhgSIAHsFdACGBIgAewV0AIYEiAB7BXQAhgSIAHsFdACGBIgAewcCAEQF+gAlBQMAEwQOABAFAwATBMAAWAQOAFUEwABYBA4AVQTAAFgEDgBVB4X/9gbBADQFegBpBIkAUwSv/+oEr//qBDIAPATIABwEyAAcBMgAHATIABwEyAAcBMgAHATIABwElABoBEcAjgRHAI4ERwCOBEcAjgIV/6wCFQCOAhX/uAIV/50FIQCOBMoAZgTKAGYEygBmBMoAZgTKAGYFAAB+BQAAfgUAAH4FAAB+BFUAEwTIABwEyAAcBMgAHASUAGgElABoBJQAaASUAGgErwCOBEcAjgRHAI4ERwCOBEcAjgRHAI4E2wBoBNsAaATbAGgE2wBoBRIAjgIV/58CFf+fAhX/xQIV//kCFQCEBBcALgR3AI4DvQCOA70AjgO9AI4DvQCOBSEAjgUhAI4FIQCOBMoAZgTKAGYEygBmBKgAjgSoAI4EqACOBHAATwRwAE8EcABPBHAATwQyADwEMgA8BQAAfgUAAH4FAAB+BQAAfgUAAH4FAAB+Bg4ANARVABMEVQATBE0ASgRNAEoETQBKCOAATwVCABoFB/+vBhT/3AKx/+MFowAqBWf/ZwVvABMCpv+wBUIAGgUgAJ8EowCfBMAAWAWwAJ8CTQCtBSgAnwcCAJ8FsACfBY8AdAUrAJ8E6gA1BQMAEwUUAC8CTf+9BQMAEwSEAFYEYABgBIgAfgKmAKkEYACABJgAjgSIAFMEuwCSBA4AIAQOACECpv/EBGAAgASIAFMEYACABpQAZgSjAJ8EdQCfBPMAUwJNAK0CTf+9BHwAOgUoAJ8FKACfBQoAPwVCABoFIACfBHUAnwSjAJ8FqgCaBwIAnwWwAJ8FjwB0BbEAnwUrAJ8FIAB0BOoANQUUAC8EWgBeBDwAWQSYAIYEiABTBIgAgAQzAFEEDgAQBA4AIQQ8AFkDWgCFBCkAUQITAJACGv+gAhn/sARuAI8EDgAQBwIARAX6ACUHAgBEBfoAJQcCAEQF+gAlBQMAEwQOABABWgBSApgAUgRKAJoE4gAxAib/tQG8ADMHAgCfBvUAgAVCABoEWgBeBY//PQd3ADEHsQAxBKMAnwWqAJoEPABZBJgAhgWnAEgFyQBPBRkAEQQO/+MIlgBTCZ0AdATTAEoEFgBNBSAAdAQzAFEFAwATBA4AIAJNAK0HmgAYBnYAFwJNAK0FQgAaBFoAXgVCABoEWgBeB4X/9gbBADQEowCfBDwAWQWIAFMEPABZBDwAWQeaABgGdgAXBNMASgQWAE0FqgCaBJgAhgWqAJoEmACGBY8AdASIAFMFewBqBIkAUgV7AGoEiQBSBTwAiAQ8AFEFCgA/BA4AEAUKAD8EDgAQBQoAPwQOABAFiACPBGYAXwb5AJ8GbwCPBRQALwQOACEEiABTBakALgSaAB8FQgAaBFoAXgVCABoEWgBeBUIAGgRaAF4FQgAEBFr/iQVCABoEWgBeBUIAGgRaAF4FQgAaBFoAXgVCABoEWgBeBUIAGgRaAF4FQgAaBFoAXgVCABoEWgBeBUIAGgRaAF4EowCfBDwAWQSjAJ8EPABZBKMAnwQ8AFkEowCfBDwAWQSj/8wEPP+LBKMAnwQ8AFkEowCfBDwAWQSjAJ8EPABZAk0ArQIaAI8CTQCfAhMAggWPAHQEiABTBY8AdASIAFMFjwB0BIgAUwWPACsEiP+mBY8AdASIAFMFjwB0BIgAUwWPAHQEiABTBYkAZgSfAFIFiQBmBJ8AUgWJAGYEnwBSBYkAZgSfAFIFiQBmBJ8AUgV0AIYEiAB7BXQAhgSIAHsFpQCGBPIAewWlAIYE8gB7BaUAhgTyAHsFpQCGBPIAewWlAIYE8gB7BQMAEwQOABAFAwATBA4AEAUDABMEDgAQBKYAUwSmAFMFKACfBG4AjwWwAJ8ElwCGBOoANQP1ACMFFAAvBA4AIQWIAI8EZgBfBYgAjwRmAF8EdQCfA1oAhQeaABgGdgAXBiYAIATE/84EiAB9BQf/1wUH/9cEdf/3A1r/6QU8/90ERP/MBaoAmgSYAIYFsACfBJcAhgcCAJ8GAwCPBakALgSaAB8FAwATBA4AIAUUAC8EDgAhBGAAYAShABYGgQCyAAAAAAIlAJoAAAABAAEBAQEBAAwA+Aj/AAgACP/+AAkACf/9AAoACv/9AAsAC//9AAwADP/9AA0ADf/8AA4ADv/8AA8AD//8ABAAEP/8ABEAEf/7ABIAEv/7ABMAE//7ABQAFP/7ABUAFP/6ABYAFf/6ABcAFv/6ABgAF//6ABkAGP/5ABoAGf/5ABsAGv/5ABwAG//5AB0AHP/4AB4AHf/4AB8AHv/4ACAAH//4ACEAIP/3ACIAIf/3ACMAIv/3ACQAI//3ACUAJP/2ACYAJf/2ACcAJv/2ACgAJ//2ACkAJ//1ACoAKP/1ACsAKf/1ACwAKv/1AC0AK//0AC4ALP/0AC8ALf/0ADAALv/0ADEAL//zADIAMP/zADMAMf/zADQAMv/zADUAM//yADYANP/yADcANf/yADgANv/yADkAN//xADoAOP/xADsAOf/xADwAOv/xAD0AOv/wAD4AO//wAD8APP/wAEAAPf/wAEEAPv/vAEIAP//vAEMAQP/vAEQAQf/vAEUAQv/uAEYAQ//uAEcARP/uAEgARf/uAEkARv/tAEoAR//tAEsASP/tAEwASf/tAE0ASv/sAE4AS//sAE8ATP/sAFAATf/sAFEATf/rAFIATv/rAFMAT//rAFQAUP/rAFUAUf/qAFYAUv/qAFcAU//qAFgAVP/qAFkAVf/pAFoAVv/pAFsAV//pAFwAWP/pAF0AWf/oAF4AWv/oAF8AW//oAGAAXP/oAGEAXf/nAGIAXv/nAGMAX//nAGQAYP/nAGUAYP/mAGYAYf/mAGcAYv/mAGgAY//mAGkAZP/lAGoAZf/lAGsAZv/lAGwAZ//lAG0AaP/kAG4Aaf/kAG8Aav/kAHAAa//kAHEAbP/jAHIAbf/jAHMAbv/jAHQAb//jAHUAcP/iAHYAcf/iAHcAcv/iAHgAc//iAHkAc//hAHoAdP/hAHsAdf/hAHwAdv/hAH0Ad//gAH4AeP/gAH8Aef/gAIAAev/gAIEAe//fAIIAfP/fAIMAff/fAIQAfv/fAIUAf//eAIYAgP/eAIcAgf/eAIgAgv/eAIkAg//dAIoAhP/dAIsAhf/dAIwAhv/dAI0Ahv/cAI4Ah//cAI8AiP/cAJAAif/cAJEAiv/bAJIAi//bAJMAjP/bAJQAjf/bAJUAjv/aAJYAj//aAJcAkP/aAJgAkf/aAJkAkv/ZAJoAk//ZAJsAlP/ZAJwAlf/ZAJ0Alv/YAJ4Al//YAJ8AmP/YAKAAmf/YAKEAmf/XAKIAmv/XAKMAm//XAKQAnP/XAKUAnf/WAKYAnv/WAKcAn//WAKgAoP/WAKkAof/VAKoAov/VAKsAo//VAKwApP/VAK0Apf/UAK4Apv/UAK8Ap//UALAAqP/UALEAqf/TALIAqv/TALMAq//TALQArP/TALUArP/SALYArf/SALcArv/SALgAr//SALkAsP/RALoAsf/RALsAsv/RALwAs//RAL0AtP/QAL4Atf/QAL8Atv/QAMAAt//QAMEAuP/PAMIAuf/PAMMAuv/PAMQAu//PAMUAvP/OAMYAvf/OAMcAvv/OAMgAv//OAMkAv//NAMoAwP/NAMsAwf/NAMwAwv/NAM0Aw//MAM4AxP/MAM8Axf/MANAAxv/MANEAx//LANIAyP/LANMAyf/LANQAyv/LANUAy//KANYAzP/KANcAzf/KANgAzv/KANkAz//JANoA0P/JANsA0f/JANwA0v/JAN0A0v/IAN4A0//IAN8A1P/IAOAA1f/IAOEA1v/HAOIA1//HAOMA2P/HAOQA2f/HAOUA2v/GAOYA2//GAOcA3P/GAOgA3f/GAOkA3v/FAOoA3//FAOsA4P/FAOwA4f/FAO0A4v/EAO4A4//EAO8A5P/EAPAA5f/EAPEA5f/DAPIA5v/DAPMA5//DAPQA6P/DAPUA6f/CAPYA6v/CAPcA6//CAPgA7P/CAPkA7f/BAPoA7v/BAPsA7//BAPwA8P/BAP0A8f/AAP4A8v/AAP8A8//AAAAAAwAAAAMAAAiEAAEAAAAAABwAAwABAAACJgAGAgoAAAAAAQAAAQAAAAAAAAAAAAAAAAAAAAEAAgAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAMEGwAEAAUABgAHAAgACQAKAAsADAANAA4ADwAQABEAEgATABQAFQAWABcAGAAZABoAGwAcAB0AHgAfACAAIQAiACMAJAAlACYAJwAoACkAKgArACwALQAuAC8AMAAxADIAMwA0ADUANgA3ADgAOQA6ADsAPAA9AD4APwBAAEEAQgBDAEQARQBGAEcASABJAEoASwBMAE0ATgBPAFAAUQBSAFMAVABVAFYAVwBYAFkAWgBbAFwAXQBeAF8AYAAAAfUB9gH4AfoCAQIGAgoCDQIMAg4CEAIPAhECEwIVAhQCFgIXAhkCGAIaAhsCHAIeAh0CHwIhAiACIwIiAiQCJQFsAG8AYgBjAGcBbgB1AIMAbQBpAX0AcwBoAYsAfwCBAYgAcAGMAY0AZQB0AYMBhQGEAMEBiQBqAHkAtQCEAIcAfgBhAGwBhwCTAYoArQBrAHoBcAADAfEB9AIFAJAAkQFiAWMBaQFqAWUBZgCGAY4CJwKWAXQBeQFyAXMBkgNQAW0AdgFnAWsBcQHzAfsB8gH8AfkB/gH/AgAB/QIDAgQAAAICAggCCQIHAIoAmgCgAG4AnACdAJ4AdwChAJ8AmwAEBl4AAADqAIAABgBqAAAAAgANACEAfgCgAKwArQC/AMYAzwDmAO8A/gEPAREBJQEnATABOAFAAVMBXwFnAX4BfwGSAaEBsAHwAfsB/wIZAhsCNwJZArwCxwLJAt0C8wMBAwMDCQMPAyMDigOMA5IDoQOwA7kDyQPOA9ID1gQlBC8ERQRPBGIEbwR5BIYEzgTXBOEE9QUBBRAFEx4BHj8ehR7xHvMe+R9NIAsgFSAeICIgJiAwIDMgOiA8IEQgdCB/IKQgpyCsIQUhEyEWISIhJiEuIV4iAiIGIg8iEiIaIh4iKyJIImAiZSXK7gL2w/sE/v///f//AAAAAAACAA0AIAAiAKAAoQCtAK4AwADHANAA5wDwAP8BEAESASYBKAExATkBQQFUAWABaAF/AZIBoAGvAfAB+gH8AhgCGgI3AlkCvALGAskC2ALzAwADAwMJAw8DIwOEA4wDjgOTA6MDsQO6A8oD0QPWBAAEJgQwBEYEUARjBHAEegSIBM8E2ATiBPYFAgURHgAePh6AHqAe8h70H00gACATIBcgICAlIDAgMiA5IDwgRCB0IH8goyCnIKshBSETIRYhIiEmIS4hWyICIgYiDyIRIhoiHiIrIkgiYCJkJcruAfbD+wH+///8//8AAQQY//UAAP/iAAD/wAAA/78AAAExAAABLAAAASgAAAEmAAABJAAAASIAAAEcAAABHgAA/wH+9P7nAWEAAAChAGQAZv5h/kAAlv3U/aX9xP2v/aP9ov2d/Zj9hQAA/3D/bwAAAAD9BQAA/1D8+fz2AAD8tQAA/K0AAPyiAAD8nAAA/p4AAP6bAAD8RQAA5VXlFeTF5PjkWeT25ArhVgAA4U3hTOFK4UHjG+E54xPhMOEB4PcAAODRAADgdeBo4GbgW9+P4FDgJN+B3qffdd90323fat9e30LfK98o28QTjgrOAAAClAGYAAEAAAAAAAAA5AAAAOQAAADiAAAA4AAAAOoAAAEUAAABLgAAAS4AAAEuAAABOgAAAVwAAAFoAAAAAAAAAAABYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFEAAAAAAFMAWgAAAGAAAAAAAAAAZgAAAHgAAACCAAAAioAAAI6AAACxAAAAtQAAALoAAAAAAAAAAAAAAAAAAAAAALcAAAAAAAAAAAAAAAAAAAAAAAAAAACzAAAAswAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAqYAAAAAAAAAAwQbAeoB6wHxAfIB8wH0AfUB9gB/Ae0CAQICAgMCBAIFAgYAgACBAgcCCAIJAgoCCwCCAIMCDAINAg4CDwIQAhEAhACFAhwCHQIeAh8CIAIhAIYAhwIiAiMCJAIlAiYAiAHsA/AAiQHuAIoCVQJWAlcCWAJZAloAiwCMAI0CYwJkAmUCZgJnAmgCaQCOAI8CagJrAmwCbQJuAm8AkACRAn4CfwKCAoMChAKFAe8B8ACSAfcCEgCpAKoC+ACrAvkC+gL7AKwArQMCAwMDBACuAwUDBgCvAwcDCACwAwkAsQMKALIDCwMMALMDDQC0ALUDDgMPAxADEQMSAxMDFAMVAL8DFwMYAMADFgDBAMIAwwDEAMUAxgDHAxkAyADJA1oDHwDNAyAAzgMhAyIDIwMkAM8A0ADRAyYDWwMnANIDKADTAykDKgDUAysA1QDWANcDLAMlANgDLQMuAy8DMAMxAzIDMwDZANoDNAM1AOUA5gDnAOgDNgDpAOoA6wM3AOwA7QDuAO8DOADwAzkDOgDxAzsA8gM8A1wDPQD9Az4A/gM/A0ADQQNCAP8BAAEBA0MDXQNEAQIBAwEEBAYDXgNfARIBEwEUARUDYANhA2MDYgEjASQECwQMBAUBJQEmAScBKAEpBAcECAEqASsEAAQBA2QDZQPyA/MBLAEtBAkECgEuAS8D9AP1ATABMQEyATMBNAE1A2YDZwP2A/cDaANpBBMEFAP4A/kBNgE3A/oD+wE4ATkBOgQEATsBPAQCBAMDagNrA2wBPQE+BBEEEgE/AUAEDQQOA/wD/QQPBBABQQN3A3YDeAN5A3oDewN8AUIBQwP+A/8DkQOSAUQBRQOTA5QEFQQWAUYDlQQXA5YDlwFiAWMEGQQYAXcD8QF5AZIDUANYA1kABAZeAAAA6gCAAAYAagAAAAIADQAhAH4AoACsAK0AvwDGAM8A5gDvAP4BDwERASUBJwEwATgBQAFTAV8BZwF+AX8BkgGhAbAB8AH7Af8CGQIbAjcCWQK8AscCyQLdAvMDAQMDAwkDDwMjA4oDjAOSA6EDsAO5A8kDzgPSA9YEJQQvBEUETwRiBG8EeQSGBM4E1wThBPUFAQUQBRMeAR4/HoUe8R7zHvkfTSALIBUgHiAiICYgMCAzIDogPCBEIHQgfyCkIKcgrCEFIRMhFiEiISYhLiFeIgIiBiIPIhIiGiIeIisiSCJgImUlyu4C9sP7BP7///3//wAAAAAAAgANACAAIgCgAKEArQCuAMAAxwDQAOcA8AD/ARABEgEmASgBMQE5AUEBVAFgAWgBfwGSAaABrwHwAfoB/AIYAhoCNwJZArwCxgLJAtgC8wMAAwMDCQMPAyMDhAOMA44DkwOjA7EDugPKA9ED1gQABCYEMARGBFAEYwRwBHoEiATPBNgE4gT2BQIFER4AHj4egB6gHvIe9B9NIAAgEyAXICAgJSAwIDIgOSA8IEQgdCB/IKMgpyCrIQUhEyEWISIhJiEuIVsiAiIGIg8iESIaIh4iKyJIImAiZCXK7gH2w/sB/v///P//AAEEGP/1AAD/4gAA/8AAAP+/AAABMQAAASwAAAEoAAABJgAAASQAAAEiAAABHAAAAR4AAP8B/vT+5wFhAAAAoQBkAGb+Yf5AAJb91P2l/cT9r/2j/aL9nf2Y/YUAAP9w/28AAAAA/QUAAP9Q/Pn89gAA/LUAAPytAAD8ogAA/JwAAP6eAAD+mwAA/EUAAOVV5RXkxeT45Fnk9uQK4VYAAOFN4UzhSuFB4xvhOeMT4TDhAeD3AADg0QAA4HXgaOBm4Fvfj+BQ4CTfgd6n33XfdN9t32rfXt9C3yvfKNvEE44KzgAAApQBmAABAAAAAAAAAOQAAADkAAAA4gAAAOAAAADqAAABFAAAAS4AAAEuAAABLgAAAToAAAFcAAABaAAAAAAAAAAAAWAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABRAAAAAABTAFoAAABgAAAAAAAAAGYAAAB4AAAAggAAAIqAAACOgAAAsQAAALUAAAC6AAAAAAAAAAAAAAAAAAAAAAC3AAAAAAAAAAAAAAAAAAAAAAAAAAAAswAAALMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKmAAAAAAAAAAMEGwHqAesB8QHyAfMB9AH1AfYAfwHtAgECAgIDAgQCBQIGAIAAgQIHAggCCQIKAgsAggCDAgwCDQIOAg8CEAIRAIQAhQIcAh0CHgIfAiACIQCGAIcCIgIjAiQCJQImAIgB7APwAIkB7gCKAlUCVgJXAlgCWQJaAIsAjACNAmMCZAJlAmYCZwJoAmkAjgCPAmoCawJsAm0CbgJvAJAAkQJ+An8CggKDAoQChQHvAfAAkgH3AhIAqQCqAvgAqwL5AvoC+wCsAK0DAgMDAwQArgMFAwYArwMHAwgAsAMJALEDCgCyAwsDDACzAw0AtAC1Aw4DDwMQAxEDEgMTAxQDFQC/AxcDGADAAxYAwQDCAMMAxADFAMYAxwMZAMgAyQNaAx8AzQMgAM4DIQMiAyMDJADPANAA0QMmA1sDJwDSAygA0wMpAyoA1AMrANUA1gDXAywDJQDYAy0DLgMvAzADMQMyAzMA2QDaAzQDNQDlAOYA5wDoAzYA6QDqAOsDNwDsAO0A7gDvAzgA8AM5AzoA8QM7APIDPANcAz0A/QM+AP4DPwNAA0EDQgD/AQABAQNDA10DRAECAQMBBAQGA14DXwESARMBFAEVA2ADYQNjA2IBIwEkBAsEDAQFASUBJgEnASgBKQQHBAgBKgErBAAEAQNkA2UD8gPzASwBLQQJBAoBLgEvA/QD9QEwATEBMgEzATQBNQNmA2cD9gP3A2gDaQQTBBQD+AP5ATYBNwP6A/sBOAE5AToEBAE7ATwEAgQDA2oDawNsAT0BPgQRBBIBPwFABA0EDgP8A/0EDwQQAUEDdwN2A3gDeQN6A3sDfAFCAUMD/gP/A5EDkgFEAUUDkwOUBBUEFgFGA5UEFwOWA5cBYgFjBBkEGAF3A/EBeQGSA1ADWANZAAAAAgBSA/wCPwYYAAQACQAAAQMjETMFAyMRMwEBOHevAT44d68Fj/5tAhyJ/m0CHAAAAgA8AAAEmAWwABsAHwAAASMDIxMjNSETIzUhEzMDMxMzAzMVIwMzFSMDIwMzEyMCq+FMp0znAQU68wERTqdO4E6oTtDuOt37TKd34TrhAZr+ZgGangE5nwGg/mABoP5gn/7Hnv5mAjgBOQAAAQBk/y0EJgabACsAAAE0JicuATU0Njc1MxUeARUjNCYjIgYVFBYXHgEVFAYHFSM1LgE1MxQWMzI2AzNshdfPx7Cgr73ybmRoZGiO18rPuZ+25fOJanF4AXxXbS9JxrOq0RXa3Brty4CPa15YaTJNw7KwyxPDwhPb3pF3agAAAAAFAGT/6wWJBcUADQAbACkANwA7AAATNDYzMhYdARQGIyImNTMUFjMyNj0BNCYjIgYVATQ2MzIWHQEUBiMiJjUzFBYzMjY9ATQmIyIGFQUnARdkopKToqKRk6OpSEVDRkdEREcCE6ORkqOikZKkqUpDR0NIRERH/gV9Asd9BJiDqqqDTYOoqYJCV1dCTUJZWUL8zYKqqoJOg6mpg0FZVUVOQVlZQfhIBHJIAAAAAwA+/+sE+AXFACAAKwA4AAATNDY3LgE1NDYzMhYVFAYPAQE+ATUzFAYHFyEnDgEjIiYFMjY3AQcOARUUFgMUFhc3PgE1NCYjIgY+hYtLRsqzosRlYGQBMSksxUhLyf7nUVO4at79AeJAdzj+uB5KLnwMMDFyOiZURktOAYl6rVxhl1GvwbyKZJZGSP6WQJNWi+Jc7V87OeIgIyQBgxY5ZjFmfgOrMWQ/TCZPMjdUYQABAFIEBAELBhgABAAAAQMjETMBC0J3uQWb/mkCFAAAAAEAgP4xAqIGXwAPAAATEAA3FwYCERUQEhcHJgARgAE1vTCJvLuKML3+ywJQAZECIV2OaP5H/qIU/qL+R2+HXgIfAZIAAQAR/jECOwZfAA8AAAEQAAcnNhIRNRACJzcWABECO/7EvTGHvsKDMb0BPAJA/nP93F6HaAG/AV8UAVoBwWqIXf3Z/nUAAAAAAQAbAk8DYgWwAA4AAAElNwUDMwMlFwUTBwsBJwFF/tY1ASgNrg8BIzX+0cONsa6PA8xZqXUBV/6ic6tY/vZpAR/+6WYAAAAAAQBEAJIEKgS2AAsAAAEhFSERIxEhNSERMwKuAXz+hOz+ggF+7AMh3v5PAbHeAZUAAQAn/qsBZADrAAkAACUUBgcnPgE9ATMBY2hVfyws5Tdn3ElOSJNbvAAAAAABAEcCCQJUAs0AAwAAASE1IQJU/fMCDQIJxAAAAQCZAAABiwDpAAMAACEjNTMBi/Ly6QAAAQAC/4MC/gWwAAMAABcjATPBvwI9v30GLQAAAAIAaP/rBCMFxQANABsAAAEQAiMiAhkBEBIzMhIRJzQmIyIGFREUFjMyNjUEI/vh4f784eH983Z1dXV3dXV0AjH+3v7cASUBIQFNASEBJv7a/t8ltqmptv5ruKmouQAAAAEAygAAAt4FsAAFAAAhIxEhNSUC3vP+3wIUBKCfcQAAAQBRAAAENAXFABgAACkBNQE+ATU0JiMiBhUjNAAzMhYVFAYHASEENPw5Adp2VnBjgnrzAQXq1vCKl/63ApinAgWCn09kgo2BygEH5L+A3qb+pAAAAQBP/+sEFgXFACgAAAEzMjY1NCYjIgYVIzQkMzIWFRQGBx4BFRQEIyIkNTMUFjMyNjU0JisBAYapeWVub2V78wECztn6b2x/cv7x2s7+8POAbnOAdX+pA0ZzbWtxb16v4dTLX6sxLbB2zOHUx2N2eHJ+cgACADgAAARZBbAACgAPAAABMxUjESMRIScBMwEhEScHA6G4uPL9jwYCb/r9hwGHAxcCB8T+vQFDlQPY/FcCVgExAAAAAAEAgf/rBCYFsAAeAAAbASEVIQM+ATc2EhUUAiMiJDU3FBYzMjY1NCYjIgYHnFQDAf3JLCxvSNHk8OvE/vrremVzdXhzZl4XAosDJdL+kyApAgP+/Ora/vTRyQhsdJ2FhqM/PwACAHT/6wRGBcUAGgAnAAABMhYXBy4BIyIGHQE+ATMyEhUUAiMiABkBEAATIgYHFRQWMzI2NTQmAqhQjTouOWdIlK89nWDH3//Y4v7nATy0XX4jkndtd34FxSAcvBgb3cMHODv+89fk/ucBMgEeARYBIgFS/UpAOWi9xLOIhaIAAAEARQAABDMFsAAMAAABAAIDByM3GgE3ITUhBDP/AKsoD/MPJ+bO/P0D7gTt/tP+Mv6ompoBUAIP9MMAAAMAYf/rBCoFxQAXACMALwAAARQGBx4BFRQEIyIkNTQ2Ny4BNTQ2MzIWAzQmIyIGFRQWMzI2AzQmIyIGFRQWMzI2BAV1anqK/vnc3/75iHxqdPHNy/XNh2xug4JxbYQmcF1fbG1gXW4EMHGmLi+1es/T0897tDAtpnHGz8/8o22Eg25wfH0C/WJ5dWZldXUAAAIAUv/rBBcFxQAbACgAACUyNj0BJw4BIyICNTQAMzIAGQEQACMiJic3HgETMjY3NTQmIyIGFRQWAgOFnQMwilXV7AEKy+cBCf7c8EyeRCBAfXhdfSGAemSCdq29vSMBQUIBBPHmASL+3P7k/qv+5v7VHh64GxcB2EY7nLGvt46SpgAA//8AmQAAAYsEOgAmABAAAAAHABAAAANR//8AUf6rAY4EOgAnABD//QNRAAYADioAAAEAPwCkA4QETgAJAAABBxUXBRUBNQEVAUIREQJC/LsDRQJ9BAQE2vMBdcEBdPMAAAIAkQFkA+8D1gADAAcAAAEhNSERITUhA+/8ogNe/KIDXgMMyv2OyQABAIAApQPgBE4ACQAAEzUBFQE1JT8BJ4ADYPygAl0QAREDX+/+jMH+jO/iBAMFAAACACkAAAOgBcUAGQAdAAABPgE3PgE1NCYjIgYVIz4BMzIWFRQGBw4BFRMjNTMBVAE+cFBaZ2NVcvMC8sbW55FyOhwE+PgBnJJ2X06HVmNpWVu5xtPBgdVcM1hY/mTpAAACAEr+OwbTBZAAMwBDAAABBgIjIiYnDgEjIiY3GgEzMhYXBzMDBhYzMjY3EgAhIAADAgAhMjY3Fw4BIyAAExIAISAAAQYWMzI2NzwBNxMuASMiBgbDCeHqTGsZMIdeh44TGeSqcINSAwUzCDMseYwJEf7N/rL+yP6XDxIBRQE8WbFBJkTMZf51/mIREwHLAYMBhgGR+/4KOkc9YSgCLRgzHHl5Afvc/sxST1JN68gBBgEwMzcE/b1nStqtAXcBkv5N/o3+jP5jKCGCKy4B6gG5AbECAf4c/fSIhzBACA8NAgMJC8kAAAAAAgAaAAAFKAWwAAcACwAAASEDIwEzASMBIQMjA7r9z3j3AhfnAhD3/ZsBrNQDAVz+pAWw+lACHwJrAAAAAwCfAAAEvAWwAA8AGAAhAAAzESEyBBUUBgcVHgEVFAQjAREhMjY1NCYjJSEyNjU0JisBnwHo9QEJb2OBiP798f7KATZ+hHB6/rIBD3N+hIf1BbDDymSZJgMcvoHR0QKW/ix0bHZ+tWhlbmcAAQB0/+sE2AXFABsAAAEGACMgABkBEAAhIAAXIy4BIyIGFREUFjMyNjcE1xb+5f3+/f7OATUBAAECARUY8xOPmpirqZqXkRMB2Ob++QFRAREBFQEPAVT+/fCYmOi2/um555SXAAIAnwAABO4FsAAJABMAADMRISAAERUQACEDETMyNj0BNCYjnwHKASoBW/6i/szKw9nNys8FsP6m/uLB/uD+qQTt+9Xqy8PN5gAAAAABAJ8AAAR1BbAACwAAASERIRUhESEVIREhBA/9gwLj/CoDz/0kAn0Cj/4zwgWww/5lAAAAAQCfAAAEcgWwAAkAAAEhESMRIRUhESEEDP2G8wPT/SACegJt/ZMFsMP+QwABAHT/6wTiBcUAHwAAJQYEIyAAGQEQACEgBBcjLgEjIgYVERQWMzI2NxEhNSEE4jz+/NP+8/6yATwBAgEGAQsf7xiPlpq2xaR0iiL+3gIVvlKBAUgBDQEwAQ0BSPTagIvesv7OtN80JQEktgABAJ8AAAUQBbAACwAAISMRIREjETMRIREzBRDy/XTz8wKM8gJt/ZMFsP2AAoAAAAABAK0AAAGgBbAAAwAAISMRMwGg8/MFsAABADr/6wPmBbAADwAAATMRFAQjIiY1MxQWMzI2NQLz8/8A0N/983V0ZncFsPv10OrX239xgnYAAAEAnwAABS8FsAAMAAABIxEjETMRMwEhCQEhAjqo8/OLAckBIP30AjX+1wJ2/YoFsP2XAmn9Sf0HAAAAAAEAnwAABC8FsAAFAAAlIRUhETMBkgKd/HDzwsIFsAAAAQCfAAAGYgWwABAAAAkCIREjERMjASMBIxMRIxEB2gGmAacBO/MZA/5Mo/5OAxnzBbD7mARo+lAB8AKA+5AEbf2D/hAFsAAAAQCfAAAFEAWwAAsAACEjAQcRIxEzATcRMwUQ8v13A/PzAokD8gQrAfvWBbD71gEEKQAAAAIAdP/rBRsFxQANABsAAAEQACEgABkBEAAhIAARJzQmIyIGFREUFjMyNjUFG/61/vH+9v69AUIBCgEPAUzzwKijt7ijqb4CVf7z/qMBXgEMAQYBCwFf/qH+9QK16+q2/vi46+u4AAAAAgCfAAAE2gWwAAoAEwAAAREjESEyBBUUBCMlITI2NTQmIyEBkvMCOfYBDP709v66AUaKhYWK/roCKP3YBbD1z9Hzw45xcZIAAgB0/wkFJwXFABMAIQAAARQGBxcHJQ4BIyAAGQEQACEgABEnNCYjIgYVERQWMzI2NQUbdGvroP7tLFgv/vb+vQFCAQoBDwFM88Coo7e4o6m+AlWZ+1fSj/oLDQFeAQwBBgELAV/+of71ArXr6rb++Ljr67gAAAAAAgCfAAAE8AWwABoAIwAAAREjESEyFhUUBgceAR0BFBYXFSMuAT0BNCYjJSEyNjU0JiMhAZLzAiX3/Ht5fmkfJ/kpFntx/sYBGpWDfon+1QJc/aQFsNXQdp4yKayGeUF0Ihoii0Z1c4HDbnVxegAAAAEAU//rBKAFxQAlAAABNCYnJiQ1NCQzMgAVIzQmIyIGFRQWFx4BFRQEIyIkNTMUFjMyNgOtg676/v4BH+r0ASLzlo+HjZe47+/+4fHp/qzztJaJlAF2XHMuQs6us+H/AL1yiXNdVWsyQdiwudTu24eBawAAAQA1AAAEtQWwAAcAAAEhESMRITUhBLX+OfP+OgSABO37EwTtwwAAAAEAhv/rBPEFsAARAAABERQEISIkNREzERQWMzI2NREE8f7J/vz//s/zqZSZrwWw/DD3/v/2A9D8MJyXl5wD0AABABoAAAUQBbAACQAAARczNwEhASMBIQJ4HAMbAVsBA/355/34AQQBfW1rBDX6UAWwAAAAAQBEAAAGuwWwABMAAAE1MzUBMwEVPwETMwEjASMBIwEzAgMDARnAARwDAc7u/r7c/uQD/uTc/r7uAYQCAQQp+9QDAQUEKfpQBBz75AWwAAABAC8AAATqBbAACwAACQEhCQEhCQEhCQEhAoYBNAEf/kEB0P7d/sP+xP7hAcn+QQEdA5YCGv0u/SICI/3dAt4C0gAAAAEAEwAABO8FsAAIAAAJASEBESMRASECgAFgAQ/+B/L+DwEPAuwCxPxN/gMCDAOkAAEAWAAABHEFsAAJAAAlIRUhNQEhNSEVAXkC+PvnAtv9KwP6wsKYBFXDkgAAAQCE/rwCHAaOAAcAAAEjETMVIREhAhylpf5oAZgF0PmpvQfSAAAAAAEAFf+DA2EFsAADAAATMwEjFewCYOwFsPnTAAABAAz+vAGmBo4ABwAAEyERITUzESMMAZr+ZqenBo74Lr0GVwABADUC2QM1BbAACQAAASMBMwEjAycjBwEDzgErqwEqzaUNBA0C2QLX/SkBnTw8AAABAAP/QQOYAAAAAwAABSE1IQOY/GsDlb+/AAAAAQBKBLwCFwXGAAMAAAEjASECF8T+9wEUBLwBCgAAAAACAF7/7AQBBE4AHwAqAAAhLgEnDgEjIiY1NDY7ATU0JiMiBhUjNDYzMhYVERQWFyUyNjc1IyIGFRQWAwsLDwQ3nGKns/TlsWRgWGTz9cnB5xEV/exUhSK1bXVOIkQkRlirmqCsX1ZfT0CIxL23/h9FeDyvSDa4Z0k/RwAAAgCA/+wENgYYABIAIAAAARQCIyImJwcjETMRFz4BMzISESM0JiMiBgcRHgEzMjY1BDbZzWaRMxTS8wMxiV7P2fNxgVJsICFtUoFvAfny/uVPT4oGGP2sAURH/sn+963MR0H+N0BErZoAAAAAAQBR/+wD9wROABsAACUyNjUzFAQjIgI9ATQSMzIWFSM0JiMiBh0BFBYCO1t85f7/uPT5+fPH8+V1Yotsaq5nUaDaAS7xI/ABMOG3W3rDmiOdwAAAAgBT/+wEAwYYABIAIAAAExASMzIWFzcRMxEjJw4BIyICNTMUFjMyNjcRLgEjIgYVU9rNWocyA/PSFDWPYcva83F/TmkjI2lMf3MCDgEIAThEQQECTvnohExMARzxma5APgHYPULOqwACAFn/7AP4BE8AFQAdAAAFIgA9ATQAFzISHQEhHgEzMjY3Fw4BAyIGByE1NCYCUOr+8wEL0ODk/VYKiX5kiUJHPcKiW3QSAbRnFAEo8CjxATIB/vvjj4eiLy2mNUMDn411GWmAAAAAAAEAMQAAAuAGLQAXAAAzESM1MzU0NjMyFhcHLgEjIgYdATMVIxHWpaW/syRHLRgWLx1RTNzcA4a0fra/Cwq8BAZYVn60/HoAAAIAVP5MBAgETgAeACwAABMQEjMyFhc3MxEUBCMiJic3HgEzMjY9AScOASMiAjUzFBYzMjY3ES4BIyIGFVTezWKPNBTQ/wDsVbdPNEOPTIR+AzKIW8ve83SAUGkhImlNgHYCDgEHATlQTYn73djzLSqwISaNf1MBQEABHfCYrz8+Ado9Qc+qAAABAH0AAAQMBhgAFAAAARc+ATMyFhURIxE0JiMiBgcRIxEzAXADNZdgsL3zZGhJbibz8wOzAUtR1Of9bQKVgnA6NfzoBhgAAAACAJAAAAGDBhgAAwAHAAAhIxEzESM1MwGD8/Pz8wQ6AQnVAAAC/7D+SwGOBhgADwATAAABERQGIyImJzceATMyNjUREyM1MwGOt6klOCEOEjEVP0bt8/MEOvuHt78ICcIFB1NcBHkBDNIAAAABAIEAAAQ1BhgADAAAASMRIxEzETMBIQkBIQHib/LyaQEPARz+nwGP/uYB2f4nBhj8hAGe/hH9tQAAAAABAJAAAAGDBhgAAwAAISMRMwGD8/MGGAABAIAAAAZ1BE4AJgAAARczPgEzMhYXPgEzMhYVESMRNCYjIgYHFBYVESMRNCYjIgYHESMRAV4NAjSda2yVJzOhcKe5815gUGkZAvNgX0tmHvMEOolMUV5iW2Xb5/10Ao2NbVJJDxYK/UMCjYdzODX85gQ6AAEAfgAABAsETgAUAAABHwE+ATMyFhURIxE0JiMiBgcRIxEBXA4CNZ5mrbnzY2lJbSXzBDqXAVJayd39WAKmfWQ+OPzvBDoAAAIAU//sBDQETgANABsAABM0ADMyAB0BFAAjIgA1MxQWMzI2PQE0JiMiBhVTAQTr7QEF/vzs7f7883qEgnx8hIJ6Aif2ATH+0PcV+P7SAS74osLDoRWexsaeAAAAAgCA/mAENAROABIAIAAAARQCIyImJwcRIxEzFz4BMzISESM0JiMiBgcRHgEzMjY1BDTayl6KMgPz2RA0j2HM2/J6f01pICBoUH94Afnx/uQ/PwH99wXagkpM/sj++KnQQDv+Fzo7s5gAAAAAAgBT/mAD/AROABIAIAAAExASMzIWFzczESMRJw4BIyICNTMUFjMyNjcRLgEjIgYVU9rNXos0E9LzAzGEWcva83F/S2YiI2VJf3MCDgEIAThJSH36JgIDATw8ARzxmbI6OAH4NzzRrAABAIAAAALDBE4AEAAAASciBgcRIxEzFzM+ATMyFhcCpnNIXhrz3g8DKX5VGDAPA1wEOjf9EQQ6mFFbBwUAAAAAAQBR/+wDzwROACUAAAE0JicuATU0NjMyFhUjNCYjIgYVFBYXHgEVFAYjIiY1Mx4BMzI2AuBdhsbD47/K5/JkW1paVIjQwe3J1/HrBH5eYGQBJjlIHSqUhIu9wZhEX046OkEbK5WHlbLWk2BTRgAAAAEAGf/sAnAFQQAXAAABETMVIxEUFjMyNjcXDgEjIiY1ESM1MxEBocPDMSsZLBQaIV4xg4+VlQVB/vm0/apFNgcGshAUmasCVrQBBwABAHv/7AQKBDoAFAAAJScOASMiJjURMxEUFjMyNjcRMxEjAyICNJhnssDyWl9ZdSPz2JABUVTY7wKH/XeRbj48Aw77xgAAAAABACAAAAP1BDoACQAAARczNxMzASMBMwH4FAMU1/v+gNP+fvsBbl9fAsz7xgQ6AAABACUAAAXQBDoAFQAAARczNxMzExczNxMzASMDJyMHAyMBMwGzCgMN1bHWDgMPnun+2MfPFwMWzsf+2OkBdkhGAsb9OlNaAr/7xgKbaGf9ZAQ6AAABACEAAAPtBDoACwAAARMhCQEhCwEhCQEhAgTIARf+rAFe/uzR0f7qAV7+rAEUAscBc/3p/d0BfP6EAiMCFwAAAQAQ/ksD/AQ6ABUAAAEXMxMhAQ4BIyImJzceATMyNj8BASEB5xkD7wEK/kAqmpIeRSAbDi4NRUAlKP53AQkBsnEC+fsicaAMCLwBBEBVYgQtAAAAAQBVAAADxAQ6AAkAACUhFSE1ASE1IRUBggJC/JECIv3pA0rCwp8C18SaAAABADj+mAKRBj0AHgAAAS4BPQE0JiM1MjY9ATQ2NxcOAR0BFAYHHgEdARQWFwJhx6FdZGRdoccwZE9UWVlUT2T+mDjsrstqcrJybMuu6ziMIqR/y2qeLjCeaMt/pCIAAAABAK7+8gFVBbAAAwAAASMRMwFVp6f+8ga+AAAAAQAb/pgCdQY9AB4AABc+AT0BNDY3LgE9ATQmJzceAR0BFBYzFSIGHQEUBgcbY1FXX19XUWMwxqJcZmZcosbbIqR/y2udLSyebct/pCKMOOqvy2xysnJqy6/rOAABAHUBgwTcAy8AGQAAARQGIyImJy4BIyIGFSc0NjMyFhceATMyNjUE3K2IWY1VOVUvPVOqqolXlFI3VDA8VQLumtE/SS4sZUoWmcpCRTAqa0wAAAACAI/+igGCBDoAAwAHAAABIxEzESM1MwGC8/Pz8/6KA8QBAesAAAAAAQBo/wsEDgUmACEAACUyNjUzFAYHFSM1JgI9ATQSNzUzFR4BFSM0JiMiBh0BFBYCUlt85caZyL/AwL/Ior3ldWKLbGquZ1GLzBvp6yMBH9Mj0QEhJOLfG9efW3rDmiOdwAAAAAEAUQAABGsFxQAhAAABFxQGByEHITUzPgE1JyM1Myc0NjMyFhUjNCYjIgYVFyEVAecFLCsC1gH8JgowLgWimwnkx9Pi82tXV2EJAYUCV3FTljvCwg2vYHnE7tPp17prY4F47sQAAAAAAgBd/+UFTwTxACMALwAAJQ4BIyImJwcnNy4BNTQ2Nyc3Fz4BMzIWFzcXBx4BFRQGBxcHARQWMzI2NTQmIyIGBD1OtmZntE2BjYcyMjc2kI2OTKxjYq5NkY6UNDcyMIuO/Hjsrq3s7K2v62s/QEA+hJCJTq9kZ7ZQk5CRODs8OZSRl0+0ZmOtTY2RAnu9/v69u/39AAEAGgAABL4FsAAWAAAJASEBIRUhFSEVIREjESE1ITUhNSEBIQJsAUMBD/5zART+nQFj/p3z/psBZf6bAR/+cQEQAzACgP02k4+S/s4BMpKPkwLKAAIAiP7yAW0FsAADAAcAABMRMxkBIxEziOXl5f7yAxv85QPIAvYAAAACAFr+JASMBcUAMQBDAAABFAYHHgEVFAQjIiQ1NxQWMzI2NTQmJy4BNTQ2Ny4BNTQkMzIEFSM0JiMiBhUUFhceASUuAScOARUUFhceARc+ATU0JgSMV1REQ/707Of+0fKofH2Jgr/34FZTREEBDuvzAQnzin+FgXbI+eD9zSpOJTg0eMY2RCE4O4UBx1+HKzOHY7PCx+MBfGxhT09XOUG1slyJLTOIY63K3dFnhGNPWFM1RLQpCxgOFVQ7Wlk4EBULFlQ6UV8AAAIApATkA3kFsAADAAcAAAEjNTMFIzUzA3ny8v4c8fEE5MzMzAAAAAADAFf/6wXiBcQAGwAnADMAAAEUBiMiJj0BNDYzMhYVIzQmIyIGHQEUFjMyNjUlEAAzMgAREAAjIgADEAAhIAAREAAhIAAEXq6hpLm6o6CwnFhcYGNjYFxX/Q8BUvr5AVL+rvn7/q96AZgBLgEsAZn+Z/7U/tL+aAJUnpzRsnew056cX1SIc3h2hlFihf7z/pwBZAENAQwBYv6e/vQBQQGq/lb+v/6+/lQBqwAAAgB0ArQDEQXFAB8AKgAAAS4BJw4BIyImNTQ2OwE1NCYjIgYVJzQ2MzIWFREUFhclMjY3NSMiBhUUFgJgCAoDIm1PeYCmpYk5O0NHraiPiZoLD/6HNGkTiExROQLCFS8aMDx4bHF2Mz9AMzAOaIGMiP7GNFYrgjkkaT8vLCwAAP//AFQAdAOFA5MAJgFy6N0ABwFyAVL/3QABAH8BdgPCAyUABQAAASMRITUhA8LI/YUDQwF2AQSrAAQAV//rBeIFxAALABcAMgA7AAATEAAhIAAREAAhIAATEAAzMgAREAAjIgABESMRITIWFRQGBx4BHQEUFhcVIy4BPQE0JiMnMzI2NTQmKwFXAZgBLgEsAZn+Z/7U/tL+aHoBUvr5AVL+rvn7/q8BvJcBGZqrPDw/NgcKmwkEQU6ej0VdTGOCAtkBQQGq/lb+v/6+/lQBqwFD/vP+nAFkAQ0BDAFi/p7+qP6vA1KDgTxZHx1qTDgqQBUQFk8rNklChjw4SjgAAAAAAQCHBRIDXgWwAAMAAAEhNSEDXv0pAtcFEp4AAAIAfwOwAosFxQALABcAABM0NjMyFhUUBiMiJjcUFjMyNjU0JiMiBn+Zb22Xl21vmYtINTRGRjQ1SAS4cJ2dcHGXmHA2RkU3N0lJAAACAF8AAAPzBQoACwAPAAABIRUhESMRITUhETMBITUhApwBV/6p1/6aAWbXASj8vQNDA4rH/nUBi8cBgPr2xAAAAQBtApsC1wXHABgAAAEhNQE+ATU0JiMiBhUjNDYzMhYVFAYPASEC1/2hATFCJjI3Pj++qpSOmF96iAFnApuRAQA3RCotNzsxbZGAd1Nya3QAAAAAAQBhAo8C7AXGACgAAAEyNjU0JiMiBhUjNDYzMhYVFAYHHgEVFAYjIiY1MxQWMzI2NTQmKwE1AaJCPEA/Nj6/q4WYqUY+R0qxmIq4v0Q+QkpFR3sEczQxKDQsImh4dXA4WRoYXkVyenh3LDIzLjk2gwAAAAABAHgEvAJMBcYAAwAAASEBIwE3ARX+6b0Fxv72AAAAAAEAkv5gBB8EOgAVAAABERQWMzI2NxEzESMnDgEjIiYnESMRAYRiY1lsHvPfBy50TT9gJ/IEOv2UqnU8PQMS+8ZWNjUaHf4+BdoAAAABAD4AAANwBbAACgAAIREjIiY1NBIzIRECfVPu/v/tAUYCCP/V0wEB+lAAAAEAoAJSAZIDQgADAAABIzUzAZLy8gJS8AAAAAABAG3+QQHJAAMADwAAJQceARUUBiMnMjY1NCYnNwE+C0FVpqEHP0pDVCADNgtRUWh3iSwtLSMFiwAAAAABAGQCmQGjBcUABQAAASMRIzUlAaPAfwE/ApkCf5YXAAIAdwKzAywFxQANABsAABM0NjMyFh0BFAYjIiY1MxQWMzI2PQE0JiMiBhV3uaGiubmgorqvVldUVldVVVYEdpe4uJd1mLa2mFdlZVd1VGdnVAAA//8AXACXA5kDtgAmAXMIAAAHAXMBfgAA//8AmwAABccFxAAnAckARAKYACcBdAD8AAgABwGXAqIAAAAA//8AkwAABdkFxAAnAXQBAQAIACcByQA8ApgABwHKAwQAAAAA//8AZgAABoMFxwAnAXQBwgAIACcBlwNeAAAABwHLAAYCmwAAAAIAYP52A9gEOgAZAB0AAAEOAQcOARUUFjMyNjczDgEjIiY1NDY3PgE1AzMVIwKsAj1wUlhmZVNyAvMD88TY5pBzOR4E+PgCnZN1XlGFVWNpWlu6xdLAgdZbMlhZAZ3pAAL/9gAAB1cFsAAPABMAACkBAyEDIQEhFSETIRUhEyEBIQMnB1f8fg/+Crj+3gNDA+D9ehECJP3kFAKX+u0BeRsDAVT+rAWwxf5oxf42AWcCggEAAAEATQDWA+wEhgALAAATCQE3CQEXCQEHCQFNATz+xJQBOwE8lP7EATyU/sT+xQFsAUIBQpb+vgFClv6+/r6WAUH+vwAAAwBp/6EFEAXuABkAJAAvAAABEAAhIiYnByM3LgE1ERAAITIWFzczBx4BFQEUFhcBLgEjIgYVITQmJwEeATMyNjUFEP61/vFVkkFYlIVdYQFCAQphpklRlIJSVvxLISIB+i9wRKO3AsIZGf4NKF44qb4CVf7z/qMmJpbiV+2OAQYBCwFfMS+J3Ffegv76TYM2A1woKuq2PnAy/K8dHeu4AAIAlAAABH4FsAAMABUAAAERMzIEFRQEKwERIxETETMyNjU0JiMBh/b3AQr+9vf28/P2ioSEigWw/ujvx8ju/tQFsP4l/hqJaGqLAAABAIj/7ASbBh8AJwAAISMRNDYzMhYVFAYVFAAVFAYjIiYnNx4BMzI2NTQANTQ2NTQmIyIGFQF68vLOrdh2AUTWyVGoKDEsdkBfXP67fl5AXW0EReX1tLB0yz9F/uiNt7AjG8QaJlFITQERlFbPTVFgkocAAAMANP/rBoQETgAsADcAPwAABSImJw4BIyImNTQ2OwE1NCYjIgYVJzQ2MzIWFz4BMzISHQEhHgEzMjY3Fw4BJTI2NzUjIgYVFBYBIgYHITU0JgTmh8hEPdGYuMHt685bWF5q8u/Nbqc5QKVm2uj9UAiKjmR6U0k6xvxuRZApzG94WQNCanMOAb1kFVdVS2GwnaGpR11lWUITk7hBQUBC/v7ojYufLS+lLku5SDK9YEdCTgLnjnsebH8AAAAAAgA8/+sETgXtACEAMQAAARYSHQEQACMiADU0ADMyFhc3LgEnByc3LgEnNx4BFzM3FwM0JjUuASMiBhUUFjMyNjUDcWty/tjl6P7jAQ3iUIs4AxdQOfxO2CNIJ0tRj0IB2k7YASSOaICRlIJ/lwUDef7ExVf++v6/ARXU5wESNS4CWY86jm16FCENxBVFMXtt/RsDDwQxP7KLe6zYrQAAAAMAQwCqBDcEtgADAAcACwAAASE1ISUjNTMRIzUzBDf8DAP0/oHz8/PzAkbUv9379N0AAAADAFP/dgQ0BLwAGQAkAC8AABM0ADMyFhc3MwceAR0BFAAjIiYnByM3LgE1MxQWFwEuASMiBhUhNCYnAR4BMzI2NVMBBOs2YS5IkGhdYP787DFZKkiQZmVm8x0gASoYNR6CegH8Ghr+2xMtG4J8Aif2ATETEZLTS+WSFfj+0g8Ok89J65lPgDACYAsNxp5Gdy/9qwkHw6EAAAIAh/5gBDsGGAATACEAAAEUAiMiJicHESMRMxEXPgEzMhIRIzQmIyIGBxEeATMyNjUEO9rKXooyA/PzAzGKXMzb8np/TWkgIGhQf3gB+fH+5D8/Af33B7j9sgFBRP7I/vip0EA7/hc6O7OYAAIAGAAABZYFsAATABcAAAEzFSMRIxEhESMRIzUzETMRIREzASE1IQUPh4fy/XTzhobzAozy/IICjP10BKSi+/4Cbf2TBAKiAQz+9AEM/YDSAAAAAAEAjwAAAYIEOgADAAAhIxEzAYLz8wQ6AAEAjgAABGsEOgAMAAABIxEjETMRMwEhCQEhAe9v8vJVAVABLP5cAb7+ywGs/lQEOv5QAbD9+v3MAAAAAAEAGwAABCAFsAANAAABJRUFESEVIREHNTcRMwGDAQL+/gKd/HB1dfMDYU64Tv4ZwgJfI7gjApkAAQAbAAACKAYYAAsAAAE3FQcRIxEHNTcRMwGXkZHziYnzA3s0uDT9PQJtMbgxAvMAAQCT/ksFBAWwABgAAAERFAYjIiYnNx4BMzI2PQEBBxEjETMBNxEFBLipJTkhDhE8FjxA/XgD8/MCiAMFsPoRtsAICb8FCF1WPwQdAfvkBbD74wEEHAAAAAEAfv5LBAYETgAgAAABHwE+ATMyFhURFAYjIiYnNx4BMzI2NRE0JiMiBgcRIxEBXA0DNZtkrbm4qSQ6IQ4SOxY8QGBmTGwk8wQ6kQFPV8vi/SC2wAgJxgUHVlUC3oBoNTL84AQ6AAAAAgBl/+sHVgXFABcAJQAAKQEOASMgABkBEAAhMhYXIRUhESEVIREhBTI2NxEuASMiBhURFBYHVvx1XX9E/vf+wwE7AQlGjFADhP0kAn39gwLj+1U3aTU7ZzWjr7EKCwFGAQ8BMAEOAUcMCcP+ZcP+MxQICAQ0BwnJx/7OyMoAAAADAFv/6wbyBE4AIQAvADcAABM0ADMyFhc+ATMyEh0BIR4BMzI2NxcOASMiJicOASMiADUzFBYzMjY9ATQmIyIGFQEiBgchNTQmWwED7H6/QkK1buDk/VYKiX5kikFPQMSIfsFEQr587f788nuEgnt8g4J7A+FbdBIBtWgCJ/cBMFtWVlv+++OPh6MvLp84SFlVVVkBL/iiw8ShFZ7Gxp4BZI50GWiBAAABAIsAAAKVBi0ADwAAMxE0NjMyFhcHLgEjIgYVEYu/syRHLRkXKRxRUgS4tr8LCrkFBlxW+0gAAAH/3f5LAtMGLQAjAAABIxEUBiMiJic3HgEzMjY1ESM1MzU0NjMyFhcHLgEjIgYdATMChMm3qSU5IA8ROhY7QKWlwLMkRi4ZFDEcUU3JA4b8O7e/CAm/BQhdVgPFtH62vwsKvAQGWFZ+AAAAAAIAZv/rBa8GLgAXACUAAAEQACEgABkBEAAhMhYXPgE1MxQGBx4BFSc0JiMiBhURFBYzMjY1BQ3+tf7x/vb+vQFCAQqB1FNTRrx2eiYo88Coo7e4o6m+AlX+8/6jAV4BDAEGAQsBX1dRDYZ+p8slSJ1XArXr6rb++Ljr67gAAAAAAgBS/+wEvASpABcAJQAAEzQAMzIWFz4BNTMUBgceAR0BFAAjIgA1MxQWMzI2PQE0JiMiBhVSAQTrc7NCQCuoXmkeIP787O3+/PN6hIJ8fISCegIn9gExTUgTcmuQriJCj1EV+P7SAS74osLDoRWexsaeAAABAIb/6wZLBhAAGQAAARU+ATUzFAYHERQEISIkNREzERQWMzI2NREE8V1BvKC6/sn+/P/+z/OplJmvBbDNFo6J0eAV/Zb3/v/2A9D8MJyXl5wD0AABAHv/7AUpBJQAHAAAARQGBxEjLwEOASMiJjURMxEUFjMyNjcRMxU+ATUFKX6h2BACNJhnssDyWl9ZdSPzVDAElKunDvzMkAFRVNjvAof9d5FuPjwDDosNZXMAAAH/tf5LAZMEOgAPAAABERQGIyImJzceATMyNjURAZO3qSQ5IQ8SORY7QQQ6+4e3vwgJvwUIXVYEeQAAAAIAWf/sA/gEUAAVAB0AAAEyAB0BFAAnIgI9ASEuASMiBgcnPgETMjY3IRUUFgIA6gEO/vTP4eMCqgyJfGWJQU8/xaVZdBT+S2cEUP7W8Cjy/tABAQPkj4akMC2fN0r8X4x2GWmAAAAAAQCbBOQDPAXuAAgAAAEVIycHIzUlMwM8vJaVugEIjwT8GJKSGvAAAAEAeQTkAy0F8QAIAAABNzMVBSMlNTMB0ovQ/vSd/vXOBWKPEfz6EwABAHUElQL7BbAADQAAARQGIyImNTMUFjMyNjUC+62Wl6y2Q0pJQwWwgpmZgj9MTD8AAAAAAQCaBNcBnQW2AAMAAAEhNSEBnf79AQME198AAAIAggRUAiYF3AALABcAABM0NjMyFhUUBiMiJjcUFjMyNjU0JiMiBoJ6Wlh4d1lbeW46LCs3NyssOgUWVnBwVldra1csOTgtLjo7AAABACn+UgGhADwAEwAAIQ4BFRQWMzI2NxcOASMiJjU0NjcBjFBRICcaKhYVIU03XnV6hjNcOCEjDQqOExlpYFWROwAAAAEAgATWA1EF9wATAAABFAYjIiYjIgYVJzQ2MzIWMzI2NQNRdlxJojQoNYN1XDqwNSc3BdBhhFlALiNgiVk/LwACAHoE5AObBe4AAwAHAAABIQEjAzMDIwKbAQD+1cpu8vW7Be7+9gEK/vYAAAIAq/5+Afr/uAALABcAABc0NjMyFhUUBiMiJjcUFjMyNjU0JiMiBqthSUZfXkdKYGUnHhsmJhseJ+dGWVlGRVZWRR0mJxwfJycAAAAB/NsEs/4qBf0AAwAAASMDM/4qmbbQBLMBSgAAAf02BLb+hgYBAAMAAAEzAyP9uM6+kgYB/rUA///8eQTW/0oF9wAHAKD7+QAAAAAAAf0+BOb+mQZ/AA8AAAEnPgE1NCYjNzIWFRQGBxX9UQdNPU5IB6mrVUEE5pIEHSMnIXtlW0VHCEUAAAAAAvwMBOT/NAXuAAMABwAAASMBIQEjAzP+B9D+1QEGAiLD9foE5AEK/vYBCgAB/SL+pf4w/4QAAwAAASE1If4w/vIBDv6l3wAAAQDXBPYCDQZwAAMAAAEzAyMBG/LAdgZw/oYAAAMAnQTkA44GpAADAAcACwAAASM1MwUjNTM3MwMjA47a2v3p2tp4+JWSBOTMzMz0/tcAAP//AKACUgGSA0ICBgB2AAAAAQCfAAAENwWwAAUAAAEhESMRIQQ3/VvzA5gE7fsTBbAAAAAAAgAaAAAFmAWwAAMABgAAATMBISUhAQJz5wI++oIBSALy/pAFsPpQwgPOAAADAGb/6wUNBcUAAwARAB8AAAEhNSEFEAAhIAAZARAAISAAESc0JiMiBhURFBYzMjY1A6P+QAHAAWr+tf7x/vb+vQFCAQoBDwFM88Coo7e4o6m+AnnD5/7z/qMBXgEMAQYBCwFf/qH+9QK16+q2/vi46+u4AAEAIwAABREFsAAHAAABIwEjATMBIwKbA/6G+wID5wIE/AR0+4wFsPpQAAAAAwBwAAAELQWwAAMABwALAAA3IRUhEyEVIQMhFSFwA738Q2AC9/0JVgOa/GbCwgNMvwMjwwAAAAABAJ8AAAURBbAABwAAISMRIREjESEFEfL9c/MEcgTt+xMFsAABAEcAAARMBbAADAAACQEhFSE1CQE1IRUhAQMW/m0Cyfv7Ac7+MgPf/V4BkgLP/fTDmAJBAj+Yw/32AAADAEsAAAWjBbAAEQAYAB8AAAEWABUUAAcVIzUmADU0ADc1MwEUFhcRDgEFNCYnET4BA3H5ATn+x/ny/P7IATj88v3JqJ2dqAN5p5uaqAT+BP7S+vr+1AKqqgEBK/r7ATADsv0gprQBAr4CuKeotgP9QgG2AAEASAAABVEFsAAXAAABPgE1ETMREAAHESMRJgAZATMRFBYXETMDQoqS8/7m9fLz/uvykYXyAjgXwakB9/4J/v7+1Rn+jQFyGAErAQQB9/4JpsEZA3cAAAABAGwAAATaBcUAJAAAJTYSPQE0JiMiBh0BFBIXFSE1MzcmAj0BEAAhIAARFRQCBzMVIQLfeYGilZWghHz+DOcBcoMBNQEBAQEBN4Vy8f4LyB0BDPhp1tjY1mn5/vQcyMQDXgEho2cBHAFZ/qf+5Gek/uBhxAAAAAACAFb/6wR5BE4AHAArAAABERQWMzI2NxcOASMiJicOASMiAj0BEBIzMhYXNwEUFjMyNjc1ES4BIyIGFQP9JSQHDgYYHzomUmsaM5Bky9vbzV6KNBP+HHF/TGQiImRKf3MEOf0KTzsCArQRDU1UUVABHfEVAQgBOE1Lg/3AmbNGQw0BukVJ0awAAgCW/ncEagXEABQAKgAAATIWFRQGBx4BFRQGIyImJxEjETQkEzI2NTQmIyIGFREeATMyNjU0JisBNQJp0fBhWnqB8tFQkj3yAQ3CbmRrY2N+KnxPdoR3bHkFxNK4YJoxLbqD1eQoK/44Bai37v2ZbWdXeX5k/OEoKodvbpK5AAABACD+XwP1BDoACwAAATMBESMRATMTFzM3Avr7/o/z/o/73RQDFAQ6+/D+NQHQBAv9NF9fAAAAAAIAVP/sBDgGIAAhAC8AABM0NjMyFhcHLgEjIgYVFBYXFhIdARQAIyIAPQE0Nj8BLgETFBYzMjY9ATQmJyIGFdDRwEyYUiw6h0ZQWFBv5Nn++uru/vqyiQReZXZ/g39/jHKBgQTqk6MsKKMWIj00KlAmUf7s0xTw/tgBJO4UqvMjCymI/X2cwsKcFHjKGMOXAAEAYP/sBAwETQAoAAATNDY3LgE1NDYzMhYVIzQmIyIGFRQWOwEVIyIGFRQWMzI2NTMUBCMiJGBmZVlf9NbA/vJ4W2hoYmfHx25ud2xofPL+8cDW/vkBMlx9IiR3SpmisJY9TlI6QEetSE5AVlpBqqusAAAAAQBh/n4DygWwACAAAAEVAQ4BFRQWHwEeARUOAQcnPgE1NCYvAS4BNTQSNxMhNQPK/qN6ZURRbJt5AX5NfTAtPUlSs5CGkOv9xAWwkf5bjsqLXlkTIC5RcU61PGU2UyQjMBIVL6iejQEoqwEOwwAAAAEAfv5hBAYETgAUAAABHwE+ATMyFhURIxE0JiMiBgcRIxEBXA0DNZtkr7fzYWVMbCTzBDqRAU9Xxej7wAQ+gWs3M/zfBDoAAAMAc//rBC4FxQANABYAHwAAARACIyICGQEQEjMyEhEDIRUUFjMyNjUBITU0JiMiBhUELvvh4f784eH98/4rd3V1dP4rAdV2dXV1AjH+3v7cASUBIQFNASEBJv7a/t/+/Gy4qai5ASprtqmptgAAAAABAKn/6wJ+BDkADwAAAREUFjMyNjcXDgEjIiY1EQGcMC4bKRomL1Y3i44EOfzvRDILC7EZE5qqAwoAAAABABb/7gRKBfQAIQAAKQEBJy4BIyIGByc+ATMyFhcBHgEzOgE3Fw4BIyImJwMjBwEf/vcBgVYWOCsRGAsDGFUhZ2sfAbAULCMMEAcEFDAab3YtzwMXBA7IMSoBAbUGCk5V+8QxLQHABAZYfAIkZwAAAQBk/nYD1AXEADEAAAEuASMiBhUUFjsBFSMiBhUUFh8BHgEVDgEHJz4BNTQmLwEuATU0Njc1LgE1NCQzMhYXA4NKYDeDf4OQko+wr4tyapSCAn9MfTQpO0su7uGck293AQHkUoc9BNsTEVpIWGDGjJFvgBgYIlpzTrY6ZDpJLSkqEQszvtaRwS8DJ41hrb4XFAAAAAEAT//rBOoEOgAXAAABIxEUFjMyNjcXDgEjIiY1ESERIxEjNSEEj4cwLhspGiYvVjeLjv628ooEQAN9/atEMgsLsRkTmqoCTvyDA329AAAAAgCA/mAEMQROAA8AHQAAARQCIyImJxEjETQAMzISESM0JiMiBhURHgEzMjY1BDHYyV2LNfMBAtTp8vNxfXBtIGhQfnUB+fL+5Ts8/f0D3/YBGf7K/vat0MuN/vA6O7KZAAAAAAEAUv6KA+kETgAhAAABMhYVIzQmIyIGHQEUFhceARcOAQcnPgE1NCYnLgE9ATQSAjjG6+RnZn91j5+lfgMBfU1/NCk8RvLl/QRO1sJed8mUI4WZLDBVc062O2U6Si0oKw8699gj7QEzAAAAAAIAUv/sBH0EOgARAB8AAAEhBx4BHQEUACMiAD0BNAAzIQEUFjMyNj0BNCYjIgYVBH3++wFVYf785e3++wEE7AI7/Mh6hX54eX+DegN2A0S/chXb/t4BLvgV7gEl/diiwsOhFZW6upUAAQBA/+sD7QQ6ABMAAAEhERQWMzI2NxcOASMiJjURITUhA+3+lTAuGykaJi9WN4uO/rEDrQN5/a9EMgsLsRkTmqoCSsEAAAAAAQCA/+sECAQ6ABUAAAERFBYzMjY1LgEnMx4BFRACIyImNREBclVMeIoDOjTxND/098nUBDr9bYZ07J1/+4pq/pz+/P651+cCkQAAAAIARP4iBYUEQQAZACMAAAUkADU0EjcXDgEHFBYXETQ2MzIAFRQABREjEz4BNS4BIyIGFQJl/uD+/3t2mExHA4yim3/qARz++P7b8/OmlAOGeh4ZDh8BQvGkAQNVkkm7ZpjUIAKEdZD+x+Hl/ssc/jEClB3IjJTCIhcAAAABAE/+IgV+BDoAGwAAARE+ATUuASczHgEVFAAFESMRJAAZATMRFBYXEQNSpZUDPTXuN0L++/7Z8/7+/vLzlYgEOvx9H9aYfPSGaPeX9f69HP4yAdAeASUBHAHp/hW6wRwDggAAAQBm/+sGLQQ6ACgAAAEOAQcUFjMyNjURMxEUFjMyNjUuASczHgEVEAIjIiYnDgEjIgIRNDY3AeVCSANXYldk+2RXYlcESEDxQE3C3nSiLi+gc+DBTEEEOof8gbDZkKMBRf67o5DYsYD9h2r+nP70/sFvb29vAT8BDJz+agAAAAACAHX/7AThBcQAGQAkAAAlMjY3LgE9ATQ2MzIWFREQACEgABkBNxEUFhMUFhcRNCYjIgYVAqmVpgTJ9rubp7v+zP78/wD+zPqm8nVsODk0PLbHtgzvuVu0zs28/gT+7f7AAU0BBgKlAv1ZsdgDL2WECwFZVlJUVAAB/+4AAASFBcIAIwAAAT4BMzIWFwcuASMiBgcBESMRAS4BIyIGByc+ATMyFhcTFzM3AvI5hWogMxgYBBsNIzcR/tvy/twSNiIPGgMXFzEiaoQ5pRMEEwTEjnAJDMACAysn/W398wISAo4nKwMCwAwJbY7+d1VVAAACADP/6wZUBDoAFgAsAAABIx4BFRACIyImJw4BIyICETQ2NyM1IQEuASchDgEHFBYzMjY9ATMVFBYzMjYGVIAaHbbQeKUtLqV30LUbG28GIf7FAyAe/MYeIAJKVFpp+mdbU0sDg02jXf70/sFxcnJxAT8BDF2kTLf9/FOjV1ekUrDZkKPi4qOQ2AAAAAEAJP/xBbsFsAAbAAABIRE+ATMyBBUUBiEnMjY1LgEjIgYHESMRITUhBJH+D06EOPwBFf/+9QGgeAGPjkKFQ/P+dwRtBO3+ZhMY6d/U8bqIfH2HEBD9bQTtwwAAAQBy/+wE1gXGAB8AAAEGACMgABkBEAAhIAAXIy4BIyIGHQEhFSEVFBYzMjY3BNUW/uX9/v3+zgE1AQABAgEVGPMTj5qYqwIB/f+pmpeREwHZ5v75AVEBEQEVAQ8BVP798JiY6LYmwy6555SXAAAAAAIALgAACEMFsAAWAB8AAAERITIEFRQEIyERIREQAiEjNTMyEhkBAREhMjY1NCYjBQoBNPUBEP7w9f3Z/kDs/vMwKJh3A6UBNImKiYoFsP3r/dHR/ATt/iD+Xf6WwgEDAUgCo/0o/eqac3GYAAIAnwAACEoFsAASABsAAAEhETMRITIEFRQEIyERIREjETMBESEyNjU0JiMBkgKM8wE09gEP/vH2/dn9dPPzA38BNIqJiYoDRAJs/cnwycz0AoH9fwWw/Qb+FIttaooAAAEANQAABcsFsAAXAAABIRE+ATMgBBURIxE0JiMiBgcRIxEhNSEEmP4LQ4xPAQEBCfKClkeQR/P+hQRjBO3+jw4P2vX+NgHKmnEQDv1JBO3DAAAAAAEAmf6YBQsFsAALAAATMxEhETMRIREjESGZ8wKM8/5K8/43BbD7EgTu+lD+mAFoAAIAlAAABMEFsAAMABUAAAEhESEyBBUUBCMhESEBESEyNjU0JiMELP1bATT4AQ7+8ff92QOY/VsBNIqJiIsE7f6Q7M7Q8wWw/Qr+CJFybocAAgAm/pkF2wWwAA4AFQAAASMRIREjAzM2EhsBIREzAQYCByERIQXR6fwx7Ad3T3gIJQOPu/yGCVtLAnv+S/6aAWb+mQIpTgEtAR8CVPsSApro/r5wBCsAAAEAGAAAB4kFsAAVAAABIxEjESMBIQkBIQEzETMRMwEhCQEhBPCi8qn+k/7SAdf+SgEkAWGe8pgBXgEk/k0B1P7SAnv9hQJ7/YUDBwKp/ZwCZP2cAmT9WPz4AAAAAQBK/+sEewXFACgAAAEyNjU0JiMiBhUjNCQzMgQVFAYHHgEVFAQjIiQ1MxQWMzI2NTQmKwE1AmiKgI2NcpTzASDZ+AEVeG58gP7V+Nr+zPOcf5CgjpKqA0dza2F8d1673dTMZqMwLKl/zeDU1WSDgWl9csEAAAAAAQCaAAAFCwWwAAsAAAEzESMRIwEjETMRMwQY8/MD/Xjz8wMFsPpQBBj76AWw++kAAQAuAAAFCgWwAA8AAAERIxEhAwoBKwE1Mz4BGwEFCvP+OREPzvY+KIliDBgFsPpQBO3+IP5W/p3CBfYBUAKjAAEAP//rBNkFsAAVAAABFzMBIQEOASMiJic3HgEzMjY/AQEhAmgzAwEvAQz+Cj6WnxlCDAIKPBFMRCAf/g4BCgMekgMk+1KMiwQCwAICRkpFBC4AAAMAT//EBhkF7AAVAB4AJwAAATMgABEQACEjFSM1IyAAERAAITM1MwEiBhUUFjsBETMRMzI2NTQmIwOvDwELAVD+r/72D/MT/vX+sQFPAQsT8/76r7u6sBPzEa28u64FJv66/vL+9P69v78BQQEMAQ8BR8b+cM6+u8gDD/zxyru9zQAAAAEAmf6hBbYFsAALAAATMxEhETMRMwMjESGZ8wKM86sU3fvUBbD7EgTu+xX93AFfAAEAjwAABOkFsAATAAABESMRDgEjICQ1ETMRFBYzMjY3EQTp81CrYf7+/vfzgZdVs1QFsPpQAkEWFdr1Acv+NZtwFhYCqgAAAAEAngAABvwFsAALAAABESERMxEhETMRIREBkQHF8gHB8/miBbD7EgTu+xIE7vpQBbAAAAABAJ7+oQetBbAADwAAAREhETMRIREzETMDIxEhEQGRAcXyAcHzsRTd+eIFsPsSBO77EgTu+xP93gFfBbAAAAAAAgAYAAAF0wWwAAwAFQAAEyERITIEFRQEIyERIQERITI2NTQmIxgCgQE0+AEO/vH3/dn+cgKBATSKiYiLBbD9zezO0PME7f3N/giRcm6HAAADAJ8AAAZZBbAACgAOABcAAAEhMgQVFAQjIREzASMRMwERITI2NTQmIwGSATT4AQ7+8ff92fMEx/Pz+zkBNIqJiIsDfezO0PMFsPpQBbD9Cv4IkXJuhwAAAgCUAAAEwQWwAAoAEwAAASEyBBUUBCMhETMZASEyNjU0JiMBhwE0+AEO/vH3/dnzATSKiYiLA33sztDzBbD9Cv4IkXJuhwAAAQCI/+wE1wXGAB8AABM0ADMyABkBEAAjIAA1MxQWMzI2PQEhNSE1NCYjIgYViAEj//4BL/7R/v79/uHyl5mVpP3zAg2klZiXA9TkAQ7+rf7w/uv+7/6vAQHulZjmuCnDK7jompUAAAACAKr/6wcABcUAFQAjAAABEAAhIAARNSMRIxEzETM1EAAhIAARJzQmIyIGFREUFjMyNjUHAP61/vH+9v69vPPzvAFCAQoBDwFM88Coo7e4o6m+AlX+8/6jAV4BDAj9owWw/XE6AQsBX/6h/vUCtevqtv74uOvruAACAC0AAARiBbAADQAWAAApAQEuATU0JDMhESMRIQEjIgYVFBY7AQEx/vwBSIOBARL7AeTz/t4BIvGPjI2O8QJsOsGO2eL6UAIlAsiFfICKAAIAW//rBDwGEwAbACkAAAEyEh0BFAAjIgA9ARAANz4BNTMUBgcOAQcXPgEXIgYdARQWMzI2PQE0JgJz2fD+/Ozt/vwBBuN6ZsS0znOfIwNFnzKCenqEgnx9A/7+7d8V7f7hASTvZwFlAY0sFzZDxXojFI+GAjhAw6mGFZW1tZUVhqkAAAMAjwAABDoEOgAPABgAIQAAMxEhMhYVFAYHFR4BFRQGIwERITI2NTQmIyUzMjY1NCYrAY8Bt9vrXFduc9zS/vYBCmBbWmH+9shqZWhrxAQ6lJhNdB8DGIRam5oBzf7zQ0NBRq48PkRAAAAAAAEAhQAAA00EOgAFAAABIREjESEDTf4q8gLIA3b8igQ6AAAAAAIAJ/6+BMUEOgAOABUAADc+ATcTIREzESMRIREjEwEOAQchESGBXE0LCwLvlvL9SvYBAgAJRjwBoP7ww2bHyQGB/Ij9/AFC/r4CBQH2rPNYAqcAAAEAFwAABl8EOgAVAAABIxEjESMDIQkBIRMzETMRMxMhCQEhBDSA84D2/swBb/6rASzycvNz8gEt/qoBb/7LAbP+TQGz/k0CQQH5/lcBqf5XAan+B/2/AAABAE3/7APEBE0AKAAAARQGBx4BFRQGIyIkNTMUFjMyNjU0JisBNTMyNjU0JiMiBhUjNDYzMhYDsFZQXF7yy7j+/vJwYGBiWmKurltOVFxUavLxuMveAxJKdyQhfV2bq6uqQVpVQU9Gr0RCPFBOPZawoQAAAAEAhgAABBIEOgALAAABMxEjEScBIxEzERcDIPLyA/5b8vIDBDr7xgLUAf0rBDr9LgEAAAABAI8AAARlBDoADAAAASMRIxEzETMBIQkBIQH9e/PzawErASz+eQGo/sQBrP5UBDr+UAGw/fr9zAAAAAABAB8AAAQUBDoADwAAAREjESEDCgErATczMjY3EwQU8/7QCw+m3jQBJGY+CxQEOvvGA3b+9/6y/uHNqfcBzQAAAQCPAAAFbwQ6AA4AAAkBIREjEScBIwEHESMRIQL/AUABMPMD/tml/tgD8wEyASsDD/vGAsQB/TsCyQH9OAQ6AAEAhgAABBEEOgALAAAhIxEhESMRMxEhETMEEfP+W/PzAaXzAbX+SwQ6/j0BwwAAAAEAhgAABBIEOgAHAAAhIxEhESMRIQQS8/5a8wOMA3b8igQ6AAEAIwAAA9AEOgAHAAABIREjESE1IQPQ/qHz/qUDrQN5/IcDecEAAAADAFT+YAV/BhgAHwAtADsAABMQEjMyFhcRMxE+ATMyEhEVFAIjIiYnESMRDgEjIgI1JTQmIyIGBxEeATMyNjUhFBYzMjY3ES4BIyIGFVTKwidDIPIgSS3Cy8vALUoh8h9FKMDKBDhqdBgoEhEpGnNp/LpidBclEhIlFXRkAg4BCQE3Dg4B5v4WEBD+yf73FfL+5BAO/lcBpQ0NARzyFazRBwb9OQYEs5mbsQQGAsoEBs+uAAABAIb+vwSlBDoACwAAEzMRIREzETMDIxEhhvMBpvOTFN380gQ6/IgDePyI/f0BQQABAF8AAAPgBDsAEwAAISMRDgEjIiY1ETMRFBYzMjY3ETMD4PMxYjPd6/NlcDVfMvMBaQsLytIBTP60dmILDAIMAAAAAAEAhgAABgMEOgALAAABESERMxEhETMRIREBeQFS8wFT8vqDBDr8iAN4/IgDePvGBDoAAAABAH7+vwa1BDoADwAAAREhETMRIREzETMDIxEhEQFxAVLzAVPyuhTd+roEOvyIA3j8iAN4/Ij9/QFBBDoAAAAAAgAfAAAE6gQ6AAwAFQAAATMyFhUUBiMhESE1IRkBMzI2NTQmIwJK7dDj5M/+IP7IAivtZFxcZALiyKimzAN3w/3l/qNgS0xmAAAAAAMAjwAABckEOgAKAA4AFwAAATMyFhUUBiMhETMBIxEzAREzMjY1NCYjAYLt0OPkz/4g8wRH8/P7ue1kXFxkAuLIqKbMBDr7xgQ6/eX+o2BLTGYAAAIAjwAABCIEOgAKABMAAAEzMhYVFAYjIREzGQEzMjY1NCYjAYLt0OPkz/4g8+1kXFxkAuLIqKbMBDr95f6jYEtMZgAAAQBR/+sD6AROAB0AAAEiBhUjNDYzMhIdARQCIyImNTMUFjMyNjchNSEuAQIBV3Tl/LTo///nw+7lcFxwdQv+rAFTD3MDi2hQn9z+ze0j7v7O4LdbeqKBqHyXAAACAJD/7AYvBE4AEwAhAAABMz4BMzIAHQEUACMiJicjESMRMwEUFjMyNj0BNCYjIgYVAYPRGv3S7QEF/vzs2f8Vz/PzAb56hIJ8fISCegKI0Pb+0PcV+P7S/9n+PAQ6/diiwsOhFZ7Gxp4AAAACACcAAAPfBDoADQAWAAABESMRIwMjEy4BNTQ2MwMUFjsBESMiBgPf8uPn/P9maefPw1tb7eBiYQQ6+8YBjf5zAbUqmmebv/6gQFkBOF4AAAH/4f5LBAwGGAAoAAABIRUXPgEzMhYVERQGIyImJzceATMyNjURNCYjIgYHESMRIzUzNTMVIQJw/wADNZdgsL22qSU6IQ8ROxY7QGRoSW4m85yc8wEABK77AUtR1Of9Lre/CAm/BQhcVwLUgnA6NfzoBK6qwMAAAAEAWP/sA/4ETgAdAAAlMjY1MxQEIyICPQE0EjMyFhUjNCYjIgYHIRUhHgECQlt85f7/uPT5+fPH8+V1YnxwCQFW/qsLbq5nUaDaAS7xI/ABMOG3W3qegqiAlQAAAgAfAAAGmgQ6ABYAHwAAAREzMhYVFAYjIREhERACKwE/ATI2NREBETMyNjU0JiMD+u3Q4+PQ/iD+7b7jNAEkZFkC+e1jXVxkBDr+h7+foMMDdv73/r3+1sUByN8Bzf3F/sFeR0NXAAACAIYAAAaxBDoAEgAbAAABIREzETMyFhUUBiMhESERIxEzAREzMjY1NCYjAXkBpfPt0OPj0P4g/lvz8wKY7WNdXWMCnwGb/oe/n6DDAd3+IwQ6/cX+wV9GQ1cAAAH/9QAABAwGGAAcAAABIREXPgEzMhYVESMRNCYjIgYHESMRIzUzNTMVIQKE/uwDNZdgsL3zZGhJbibziIjzARQEtf7+AUtR1Of9bQKVgnA6NfzoBLWqubkAAAAAAQCG/poEEgQ6AAsAAAERIREzESERIxEhEQF5Aabz/rXz/rIEOvyIA3j7xv6aAWYEOgAAAAEAjf/rBrIFsAAgAAABERQGIyImJw4BIyImNREzERQWMzI2NREzERQWMzI2NREGsvbOcKo2OLBxye/zaVxod/dwY2JvBbD79drgUlRUUuDaBAv79X17en4EC/v1fXt6fgQLAAABAHD/6wXtBDoAIAAAAREUBiMiJicOASMiJjURMxEUFjMyNjURMxEUFjMyNjURBe3du2KVMDSaY7fW81BKV2L0WFNOVwQ6/VHN00ZISEbSzgKv/VFybG1xAq/9UXJsbXECrwAAAv/gAAAEIQYYABIAGwAAASERMzIWFRQGIyERIzUzETMRIQERMzI2NTQmIwKj/t7t0OPj0P4grq7zASL+3u1kXF1jBDn+ytGur9UEOasBNP7M/Vz+gmpUUW8AAAABAKL/7Aa2BcYAJwAAATM1EAAhIAAXIy4BIyIGHQEhFSEVFBYzMjY3MwYAIyAAETUjESMRMwGVvQE1AQABAgEVGPMTj5qYqwHs/hSpmpeRE/MW/uX9/v3+zr3z8wNQEwEPAVT+/fCYmOi2FcQ+ueeUl+b++QFRARE+/XQFsAAAAAEAhv/sBb4ETgAjAAABMzYSMzIWFSM0JiMiBgchFSEeATMyNjUzFAQjIgInIxEjETMBeaES9+HH8+V1YnpwCgF4/ocKb3xbfOX+/7ji9xKh8/MCctcBBeG3W3qaf6uCl2dRoNoBBNf+OQQ6AAIAIAAABQ4FsAALAA8AAAEjESMRIwMjATMBIwEhAyMDhITdd5H7AgfnAgD7/dgBW6sDAaz+VAGs/lQFsPpQAmcB/wAAAgAKAAAERQQ6AAsAEQAAASMRIxEjAyMBMwEjATMDJyMHAuRdw1to9wGp5wGr9/5c+GQXBBcBF/7pARf+6QQ6+8YBxAEGXl4AAgC2AAAHJwWwABMAFwAAASEBMwEjAyMRIxEjAyMTIREjETMBIQMjAakBawEs5wIA+4+E3XeR+5j+2PPzAlsBW6sDAmcDSfpQAaz+VAGs/lQBrP5UBbD8twH/AAACAJ0AAAYYBDoAEwAZAAABMxMzASMDIxEjESMDIxMjESMRMwEzAycjBwGQ/vjnAav3al3DW2j3bbrz8wHt+GQXBBcBxAJ2+8YBF/7pARf+6QEX/ukEOv2KAQZeXgAAAAACAIQAAAZpBbAAHAAfAAABHgEVESMRNCYrAQcRIxEnIyIGFREjETQ2ITMBIQETIQR0+vvzfZBpCfICgJB88/8BAAz+hQTc/ZLy/hwDKwPS8v6cAWSVbRH9qwJjA22V/pwBZPXSAoX9hgG1AAACAIIAAAVkBDoAGgAdAAAzNTQ2NwEhAR4BHQEjNTQmKwEHESMRIyIGHQEBEyGCycr+6wP0/urCxPNmdiQB8i13ZQGFlf7Wqd3MDQHb/iQQzNmpqZBrA/5fAaRrkKkCaQEiAAAAAgCtAAAIrgWwACQAJwAAIRE0NjchESMRMxEhOwEBIQEeARURIxE0JisBBxEjEScjIgYVEQETIQLJGx7+nvPzAxAYDP6FBNz+hPr7832QaQnyAoCQfAIL8v4cAWRRfjT9mQWw/XsChf17A9Ly/pwBZJVtEf2rAmMDbZX+nAM2AbUAAAAAAgCPAAAHdwQ6ACEAJAAAITU0NjchESMRMxEhASEBHgEdASM1NCYrAQcRIxEjIgYdAQETIQKVGhz+t/PzAqT+7QP0/urCxPNmdiQB8i13ZQGFlf7WqVB8M/5YBDr+KAHY/iQQzNmpqZBrA/5fAaRrkKkCaQEiAAAAAgAp/kADqgd4AC0ANgAAATI2NTQmIyE1ITIEFRQGBxUeARUUBCsBIgYVFBYXBy4BJzQ2OwEyNjU0JisBNQE3MxUFIyU1MwGQiH5/gP7lARvmAQx5b4KH/vfgNUU9VkJRhqEBtKkzeIaWlY8BBYvQ/vSd/vXOA05vZFtuxse9caAsAyqqgM7fNjFCSx6ZKbOBjYh8Znp5xwObjxH8+hMAAAIAM/5HA4gGCwAtADYAAAEyNjU0JiMhNSEyFhUUBgcVHgEVFAYrASIGFRQWFwcuASc0NjsBMjY1NCYrATUTNzMVBSMlNTMBl3Rqb2/+5QEb1vpeV2lt880xSUBTPlJ6nwGuoTBreIGAl9eL0P70nf71zgJvS0Q8R7mdlFB2IwMhd1WbqjYxQkseki+ueYWBT0FKSakDDY8R/PoTAAMAav/rBREFxQANABYAHwAAARAAISAAGQEQACEgABEFITU0JiMiBhUFIRUUFjMyNjUFEf61/vH+9v69AUIBCgEPAUz8SwLCwKijtwLC/T64o6m+AlX+8/6jAV4BDAEGAQsBX/6h/vUxM7Xr6rbeKrjr67gAAwBS/+wEMwROAA0AFAAbAAATNAAzMgAdARQAIyIANQEyNjchHgETIgYHIS4BUgEE6+0BBf787O3+/AHxcnoO/gsNenJxeQ4B8w97Aif2ATH+0PcV+P7SAS74/pyXhISXAt2XgICXAAABABEAAATvBcMAEQAAARczNxM+ATMXByMiBgcBIwEhAlwbAxvpNJJ9LgEULzsW/pLn/gwBBAGLcG4C/aiVAdA9RPuPBbAAAAABACAAAAQYBE4AFQAAARczNxM+ATMyFhcHLgEjIgYHASMBMwHjEgQSei6SaSExGBcEGw0jOg3+9tP+kvsBblpaAb6UjgkNwAIENir84gQ6AAQAav92BREGLgADAAcAFQAjAAABIxEzEyMRMwEQACEgABkBEAAhIAARJzQmIyIGFREUFjMyNjUDIMbGAcXFAfD+tf7x/vb+vQFCAQoBDwFM88Coo7e4o6m+BIQBqvlIAbQBK/7z/qMBXgEMAQYBCwFf/qH+9QK16+q2/vi46+u4AAAAAAQAU/+IBDQEtAADAAcAFQAjAAABIxEzAyMRMyU0ADMyAB0BFAAjIgA1MxQWMzI2PQE0JiMiBhUCori4A7e3/bQBBOvtAQX+/Ozt/vzzeoSCfHyEgnoDGwGZ+tQBoP/2ATH+0PcV+P7SAS74osLDoRWexsaeAAAAAAMAjf/rBqcHRAAsAD4ARAAAATIWFREUBiMiJicOASMiJjURNDYzFSIGFREUFjMyNjURMxEUFjMyNjURNCYjExUjIiQjIgYdASM1NDYzMgQzASc3JzMVBO7J8PDJcK03Oa1vye/vyVxpaVxod+x1aVxqalxqJIT+0CoyN4Z4c0gBKnL+N1E6AboFsO/m/eTm7k9RUU/u5gIc5fDDiIr95IuHen4Bi/51fnqHiwIciogB34Z4MjQSJW9qeP5LPXCPfQAAAAADAHT/6wXRBeMALAA+AEQAAAEyFh0BFAYjIiYnDgEjIiY9ATQ2MxUiBh0BFBYzMjY9ATMVFBYzMjY9ATQmIxMVIyIkIyIGHQEjNTQ2MzIEMwUHJzcnMwQ6ud7Ws2GUMTKUX7XU3LtOVk9HUV7sXVNGUFdNvSSF/tAqMjaHeHNJASly/tmiUToBugRH3tb119xHSklI3Nf11t7Dd3r1e3ZtccbGcW13evV6dwHnhngyNBIlb2p48L49b4kAAAIAjf/rBrIHBwAHACgAAAE1IRchFSM1BREUBiMiJjURIxEUBiMiJjURIxEUFjMyNjceATMyNjURAesDVQH+prUCjW9iY3D3d2hcafPvyXGwODaqcM72BpdwcH9/5/v1fnp7fQQL+/V+ent9BAv79drgUlRUUuDaBAsAAAACAHD/6wXtBbEABwAoAAABNSEXIRUjNQERFAYjIiY1ESMRFAYjIiY1ESMRFBYzMjY3HgEzMjY1EQGXAzgF/rG1AipXTlNY9GJXSlDz1rdjmjQwlWK73QVBcHB/f/75/VFxbWxyAq/9UXFtbHICr/1RztJGSEhG080CrwAAAQBq/ooEuAXFABgAAAEjESYCNREQACEgABUjNCYjIgYVERQWOwEDMPLa+gEwAQABAQEd85OYl6enl5b+igFoIAFF9gEVARABU/797ZWY57f+6bnnAAAAAAEAXP6JA/METgAYAAABIxEmAj0BNBIzMhYVIzQmIyIGHQEUFjsBAtXzvcn+6MLv5XBcf3RzgZL+iQFqIQEk0yPtATPitlt6yZQjmMYAAAAAAQBtAAAEkwU+ABMAAAEFByUDIxMlNwUTJTcFEzMDBQclAlsBIUj+3bWv4f7fRwElyv7eSQEjuazkASVM/uABwayAqv7BAY6rgKsBaKuCqwFG/murf6oAAAH8ZgSi/zkF/QAHAAABFSc3IScXFf0XsQECIgGxBSB+Ae5sAdwAAAAB/HMFF/9tBhUAEQAAATIkMzIWHQEjNTQmIyIEKwE1/JV0AS1JdXmIODIr/s2GJAWdeGpvJRI0MniGAAAB/XsFFv5yBmAABQAAATUzBxcH/Xu9ATtSBdyElnBEAAH9pQUW/pwGYAAFAAABJzcnMxX991I7Ab0FFkRwloQACPok/sQBvwWvAA0AGwApADcARQBTAGEAbwAAATQ2MzIWFSM0JiMiBhUBNDYzMhYVIzQmIyIGFRM0NjMyFhUjNCYjIgYVATQ2MzIWFSM0JiMiBhUBNDYzMhYVIzQmIyIGFQE0NjMyFhUjNCYjIgYVATQ2MzIWFSM0JiMiBhUTNDYzMhYVIzQmIyIGFf0RcGJjcHAvNDIvAd5xYGJycS80MS5IcGJicXAvNDMu/stxYGJxcC80MS/9T3BiY3BwLzQyL/1NcWJjcHAvNDIv/t5xYWNwcC41Mi81cWFjcXEuNTIuBPNVZ2dVLDk5LP7rVWdnVSw5OSz+CVVnZ1UsOTks/flVZ2dVLDk5LP7kVmZmVi04OC0FGlVnZ1UsOTks/glVZ2dVLDk5LP35VWdnVSw5OSwAAAAI+k3+YwGMBcYABAAJAA4AEwAZAB4AIwAoAAAFFwMjEwMnEzMDATcFFSUFByU1BQE3JRcGBQEHBSclAycDNxMBFxMHA/5QC3pgRjoMemBGAh0NAU3+pvt1Df6zAVoDnAIBQEQl/wD88wL+wEUBJisRlEHGA2ARlELEPA7+rQFhBKIOAVL+oP4RDHxiRzsMfGJHAa4QmUQXsfyOEZlFyALkAgFGRf7V/OMC/rtHASsAAAL/4AAABCEGYgASABsAAAEhETMyFhUUBiMhESM1MzUzFSEBETMyNjU0JiMCo/7e7dDj49D+IK6u8wEi/t7tZFxdYwUF/f7Rrq/VBQWrsrL8kP6CalRRbwADAJ8AAATaBbAAAwAOABcAAAEHATcBESMRITIEFRQEIyUhMjY1NCYjIQTabv5sbv5M8wI59gEM/vT2/roBRoqFhYr+ugIjZAG/ZP5G/dgFsPXP0fPDjnFxkgAAAAMAgP5gBDQETgADABYAJAAAJQcBNyUUAiMiJicHESMRMxc+ATMyEhEjNCYjIgYHER4BMzI2NQQtb/6XbwFw2speijID89kQNI9hzNvyen9NaSAgaFB/eA1jAaFkSvH+5D8/Af33BdqCSkz+yP74qdBAO/4XOjuzmAAAAAABAJQAAAQ0BxAABwAAASERIxEhETMENP1T8wKt8wTt+xMFsAFgAAAAAQB+AAADXAV0AAcAAAEhESMRIREzA1z+FPIB6/MDdvyKBDoBOgAAAAEAn/7GBJ0FsAAVAAABIREzIAAREAIhJzI2NS4BKwERIxEhBDf9W7EBIAE6+f78AZhzAbC2sfMDmATt/lb+1f7k/vv+z7rKq8PB/YcFsAAAAQB+/uID2wQ6ABUAAAEhFTMyBBUUAgcnPgE1NCYrAREjESEDRv4qU/UBI76+VHVonIlT8gLIA3bl+umL/vAxrSiLbImQ/jkEOgAAAAEAlAAABSwFsAAUAAAJAiEBIxUjNSMRIxEzETM1MxUzAQUE/nsBrf7O/s1Do1rz81qjOwEhBbD9Wfz3AnTq6v2MBbD9lf7+AmsAAAABAI4AAASuBDoAFAAACQIhAyMVIzUjESMRMxEzNTMVMxMElP7EAVb+y9gvm1fy8lebJ88EOv3+/cgBrLKy/lQEOv5Qx8cBsAABADQAAAahBbAADgAAASMRIxEhNSERMwEhCQEhA6yo8/4jAtCLAckBIP30AjX+1wJ2/YoE7cP9lwJp/Un9BwAAAQA+AAAFqQQ6AA4AAAEjESMRITUhETMBIQkBIQNBe/P+awKIawErASz+eQGo/sQBrP5UA3bE/lABsP36/cwAAAEAnwAAB4QFsAANAAABIREhFSERIxEhESMRMwGSAowDZv2M8v108/MDMAKAw/sTAm39kwWwAAAAAQB+AAAFZwQ6AA0AAAEhESEVIREjESERIxEzAXEBpQJR/qLz/lvz8wJ3AcPE/IoBtf5LBDoAAAABAJ/+xAfvBbAAFwAAATMgABEQAiEnMjY1LgErAREjESERIxEhBRGEASABOvn+/AGYcwGwtoTy/XPzBHIDQf7V/uT++/7Pusqrw8H9iQTt+xMFsAABAH7+5Qa7BDoAFwAAATMyBBUUAgcnPgE1LgErAREjESERIxEhBAqE/wEuvr5VdGoBppOE8/5a8wOMApX66Yz+8DGuJ4xsiY/+NgN2/IoEOgAAAAACAGn/6AXMBcUAKQA3AAAFIiYnDgEjIAARNRAAMxUiBh0BFBIzMjY3JgI9ATQSMzISERUUBgceATMBFBYXPgE9ATQmIyIGFQXMcsZaS6Fa/tn+nAEI22181bwYLhhxdOW+xexhXi5kOP2NZmdSVmFdWF8YIyUjIgGEAS+2AREBYMzpurjb/vMEBGMBB6LU8QE0/sb+/9SX/GELCgIdi9VJRs6B5a6ytqMAAAAAAgBh/+sEyQROACkAOAAABSImJw4BIyIAPQE0EjMVDgEdARQWMzI2Ny4BPQE0NjMyFh0BFAYHHgEzATU0JiMiBh0BFBYXPgE1BMlhpEg9g0rv/t7VsEJJlIMIEQxIR7GZm7hCPyZRLv7pOjQ1ODw8MTISGhwdHAFB/EvRAQrKBJN4TabMAQFKum5/vOn+x35rtEgJCAGAgGqIemWEVos1MIRTAAABAC7+oQaxBbAADwAAASE1IRUhESERMxEzAyMRIQGU/poDvf6cAozzqxTd+9QE7cPD+9UE7vsV/dwBXwABACb+vwU6BDsADwAAASM1IRUjESERMxEzAyMRIQEb9QLE3AGm85MU3fzSA3fExP1LA3j8iP39AUEAAAACAIIAAATcBbAAAwAXAAABIxEzAREjEQ4BIyAkNREzERQWMzI2NxEDLqOjAa7zUKth/v7+9/OBl1WzVAEsAtsBqfpQAkEWFdr1Acv+NZtwFhYCqgACAHQAAAP1BDsAAwAXAAAlIxEzASMRDgEjIiY1ETMRFBYzMjY3ETMCjaSkAWjzMWIz3evzZXA1XzLzzAJf/NUBaQsLytIBTP60dmILDAIMAAEAigAABOQFsAATAAAzETMRPgEzIAQVESMRNCYjIgYHEYrzUKthAQEBCvOCllezUgWw/b4VF9v0/jUBy5pxGBT9VgAAAgAg/+kFwAXEAB0AJgAABSAAETUuATUzFBYXEAAXIAARFSEVFBYzMjY3Fw4BASE1NCYjIgYVA+L+yf63oKKyRUsBQfUBEQEX/JW90G6eTzE1xf3hAniPppuoFwFUASJKF86sWnIVARMBWAH+nf6/hDzD6CghvCA4A2kftdHptwAC/87/7AR2BE8AGwAjAAAFIgAnLgE1MxQWFz4BFzISHQEhHgEzMjY3Fw4BAyIGByE1NCYCzub+9AWEhaoyNiH8teDk/VYKiX5kiUJHPcKiW3QSAbRnFAEd6R68l0pjGMXsAf7744+Hoi8tpjVDA5+NdRlpgAAAAAABAJT+xATnBbAAGAAAASMRIxEzETMBIQEWEhUQAiEnMjY1LgErAQGYEfPzcwHCAST+Gu7/+f78AZh0AbG29QJ4/YgFsP2hAl/9ix7+3P7++/7Ousqsw8AAAQCO/uoEQwQ6ABYAAAEeARUUAgcnPgE1LgEnIxEjETMRMwEhAs2tvr2+VXVpAZGGrvLyVQFBAS0CYSnbtYj++S+tJoRnfn4I/lQEOv5QAbAAAAAAAQCf/ksFEAWwABcAAAERIREzERQGIyImJzceATMyNjURIREjEQGSAozyt6klOiAOETsWPEH9dPMFsP2AAoD6EbbACAm/BQhdVgKs/ZMFsAABAH7+SwQJBDoAFwAAAREhETMRFAYjIiYnNx4BMzI2NREhESMRAXEBpfO4qSQ6IQ8ROxY7Qf5b8wQ6/j0Bw/uHtsAICb8FCF1WAfT+SwQ6AAIAU//qBRsFxQAWAB4AAAEgABEVEAAlIAARNSE1NCYjIgYHJz4BEzI2NyEVFBYCcwFKAV7+q/7+/sn+xgPW0uR2p1IxN8/robgL/R6wBcX+lv7Mov7X/o4BAWEBQoQV0/8pILwfOvrx6L0fttAAAAABAF3/6wRGBbAAGgAAARcBHgEVFAQjIiQ1MxQWMzI2NTQmKwE1ASE1BBsB/n/Q2/7o6cz+5POGb3+PlJmOAWr9kAWwm/5FGOPHzeDU1WSDgWmVhasBkcMAAQBd/nUERgQ6ABoAAAEhNSEXAR4BFRQEIyIkNTMUFjMyNjU0JisBNQL0/ZsDjAH+iMzW/ujpzP7k84Zvf4+UmY8DdsSb/kMZ48XL4dTUYoOCZ5WEqwAA//8AO/5LBIkFsAAmAKxSAAAmAdOkKQAHAZoBNQAAAAD//wA0/kkDogQ6ACYA51UAACcB0/+d/3oABwGaAQv//gACAFQAAASABbAACgATAAABETMRISIkNTQkMwERISIGFRQWMwOO8v3Z9v7xAQ73ATX+y4uHiIoDlAIc+lD80dD3/S4CD5Jwc5oAAAAAAgBmAAAGpQWwABgAIQAAISIkNTQkMyERMxE3PgE3NiYnMx4BBwYEIyURISIGFRQWMwJr9v7xAQ73ATXyTGVpBAEfHuwiIwIE/wDB/sL+y4uHiIr80dD3Ahz7EgEBdm9OolBlkknR2MICD5Jwc5oAAAIAXv/pBn4GGAAiADMAABMQEjMyFhcRMxEGFjM+ATc2JiczHgEHAgAjBiYnDgEjIgI1AS4BIyIGHQEUFjMyNjcuATVe2s1UgTPzAk1Ed38EAR4f7CIjAgT+6tOAqiw1l2rL2gKvI2NEf3Nxf0lmIwMDAg4BCAE4PTsCQvtPU2UBuahjyGiBtV3+8f7pAlVgWVoBHfEBJjI2zqsVma86OA8iEwAAAQA7/+gF4QWwAC0AAAE0JisBNTMyNjU0JiMhNSEyBBUUBgcXHgEdAQYWMz4BNzYmJzMeAQcCACMGJicCpntr1JuehYCP/qABYP4BBHx6AYJvAT42anIEAR4f7CMiAgT+9cunsAgBeG2BxW55aXDF0c90ojADJaiARD1KAbipY8hoiK9c/vD+6gOdsQABAC//4gT/BDoALgAAJQYWMz4BNzYmJzMeAQcOASMGJic1NCYrASczMjY1NCYjISchMhYVFAYHFx4BHQEDAQEhLFpfBAEfH+wjIwIF77WjmwhRTukCt2ddXmb++gYBDNbhVlYBZFbrKy0BjYJNoVFoj0jb4wNwhEs8QL1EQ0ZQw6ecUW8jAxp1WT4AAAIASf6sBCQFsAAhACsAABMnMzI2NTQmIyEnITIEFRQGBx4BHQEUFhcVIy4BPQE0JiMBFAYHJz4BPQEzlwHIlYSBiv7gAwEj9wEGc3N+aiAm+ikWfXICmmhVfyws5QJcw291b3vD2M9zoDMorYR4QXgiFyKLR3Rzgf3cZ9xJTkiTW7wAAAIAdf6cBAsEOgAhACsAABM1MzI2NTQmIyEnITIWFRQGBx4BHQEUFhcVIy4BPQE0JiMBFAYHJz4BPQEzs+VpZGZn/uEEASPW61dXYVMXHfsdDmJfAl5oVX8sLOUBnLNJRUdVwa+gUnMoIYJhVSdZFBEUYTFTT1T+jGfcSU5Ik1u8AAAAAAEAQ//oB34FsAAhAAABIREQAiEjNTMyEhkBIREGFjM+ATc2JiczHgEHAgAjBiYnBA3+VN3+9DUpjHcDkQFNRHd+BAEeH+wiIwIE/uvTuMIJBOv+Ff5q/pbEAQUBNwKw+7dUZAG5qGPIaIG1Xf7x/ukDtMsAAQA//+gGWQQ6ACEAAAERBhYzPgE3NiYnMx4BBwYCIwYmJxEhERACKwE/ATI2NREECgFRR11iBAEeH+wiIwIE97u7xgn+/7jfQAQpZFMEOv0tVGQBopZevWJ6q1j7/v4DtMsCDf76/rz+1tMBu98BzAAAAAABAJj/6AeFBbAAHQAAAREGFjM+ATc2JiczHgEHAgAjBiYnESERIxEzESERBQYBTUR4fgQBHx/sIiQCBf7r07fCCf138/MCiQWw+7dTZQG4qWPHaX+2Xv7x/ukDtMsBBv2TBbD9gAKAAAEAd//oBlwEOgAdAAABIREjETMRIREzEQYWMz4BNzYmJzMeAQcGAiMGJicDGv5Q8/MBsPMCUEheYwQBHx7rIyICBPe8usYJAbr+RgQ6/kMBvf0tU2UBopZdvWOBpVf7/v4DtMsAAAAAAQBi/+sEtgXFACEAAAUgABkBEAAhMhYXBy4BIyIGFREUFjM+ATc2JiczHgEHBgQCu/7w/rcBSQEQdK1GP0SOVqe/v6d/hQQBGhnrJhQBBP7jFQFYARIBBgERAVksLbAiIu61/vi57QGFe1OtYqpqTuDlAAABAFX/6wPlBE4AIQAAJT4BNzQmJzMeARUOASMiAD0BNAAzMhYXBy4BIyIGHQEUFgJaU0IDCgnrDQ4E1bL1/vABBupgizAuMHhFgH2GrwFERzdxNkZnMamnATXoKucBNSIgvRwey4wqj8oAAAABACL/6AVYBbAAGQAAASE1IRUhEQYWMz4BNzYmJzMeAQcCACMGJicB5/47BID+OAFNRHd/BAEfH+wjIgIE/uvTt8MJBOvFxfx8U2UBuKljx2l/t13+8f7pA7TLAAEARP/oBMwEOgAZAAABITUhFSERBhYzPgE3NiYnMx4BBw4BIwYmJwGJ/rsDi/6tAVFHXWMEAR8e6yMjAgT4u7rGCgN3w8P98FRkAYF4SptMY4lF2+MDtMsAAAAAAQCH/+sFAQXFACkAAAEiBhUUFjMyNjUzFAQjICQ1NDY3NS4BNTQkITIEFSM0JiMiBhUUFjsBFQLCp6G0pI2v8/656P70/sGGhHSAASoBC+YBNfOpf6KgkqC+AoZyfWmBg2TV1ODNf6krAy6jZszU3bted3xha3PBAAAA//8ArQJtBOoDMQBGAYbgAFMzQAD//wCyAm0F6gMxAEYBhrYAZmZAAP//AAT+PwOZAAAAJwBBAAH+/gAGAEEBAAABAGAD8wGWBjIACQAAEzQ2NxcOAR0BI2BkUoAuK90ErGbYSE1Ik1y7AAAAAAEAMwPWAWkGGAAJAAABFAYHJz4BPQEzAWllUn8tLN0FXGfYR01Hk12+AAAAAQAy/sIBaAENAAkAACUUBgcnPgE9ATMBZ2RSfyws3kdl2EhOSJNbxwAAAP//AEcD1gF9BhgARwFmAbAAAMABQAAAAP//AGID8wLlBjIAJgFlAgAABwFlAU8AAP//AEAD1gLABhgAJgFmDQAABwFmAVcAAAACADL+wgKqAQ0ACQATAAAlFAYHJz4BPQEzBRQGByc+AT0BMwFnZFJ/LCzeAUJlUn8sLN5HZdhITkiTW8fGZdhITkiTW8cAAAABAEAAAAQeBbAACwAAASERIxEhNSERMxEhBB7+iPP+jQFz8wF4A3L8jgNyyAF2/ooAAAAAAQBc/mAEOQWwABMAACkBESMRITUhESE1IREzESEVIREhBDn+iPP+jgFy/o4BcvMBeP6IAXj+YAGgwgK0xAF2/orE/UwAAAAAAQCIAf8CRAP4AA0AABM0NjMyFh0BFAYjIiY1iHZnaHd2aGh2AyFgd3ZhTWF0dGH//wCcAAADWADpACYAEAMAAAcAEAHNAAD//wCcAAAFEQDpACYAEAMAACcAEAHNAAAABwAQA4YAAAAGAEv/6wdgBcUAGQAnADUAQwBRAFUAAAE0NjMyFhc+ATMyFh0BFAYjIiYnDgEjIiY1ATQ2MzIWHQEUBiMiJjUBFBYzMjY9ATQmIyIGFQUUFjMyNj0BNCYjIgYVARQWMzI2PQE0JiMiBhUTJwEXAzClj0tyJiZyTI+mpY5NdCUmcUqRpf0boYyQpaWOjaIDjklER0JHREVGAcdKQ0ZDR0RFRvtNR0ZDR0hERUbqfQLHfQFlgas6NTU6q4FOgqo5NTU5qoIDgYKrq4JNgqmpgvzMQlhVRU5BWVlBTkFZVkROQVlZQQLmQldXQk1CWVlC+9VIBHJIAAAAAAEAbACXAjMDtgAGAAABEyMBNQEzATz3p/7gASCnAib+cQGGEwGGAAABAFQAlwIbA7YABgAAEwEVASMTA/sBIP7gp/f3A7b+ehP+egGPAZAAAQAtAG0DcQUnAAMAADcnAReqfQLHfW1IBHJIAAIAPwIwA1YFxQAKAA4AAAEzFSMVIzUhJwEzAxEnAwLUgoLE/jMEAczJxAP3A3iYsLBwAnX9swFOAf6xAAEAaQKMAv8FugATAAABFz4BMzIWFREjETQmIyIGBxEjEQEBICRuSX6FxUFBNEMTxQWseUFGk6D+BQHJZ1cvKv3SAyAAAQBPAAAEawXFACcAAAEOAQchByE1Mz4BNyM1MycjNTMnNDYzMhYVIzQmIyIGFRchFSEXIRUB6wIgHwLBAfwmCi8tAqehBZ6YBOTH0+Lza1dXYQQBiP5+BQF/AcBNfzLCwg2VXKaAp3zT6de6a2OBeHyngKYAAAAAAwCZ/+wGSQWwAAoAEwArAAABESMRITIEFRQEIyczMjY1NCYrASURMxUjERQWMzI2NxcOASMiJjURIzUzEQGT+gF49wEL/vX3fn6GgoKGfgPnw8MxKxksFBohXjGDj5WVAhz95AWw+c3T+8ySbmyQXf75tP2qRTYHBrIQFJmrAla0AQcAAQBL/+sD4AXFACsAAAEhFRQWMzI2NxcOASMiAD0BIzUzNSM1MzU0ADMyFhcHLgEjIgYdASEVIRUhA5z+NJeIO201FDp4P/L+4JKSkpIBH/E9ckQUN246h5YBzP40AcwB8AKapxERxQ8QARLxAo6cjgz2ARsQD8cQE7CcDo6cAAAEAHH/6wWJBcUAGwApADcAOwAAARQGIyImPQE0NjMyFhUjNCYjIgYdARQWMzI2NQEUFjMyNj0BNCYjIgYVMzQ2MzIWHQEUBiMiJjUTJwEXArGXh4mZmIiImKk9Ojs8PTw5PAEYpJKRoqOSkaOpR0RESENHQ0rBff05fQQlcZSpgk2DqpZxMURZQk1CV0Qv/PKDqamDToKqqoJBWVlBTkVVWUEDyEj7jkgAAAAAAgBF/+sDkAXFABoAJgAABSImPQEOASM1MjY3ETQ2MzIWHQEUAgcVFBYzAzU0JiMiBhURPgE1Atvq5DFiNTdhMLCfi6nPul13MCkiLSxSUhXs2AcLCbsLCwGyxtqxmiqY/sBnRYeBA4osPUJdYf6zR7ZjAAAEAJgAAAhPBcAAAwARAB8AKwAAASE1IQE0NjMyFh0BFAYjIiY1MxQWMzI2PQE0JiMiBhUBIwEHESMRMwE3ETMIEP3GAjr9irmhorm5oKK6r1ZXVFZXVVVW/sDy/XcD8/MCiQPyAXyVAmCXuLiXdZi2tphXZWVXdVRnZ1T7jwQrAfvWBbD71gEEKQAAAAIAZAOUBGIFsAAOABYAAAEnAyMDBxEjETMbATMRIwEjESMRIzUhA/QDhD2JA2+JkJGDbv33inWIAYcE2QH+ugFSAf6vAhz+gwF9/eQBvf5FAbtfAAIAlv/sBJEETgAVAB4AACUOASMiADU0ADMyAB0BIREeATMyNjcBIgYHESERLgEEFFm4Yd7+0gE/zdMBHP0AOYlPYbZZ/pBLizsCHDeIXjg6AUTt5gFL/s7rL/64Njg7PwMqQDr+6wEeNjsA//8Aaf/1Bl8FsgAnAckAEgKGACcBdAEMAAAABwHQA1EAAAAA//8Aav/1BvYFwAAnAcsACgKUACcBdAHFAAAABwHQA+gAAAAA//8Aav/1ByYFrwAnAc0AAgKOACcBdAH9AAAABwHQBBgAAAAA//8Aav/1BoUFrwAnAc8AGAKOACcBdAFCAAAABwHQA3cAAAAAAAIAQ//rBE4F7QAUACIAAAEEABEVFAAjIgA1NBIzMhYXNy4BJwEuASMiBhUUFjMyNj0BAegBGQFN/tjl5f7n+OJSkTkDL9mXAb4llW+AfJB/e5sF7Ub+Nv6kZP3+ywEV1OoBDy8rAqnNMf1rPE6tkHqtz6FmAAAAAAEApv8bBPQFsAAHAAAFIxEhESMRIQT01/1f1gRO5QXU+iwGlQAAAAABAED+8wTBBbAADAAACQEhFSE1CQE1IRUhAQOP/e4DRPt/Ak/9sQRH/PYCEgJD/XPDlwLIAsaYw/1zAAABAJ4CbQPhAzEAAwAAASE1IQPh/L0DQwJtxAAAAQA7AAAEiwWwAAsAAAEXMzcBMwEjAyM1IQIiHQMcAVvS/he+2NEBYwF8hYUENPpQAkHFAAMAZP/rB9kETgAZACcANQAAARQAIyImJw4BIyIAPQE0ADMyFhc+ATMyABUjNCYjIgYHFR4BMzI2NSEUFjMyNjc1LgEjIgYVB9n++uGi409P5KHi/vwBA+Gi5U9O5aPgAQXzeniHuhgVvIZ5e/pxeHuFvBYXu4d5eAH/6/7XwJaWwAEp6zrqASu+k5O+/tXqmrj4YSRi/7WdnbX/YiRg+bebAAAAAf+y/ksCqAYtABwAAAUUBiMiJic3HgEzMjY1ETQ2MzIWFwcuASMiBhURAZC3qSU4IQ8SORY7Qb+zJEctGRcpHFFSP7e/CAm/BQhdVgT3tr8LCrkFBlxW+wkAAAACAGUA/QQiBAEAGwA3AAATPgEzNhYXHgEzMjY3HwEOASMiJicuAQciBgcnBz4BMzYWFx4BMzI2Nx8BDgEjIiYnLgEHIgYHJ28weUNHSl9RTERBeS8DCjF5QkRMUV9KR0J5LgMUMHlDR0pfUUxEQXkvAwoxeUJETFFfSkdCeS4DA21GTAIcLyobSkQBwUdLGyovHAJLQwHtRkwCHC8qG0pEAcFHSxsqLxwCS0MBAAAAAAEAmACBA/YEwgATAAABMxUhByEVIQcnNyM1ITchNSE3FwM6vP7TfAGp/eh+ZFq+AS18/lcCGoNkA9bK38njQaLJ38rsQQAA//8AqgAVBBYErwBnAB4AkgDQQAA5mgAHAYYADP2oAAD//wCgABMEAATDAGcAIAAgAORAADmaAAcBhgAI/aYAAAACACQAAAP5BbAABQAPAAABMwkBIwEhAycjBwMTFzM3AaTSAYP+gNP+fgLZ3BQDFNfdEwMUBbD9J/0pAtcB30FB/iH+IkBAAP//ALMAtgGlBPAAJwAQABoAtgAHABAAGgQHAAAAAgBjAn8CPgQ5AAMABwAAASMRMwEjETMBAJ2dAT6dnQJ/Abr+RgG6AAEARf83AVoBBgAJAAAlFAYHJz4BPQEzAVpQRYAmJsmbYMNBTj9/UHMAAAAAAgAYAAAEFwYtABcAGwAAMxEjNTM1NDYzMhYXBy4BIyIGHQEzFSMRISMRM72lpeLTSopeJT92R3Bj1dUCZ/PzA4a0XMfQHh7JFhpfY1y0/HoEOgAAFgBZ/nIH7AWuAA0AHQArADsAQQBHAE0AUwBdAGEAZQBpAG0AcQB1AH4AggCGAIoAjgCSAJYAAAE0JiMiBh0BFBYzMjY1BTI2NTQmJzU+ATU0JisBEScUBiMiJj0BNDYzMhYVBRQGIyImNSMUFjMyNjURIwERMxUzFSE1MzUzEQERIRUjFSU1IREjNQEzHgEVFAYrATUBNSEVITUhFSE1IRUBNSEVITUhFSE1IRUTMzIWFRQGKwEFIzUzNSM1MxEjNTMlIzUzNSM1MxEjNTMDN39oaH5+amh9ASBeZzQtJSptZ7yfSEFDSUhCQUoDujYpMzVdaF1TaFz5xHHEBSjHb/htATXEBewBNm/82gUwMjQzfgFOARb9WwEV/VwBFAIKARb9WwEV/VwBFLxdPjg6PF388XFxcXFxcQcib29vb29vAkRieXlicGR3d2TYTk0uRA0DDjwoTEr929hHTExHcEVOTkWbLDYsL1NRW1ABevtPATvKcXHK/sUGHwEddKmpdP7jqfy2Ai0nKSqpA0p0dHR0dHT5OHFxcXFxcQRbHygpJ5b8fvr8Ffl+/H76/BX5AAAAAAUAXP3VB9cIYgADAB0AIQAlACkAAAkDBTQ2Nz4BNTQmIyIGBzM+ATMyFhUUBgcOARUXIxUzAzMVIwMzFSMEGAO//EH8RAQPGSlJXaaWi6UCywE6LDc6MitQOsrKyksEBAIEBAZS/DH8MQPP8TY7GyiAUIOUgYk0Mz42Mk0cOVZaW6r9TAQKjQQAAAAAAQBN/+8DygSNAB4AABsBIRUhAz4BNzYWFRQGIyImNTcUFjMyNjU0JiMiBgd8RwLJ/gwdJmo7usrY58L88m9daWNlXFlYFAH4ApXG/vMWIAIDx7u1z6KnEEZTamBday4oAAAAAAIATQAAAyUDIQAKAA8AAAEzFSMVIzUhJwEzATMRIwcCs3Jyv/5jCgGmwP5g4QMPASKRkZF0Ahz+AQEbGAAAAAACAGz/6wQnBcUADQAbAAABEAIjIgIZARASMzISESc0JiMiBhURFBYzMjY1BCf74eH+/OHh/fN2dXV1dnZ1dAIx/t7+3AElASEBTQEhASb+2v7fJbapqbb+a7ipqLkAAAAB/5/+xQLtA0IADwAAAzMgABEQAiEnMjY1LgErAWH0ASABOvn+/AGYcwGwtvQDQv7V/uT++/7Pusqrw8EAAAAAAf+w/ksBjgDNAA8AACURFAYjIiYnNx4BMzI2NREBjrepJTghDhE5FzxAzf70t78ICcYFB1ZVAQwAAAAAAQAY/l8B0wBCABMAACUeARUUBiMiJic3HgEzMjY1NCYnAQ9lX4lsQ1wnIx0vITouOjhCNYtNZ28ZE44KDS0jME0xAAABAFz+mgFPALYAAwAAASMRMwFP8/P+mgIcAAAAAgB1BNAC9wbcAA0AIQAAARQGIyImNTMUFjMyNjUTFAYjIiYjIgYVJzQ2MzIWMzI2NQL3rJWWq69ETkxGkF5IOYEpICloXUktiyseLAWwZ3l6ZjI9PTIBD01pRzIlG0tuRzElAAIAdQTVAvYHCAANAB0AAAEUBiMiJjUjFBYzMjY1JSc+ATU0JiM3MhYVFAYPAQJIR0tNR62ql5Wr/nMIST5NRQecoVJAAQWwMTw8MWV2dmUZdgIWGx0ZYE5GNTUHOgAAAAIAdQTTAwAGfgANABEAAAEUBiMiJjUzFBYzMjY1JzMHIwMAr5aZrbFGT0xHZbapgAWwZXh4ZTI+PjLOwAAAAAACAHkE5wNYBtEACAAcAAABByMnByMnJTM3FAYjIiYjIgYVJzQ2MzIWMzI2NQNYAbyzsrwBASaTulc/M3glHChaVEEogiUbKwTqA46OA+rfP15CLBsYP2FBLRwAAAIAdQTnBAoGywAGABYAAAEjBTM3FzMvAT4BNTQmIzcyFhUUBg8BAka7/urBsrPBXQdBNkQ9B4iNSTgBBeH6oqKGfQQZHSEdaVdNOz0HOwAAAv9MBNoDXAaDAAYACgAAASMnByMlMwUjAzMDXNWfn9QBI6H+h53X3QTajo76XAELAAAAAAIAegTnBIsGkAAGAAoAAAEzBSMnByMBMwMjAZ2hASPUn5/VAzPe2J0F4fqOjgGp/vUAAAACAFsElQMVBpgADQARAAABFAYjIiY1MxQWMzI2NScjJzMDFbuio7q1UFhWUDq/0vsFsIKZmYI7SUk7FdMAAAAAAQCQBGkBhQYMAAUAABM3MwMVI5B3fhvaBQ3//veaAAACABwAAASsBI0ABwAKAAAlIQcjATMBIwEhAwNX/hlW/gHM+AHM/v4KAVes6ekEjftzAasBzQAAAAMAjgAABC4EjQAPABgAIQAAMxEhMhYVFAYHFR4BFRQGIwERITI2NTQmIyUzMjY1NCYrAY4BrdvrYFpxdtzS/wABAGJZWmH/ALtqaWVuuwSNnqNUgCADGo5jpqQB+v7GS01PU6hISE4+AAAAAAEAaP/vBDIEnQAbAAABDgEjIgA9ATQAMzIWFyMuASMiBh0BFBYzMjY3BDEP+NXb/u4BEtvZ9BDzEG1tc4iJcnFoEAGU1NEBFOS+4wEV0dJ3a62Jv4quaXwAAAAAAgCOAAAEQgSNAAkAEwAAMxEhMgAdARQAIwMRMzI2PQE0JiOOAbfeAR/+4d7FxXSWlnQEjf741tLX/voDzPz0oH3Te6EAAAAAAQCOAAADzgSNAAsAAAEhESEVIREhFSERIQN4/ggCTvzAA0D9sgH4Afz+xMAEjcH+8gAAAAEAjgAAA9oEjQAJAAABIREjESEVIREhA4P9/fIDTP2mAgMB3v4iBI3B/tQAAQBo/+8EXwSdAB8AACUOASMiAD0BNAAzMhYXIy4BIyIGHQEUFjMyNjc1IzUhBF8577/v/t8BH+nh7hPyDnNvf5eYhmJ0H+8B4Z9IaAEF2fPXAQbCtF1Ynn30gJ4fF9SxAAAAAAEAjgAABHoEjQALAAAhIxEhESMRMxEhETMEevT9+vLyAgb0Adj+KASN/g0B8wAAAAEAjgAAAYAEjQADAAAhIxEzAYDy8gSNAAEALv/uA4wEjQAPAAABMxEUBiMiJjUzFBYzMjY1Apry6b3P6fNpXE9lBI385bXPubpbWGpaAAAAAQCOAAAEXQSNAAwAAAEjESMRMxEzASEJASEB62vy8lUBQQEt/mQBtv7LAdX+KwSN/iAB4P3V/Z4AAAAAAQCOAAADeQSNAAUAACUhFSERMwGAAfn9FfLAwASNAAABAI4AAAVuBI0ADgAACQEhESMRIwEjASMRIxEhAv4BQAEw8wP+2KX+2APyATIBKwNi+3MC/v0CAwH8/wSNAAAAAQCOAAAEhQSNAAsAACEjAQcRIxEzATcRMwSF8v3wA/LyAhAD8gMeAfzjBI385AEDGwAAAAIAZv/uBGQEnQANABsAAAEUACMiAD0BNAAzMgAVJzQmIyIGHQEUFjMyNjUEZP7p6Of+6AEW6OcBGfOOf4CLjX9/jQHn5f7sARTlvuQBFP7s5AGPp6ePv5GoqJEAAgBo/38ElASdABMAIQAAARQGBxcHJw4BIyIAPQE0ADMyABUnNCYjIgYdARQWMzI2NQRmODacoaE3c0Hn/ugBFujnARnzjn+AjI2Af40B52OlQZ2CoBkYARTlvuQBFP7s5AGPp6aQv5GoqJEAAgCOAAAESQSNABsAJAAAAREjESEyFhUUBgcVHgEdARQWFxUjLgE9ATQmIyczMjY1NCYrAQGA8gHO1uphYGxcERX6FQpgYPDcaWRlaNwBvf5DBI22pl6CKQMejWtWLGYXEBZsOFRWWcJUT05cAAAAAAEAT//uBBkEnQAlAAABNCYnLgE1NDYzMhYVIzQmIyIGFRQWFx4BFRQEIyIkNTMeATMyNgMnbJPlyfLV2u/yam1uZ2Sj28v/AN/d/vLyAYlvd3YBOz5NITSWoJa2v69RXEw+QUgkM5uanrG4uV9STQABADwAAAPpBI0ABwAAASERIxEhNSED6f6g8/6mA60DzPw0A8zBAAAAAQB+/+4EewSNABEAAAERFAQjIiQ1ETMRFBYzMjY1EQR7/uvp6f7q8o5/f40Ejf0KzN3dzAL2/Qpyd3dyAvYAAAEAHAAABIsEjQAJAAABFzM3ASEBIwEhAkARAxEBJQEB/kP3/kUBAQE1R0QDW/tzBI0AAAABADQAAAXXBI0ADwAAATMTIQEjAyMDIwEhEzMTMwQ4A5sBAf7j580DzOf+5AEAnAPK0gFZAzT7cwMM/PQEjfzJAzcAAAEALAAABFEEjQALAAABEyEJASELASEJASECPPEBG/6KAX/+5/n4/uUBgP6JARkC+AGV/b/9tAGd/mMCTAJBAAABABMAAAQ8BI0ACAAACQEhAREjEQEhAigBCQEL/mLz/mgBCwJvAh79Cv5pAaIC6wABAEoAAAPrBI0ACQAAJSEVITUBITUhFQF+Am38XwJZ/cgDcMDAegNSwXUAAAIAbf/vBBMEnQANABsAAAEUBiMiJjURNDYzMhYVJzQmIyIGFREUFjMyNjUEE/3V1v781tX/83dqaXZ3aml2AZvI5OTIAVfH5OTHAWx9fmv+qG5+fW8AAAABAD4AAAHzBJ0ABQAAISMRIzUlAfPzwgG1A6e6PAAAAAEAUgAAA5IEnQAYAAApATUBPgE1NCYjIgYVIzQ2MzIWFRQGDwEhA5L80QGeVkNMTlph8+bIvc6DntMB+8ABg1FrOEZfZE6j0LmteKuNxwAAAQBN/+8DuwSdACgAAAEyNjU0JiMiBhUjNDYzMhYVFAYHHgEVFAYjIiY1MxQWMzI2NTQmKwE1AgZcVFxaTmLy6LPL5F5WYmX2zLP58WpYXWtfY7kCq09LQFdMPpmyqaNSgicjh2Wls6ytQVhdRVpPsQAAAAACADkAAAQYBI0ACgAPAAABMxUjFSM1IScBMwEhEScHA3Gnp/L9xQsCQ/X9yQFFAwIBm8PY2J8DFv0OAboBBAAAAQBRAAAENAXFABgAACkBNQE+ATU0JiMiBhUjNAAzMhYVFAYHASEENPw5Adp2VnBjgnrzAQXq1vCKl/63ApinAgWCn09kgo2BygEH5L+A3qb+pAAAAgBt/+8D8ASdABoAJwAAATIWFwcuASMiBh0BPgEzMhYVFAYjIiY1ETQkEyIGBxUUFjMyNjU0JgJcSotDJzltSHKNModVvcX1zMX9ARexT2sbeV5ba2AEnRoYuhcUi3VWMTTCsrLW+MoBKc71/ZIyLh5wkm5UW2MAAQA8AAADZgSNAAwAAAEGAhEVIzUQEjchNSEDZriW8+OE/bADKgPM5f7e/vS5uQEHAYqCwQAAAAADAFL/7wPnBJ0AFwAjAC8AAAEUBgceARUUBiMiJDU0NjcuATU0NjMyFgM0JiMiBhUUFjMyNgM0JiMiBhUUFjMyNgPEZFlpd/3Fzf76em1eZvC/t+nQeVdgf39hWHcjZElSa21RSWMDXFeCJymMX6W0tKVfjCkngVicpaX9XUlcXElLW1sCREBOTEJBUVEAAAACAD//7wO1BJ0AGgAnAAAlMjY9AQ4BIyImNTQ2MzIWFREUBCMiJic3HgETMjY3NTQmIyIGFRQWAeFify1xQsjb98nA9v79ykiaRyY+c2JKZRt0WllqZa9/YVoqKs20qd75yv62u+YaGLgXEwGUNCpAbY57UFtzAAABAFcAAAGWAywABQAAISMRIzUlAZbAfwE/An+WFwAAAAEAawAAAtUDLAAYAAApATUBPgE1NCYjIgYVIzQ2MzIWFRQGDwEhAtX9oQExQiYyNz4/vqqUjphfeogBZ5EBADdEKi03OzFtkYB3U3JrdAAAAQBg//UC6wMsACgAAAEyNjU0JiMiBhUjNDYzMhYVFAYHHgEVFAYjIiY1MxQWMzI2NTQmKwE1AaFCPEA/Nj6/q4WYqUY+R0qxmIq4v0Q+QkpFR3sB2TQxKDQsImh4dXA4WRoYXkVyenh3LDIzLjk2gwAAAAABADgAAAJGBbAABQAAISMRITUlAkbz/uUCDgSgpmoAAAEAaP/1AwEDIQAeAAAbASEVIQc+ATc2FhUUBiMiJjU3FBYzMjY1NCYjIgYHiTQCFP6VFRxMLIeVoayRu75NQUpERj0+Pw8BWgHHkqoRFgECi4CAj290DC0xPjw/SR4ZAAIAcP/1AwoDLAAaACcAAAEyFhcHLgEjIgYdAT4BMzIWFRQGIyImPQE0NhMiBgcVFBYzMjY1NCYB4DdnLiApTzJRYiViP4iNtpeTus6DNkoSUkBCSUQDLBIRjQ8PWE0zICKHeXuUqo3Ij6n+Sx8cEEtbQTc6PwAAAAEAUgAAAqQDIQAMAAABDgEdASM1NBI3ITUhAqSHaL+aWf5pAlICj6C7tX9/tAELUZIAAAADAGj/9QMOAywAFwAjAC8AAAEUBgceARUUBiMiJjU0NjcuATU0NjMyFgM0JiMiBhUUFjMyNgM0JiMiBhUUFjMyNgL2SUBLVrqSmMJYT0RLs46IraZTPENYWEQ9URpDMjlISjgxQwJQO1obHWFAcnt7ckBhHRtaO2txcf4wMDs7MC82NgGIKC4tKSoyMgAAAAACAGD/9QLwAywAGgAnAAAlMjY9AQ4BIyImNTQ2MzIWHQEUBiMiJic3HgETMjY3NTQmIyIGFRQWAZVEWCBRLZOgs5KRusOYNW40ICtTSzVGD1E+PUdFhk5AOyAfkH91mK2M3oKeERGOEQ4BESUeGUpdSzU7SAAAAAACAHD/9QMkAywADQAbAAABFAYjIiY9ATQ2MzIWFSc0JiMiBh0BFBYzMjY1AyS7n5+7up+evb9SSkpQUEtJUgEnkKKikNGPpaWPAktVVUvTTlNTTgABAJcChwMmAzEAAwAAASE1IQMm/XECjwKHqgAAAwCWBEgCngaVAAQAEAAcAAABMxcHIwc0NjMyFhUUBiMiJjcUFjMyNjU0JiMiBgG84QHxlYJrUU5qaU9Ra2MzJiQwMCQmMwaVA7/eTWVkTk1gYE0mMDAmJzMzAAACAGwEbwLMBdcABQAPAAABEzMVAyMlNDY3Fw4BHQEjAYpv0+Zc/uJbVVAqJbEEhQFAFf7BVlqKLEgpYURSAAAAAQBP/+sEFgXFACgAAAEzMjY1NCYjIgYVIzQkMzIWFRQGBx4BFRQEIyIkNTMUFjMyNjU0JisBAYapeWVub2V78wECztn6b2x/cv7x2s7+8POAbnOAdX+pA0ZzbWtxb16v4dTLX6sxLbB2zOHUx2N2eHJ+cgACADgAAARZBbAACgAPAAABMxUjESMRIScBMwEhEScHA6G4uPL9jwYCb/r9hwGHAxcCB8T+vQFDlQPY/FcCVgExAAAAAAEAgf/rBCYFsAAeAAAbASEVIQM+ATc2EhUUAiMiJDU3FBYzMjY1NCYjIgYHnFQDAf3JLCxvSNHk8OvE/vrremVzdXhzZl4XAosDJdL+kyApAgP+/Ora/vTRyQhsdJ2FhqM/PwACAHT/6wRGBcUAGgAnAAABMhYXBy4BIyIGHQE+ATMyEhUUAiMiABkBEAATIgYHFRQWMzI2NTQmAqhQjTouOWdIlK89nWDH3//Y4v7nATy0XX4jkndtd34FxSAcvBgb3cMHODv+89fk/ucBMgEeARYBIgFS/UpAOWi9xLOIhaIAAAMACv5KBBsETgAvAD8ATQAAASMeAR0BFAYjIiYnDgEVFBY7ATIWFRQEIyImNTQ2Ny4BNTQ2Ny4BPQE0NjMyFhchASImJw4BFRQWMzI2NTQmIwEUFjMyNj0BNCYjIgYVBBuKHB73yipJIxITQj2xxc3+1vno/GNTGRk/Nlxi9s0rTicBcf2GGCoUJy59fZCiUGX+zHNgXXJzXl9yA6AqXzUWnc8IChEoGSsilJWF2552WXwpFzwnQ18mMZxhFqPJCgr73gMEFUYwPlFiPDo7ArRJaGhJFktlZUsAAAABADIAAAP3BbAADAAAAQoBAwcjNxoBNyE1IQP3+KQnD/MPJ9zH/ScDxQTt/tP+NP6mmpoBUgIO88MAAAABAD7+TQREBEoAIwAAEzIWHwETMwETHgEXOgE3Bw4BJy4BLwEDIwEDLgEjIgYHJz4BwYxzPVvh9f6fxRo9KxARDwcTNhdxeT9l+PgBfKccWTwMKA8CH0IESoqGzgHO/Sj+QT1EBQLGBgYBBZST5v4AAwwBgEVRBAG6CAsAAwBh/+sEKgXFABcAIwAvAAABFAYHHgEVFAQjIiQ1NDY3LgE1NDYzMhYDNCYjIgYVFBYzMjYDNCYjIgYVFBYzMjYEBXVqeor++dzf/vmIfGp08c3L9c2HbG6DgnFthCZwXV9sbWBdbgQwcaYuL7V6z9PTz3u0MC2mccbPz/yjbYSDbnB8fQL9Ynl1ZmV1dQAAAgBW/+sEXwROABQAIgAAJScOASMiAj0BEBIzMhYXPwEzAxMjARQWMzI2NzUuASMiBhUDZAM2qn7O397Reqc3AxvdbHPd/cdxf21vFxFzbX9zvwFpbAEd8RUBCAE4bGcBvv3i/eQB+Zmzt5ovm8PRrAAAAAACAFP/6wQ0BbAAGgArAAABFSEeARcWEh0BFAAjIgA9ATQSNzI2My4BJzUTFBYzMjY9ATQmJy4BIyIGFQPD/lQaZzqvs/787Oz+++bHCQwMgZI3b3qEgnxgSBMjFYmABbDBG1gul/77nxXw/t0BHegVwwEHHAF0iD+J/E6ZuLmYFW6pMAQEupUAAgCfAAAEyAWwAAkAEwAAMxEhIAARFRAAIQMRMzI2PQE0JiOfAZ4BUwE4/sj+rauk57i45wWw/tH+z/H+z/7SBO371cXY89XGAAAAAAIAYP/rA/4ETgAfACoAACEuAScOASMiJjU0NjsBNTQmIyIGFSM0NjMyFhURFBYXJTI2NzUjIgYVFBYDCAkMAzefYqys8+qrX2VjWfPd4dHXDxT98lSDIa96bUcdNRw6SaKiqqR6VEZMQ5S4oLn+BEZ4O647K9FdVUJDAAACAJ8AAAT+BbAADgAXAAABFAYHARUhASERIxEhMgQBITI2NTQmIyEEqn93AUr+9f7d/sLzAg34AQb86AEbhoSCif7mBAaGwDX9iBMCS/21BbDa/jh7dXB/AAAAAAEAnwAABS8FsAAMAAABBxEjETMRNwEhCQEhAieV8/OSAasBIP3eAmL+zAKApf4lBbD9X6sB9v2J/McAAAEAgQAABDwGGAANAAABBxEjETMRFzcBIQkBIQHgbfLyA1ABLQEe/m0Bvv7mAc9z/qQGGPxxAWEBUf5A/YYAAAABAJ8AAAURBbAACwAAAREjETMRMwEhCQEhAZLz8wcCJgEt/ZsCiv7TAp/9YQWw/X8Cgf02/RoAAAEAgQAABCIGGAAMAAABBxEjETMRFwEhCQEhAXYD8vIDAVYBKv5QAdz+2wHnAf4aBhj8iAEBm/4M/boAAAIAUv/rBBcFxQAbACgAACUyNj0BJw4BIyICNTQAMzIAGQEQACMiJic3HgETMjY3NTQmIyIGFRQWAgOFnQMwilXV7AEKy+cBCf7c8EyeRCBAfXhdfSGAemSCdq29vSMBQUIBBPHmASL+3P7k/qv+5v7VHh64GxcB2EY7nLGvt46SpgAAAAIAjgAABEAEjQAKABMAAAERIxEhMhYVFAYjJzMyNjU0JisBAYDyAePY9/fY8fFscHBs8QGG/noEjdaur9TCblFTcgD//wB1BJUC+wWwAgYAnAAA//8AAAAAAAAAAAIGAAMAAP//AEcCCQJUAs0CBgAPAAAAAgAkAAAFDAWwAA0AGwAAMxEjNTMRISAAERUQACETIREzMjY9ATQmKwERIb2ZmQHKASoBW/6i/sw5/v3D2c3Kz9ABAwKRqgJ1/qb+4sH+4P6pApH+MerLw83m/k4AAAAAAgAkAAAFDAWwAA0AGwAAMxEjNTMRISAAERUQACETIREzMjY9ATQmKwERIb2ZmQHKASoBW/6i/sw5/v3D2c3Kz9ABAwKRqgJ1/qb+4sH+4P6pApH+MerLw83m/k4AAAAAAf/9AAAEKgYYABwAAAEjERc+ATMyFhURIxE0JiMiBgcRIxEjNTM1MxUzAoz+AzWXYLC982RoSW4m856e8/4Ex/7sAUtR1Of9bQKVgnA6NfzoBMeqp6cAAAEANQAABLUFsAAPAAABIxEjESM1MxEhNSEVIREzA73P883N/joEgP45zwMS/O4DEqoBMcPD/s8AAf/n/+wCdgVBAB8AAAERMxUjFTMVIxEUFjMyNjcXDgEjIiY1ESM1MzUjNTMRAaHDw9XVMSsZLBQaIV4xg4/Hx5WVBUH++bSlqv75RTYHBrIQFJmrAQeqpbQBB///ABoAAAUoByICJgAjAAAABwBCAPwBXP//ABoAAAUoByECJgAjAAAABwBzAbMBW///ABoAAAUoB0cCJgAjAAAABwCaALcBWf//ABoAAAUoB2MCJgAjAAAABwCgALkBbP//ABoAAAUoBw0CJgAjAAAABwBoAJMBXf//ABoAAAUoB48CJgAjAAAABwCeAUwBs///ABoAAAUoB70CJgAjAAAABwHUAVIBKP//AHT+PATYBcUCJgAlAAAABwB3Acb/+///AJ8AAAR1ByICJgAnAAAABwBCAMQBXP//AJ8AAAR1ByECJgAnAAAABwBzAXsBW///AJ8AAAR1B0cCJgAnAAAABwCaAH8BWf//AJ8AAAR1Bw0CJgAnAAAABwBoAFsBXf///8wAAAGgByICJgArAAAABwBC/4IBXP//AK0AAAKEByECJgArAAAABwBzADgBW////9gAAAJ5B0cCJgArAAAABwCa/z0BWf///70AAAKSBw0CJgArAAAABwBo/xkBXf//AJ8AAAUQB2MCJgAwAAAABwCgAO4BbP//AHT/6wUbBzcCJgAxAAAABwBCASMBcf//AHT/6wUbBzYCJgAxAAAABwBzAdoBcP//AHT/6wUbB1wCJgAxAAAABwCaAN4Bbv//AHT/6wUbB3gCJgAxAAAABwCgAOABgf//AHT/6wUbByICJgAxAAAABwBoALoBcv//AIb/6wTxByICJgA3AAAABwBCARcBXP//AIb/6wTxByECJgA3AAAABwBzAc4BW///AIb/6wTxB0cCJgA3AAAABwCaANIBWf//AIb/6wTxBw0CJgA3AAAABwBoAK4BXf//ABMAAATvByECJgA7AAAABwBzAZYBW///AF7/7AQB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AAcAnADtAcH//wBU/kwECAYaAiYASQAAAAYAnHlqAAD//wB0/+sE4gc2AiYAKQAAAAcAnQGHAYD//wBU/kwECAXfAiYASQAAAAcAnQETACn//wB0/eIE4gXFAiYAKQAAAAcBkQG2/qv//wBU/kwECAaKAiYASQAAAAcBpQEtAH7//wCfAAAFEAdHAiYAKgAAAAcAmgDoAVn//wB9AAAEDAdiAiYASgAAAAcAmgAbAXT///+/AAACkAdjAiYAKwAAAAcAoP8/AWz///+iAAACcwYMAiYAigAAAAcAoP8iABX///+/AAAClgb2AiYAKwAAAAcAbv84AUb///+iAAACeQWgAiYAigAAAAcAbv8b//D////lAAACawdcAiYAKwAAAAcAnP9wAaz////IAAACTgYFAiYAigAAAAcAnP9TAFX//wAc/lwBoAWwAiYAKwAAAAYAn/MKAAD////+/lIBgwYYAiYASwAAAAYAn9UAAAD//wCjAAABpgchAiYAKwAAAAcAnQAJAWv//wCt/+sGMwWwACYAKwAAAAcALAJNAAD//wCQ/ksDoQYYACYASwAAAAcATAITAAD//wA6/+sEsgc/AiYALAAAAAcAmgF2AVH///+1/ksCZAXjAiYAmAAAAAcAmv8o//X//wCf/fAFLwWwAiYALQAAAAcBkQGK/rn//wCB/fIENQYYAiYATQAAAAcBkQEv/rv//wCfAAAELwb4AiYALgAAAAcAcwAqATL//wCQAAACZwdfAiYATgAAAAcAcwAbAZn//wCf/fIELwWwAiYALgAAAAcBkQF1/rv//wBY/fIBgwYYAiYATgAAAAcBkQAT/rv//wCfAAAELwWyAiYALgAAAAcBkQIEBKz//wCQAAAC6AYYACYATgAAAAcBkQGOBRL//wCfAAAELwWwAiYALgAAAAcAnQG7/dT//wCQAAAC9wYYACYATgAAAAcAnQFa/a///wCfAAAFEAchAiYAMAAAAAcAcwHoAVv//wB+AAAECwXfAiYAUAAAAAcAcwFTABn//wCf/fIFEAWwAiYAMAAAAAcBkQHg/rv//wB+/fIECwROAiYAUAAAAAcBkQFL/rv//wCfAAAFEAdOAiYAMAAAAAcAmwEDAV3//wB+AAAECwYMAiYAUAAAAAYAm24bAAD////VAAAECwYYAiYAUAAAAAcBkf+QBRL//wB0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aAB0AHQAcAA6AC8ALwB3AHcAdwAuAGEAcABhAGMAaABlAC4AbwByAGcALwBsAGkAYwBlAG4AcwBlAHMALwBMAEkAQwBFAE4AUwBFAC0AMgAuADAAUgBvAGIAbwB0AG8ATQBlAGQAaQB1AG0AAAIAAAAAAAD/agBkAAAAAAAAAAAAAAAAAAAAAAAAAAAEHAAAAQIAAgADAAUABgAHAAgACQAKAAsADAANAA4ADwAQABEAEgATABQAFQAWABcAGAAZABoAGwAcAB0AHgAfACAAIQAiACMAJAAlACYAJwAoACkAKgArACwALQAuAC8AMAAxADIAMwA0ADUANgA3ADgAOQA6ADsAPAA9AD4APwBAAEEAQgBDAEQARQBGAEcASABJAEoASwBMAE0ATgBPAFAAUQBSAFMAVABVAFYAVwBYAFkAWgBbAFwAXQBeAF8AYABhAKMAhACFAL0AlgDoAIYAjgCLAJ0AqQCkAIoBAwCDAJMA8gDzAI0AlwCIAQQA3gDxAJ4AqgD1APQA9gCiAJAA8ACRAO0AiQCgAOoAuAChAO4BBQDXAQYA4gDjAQcBCACwALEBCQCmAQoBCwEMAQ0BDgEPANgA4QDbANwA3QDgANkA3wEQAREBEgETARQBFQEWARcBGAEZARoBGwEcAR0BHgEfASABIQEiAJ8BIwEkASUBJgEnASgBKQEqASsBLAEtAJsBLgEvATABMQEyATMBNAE1ATYBNwE4ATkBOgE7ATwBPQE+AT8BQAFBAUIBQwFEAUUBRgFHAUgBSQFKAUsBTAFNAU4BTwFQAVEBUgFTAVQBVQFWAVcBWAFZAVoBWwFcAV0BXgFfAWABYQFiAWMBZAFlAWYBZwFoAWkBagFrAWwBbQFuAW8BcAFxAXIBcwF0AXUBdgF3AXgBeQF6AXsBfAF9AX4BfwGAAYEBggGDAYQBhQGGAYcBiAGJAYoBiwGMAY0BjgGPAZABkQGSAZMBlAGVAZYBlwGYAZkBmgGbAZwBnQGeAZ8BoAGhAaIBowGkAaUBpgGnAagBqQGqAasBrAGtAa4BrwGwAbEBsgGzAbQBtQG2AbcBuAG5AboBuwG8Ab0BvgG/AcABwQHCAcMBxAHFAcYBxwHIAckBygHLAcwBzQCyALMBzgC2ALcAxAHPALQAtQDFAIIAwgCHAdAAqwDGAL4AvwC8AdEB0gHTAdQB1QHWAdcB2ACMAdkB2gHbAdwB3QCYAJoAmQDvAKUAkgCcAKcAjwCUAJUAuQHeAd8B4ADAAeEB4gHjAeQB5QHmAecB6AHpAeoB6wHsAe0B7gHvAfAB8QHyAfMB9AH1AfYB9wH4AfkB+gH7AfwB/QH+Af8CAAIBAgICAwIEAgUCBgIHAggCCQIKAgsCDAINAg4CDwIQAhECEgITAhQCFQIWAhcCGAIZAhoCGwIcAh0CHgIfAiACIQIiAiMCJAIlAiYCJwIoAikCKgIrAiwCLQIuAi8CMAIxAjICMwI0AjUCNgI3AKwCOAI5AOkCOgI7AjwArQDJAMcArgBiAGMCPQBkAMsAZQDIAMoAzwDMAM0AzgBmANMA0ADRAK8AZwDWANQA1QBoAOsAagBpAGsAbQBsAG4CPgBvAHEAcAByAHMAdQB0AHYAdwB4AHoAeQB7AH0AfAB/AH4AgACBAOwAugI/AkACQQJCAkMCRAD9AP4CRQJGAkcCSAD/AQACSQJKAksCTAJNAk4CTwJQAlECUgJTAlQCVQJWAPgA+QJXAlgCWQJaAlsCXAJdAl4CXwJgAmECYgJjAmQCZQJmAmcCaAJpAmoCawJsAm0CbgJvAnACcQJyAnMCdAJ1AnYCdwJ4AnkCegJ7AnwCfQJ+An8CgAKBAoICgwKEAoUChgKHAogCiQKKAPsA/AKLAowA5ADlAo0CjgKPApACkQKSApMClAKVApYClwKYApkCmgKbApwCnQKeAp8CoAKhAqIAuwKjAqQCpQKmAOYA5wKnAqgCqQKqAqsCrAKtAq4CrwKwArECsgKzArQCtQK2ArcCuAK5AroCuwK8Ar0CvgK/AsACwQLCAsMCxALFAsYCxwLIAskCygLLAswCzQLOAs8C0ALRAtIC0wLUAtUC1gLXAtgC2QLaAtsC3ALdAt4C3wLgAuEC4gLjAuQC5QLmAucC6ALpAuoC6wLsAu0C7gLvAvAC8QLyAvMC9AL1AvYC9wL4AvkC+gL7AvwC/QL+Av8DAAMBAwIDAwMEAwUDBgMHAwgDCQMKAwsDDAMNAw4DDwMQAxEDEgMTAxQDFQMWAxcDGAMZAxoDGwMcAx0DHgMfAyADIQMiAyMDJAMlAyYDJwMoAykDKgMrAywDLQMuAy8DMAMxAzIDMwM0AzUDNgM3AzgDOQM6AzsDPAM9Az4DPwNAA0EDQgNDA0QDRQNGA0cDSANJA0oDSwNMA00DTgNPA1ADUQNSA1MDVANVA1YDVwNYA1kDWgNbA1wDXQNeA18DYANhA2IDYwNkA2UDZgNnA2gDaQNqA2sDbANtA24DbwNwA3EDcgNzA3QDdQN2A3cDeAN5A3oDewN8A30DfgN/A4ADgQOCA4MDhAOFA4YDhwOIA4kDigOLA4wDjQOOA48DkAORA5IDkwOUA5UDlgOXA5gDmQOaA5sDnAOdA54DnwOgA6EDogOjA6QDpQOmA6cDqAOpA6oDqwOsA60DrgOvA7ADsQOyA7MDtAO1A7YDtwO4A7kDugO7A7wDvQO+A78DwAPBA8IDwwPEA8UDxgPHA8gDyQPKA8sDzAPNA84DzwPQA9ED0gPTA9QD1QPWA9cD2APZA9oD2wPcA90D3gPfA+AD4QPiA+MD5APlA+YD5wPoA+kD6gPrA+wD7QPuA+8D8APxA/ID8wP0A/UD9gP3A/gD+QP6A/sD/AP9A/4D/wQABAEEAgQDBAQEBQQGBAcECAQJBAoECwQMBA0EDgQPBBAEEQQSBBMEFAQVBBYEFwQYBBkEGgQbBBwEHQQeBB8EIAQhAPcEIgQjAAQHdW5pMDAwOQZtYWNyb24OcGVyaW9kY2VudGVyZWQESGJhcgxrZ3JlZW5sYW5kaWMDRW5nA2VuZwVsb25ncwVPaG9ybgVvaG9ybgVVaG9ybgV1aG9ybgd1bmkwMjM3BXNjaHdhB3VuaTAyRjMJZ3JhdmVjb21iCWFjdXRlY29tYgl0aWxkZWNvbWIEaG9vawd1bmkwMzBGCGRvdGJlbG93BXRvbm9zDWRpZXJlc2lzdG9ub3MJYW5vdGVsZWlhBUdhbW1hBURlbHRhBVRoZXRhBkxhbWJkYQJYaQJQaQVTaWdtYQNQaGkDUHNpBWFscGhhBGJldGEFZ2FtbWEFZGVsdGEHZXBzaWxvbgR6ZXRhA2V0YQV0aGV0YQRpb3RhBmxhbWJkYQJ4aQNyaG8Gc2lnbWExBXNpZ21hA3RhdQd1cHNpbG9uA3BoaQNwc2kFb21lZ2EHdW5pMDNEMQd1bmkwM0QyB3VuaTAzRDYHdW5pMDQwMgd1bmkwNDA0B3VuaTA0MDkHdW5pMDQwQQd1bmkwNDBCB3VuaTA0MEYHdW5pMDQxMQd1bmkwNDE0B3VuaTA0MTYHdW5pMDQxNwd1bmkwNDE4B3VuaTA0MUIHdW5pMDQyMwd1bmkwNDI0B3VuaTA0MjYHdW5pMDQyNwd1bmkwNDI4B3VuaTA0MjkHdW5pMDQyQQd1bmkwNDJCB3VuaTA0MkMHdW5pMDQyRAd1bmkwNDJFB3VuaTA0MkYHdW5pMDQzMQd1bmkwNDMyB3VuaTA0MzMHdW5pMDQzNAd1bmkwNDM2B3VuaTA0MzcHdW5pMDQzOAd1bmkwNDNBB3VuaTA0M0IHdW5pMDQzQwd1bmkwNDNEB3VuaTA0M0YHdW5pMDQ0Mgd1bmkwNDQ0B3VuaTA0NDYHdW5pMDQ0Nwd1bmkwNDQ4B3VuaTA0NDkHdW5pMDQ0QQd1bmkwNDRCB3VuaTA0NEMHdW5pMDQ0RAd1bmkwNDRFB3VuaTA0NEYHdW5pMDQ1Mgd1bmkwNDU0B3VuaTA0NTkHdW5pMDQ1QQd1bmkwNDVCB3VuaTA0NUYHdW5pMDQ2MAd1bmkwNDYxB3VuaTA0NjMHdW5pMDQ2NAd1bmkwNDY1B3VuaTA0NjYHdW5pMDQ2Nwd1bmkwNDY4B3VuaTA0NjkHdW5pMDQ2QQd1bmkwNDZCB3VuaTA0NkMHdW5pMDQ2RAd1bmkwNDZFB3VuaTA0NkYHdW5pMDQ3Mgd1bmkwNDczB3VuaTA0NzQHdW5pMDQ3NQd1bmkwNDdBB3VuaTA0N0IHdW5pMDQ3Qwd1bmkwNDdEB3VuaTA0N0UHdW5pMDQ3Rgd1bmkwNDgwB3VuaTA0ODEHdW5pMDQ4Mgd1bmkwNDgzB3VuaTA0ODQHdW5pMDQ4NQd1bmkwNDg2B3VuaTA0ODgHdW5pMDQ4OQd1bmkwNDhEB3VuaTA0OEUHdW5pMDQ4Rgd1bmkwNDkwB3VuaTA0OTEHdW5pMDQ5NAd1bmkwNDk1B3VuaTA0OUMHdW5pMDQ5RAd1bmkwNEEwB3VuaTA0QTEHdW5pMDRBNAd1bmkwNEE1B3VuaTA0QTYHdW5pMDRBNwd1bmkwNEE4B3VuaTA0QTkHdW5pMDRCNAd1bmkwNEI1B3VuaTA0QjgHdW5pMDRCOQd1bmkwNEJBB3VuaTA0QkMHdW5pMDRCRAd1bmkwNEMzB3VuaTA0QzQHdW5pMDRDNwd1bmkwNEM4B3VuaTA0RDgHdW5pMDRFMAd1bmkwNEUxB3VuaTA0RkEHdW5pMDRGQgd1bmkwNTAwB3VuaTA1MDIHdW5pMDUwMwd1bmkwNTA0B3VuaTA1MDUHdW5pMDUwNgd1bmkwNTA3B3VuaTA1MDgHdW5pMDUwOQd1bmkwNTBBB3VuaTA1MEIHdW5pMDUwQwd1bmkwNTBEB3VuaTA1MEUHdW5pMDUwRgd1bmkwNTEwB3VuaTIwMDAHdW5pMjAwMQd1bmkyMDAyB3VuaTIwMDMHdW5pMjAwNAd1bmkyMDA1B3VuaTIwMDYHdW5pMjAwNwd1bmkyMDA4B3VuaTIwMDkHdW5pMjAwQQd1bmkyMDBCDXVuZGVyc2NvcmVkYmwNcXVvdGVyZXZlcnNlZAd1bmkyMDI1B3VuaTIwNzQJbnN1cGVyaW9yBGxpcmEGcGVzZXRhBEV1cm8HdW5pMjEwNQd1bmkyMTEzB3VuaTIxMTYJZXN0aW1hdGVkCW9uZWVpZ2h0aAx0aHJlZWVpZ2h0aHMLZml2ZWVpZ2h0aHMMc2V2ZW5laWdodGhzCmNvbG9uLmxudW0JcXVvdGVkYmx4C2NvbW1hYWNjZW50B3VuaUZFRkYHdW5pRkZGQwd1bmlGRkZECWZpdmUuc21jcAhmb3VyLnN1cAl6ZXJvLmxudW0ObGFyZ2VyaWdodGhvb2sMY3lyaWxsaWNob29rEGN5cmlsbGljaG9va2xlZnQLY3lyaWxsaWN0aWMOYnJldmV0aWxkZWNvbWINYnJldmVob29rY29tYg5icmV2ZWFjdXRlY29tYhNjaXJjdW1mbGV4dGlsZGVjb21iEmNpcmN1bWZsZXhob29rY29tYhNjaXJjdW1mbGV4Z3JhdmVjb21iE2NpcmN1bWZsZXhhY3V0ZWNvbWIOYnJldmVncmF2ZWNvbWIRY29tbWFhY2NlbnRyb3RhdGUGQS5zbWNwBkIuc21jcAZDLnNtY3AGRC5zbWNwBkUuc21jcAZGLnNtY3AGRy5zbWNwBkguc21jcAZJLnNtY3AGSi5zbWNwBksuc21jcAZMLnNtY3AGTS5zbWNwBk4uc21jcAZPLnNtY3AGUS5zbWNwBlIuc21jcAZTLnNtY3AGVC5zbWNwBlUuc21jcAZWLnNtY3AGVy5zbWNwBlguc21jcAZZLnNtY3AGWi5zbWNwCXplcm8uc21jcAhvbmUuc21jcAh0d28uc21jcAp0aHJlZS5zbWNwCWZvdXIuc21jcAh0d28ubG51bQhzaXguc21jcApzZXZlbi5zbWNwCmVpZ2h0LnNtY3AJbmluZS5zbWNwB29uZS5zdXAHdHdvLnN1cAl0aHJlZS5zdXAIb25lLmxudW0IZml2ZS5zdXAHc2l4LnN1cAlzZXZlbi5zdXAJZWlnaHQuc3VwCG5pbmUuc3VwCHplcm8uc3VwCGNyb3NzYmFyCXJpbmdhY3V0ZQlkYXNpYW94aWEKdGhyZWUubG51bQlmb3VyLmxudW0JZml2ZS5sbnVtCHNpeC5sbnVtBWcuYWx0CnNldmVuLmxudW0HY2hpLmFsdAplaWdodC5sbnVtCWFscGhhLmFsdAlkZWx0YS5hbHQERC5jbgRhLmNuBVIuYWx0BUsuYWx0BWsuYWx0BksuYWx0MgZrLmFsdDIJbmluZS5sbnVtBlAuc21jcA1jeXJpbGxpY2JyZXZlB3VuaTAwQUQGRGNyb2F0BGhiYXIEVGJhcgR0YmFyCkFyaW5nYWN1dGUKYXJpbmdhY3V0ZQdBbWFjcm9uB2FtYWNyb24GQWJyZXZlBmFicmV2ZQdBb2dvbmVrB2FvZ29uZWsLQ2NpcmN1bWZsZXgLY2NpcmN1bWZsZXgHdW5pMDEwQQd1bmkwMTBCBkRjYXJvbgZkY2Fyb24HRW1hY3JvbgdlbWFjcm9uBkVicmV2ZQZlYnJldmUKRWRvdGFjY2VudAplZG90YWNjZW50B0VvZ29uZWsHZW9nb25lawZFY2Fyb24GZWNhcm9uC0djaXJjdW1mbGV4C2djaXJjdW1mbGV4B3VuaTAxMjAHdW5pMDEyMQxHY29tbWFhY2NlbnQMZ2NvbW1hYWNjZW50C0hjaXJjdW1mbGV4C2hjaXJjdW1mbGV4Bkl0aWxkZQZpdGlsZGUHSW1hY3JvbgdpbWFjcm9uBklicmV2ZQZpYnJldmUHSW9nb25lawdpb2dvbmVrCklkb3RhY2NlbnQCSUoCaWoLSmNpcmN1bWZsZXgLamNpcmN1bWZsZXgMS2NvbW1hYWNjZW50DGtjb21tYWFjY2VudAZMYWN1dGUGbGFjdXRlDExjb21tYWFjY2VudAxsY29tbWFhY2NlbnQGTGNhcm9uBmxjYXJvbgRMZG90BGxkb3QGTmFjdXRlBm5hY3V0ZQxOY29tbWFhY2NlbnQMbmNvbW1hYWNjZW50Bk5jYXJvbgZuY2Fyb24LbmFwb3N0cm9waGUHT21hY3JvbgdvbWFjcm9uBk9icmV2ZQZvYnJldmUNT2h1bmdhcnVtbGF1dA1vaHVuZ2FydW1sYXV0BlJhY3V0ZQZyYWN1dGUMUmNvbW1hYWNjZW50DHJjb21tYWFjY2VudAZSY2Fyb24GcmNhcm9uBlNhY3V0ZQZzYWN1dGULU2NpcmN1bWZsZXgLc2NpcmN1bWZsZXgHdW5pMDIxOAd1bmkwMjE5B3VuaTAyMUEHdW5pMDIxQgd1bmkwMTYyB3VuaTAxNjMGVGNhcm9uBnRjYXJvbgZVdGlsZGUGdXRpbGRlB1VtYWNyb24HdW1hY3JvbgZVYnJldmUGdWJyZXZlBVVyaW5nBXVyaW5nDVVodW5nYXJ1bWxhdXQNdWh1bmdhcnVtbGF1dAdVb2dvbmVrB3VvZ29uZWsLV2NpcmN1bWZsZXgLd2NpcmN1bWZsZXgLWWNpcmN1bWZsZXgLeWNpcmN1bWZsZXgGWmFjdXRlBnphY3V0ZQpaZG90YWNjZW50Cnpkb3RhY2NlbnQHQUVhY3V0ZQdhZWFjdXRlC09zbGFzaGFjdXRlC29zbGFzaGFjdXRlC0Rjcm9hdC5zbWNwCEV0aC5zbWNwCVRiYXIuc21jcAtBZ3JhdmUuc21jcAtBYWN1dGUuc21jcBBBY2lyY3VtZmxleC5zbWNwC0F0aWxkZS5zbWNwDkFkaWVyZXNpcy5zbWNwCkFyaW5nLnNtY3APQXJpbmdhY3V0ZS5zbWNwDUNjZWRpbGxhLnNtY3ALRWdyYXZlLnNtY3ALRWFjdXRlLnNtY3AQRWNpcmN1bWZsZXguc21jcA5FZGllcmVzaXMuc21jcAtJZ3JhdmUuc21jcAtJYWN1dGUuc21jcBBJY2lyY3VtZmxleC5zbWNwDklkaWVyZXNpcy5zbWNwC050aWxkZS5zbWNwC09ncmF2ZS5zbWNwC09hY3V0ZS5zbWNwEE9jaXJjdW1mbGV4LnNtY3ALT3RpbGRlLnNtY3AOT2RpZXJlc2lzLnNtY3ALVWdyYXZlLnNtY3ALVWFjdXRlLnNtY3AQVWNpcmN1bWZsZXguc21jcA5VZGllcmVzaXMuc21jcAtZYWN1dGUuc21jcAxBbWFjcm9uLnNtY3ALQWJyZXZlLnNtY3AMQW9nb25lay5zbWNwC0NhY3V0ZS5zbWNwEENjaXJjdW1mbGV4LnNtY3AMdW5pMDEwQS5zbWNwC0NjYXJvbi5zbWNwC0RjYXJvbi5zbWNwDEVtYWNyb24uc21jcAtFYnJldmUuc21jcA9FZG90YWNjZW50LnNtY3AMRW9nb25lay5zbWNwC0VjYXJvbi5zbWNwEEdjaXJjdW1mbGV4LnNtY3ALR2JyZXZlLnNtY3AMdW5pMDEyMC5zbWNwEUdjb21tYWFjY2VudC5zbWNwEEhjaXJjdW1mbGV4LnNtY3ALSXRpbGRlLnNtY3AMSW1hY3Jvbi5zbWNwC0licmV2ZS5zbWNwDElvZ29uZWsuc21jcA9JZG90YWNjZW50LnNtY3AQSmNpcmN1bWZsZXguc21jcBFLY29tbWFhY2NlbnQuc21jcAtMYWN1dGUuc21jcBFMY29tbWFhY2NlbnQuc21jcAtMY2Fyb24uc21jcAlMZG90LnNtY3ALTmFjdXRlLnNtY3ARTmNvbW1hYWNjZW50LnNtY3ALTmNhcm9uLnNtY3AMT21hY3Jvbi5zbWNwC09icmV2ZS5zbWNwEk9odW5nYXJ1bWxhdXQuc21jcAtSYWN1dGUuc21jcBFSY29tbWFhY2NlbnQuc21jcAtSY2Fyb24uc21jcAtTYWN1dGUuc21jcBBTY2lyY3VtZmxleC5zbWNwDVNjZWRpbGxhLnNtY3ALU2Nhcm9uLnNtY3ARVGNvbW1hYWNjZW50LnNtY3ALVGNhcm9uLnNtY3ALVXRpbGRlLnNtY3AMVW1hY3Jvbi5zbWNwC1VicmV2ZS5zbWNwClVyaW5nLnNtY3ASVWh1bmdhcnVtbGF1dC5zbWNwDFVvZ29uZWsuc21jcBBXY2lyY3VtZmxleC5zbWNwEFljaXJjdW1mbGV4LnNtY3AOWWRpZXJlc2lzLnNtY3ALWmFjdXRlLnNtY3APWmRvdGFjY2VudC5zbWNwC1pjYXJvbi5zbWNwD2dlcm1hbmRibHMuc21jcApBbHBoYXRvbm9zDEVwc2lsb250b25vcwhFdGF0b25vcwlJb3RhdG9ub3MMT21pY3JvbnRvbm9zDFVwc2lsb250b25vcwpPbWVnYXRvbm9zEWlvdGFkaWVyZXNpc3Rvbm9zBUFscGhhBEJldGEHRXBzaWxvbgRaZXRhA0V0YQRJb3RhBUthcHBhAk11Ak51B09taWNyb24DUmhvA1RhdQdVcHNpbG9uA0NoaQxJb3RhZGllcmVzaXMPVXBzaWxvbmRpZXJlc2lzCmFscGhhdG9ub3MMZXBzaWxvbnRvbm9zCGV0YXRvbm9zCWlvdGF0b25vcxR1cHNpbG9uZGllcmVzaXN0b25vcwVrYXBwYQdvbWljcm9uB3VuaTAzQkMCbnUDY2hpDGlvdGFkaWVyZXNpcw91cHNpbG9uZGllcmVzaXMMb21pY3JvbnRvbm9zDHVwc2lsb250b25vcwpvbWVnYXRvbm9zB3VuaTA0MDEHdW5pMDQwMwd1bmkwNDA1B3VuaTA0MDYHdW5pMDQwNwd1bmkwNDA4B3VuaTA0MUEHdW5pMDQwQwd1bmkwNDBFB3VuaTA0MTAHdW5pMDQxMgd1bmkwNDEzB3VuaTA0MTUHdW5pMDQxOQd1bmkwNDFDB3VuaTA0MUQHdW5pMDQxRQd1bmkwNDFGB3VuaTA0MjAHdW5pMDQyMQd1bmkwNDIyB3VuaTA0MjUHdW5pMDQzMAd1bmkwNDM1B3VuaTA0MzkHdW5pMDQzRQd1bmkwNDQwB3VuaTA0NDEHdW5pMDQ0Mwd1bmkwNDQ1B3VuaTA0NTEHdW5pMDQ1Mwd1bmkwNDU1B3VuaTA0NTYHdW5pMDQ1Nwd1bmkwNDU4B3VuaTA0NUMHdW5pMDQ1RQZXZ3JhdmUGd2dyYXZlBldhY3V0ZQZ3YWN1dGUJV2RpZXJlc2lzCXdkaWVyZXNpcwZZZ3JhdmUGeWdyYXZlBm1pbnV0ZQZzZWNvbmQJZXhjbGFtZGJsB3VuaUZCMDIHdW5pMDFGMAd1bmkwMkJDB3VuaTFFM0UHdW5pMUUzRgd1bmkxRTAwB3VuaTFFMDEHdW5pMUY0RAd1bmlGQjAzB3VuaUZCMDQHdW5pMDQwMAd1bmkwNDBEB3VuaTA0NTAHdW5pMDQ1RAd1bmkwNDcwB3VuaTA0NzEHdW5pMDQ3Ngd1bmkwNDc3B3VuaTA0NzkHdW5pMDQ3OAd1bmkwNDk4B3VuaTA0OTkHdW5pMDRBQQd1bmkwNEFCB3VuaTA0QUUHdW5pMDRBRgd1bmkwNEMwB3VuaTA0QzEHdW5pMDRDMgd1bmkwNENGB3VuaTA0RDAHdW5pMDREMQd1bmkwNEQyB3VuaTA0RDMHdW5pMDRENAd1bmkwNEQ1B3VuaTA0RDYHdW5pMDRENwd1bmkwNERBB3VuaTA0RDkHdW5pMDREQgd1bmkwNERDB3VuaTA0REQHdW5pMDRERQd1bmkwNERGB3VuaTA0RTIHdW5pMDRFMwd1bmkwNEU0B3VuaTA0RTUHdW5pMDRFNgd1bmkwNEU3B3VuaTA0RTgHdW5pMDRFOQd1bmkwNEVBB3VuaTA0RUIHdW5pMDRFQwd1bmkwNEVEB3VuaTA0RUUHdW5pMDRFRgd1bmkwNEYwB3VuaTA0RjEHdW5pMDRGMgd1bmkwNEYzB3VuaTA0RjQHdW5pMDRGNQd1bmkwNEY4B3VuaTA0RjkHdW5pMDRGQwd1bmkwNEZEB3VuaTA1MDEHdW5pMDUxMgd1bmkwNTEzB3VuaTFFQTAHdW5pMUVBMQd1bmkxRUEyB3VuaTFFQTMHdW5pMUVBNAd1bmkxRUE1B3VuaTFFQTYHdW5pMUVBNwd1bmkxRUE4B3VuaTFFQTkHdW5pMUVBQQd1bmkxRUFCB3VuaTFFQUMHdW5pMUVBRAd1bmkxRUFFB3VuaTFFQUYHdW5pMUVCMAd1bmkxRUIxB3VuaTFFQjIHdW5pMUVCMwd1bmkxRUI0B3VuaTFFQjUHdW5pMUVCNgd1bmkxRUI3B3VuaTFFQjgHdW5pMUVCOQd1bmkxRUJBB3VuaTFFQkIHdW5pMUVCQwd1bmkxRUJEB3VuaTFFQkUHdW5pMUVCRgd1bmkxRUMwB3VuaTFFQzEHdW5pMUVDMgd1bmkxRUMzB3VuaTFFQzQHdW5pMUVDNQd1bmkxRUM2B3VuaTFFQzcHdW5pMUVDOAd1bmkxRUM5B3VuaTFFQ0EHdW5pMUVDQgd1bmkxRUNDB3VuaTFFQ0QHdW5pMUVDRQd1bmkxRUNGB3VuaTFFRDAHdW5pMUVEMQd1bmkxRUQyB3VuaTFFRDMHdW5pMUVENAd1bmkxRUQ1B3VuaTFFRDYHdW5pMUVENwd1bmkxRUQ4B3VuaTFFRDkHdW5pMUVEQQd1bmkxRURCB3VuaTFFREMHdW5pMUVERAd1bmkxRURFB3VuaTFFREYHdW5pMUVFMAd1bmkxRUUxB3VuaTFFRTIHdW5pMUVFMwd1bmkxRUU0B3VuaTFFRTUHdW5pMUVFNgd1bmkxRUU3B3VuaTFFRTgHdW5pMUVFOQd1bmkxRUVBB3VuaTFFRUIHdW5pMUVFQwd1bmkxRUVEB3VuaTFFRUUHdW5pMUVFRgd1bmkx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AAwA4f/UAPH/yQD5/9EBBP/lARv/4wEv/8QBOP/hAUn/1AFK//UBS//nAVP/ZAFU/8kACgDh/8EA8f/NAPn/0gEv/8wBOP/lATv/3wFJ/84BS//qAVP/ngFU/84ACgDh/8IA8f/GAPn/zwEv/8ABOP/hATv/3wFJ/80BS//oAVP/nwFU/8YACQDh/8kA8f/fAPn/4QEE/+0BG//rAS//3wE7/+kBSv/1AVT/4AAIANQAFQDoABUBOP/kATn/5QE7/+QBSf/jAUv/4gFT/+QACQDh/+YA8f/QAPn/1gEv/84BOP/oAUn/5wFL/+0BU//mAVT/0AALANQAFADh/+AA6AATATj/4QE5/+ABPP/hAUH/6QFJ/98BS//eAVP/3wFV//IAGACz/9QAvf/tAL8AEQDF/+AAx//nAMj/5QDJ/+4A1AASAOX/6QDx/9cBL//XATn/0wE7/9YBPP/FAUH/5wFJAA0BSwAMAVT/1gFV//IBqP/pAaz/5wG0/+cBtf/pAd//8AAFABn/8gDh//EBSf/yAUv/8gFT//IACADUABUA6AAVATj/5AE5/+UBO//kAUn/4wFL/+IBU//kAAgA1AAVAOgAFQE4/+QBOf/lATv/5AFJ/+MBS//iAVP/5AASANT/rgDhABIA5v/gAOj/rQDq/9YA+P/fAPz/0gEC/+ABF//OASf/3QEp/+IBLf/gATP/4AE5/+kBPP/aAUb/vQFQ/98BUwARAAgA1AAVAOgAFQE4/+QBOf/lATv/5AFJ/+MBS//iAVP/5AAIANQAFQDoABUBOP/kATn/5QE7/+QBSf/jAUv/4gFT/+QADQDUABMA4f/mAOL/9ADoABIA8f/nAPn/5wEv/+cBOP/lATn/6AFJ/+YBS//mAVP/5gFU/+cACgDh/8QA8f/NAPn/1QEv/8wBOP/mATv/3wFJ/9EBS//sAVP/oQFU/88ACgDh/8MA8f/PAPn/1AEv/84BOP/nATv/3wFJ/9EBS//sAVP/oAFU/9EAAgDU/+IBU//kAAIA1P/hAOj/5AAHAOj/7gDx/+4A+f/vAQT/9AEb//EBL//vAVT/7wAFAPH/9AD5//QBBP/1AS//9QFU//UAAgDo/2gBF//uAAcA6AAUAPH/7QD3/9AA+f/uAS//7QE5/+0BVP/tAAEBF//xAAUBF//rAaj/6wGs/+kBtP/rAbX/6wAT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//AACADUABUA6AAVATj/5AE5/+UBO//kAUn/4wFL/+IBU//kAAgA1AAVAOgAFQE4/+QBOf/lATv/5AFJ/+MBS//iAVP/5AAIANQAFQDoABUBOP/kATn/5QE7/+QBSf/jAUv/4gFT/+QACADUABUA6AAVATj/5AE5/+UBO//kAUn/4wFL/+IBU//kAAgA1AAVAOgAFQE4/+QBOf/lATv/5AFJ/+MBS//iAVP/5AAJAH//3wCw//MAsv/wAL//6gDU/98A4f/gAVP/4AGm/+0BvP/1AAkAf//fALD/8wCy//AAv//qANT/3wDh/+ABU//gAab/7QG8//UACQB//98AsP/zALL/8AC//+oA1P/fAOH/4AFT/+ABpv/tAbz/9QAJAH//3wCw//MAsv/wAL//6gDU/98A4f/gAVP/4AGm/+0BvP/1AAkAf//fALD/8wCy//AAv//qANT/3wDh/+ABU//gAab/7QG8//UAAQGm/+sAAQGm/+sAAQGm/+sAAQGm/+sAJAAI/+IACwAUAAz/zwA/ABIASP/qAFT/2ABW/+oAXwATAGv/rgB6/80Af/+gAIT/wQCH/8AAs//QALf/6gC6/8YAuwANAL3/6QC+/9YAwf/oAML/ugDF/+kAx//LAMj/2gDJ/8cBbv/TAab/qwGo/80BrP/LAbT/ywG1/8sBuP/zAbv/8wG8/+8B3P/AAd//7gAIAPH/8AD5//ABBP/xARv/8wEv//EBSv/zAUz/8wFU//EACADx//AA+f/wAQT/8QEb//MBL//xAUr/8wFM//MBVP/xAAgA8f/wAPn/8AEE//EBG//zAS//8QFK//MBTP/zAVT/8QAIAPH/8AD5//ABBP/xARv/8wEv//EBSv/zAUz/8wFU//EACADx//AA+f/wAQT/8QEb//MBL//xAUr/8wFM//MBVP/xAAgA8f/wAPn/8AEE//EBG//zAS//8QFK//MBTP/zAVT/8QAIAPH/8AD5//ABBP/xARv/8wEv//EBSv/zAUz/8wFU//EAAQDx//UAAQDx//UAAQDx//UAAQDx//UAAQDx/9YACQDF/+oA6P+4APH/4gEE//ABG//xAS//6wFK//UBVP/sAdz/6gAJAMX/6gDo/7gA8f/iAQT/8AEb//EBL//rAUr/9QFU/+wB3P/qAAkAxf/qAOj/uADx/+IBBP/wARv/8QEv/+sBSv/1AVT/7AHc/+oACQDF/+oA6P+4APH/4gEE//ABG//xAS//6wFK//UBVP/sAdz/6gAJAMX/6gDo/7gA8f/iAQT/8AEb//EBL//rAUr/9QFU/+wB3P/qAAcASAANAMEACwDC/+oAxQAMAOj/yAEX//EB3//1AAcASAANAMEACwDC/+oAxQAMAOj/yAEX//EB3//1AB0AIf+vAFb/7wBZ/98Alv/uALP/5QC0/9EAvwARAMX/yADUABMA4f/FAPH/ygD5/9ABL/+BATj/ZQE5/4UBO/9mATz/3QFB//IBSf+xAUv/ygFT/6kBVP/IAaz/9QG0//UBuP/HAbn/8QG6/80Bu//dAb3/xAAIAPH/8AD5//ABBP/xARv/8wEv//EBSv/zAUz/8wFU//EAHQAh/68AVv/vAFn/3wCW/+4As//lALT/0QC/ABEAxf/IANQAEwDh/8UA8f/KAPn/0AEv/4EBOP9lATn/hQE7/2YBPP/dAUH/8gFJ/7EBS//KAVP/qQFU/8gBrP/1AbT/9QG4/8cBuf/xAbr/zQG7/90Bvf/EAAgA8f/wAPn/8AEE//EBG//zAS//8QFK//MBTP/zAVT/8QAdACH/rwBW/+8AWf/fAJb/7gCz/+UAtP/RAL8AEQDF/8gA1AATAOH/xQDx/8oA+f/QAS//gQE4/2UBOf+FATv/ZgE8/90BQf/yAUn/sQFL/8oBU/+pAVT/yAGs//UBtP/1Abj/xwG5//EBuv/NAbv/3QG9/8QACADx//AA+f/wAQT/8QEb//MBL//xAUr/8wFM//MBVP/xAAQAC//mAD//9ABf/+8BPP/tAAQAC//mAD//9ABf/+8BPP/tAAQAC//mAD//9ABf/+8BPP/tAAQAC//mAD//9ABf/+8BPP/tAAkAf//fALD/8wCy//AAv//qANT/3wDh/+ABU//gAab/7QG8//UABQBI/+4AWf/qAbr/8AG7/+0Bvf/wAAEA8f/1AAUASP/uAFn/6gG6//ABu//tAb3/8AABAPH/9QAFAEj/7gBZ/+oBuv/wAbv/7QG9//AAAQDx//UABQBI/+4AWf/qAbr/8AG7/+0Bvf/wAAEA8f/1AAUASP/uAFn/6gG6//ABu//tAb3/8AABAPH/9QAIANQAFQDoABUBOP/kATn/5QE7/+QBSf/jAUv/4gFT/+QAAQDx/9YACADUABUA6AAVATj/5AE5/+UBO//kAUn/4wFL/+IBU//kAAgA1AAVAOgAFQE4/+QBOf/lATv/5AFJ/+MBS//iAVP/5AAIANQAFQDoABUBOP/kATn/5QE7/+QBSf/jAUv/4gFT/+QACADUABUA6AAVATj/5AE5/+UBO//kAUn/4wFL/+IBU//kAAgA1AAVAOgAFQE4/+QBOf/lATv/5AFJ/+MBS//iAVP/5AABAab/6wAUAFn/wQCz/8UAxf+0AOX/1wDx/7kA+f/pAQT/sgEX/9IBG//IAS//oAE5/8UBQf/kAUr/zAFM/8wBVP/LAVX/7wGo/+gBrP/mAbT/5wG1/+cACwBZ/8wBpgATAaj/8wGs//EBtP/yAbX/8gG4/70Buf/uAbr/uAG7/9cBvf+3AAsAWf/MAaYAEwGo//MBrP/xAbT/8gG1//IBuP+9Abn/7gG6/7gBu//XAb3/twALAFn/zAGmABMBqP/zAaz/8QG0//IBtf/yAbj/vQG5/+4Buv+4Abv/1wG9/7cACwBZ/8wBpgATAaj/8wGs//EBtP/yAbX/8gG4/70Buf/uAbr/uAG7/9cBvf+3AAgA1AAVAOgAFQE4/+QBOf/lATv/5AFJ/+MBS//iAVP/5AABAPH/1gAIANQAFQDoABUBOP/kATn/5QE7/+QBSf/jAUv/4gFT/+QAAQDx/9YACADUABUA6AAVATj/5AE5/+UBO//kAUn/4wFL/+IBU//kAAEA8f/WAAEA8f/WAAkAf//fALD/8wCy//AAv//qANT/3wDh/+ABU//gAab/7QG8//UACQDF/+oA6P+4APH/4gEE//ABG//xAS//6wFK//UBVP/sAdz/6gAJAH//3wCw//MAsv/wAL//6gDU/98A4f/gAVP/4AGm/+0BvP/1AAkAxf/qAOj/uADx/+IBBP/wARv/8QEv/+sBSv/1AVT/7AHc/+oACQB//98AsP/zALL/8AC//+oA1P/fAOH/4AFT/+ABpv/tAbz/9QAJAMX/6gDo/7gA8f/iAQT/8AEb//EBL//rAUr/9QFU/+wB3P/qAAMASAAUAFYAGABZABEAAwBIABQAVgAYAFkAEQADAEgAFABWABgAWQARADsAVP+/AFn/0QBr/2wAev9uAH//QwCE/6wAh/+hALP/uAC6/34Avv97AMH/mwDC/3kAxf+yAMf/fgDI/30Ayf98ANT/rwDhAA8A5f/kAOb/oADo/3QA6v+AAPH/sgD4/30A+f+yAPr/gAD8/3kA/QAoAQL/fQEE/38BF/9mARv/2gEn/4EBKf+YAS3/fQEv/7MBM/+gATn/fAE7/5oBPP9sAUH/5gFG/2sBSv+SAUz/rQFQ/3sBUwAPAVT/kQFV//IBpv+vAaj/uQGs/7kBtP+5AbX/uQG3/7wBuP/xAbv/8QG8/+0B3P+zAd//8QA7AFT/vwBZ/9EAa/9sAHr/bgB//0MAhP+sAIf/oQCz/7gAuv9+AL7/ewDB/5sAwv95AMX/sgDH/34AyP99AMn/fADU/68A4QAPAOX/5ADm/6AA6P90AOr/gADx/7IA+P99APn/sgD6/4AA/P95AP0AKAEC/30BBP9/ARf/ZgEb/9oBJ/+BASn/mAEt/30BL/+zATP/oAE5/3wBO/+aATz/bAFB/+YBRv9rAUr/kgFM/60BUP97AVMADwFU/5EBVf/yAab/rwGo/7kBrP+5AbT/uQG1/7kBt/+8Abj/8QG7//EBvP/tAdz/swHf//EAOwBU/78AWf/RAGv/bAB6/24Af/9DAIT/rACH/6EAs/+4ALr/fgC+/3sAwf+bAML/eQDF/7IAx/9+AMj/fQDJ/3wA1P+vAOEADwDl/+QA5v+gAOj/dADq/4AA8f+yAPj/fQD5/7IA+v+AAPz/eQD9ACgBAv99AQT/fwEX/2YBG//aASf/gQEp/5gBLf99AS//swEz/6ABOf98ATv/mgE8/2wBQf/mAUb/awFK/5IBTP+tAVD/ewFTAA8BVP+RAVX/8gGm/68BqP+5Aaz/uQG0/7kBtf+5Abf/vAG4//EBu//xAbz/7QHc/7MB3//xAAEBpv/rAAEBpv/rAAEBpv/rAAEBpv/rAAEBpv/rAAEBpv/rAAkACwAPAD8ADABU/+sAXwAOAab/ywGo/+kBrP/nAbT/5wG1/+cAJAAI/+IACwAUAAz/zwA/ABIASP/qAFT/2ABW/+oAXwATAGv/rgB6/80Af/+gAIT/wQCH/8AAs//QALf/6gC6/8YAuwANAL3/6QC+/9YAwf/oAML/ugDF/+kAx//LAMj/2gDJ/8cBbv/TAab/qwGo/80BrP/LAbT/ywG1/8sBuP/zAbv/8wG8/+8B3P/AAd//7gAHAEgADQDBAAsAwv/qAMUADADo/8gBF//xAd//9QAkAAj/4gALABQADP/PAD8AEgBI/+oAVP/YAFb/6gBfABMAa/+uAHr/zQB//6AAhP/BAIf/wACz/9AAt//qALr/xgC7AA0Avf/pAL7/1gDB/+gAwv+6AMX/6QDH/8sAyP/aAMn/xwFu/9MBpv+rAaj/zQGs/8sBtP/LAbX/ywG4//MBu//zAbz/7wHc/8AB3//uAAgAWf/lALP/ywDI/+QBpgANAaj/7QGs/+sBtP/sAbX/7AAIAFn/5QCz/8sAyP/kAaYADQGo/+0BrP/rAbT/7AG1/+wACABZ/+UAs//LAMj/5AGmAA0BqP/tAaz/6wG0/+wBtf/sAB0AIf+vAFb/7wBZ/98Alv/uALP/5QC0/9EAvwARAMX/yADUABMA4f/FAPH/ygD5/9ABL/+BATj/ZQE5/4UBO/9mATz/3QFB//IBSf+xAUv/ygFT/6kBVP/IAaz/9QG0//UBuP/HAbn/8QG6/80Bu//dAb3/xAAFAEj/7gBZ/+oBuv/wAbv/7QG9//AACADUABUA6AAVATj/5AE5/+UBO//kAUn/4wFL/+IBU//kAAgA1AAVAOgAFQE4/+QBOf/lATv/5AFJ/+MBS//iAVP/5AAJAH//3wCw//MAsv/wAL//6gDU/98A4f/gAVP/4AGm/+0BvP/1ACQACP/iAAsAFAAM/88APwASAEj/6gBU/9gAVv/qAF8AEwBr/64Aev/NAH//oACE/8EAh//AALP/0AC3/+oAuv/GALsADQC9/+kAvv/WAMH/6ADC/7oAxf/pAMf/ywDI/9oAyf/HAW7/0wGm/6sBqP/NAaz/ywG0/8sBtf/LAbj/8wG7//MBvP/vAdz/wAHf/+4AHQAh/68AVv/vAFn/3wCW/+4As//lALT/0QC/ABEAxf/IANQAEwDh/8UA8f/KAPn/0AEv/4EBOP9lATn/hQE7/2YBPP/dAUH/8gFJ/7EBS//KAVP/qQFU/8gBrP/1AbT/9QG4/8cBuf/xAbr/zQG7/90Bvf/EAAIBDAALAVP/5gAFAEj/7gBZ/+oBuv/wAbv/7QG9//AACABZ/+UAs//LAMj/5AGmAA0BqP/tAaz/6wG0/+wBtf/sAAgA1AAVAOgAFQE4/+QBOf/lATv/5AFJ/+MBS//iAVP/5AAIANQAFQDoABUBOP/kATn/5QE7/+QBSf/jAUv/4gFT/+QAFABZ/8EAs//FAMX/tADl/9cA8f+5APn/6QEE/7IBF//SARv/yAEv/6ABOf/FAUH/5AFK/8wBTP/MAVT/ywFV/+8BqP/oAaz/5gG0/+cBtf/nAAgA1AAVAOgAFQE4/+QBOf/lATv/5AFJ/+MBS//iAVP/5AAIANQAFQDoABUBOP/kATn/5QE7/+QBSf/jAUv/4gFT/+QACQB//98AsP/zALL/8AC//+oA1P/fAOH/4AFT/+ABpv/tAbz/9QAJAFYADgB//tcAv/+YAML/xwDU/xIA6P9SAUb/zwGm/4AB3//XADsAVP+/AFn/0QBr/2wAev9uAH//QwCE/6wAh/+hALP/uAC6/34Avv97AMH/mwDC/3kAxf+yAMf/fgDI/30Ayf98ANT/rwDhAA8A5f/kAOb/oADo/3QA6v+AAPH/sgD4/30A+f+yAPr/gAD8/3kA/QAoAQL/fQEE/38BF/9mARv/2gEn/4EBKf+YAS3/fQEv/7MBM/+gATn/fAE7/5oBPP9sAUH/5gFG/2sBSv+SAUz/rQFQ/3sBUwAPAVT/kQFV//IBpv+vAaj/uQGs/7kBtP+5AbX/uQG3/7wBuP/xAbv/8QG8/+0B3P+zAd//8QAkAAj/4gALABQADP/PAD8AEgBI/+oAVP/YAFb/6gBfABMAa/+uAHr/zQB//6AAhP/BAIf/wACz/9AAt//qALr/xgC7AA0Avf/pAL7/1gDB/+gAwv+6AMX/6QDH/8sAyP/aAMn/xwFu/9MBpv+rAaj/zQGs/8sBtP/LAbX/ywG4//MBu//zAbz/7wHc/8AB3//uABgAs//UAL3/7QC/ABEAxf/gAMf/5wDI/+UAyf/uANQAEgDl/+kA8f/XAS//1wE5/9MBO//WATz/xQFB/+cBSQANAUsADAFU/9YBVf/yAaj/6QGs/+cBtP/nAbX/6QHf//AACADUABUA6AAVATj/5AE5/+UBO//kAUn/4wFL/+IBU//kACQACP/iAAsAFAAM/88APwASAEj/6gBU/9gAVv/qAF8AEwBr/64Aev/NAH//oACE/8EAh//AALP/0AC3/+oAuv/GALsADQC9/+kAvv/WAMH/6ADC/7oAxf/pAMf/ywDI/9oAyf/HAW7/0wGm/6sBqP/NAaz/ywG0/8sBtf/LAbj/8wG7//MBvP/vAdz/wAHf/+4AAQDx/9YACQDF/+oA6P+4APH/4gEE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/+oAVP/YAFb/6gBfABMAa/+uAHr/zQB//6AAhP/BAIf/wACz/9AAt//qALr/xgC7AA0Avf/pAL7/1gDB/+gAwv+6AMX/6QDH/8sAyP/aAMn/xwFu/9MBpv+rAaj/zQGs/8sBtP/LAbX/ywG4//MBu//zAbz/7wHc/8AB3//uAAcASAANAMEACwDC/+oAxQAMAOj/yAEX//EB3//1AAEAWQALAAEAWQALAAEAWQALAAgA1AAVAOgAFQE4/+QBOf/lATv/5AFJ/+MBS//iAVP/5AABAPH/1gAdACH/rwBW/+8AWf/fAJb/7gCz/+UAtP/RAL8AEQDF/8gA1AATAOH/xQDx/8oA+f/QAS//gQE4/2UBOf+FATv/ZgE8/90BQf/yAUn/sQFL/8oBU/+pAVT/yAGs//UBtP/1Abj/xwG5//EBuv/NAbv/3QG9/8QACADx//AA+f/wAQT/8QEb//MBL//xAUr/8wFM//MBVP/xAAkAf//fALD/8wCy//AAv//qANT/3wDh/+ABU//gAab/7QG8//UABQBI/+4AWf/qAbr/8AG7/+0Bvf/wAAEA8f/1AAkACwAUAD8AEQBU/+IAXwATAab/tAGo/9kBrP/ZAbT/2QG1/9kABwBIAA0AwQALAML/6gDFAAwA6P/IARf/8QHf//UABAAL/+YAP//0AF//7wE8/+0AJAAI/+IACwAUAAz/zwA/ABIASP/qAFT/2ABW/+oAXwATAGv/rgB6/80Af/+gAIT/wQCH/8AAs//QALf/6gC6/8YAuwANAL3/6QC+/9YAwf/oAML/ugDF/+kAx//LAMj/2gDJ/8cBbv/TAab/qwGo/80BrP/LAbT/ywG1/8sBuP/zAbv/8wG8/+8B3P/AAd//7gAHAEgADQDBAAsAwv/qAMUADADo/8gBF//xAd//9QAIANQAFQDoABUBOP/kATn/5QE7/+QBSf/jAUv/4gFT/+QAGACz/9QAvf/tAL8AEQDF/+AAx//nAMj/5QDJ/+4A1AASAOX/6QDx/9cBL//XATn/0wE7/9YBPP/FAUH/5wFJAA0BSwAMAVT/1gFV//IBqP/pAaz/5wG0/+cBtf/pAd//8AABARf/8QAIANQAFQDoABUBOP/kATn/5QE7/+QBSf/jAUv/4gFT/+QAHQAh/68AVv/vAFn/3wCW/+4As//lALT/0QC/ABEAxf/IANQAEwDh/8UA8f/KAPn/0AEv/4EBOP9lATn/hQE7/2YBPP/dAUH/8gFJ/7EBS//KAVP/qQFU/8gBrP/1AbT/9QG4/8cBuf/xAbr/zQG7/90Bvf/EAAgA8f/wAPn/8AEE//EBG//zAS//8QFK//MBTP/zAVT/8QAdACH/rwBW/+8AWf/fAJb/7gCz/+UAtP/RAL8AEQDF/8gA1AATAOH/xQDx/8oA+f/QAS//gQE4/2UBOf+FATv/ZgE8/90BQf/yAUn/sQFL/8oBU/+pAVT/yAGs//UBtP/1Abj/xwG5//EBuv/NAbv/3QG9/8QACADx//AA+f/wAQT/8QEb//MBL//xAUr/8wFM//MBVP/xAAUASP/uAFn/6gG6//ABu//tAb3/8AABAPH/9QABAPH/9QABAPH/9QAYALP/1AC9/+0AvwARAMX/4ADH/+cAyP/lAMn/7gDUABIA5f/pAPH/1wEv/9cBOf/TATv/1gE8/8UBQf/nAUkADQFLAAwBVP/WAVX/8gGo/+kBrP/nAbT/5wG1/+kB3//wAAEBF//xAAkAf//fALD/8wCy//AAv//qANT/3wDh/+ABU//gAab/7QG8//UACQDF/+oA6P+4APH/4gEE//ABG//xAS//6wFK//UBVP/sAdz/6gAJAMX/6gDo/7gA8f/iAQT/8AEb//EBL//rAUr/9QFU/+wB3P/qAAcAxf/qAOj/7gDx/9YA+f/tAS//7AFU/+wB3P/oABIA1P+uAOEAEgDm/+AA6P+tAOr/1gD4/98A/P/SAQL/4AEX/84BJ//dASn/4gEt/+ABM//gATn/6QE8/9oBRv+9AVD/3wFTABEABwBIAA0AwQALAML/6gDFAAwA6P/IARf/8QHf//UAEgDU/64A4QASAOb/4ADo/60A6v/WAPj/3wD8/9IBAv/gARf/zgEn/90BKf/iAS3/4AEz/+ABOf/pATz/2gFG/70BUP/fAVMAEQAHAEgADQDBAAsAwv/qAMUADADo/8gBF//xAd//9QASANT/rgDhABIA5v/gAOj/rQDq/9YA+P/fAPz/0gEC/+ABF//OASf/3QEp/+IBLf/gATP/4AE5/+kBPP/aAUb/vQFQ/98BUwARAAcASAANAMEACwDC/+oAxQAMAOj/yAEX//EB3//1ABgAs//UAL3/7QC/ABEAxf/gAMf/5wDI/+UAyf/uANQAEgDl/+kA8f/XAS//1wE5/9MBO//WATz/xQFB/+cBSQANAUsADAFU/9YBVf/yAaj/6QGs/+cBtP/nAbX/6QHf//AAAQEX//EAHQAh/68AVv/vAFn/3wCW/+4As//lALT/0QC/ABEAxf/IANQAEwDh/8UA8f/KAPn/0AEv/4EBOP9lATn/hQE7/2YBPP/dAUH/8gFJ/7EBS//KAVP/qQFU/8gBrP/1AbT/9QG4/8cBuf/xAbr/zQG7/90Bvf/EAAgA8f/wAPn/8AEE//EBG//zAS//8QFK//MBTP/zAVT/8QAdACH/rwBW/+8AWf/fAJb/7gCz/+UAtP/RAL8AEQDF/8gA1AATAOH/xQDx/8oA+f/QAS//gQE4/2UBOf+FATv/ZgE8/90BQf/yAUn/sQFL/8oBU/+pAVT/yAGs//UBtP/1Abj/xwG5//EBuv/NAbv/3QG9/8QACADx//AA+f/wAQT/8QEb//MBL//xAUr/8wFM//MBVP/xAB0AIf+vAFb/7wBZ/98Alv/uALP/5QC0/9EAvwARAMX/yADUABMA4f/FAPH/ygD5/9ABL/+BATj/ZQE5/4UBO/9mATz/3QFB//IBSf+xAUv/ygFT/6kBVP/IAaz/9QG0//UBuP/HAbn/8QG6/80Bu//dAb3/xAAIAPH/8AD5//ABBP/xARv/8wEv//EBSv/zAUz/8wFU//EAHQAh/68AVv/vAFn/3wCW/+4As//lALT/0QC/ABEAxf/IANQAEwDh/8UA8f/KAPn/0AEv/4EBOP9lATn/hQE7/2YBPP/dAUH/8gFJ/7EBS//KAVP/qQFU/8gBrP/1AbT/9QG4/8cBuf/xAbr/zQG7/90Bvf/EAAgA8f/wAPn/8AEE//EBG//zAS//8QFK//MBTP/zAVT/8QAdACH/rwBW/+8AWf/fAJb/7gCz/+UAtP/RAL8AEQDF/8gA1AATAOH/xQDx/8oA+f/QAS//gQE4/2UBOf+FATv/ZgE8/90BQf/yAUn/sQFL/8oBU/+pAVT/yAGs//UBtP/1Abj/xwG5//EBuv/NAbv/3QG9/8QACADx//AA+f/wAQT/8QEb//MBL//xAUr/8wFM//MBVP/xAB0AIf+vAFb/7wBZ/98Alv/uALP/5QC0/9EAvwARAMX/yADUABMA4f/FAPH/ygD5/9ABL/+BATj/ZQE5/4UBO/9mATz/3QFB//IBSf+xAUv/ygFT/6kBVP/IAaz/9QG0//UBuP/HAbn/8QG6/80Bu//dAb3/xAAIAPH/8AD5//ABBP/xARv/8wEv//EBSv/zAUz/8wFU//EAHQAh/68AVv/vAFn/3wCW/+4As//lALT/0QC/ABEAxf/IANQAEwDh/8UA8f/KAPn/0AEv/4EBOP9lATn/hQE7/2YBPP/dAUH/8gFJ/7EBS//KAVP/qQFU/8gBrP/1AbT/9QG4/8cBuf/xAbr/zQG7/90Bvf/EAAgA8f/wAPn/8AEE//EBG//zAS//8QFK//MBTP/zAVT/8QAdACH/rwBW/+8AWf/fAJb/7gCz/+UAtP/RAL8AEQDF/8gA1AATAOH/xQDx/8oA+f/QAS//gQE4/2UBOf+FATv/ZgE8/90BQf/yAUn/sQFL/8oBU/+pAVT/yAGs//UBtP/1Abj/xwG5//EBuv/NAbv/3QG9/8QACADx//AA+f/wAQT/8QEb//MBL//xAUr/8wFM//MBVP/xAB0AIf+vAFb/7wBZ/98Alv/uALP/5QC0/9EAvwARAMX/yADUABMA4f/FAPH/ygD5/9ABL/+BATj/ZQE5/4UBO/9mATz/3QFB//IBSf+xAUv/ygFT/6kBVP/IAaz/9QG0//UBuP/HAbn/8QG6/80Bu//dAb3/xAAIAPH/8AD5//ABBP/xARv/8wEv//EBSv/zAUz/8wFU//EAHQAh/68AVv/vAFn/3wCW/+4As//lALT/0QC/ABEAxf/IANQAEwDh/8UA8f/KAPn/0AEv/4EBOP9lATn/hQE7/2YBPP/dAUH/8gFJ/7EBS//KAVP/qQFU/8gBrP/1AbT/9QG4/8cBuf/xAbr/zQG7/90Bvf/EAAgA8f/wAPn/8AEE//EBG//zAS//8QFK//MBTP/zAVT/8QAdACH/rwBW/+8AWf/fAJb/7gCz/+UAtP/RAL8AEQDF/8gA1AATAOH/xQDx/8oA+f/QAS//gQE4/2UBOf+FATv/ZgE8/90BQf/yAUn/sQFL/8oBU/+pAVT/yAGs//UBtP/1Abj/xwG5//EBuv/NAbv/3QG9/8QACADx//AA+f/wAQT/8QEb//MBL//xAUr/8wFM//MBVP/xAB0AIf+vAFb/7wBZ/98Alv/uALP/5QC0/9EAvwARAMX/yADUABMA4f/FAPH/ygD5/9ABL/+BATj/ZQE5/4UBO/9mATz/3QFB//IBSf+xAUv/ygFT/6kBVP/IAaz/9QG0//UBuP/HAbn/8QG6/80Bu//dAb3/xAAIAPH/8AD5//ABBP/xARv/8wEv//EBSv/zAUz/8wFU//EABQBI/+4AWf/qAbr/8AG7/+0Bvf/wAAEA8f/1AAUASP/uAFn/6gG6//ABu//tAb3/8AABAPH/9QAFAEj/7gBZ/+oBuv/wAbv/7QG9//AAAQDx//UABQBI/+4AWf/qAbr/8AG7/+0Bvf/wAAEA8f/1AAUASP/uAFn/6gG6//ABu//tAb3/8AABAPH/9QAFAEj/7gBZ/+oBuv/wAbv/7QG9//AAAQDx//UABQBI/+4AWf/qAbr/8AG7/+0Bvf/wAAEA8f/1AAUASP/uAFn/6gG6//ABu//tAb3/8AABAPH/9QAIANQAFQDoABUBOP/kATn/5QE7/+QBSf/jAUv/4gFT/+QACADUABUA6AAVATj/5AE5/+UBO//kAUn/4wFL/+IBU//kAAkAf//fALD/8wCy//AAv//qANT/3wDh/+ABU//gAab/7QG8//UACQDF/+oA6P+4APH/4gEE//ABG//xAS//6wFK//UBVP/sAdz/6gAJAH//3wCw//MAsv/wAL//6gDU/98A4f/gAVP/4AGm/+0BvP/1AAkAxf/qAOj/uADx/+IBBP/wARv/8QEv/+sBSv/1AVT/7AHc/+oACQB//98AsP/zALL/8AC//+oA1P/fAOH/4AFT/+ABpv/tAbz/9QAJAMX/6gDo/7gA8f/iAQT/8AEb//EBL//rAUr/9QFU/+wB3P/qAAkAf//fALD/8wCy//AAv//qANT/3wDh/+ABU//gAab/7QG8//UACQDF/+oA6P+4APH/4gEE//ABG//xAS//6wFK//UBVP/sAdz/6gAJAH//3wCw//MAsv/wAL//6gDU/98A4f/gAVP/4AGm/+0BvP/1AAkAxf/qAOj/uADx/+IBBP/wARv/8QEv/+sBSv/1AVT/7AHc/+oACQB//98AsP/zALL/8AC//+oA1P/fAOH/4AFT/+ABpv/tAbz/9QAJAMX/6gDo/7gA8f/iAQT/8AEb//EBL//rAUr/9QFU/+wB3P/qAAkAf//fALD/8wCy//AAv//qANT/3wDh/+ABU//gAab/7QG8//UACQDF/+oA6P+4APH/4gEE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AFb/6gBfABMAa/+uAHr/zQB//6AAhP/BAIf/wACz/9AAt//qALr/xgC7AA0Avf/pAL7/1gDB/+gAwv+6AMX/6QDH/8sAyP/aAMn/xwFu/9MBpv+rAaj/zQGs/8sBtP/LAbX/ywG4//MBu//zAbz/7wHc/8AB3//uAAE1wAAEAAAABgAWAGwDngQcBIYEyAAVADgAFAA5ACYAOwAWARQAFAILABYCkgAmApQAFgKWABYC/QAWAwwAFgMPABYDRQAmA0cAJgNJACYDSwAWA2AAFANoABYD6gAWA+wAFgPuABYEEwAWAMwADv7uABD+7gAj/0AALP8wADYAFABD/94ARf/rAEb/6wBH/+sASf/rAFH/6wBT/+sAV//qAFj/6ABb/+gAkf/rAJX/6wCX/+oArf9AAK//QAC2/+sAuP/oAMP/6wDE/+sAxv/qAM0AFADRABQA8v/rAP7/6wEI/0ABE//rARX/6AEZ/+sBHf/rAS4AFAE1/+sBNgAUAUf/6wFI/+sBUv/rAWf+7gFr/u4Bb/7uAXD+7gHx/0AB8v9AAfP/QAH0/0AB9f9AAfb/QAH3/0ACDP/eAg3/3gIO/94CD//eAhD/3gIR/94CEv/eAhP/6wIU/+sCFf/rAhb/6wIX/+sCHf/rAh7/6wIf/+sCIP/rAiH/6wIi/+oCI//qAiT/6gIl/+oCJv/oAif/6AIo/0ACKf/eAir/QAIr/94CLP9AAi3/3gIv/+sCMf/rAjP/6wI1/+sCN//rAjn/6wI7/+sCPf/rAj//6wJB/+sCQ//rAkX/6wJH/+sCSf/rAlf/MAJr/+sCbf/rAm//6wKAABQCggAUAoQAFAKH/+oCif/qAov/6gKN/+oCj//qApH/6gKV/+gC+P9AAwD/QAMQ/+sDFP/qAxb/6wMY/+gDG//qAxz/6wMd/+oDJP8wAyj/QAMzABQDNf/eAzb/6wM4/+sDOv/rAzv/6AM9/+sDRP/oA0z/6ANV/0ADVv/eA1z/6wNh/+gDYv/rA2f/6wNp/+gDbv9AA2//3gNw/0ADcf/eA3X/6wN3/+sDeP/rA4L/6wOE/+sDhv/rA4r/6AOM/+gDjv/oA5X/6wOY/0ADmf/eA5r/QAOb/94DnP9AA53/3gOe/0ADn//eA6D/QAOh/94Dov9AA6P/3gOk/0ADpf/eA6b/QAOn/94DqP9AA6n/3gOq/0ADq//eA6z/QAOt/94Drv9AA6//3gOx/+sDs//rA7X/6wO3/+sDuf/rA7v/6wO9/+sDv//rA8X/6wPH/+sDyf/rA8v/6wPN/+sDz//rA9H/6wPT/+sD1f/rA9f/6wPZ/+sD2//rA93/6gPf/+oD4f/qA+P/6gPl/+oD5//qA+n/6gPr/+gD7f/oA+//6AP2ABQAHwA2/98AOP/kADn/7AA7/90Azf/fANH/3wEU/+QBLv/fATb/3wIL/90CgP/fAoL/3wKE/98Ckv/sApT/3QKW/90C/f/dAwz/3QMP/90DM//fA0X/7ANH/+wDSf/sA0v/3QNg/+QDaP/dA+r/3QPs/90D7v/dA/b/3wQT/90AGgA2/84AOP/tADv/0ADN/84A0f/OART/7QEu/84BNv/OAgv/0AKA/84Cgv/OAoT/zgKU/9AClv/QAv3/0AMM/9ADD//QAzP/zgNL/9ADYP/tA2j/0APq/9AD7P/QA+7/0AP2/84EE//QABAALP/uADf/7gIH/+4CCP/uAgn/7gIK/+4CV//uAob/7gKI/+4Civ/uAoz/7gKO/+4CkP/uAyT/7gPc/+4D3v/uAD0ARf/oAEb/6ABH/+gASf/oAFP/6ACR/+gAlf/oALb/6ADD/+gAxP/oAPL/6AD+/+gBGf/oAR3/6AE1/+gBR//oAUj/6AFS/+gCE//oAhT/6AIV/+gCFv/oAhf/6AIv/+gCMf/oAjP/6AI1/+gCN//oAjn/6AI7/+gCPf/oAj//6AJB/+gCQ//oAkX/6AJH/+gCSf/oAxD/6AM2/+gDOv/oAz3/6ANc/+gDYv/oA2f/6AN1/+gDd//oA3j/6AOE/+gDlf/oA7H/6AOz/+gDtf/oA7f/6AO5/+gDu//oA73/6AO//+gD0//oA9X/6APX/+gD2//oAAEwEgAEAAAALABiAIwBggHgAfoCPAKyA5gEfgVYBfIIjApSC2ANJg1YDYoOCA9OENgSbhOAFO4XABe2GRwZ0hqMGxIbcBwuHKQdUh18Hs4hDCEuIkQioiMgI0ojfCOOI7gACgAEABAACQAQAWUAEAFmABABaAAQAWkAEAFqABADTQAQA04AEANSABAAPQBF/+wARv/sAEf/7ABJ/+wAU//sAJH/7ACV/+wAtv/sAMP/7ADE/+wA8v/sAP7/7AEZ/+wBHf/sATX/7AFH/+wBSP/sAVL/7AIT/+wCFP/sAhX/7AIW/+wCF//sAi//7AIx/+wCM//sAjX/7AI3/+wCOf/sAjv/7AI9/+wCP//sAkH/7AJD/+wCRf/sAkf/7AJJ/+wDEP/sAzb/7AM6/+wDPf/sA1z/7ANi/+wDZ//sA3X/7AN3/+wDeP/sA4T/7AOV/+wDsf/sA7P/7AO1/+wDt//sA7n/7AO7/+wDvf/sA7//7APT/+wD1f/sA9f/7APb/+wAFwBR/+IBE//iAh3/4gIe/+ICH//iAiD/4gIh/+ICa//iAm3/4gJv/+IDFv/iAxz/4gM4/+IDgv/iA4b/4gPF/+IDx//iA8n/4gPL/+IDzf/iA8//4gPR/+ID2f/iAAYADv+EABD/hAFn/4QBa/+EAW//hAFw/4QAEAAs/+wAN//sAgf/7AII/+wCCf/sAgr/7AJX/+wChv/sAoj/7AKK/+wCjP/sAo7/7AKQ/+wDJP/sA9z/7APe/+wAHQAE//IACf/yAFj/8wBb//MAuP/zARX/8wFl//IBZv/yAWj/8gFp//IBav/yAib/8wIn//MClf/zAxj/8wM7//MDRP/zA0z/8wNN//IDTv/yA1L/8gNh//MDaf/zA4r/8wOM//MDjv/zA+v/8wPt//MD7//zADkAJf/zACn/8wAx//MAM//zAIH/8wCQ//MAlP/zAK7/8wDO//MBA//zARL/8wEW//MBGP/zARr/8wEc//MBNP/zAVH/8wH4//MCAv/zAgP/8wIE//MCBf/zAgb/8wIu//MCMP/zAjL/8wI0//MCQv/zAkT/8wJG//MCSP/zAmr/8wJs//MCbv/zAp//8wL8//MDCf/zAy//8wMy//MDV//zA2P/8wNm//MDgf/zA4P/8wOF//MDxP/zA8b/8wPI//MDyv/zA8z/8wPO//MD0P/zA9L/8wPU//MD1v/zA9j/8wPa//MAOQAl/+YAKf/mADH/5gAz/+YAgf/mAJD/5gCU/+YArv/mAM7/5gED/+YBEv/mARb/5gEY/+YBGv/mARz/5gE0/+YBUf/mAfj/5gIC/+YCA//mAgT/5gIF/+YCBv/mAi7/5gIw/+YCMv/mAjT/5gJC/+YCRP/mAkb/5gJI/+YCav/mAmz/5gJu/+YCn//mAvz/5gMJ/+YDL//mAzL/5gNX/+YDY//mA2b/5gOB/+YDg//mA4X/5gPE/+YDxv/mA8j/5gPK/+YDzP/mA87/5gPQ/+YD0v/mA9T/5gPW/+YD2P/mA9r/5gA2ACP/5AA6/9IAO//TAK3/5ACv/+QA1f/SAQj/5AHx/+QB8v/kAfP/5AH0/+QB9f/kAfb/5AH3/+QCC//TAij/5AIq/+QCLP/kApT/0wKW/9MC+P/kAv3/0wMA/+QDDP/TAw3/0gMP/9MDKP/kAzT/0gNL/9MDVf/kA2j/0wNr/9IDbv/kA3D/5AN5/9IDk//SA5j/5AOa/+QDnP/kA57/5AOg/+QDov/kA6T/5AOm/+QDqP/kA6r/5AOs/+QDrv/kA+r/0wPs/9MD7v/TA/j/0gQA/9IEE//TACYADv9GABD/RgAj/80Arf/NAK//zQEI/80BZ/9GAWv/RgFv/0YBcP9GAfH/zQHy/80B8//NAfT/zQH1/80B9v/NAff/zQIo/80CKv/NAiz/zQL4/80DAP/NAyj/zQNV/80Dbv/NA3D/zQOY/80Dmv/NA5z/zQOe/80DoP/NA6L/zQOk/80Dpv/NA6j/zQOq/80DrP/NA67/zQCmAEX/3ABG/9wAR//cAEn/3ABP/8EAUP/BAFH/1gBS/8EAU//cAFf/3QBY/+EAW//hAJH/3ACV/9wAl//dALb/3AC4/+EAvP/BAMP/3ADE/9wAxv/dAOf/wQDr/8EA7P/BAO7/wQDv/8EA8P/BAPL/3ADz/8EA9f/BAPb/wQD5/8EA+//BAP7/3AEA/8EBE//WARX/4QEZ/9wBHf/cATH/wQE1/9wBQP/BAUX/wQFH/9wBSP/cAVL/3AIT/9wCFP/cAhX/3AIW/9wCF//cAhz/wQId/9YCHv/WAh//1gIg/9YCIf/WAiL/3QIj/90CJP/dAiX/3QIm/+ECJ//hAi//3AIx/9wCM//cAjX/3AI3/9wCOf/cAjv/3AI9/9wCP//cAkH/3AJD/9wCRf/cAkf/3AJJ/9wCZP/BAmb/wQJo/8ECaf/BAmv/1gJt/9YCb//WAof/3QKJ/90Ci//dAo3/3QKP/90Ckf/dApX/4QMQ/9wDEv/BAxT/3QMW/9YDGP/hAxv/3QMc/9YDHf/dAzb/3AM3/8EDOP/WAzn/wQM6/9wDO//hAz3/3AM+/8EDQ//BA0T/4QNM/+EDVP/BA1z/3ANd/8EDYf/hA2L/3ANn/9wDaf/hA3X/3AN3/9wDeP/cA37/wQOA/8EDgv/WA4T/3AOG/9YDiv/hA4z/4QOO/+EDkv/BA5X/3AOx/9wDs//cA7X/3AO3/9wDuf/cA7v/3AO9/9wDv//cA8X/1gPH/9YDyf/WA8v/1gPN/9YDz//WA9H/1gPT/9wD1f/cA9f/3APZ/9YD2//cA93/3QPf/90D4f/dA+P/3QPl/90D5//dA+n/3QPr/+ED7f/hA+//4QPz/8ED9f/BA///wQQM/8EEDv/BBBD/wQBxAAT/2gAJ/9oARf/wAEb/8ABH//AASf/wAFP/8ABX/+8AWP/cAFv/3ACR//AAlf/wAJf/7wC2//AAuP/cAMP/8ADE//AAxv/vAPL/8AD+//ABFf/cARn/8AEd//ABNf/wAUf/8AFI//ABUv/wAWX/2gFm/9oBaP/aAWn/2gFq/9oCE//wAhT/8AIV//ACFv/wAhf/8AIi/+8CI//vAiT/7wIl/+8CJv/cAif/3AIv//ACMf/wAjP/8AI1//ACN//wAjn/8AI7//ACPf/wAj//8AJB//ACQ//wAkX/8AJH//ACSf/wAof/7wKJ/+8Ci//vAo3/7wKP/+8Ckf/vApX/3AMQ//ADFP/vAxj/3AMb/+8DHf/vAzb/8AM6//ADO//cAz3/8ANE/9wDTP/cA03/2gNO/9oDUv/aA1z/8ANh/9wDYv/wA2f/8ANp/9wDdf/wA3f/8AN4//ADhP/wA4r/3AOM/9wDjv/cA5X/8AOx//ADs//wA7X/8AO3//ADuf/wA7v/8AO9//ADv//wA9P/8APV//AD1//wA9v/8APd/+8D3//vA+H/7wPj/+8D5f/vA+f/7wPp/+8D6//cA+3/3APv/9wAQwAOAAwAEAAMAEX/5wBG/+cAR//nAEn/5wBT/+cAkf/nAJX/5wC2/+cAw//nAMT/5wDy/+cA/v/nARn/5wEd/+cBNf/nAUf/5wFI/+cBUv/nAWcADAFrAAwBbwAMAXAADAIT/+cCFP/nAhX/5wIW/+cCF//nAi//5wIx/+cCM//nAjX/5wI3/+cCOf/nAjv/5wI9/+cCP//nAkH/5wJD/+cCRf/nAkf/5wJJ/+cDEP/nAzb/5wM6/+cDPf/nA1z/5wNi/+cDZ//nA3X/5wN3/+cDeP/nA4T/5wOV/+cDsf/nA7P/5wO1/+cDt//nA7n/5wO7/+cDvf/nA7//5wPT/+cD1f/nA9f/5wPb/+cAcQAEAAwACQAMAEX/6ABG/+gAR//oAEn/6ABR/+oAU//oAFgACwBbAAsAkf/oAJX/6AC2/+gAuAALAMP/6ADE/+gA8v/oAP7/6AET/+oBFQALARn/6AEd/+gBNf/oAUf/6AFI/+gBUv/oAWUADAFmAAwBaAAMAWkADAFqAAwCE//oAhT/6AIV/+gCFv/oAhf/6AId/+oCHv/qAh//6gIg/+oCIf/qAiYACwInAAsCL//oAjH/6AIz/+gCNf/oAjf/6AI5/+gCO//oAj3/6AI//+gCQf/oAkP/6AJF/+gCR//oAkn/6AJr/+oCbf/qAm//6gKVAAsDEP/oAxb/6gMYAAsDHP/qAzb/6AM4/+oDOv/oAzsACwM9/+gDRAALA0wACwNNAAwDTgAMA1IADANc/+gDYQALA2L/6ANn/+gDaQALA3X/6AN3/+gDeP/oA4L/6gOE/+gDhv/qA4oACwOMAAsDjgALA5X/6AOx/+gDs//oA7X/6AO3/+gDuf/oA7v/6AO9/+gDv//oA8X/6gPH/+oDyf/qA8v/6gPN/+oDz//qA9H/6gPT/+gD1f/oA9f/6APZ/+oD2//oA+sACwPtAAsD7wALAAwAWv/tAFz/7QDp/+0CmP/tApr/7QKc/+0DPP/tA2z/7QN6/+0DlP/tA/n/7QQB/+0ADABa//IAXP/yAOn/8gKY//ICmv/yApz/8gM8//IDbP/yA3r/8gOU//ID+f/yBAH/8gAfAFj/9ABa//IAW//0AFz/8wC4//QA6f/yARX/9AIm//QCJ//0ApX/9AKY//MCmv/zApz/8wMY//QDO//0Azz/8gNE//QDTP/0A2H/9ANp//QDbP/yA3r/8gOK//QDjP/0A47/9AOU//ID6//0A+3/9APv//QD+f/yBAH/8gBRAAT/ygAJ/8oANv/SADj/1AA6//QAO//TAFj/5gBa/+8AW//mALj/5gDN/9IA0f/SANX/9ADZ/+0A3P/hAOn/7wEU/9QBFf/mAS7/0gE2/9IBZf/KAWb/ygFo/8oBaf/KAWr/ygIL/9MCJv/mAif/5gKA/9ICgv/SAoT/0gKU/9MClf/mApb/0wL9/9MDDP/TAw3/9AMP/9MDGP/mAyf/7QMz/9IDNP/0Azv/5gM8/+8DRP/mA0v/0wNM/+YDTf/KA07/ygNS/8oDYP/UA2H/5gNo/9MDaf/mA2v/9ANs/+8Def/0A3r/7wOJ/+0Div/mA4v/7QOM/+YDjf/tA47/5gOP/+EDk//0A5T/7wPq/9MD6//mA+z/0wPt/+YD7v/TA+//5gP2/9ID+P/0A/n/7wP6/+ED/P/hBAD/9AQB/+8EE//TAGIABP/AAAn/wAA2/50AOP/HADr/8AA7/6sAT//SAFD/0gBS/9IAvP/SAM3/nQDP//UA0f+dANX/8ADY//UA2f/qANz/5QDn/9IA6//SAOz/0gDu/9IA7//SAPD/0gDz/9IA9f/SAPb/0gD7/9IBAP/SART/xwEu/50BMf/SATb/nQFA/9IBRf/SAU3/9QFl/8ABZv/AAWj/wAFp/8ABav/AAgv/qwIc/9ICZP/SAmb/0gJo/9ICaf/SAoD/nQKC/50ChP+dApT/qwKW/6sC/f+rAwz/qwMN//ADD/+rAxL/0gMn/+oDM/+dAzT/8AM3/9IDOf/SAz7/0gND/9IDS/+rA03/wANO/8ADUv/AA1T/0gNd/9IDYP/HA2j/qwNr//ADef/wA37/0gOA/9IDif/qA4v/6gON/+oDj//lA5L/0gOT//ADlv/1A+r/qwPs/6sD7v+rA/P/0gP1/9ID9v+dA/j/8AP6/+UD/P/lA///0gQA//AEDP/SBA7/0gQQ/9IEEf/1BBP/qwBlAAT/sQAJ/7EANv+eADj/xQA6//IAO/+oAE//zwBQ/88AUv/PAFr/7wC8/88Azf+eANH/ngDV//IA2f/sANz/4QDn/88A6f/vAOv/zwDs/88A7v/PAO//zwDw/88A8//PAPX/zwD2/88A+//PAQD/zwEU/8UBLv+eATH/zwE2/54BQP/PAUX/zwFl/7EBZv+xAWj/sQFp/7EBav+xAgv/qAIc/88CZP/PAmb/zwJo/88Caf/PAoD/ngKC/54ChP+eApT/qAKW/6gC/f+oAwz/qAMN//IDD/+oAxL/zwMn/+wDM/+eAzT/8gM3/88DOf/PAzz/7wM+/88DQ//PA0v/qANN/7EDTv+xA1L/sQNU/88DXf/PA2D/xQNo/6gDa//yA2z/7wN5//IDev/vA37/zwOA/88Dif/sA4v/7AON/+wDj//hA5L/zwOT//IDlP/vA+r/qAPs/6gD7v+oA/P/zwP1/88D9v+eA/j/8gP5/+8D+v/hA/z/4QP//88EAP/yBAH/7wQM/88EDv/PBBD/zwQT/6gARAA2/74AT//hAFD/4QBS/+EAWP/vAFv/7wC4/+8AvP/hAM3/vgDR/74A5//hAOv/4QDs/+EA7v/hAO//4QDw/+EA8//hAPX/4QD2/+EA+//hAQD/4QEV/+8BLv++ATH/4QE2/74BQP/hAUX/4QIc/+ECJv/vAif/7wJk/+ECZv/hAmj/4QJp/+ECgP++AoL/vgKE/74Clf/vAxL/4QMY/+8DM/++Azf/4QM5/+EDO//vAz7/4QND/+EDRP/vA0z/7wNU/+EDXf/hA2H/7wNp/+8Dfv/hA4D/4QOK/+8DjP/vA47/7wOS/+ED6//vA+3/7wPv/+8D8//hA/X/4QP2/74D///hBAz/4QQO/+EEEP/hAFsANv/mADj/5wA6//IAO//nAE//1gBQ/9YAUv/WAFr/8QC8/9YAzf/mANH/5gDV//IA2f/uANz/6ADn/9YA6f/xAOv/1gDs/9YA7v/WAO//1gDw/9YA8//WAPX/1gD2/9YA+//WAQD/1gEU/+cBLv/mATH/1gE2/+YBQP/WAUX/1gIL/+cCHP/WAmT/1gJm/9YCaP/WAmn/1gKA/+YCgv/mAoT/5gKU/+cClv/nAv3/5wMM/+cDDf/yAw//5wMS/9YDJ//uAzP/5gM0//IDN//WAzn/1gM8//EDPv/WA0P/1gNL/+cDVP/WA13/1gNg/+cDaP/nA2v/8gNs//EDef/yA3r/8QN+/9YDgP/WA4n/7gOL/+4Djf/uA4//6AOS/9YDk//yA5T/8QPq/+cD7P/nA+7/5wPz/9YD9f/WA/b/5gP4//ID+f/xA/r/6AP8/+gD///WBAD/8gQB//EEDP/WBA7/1gQQ/9YEE//nAIQAIwAQACX/6AAp/+gAMf/oADP/6AA2/+AAOP/gADv/3wCB/+gAkP/oAJT/6ACtABAArv/oAK8AEADN/+AAzv/oAM8AEADR/+AA2AAQANz/4QDtABAA9P/gAP8AEAED/+gBCAAQARL/6AEU/+ABFv/oARj/6AEa/+gBHP/oAS7/4AE0/+gBNv/gAU0AEAFR/+gB8QAQAfIAEAHzABAB9AAQAfUAEAH2ABAB9wAQAfj/6AIC/+gCA//oAgT/6AIF/+gCBv/oAgv/3wIoABACKgAQAiwAEAIu/+gCMP/oAjL/6AI0/+gCQv/oAkT/6AJG/+gCSP/oAmr/6AJs/+gCbv/oAoD/4AKC/+AChP/gApT/3wKW/98Cn//oAvgAEAL8/+gC/f/fAwAAEAMJ/+gDDP/fAw//3wMoABADL//oAzL/6AMz/+ADS//fA1UAEANX/+gDYP/gA2P/6ANm/+gDaP/fA24AEANwABADgf/oA4P/6AOF/+gDj//hA5D/4AOWABADlwAQA5gAEAOaABADnAAQA54AEAOgABADogAQA6QAEAOmABADqAAQA6oAEAOsABADrgAQA8T/6APG/+gDyP/oA8r/6APM/+gDzv/oA9D/6APS/+gD1P/oA9b/6APY/+gD2v/oA+r/3wPs/98D7v/fA/b/4AP6/+ED+//gA/z/4QP9/+AEEQAQBBIAEAQT/98ALQA2//EAOP/0ADr/9AA7//AAzf/xAM//9QDR//EA1f/0ANj/9QDZ//MBFP/0AS7/8QE2//EBTf/1Agv/8AKA//ECgv/xAoT/8QKU//AClv/wAv3/8AMM//ADDf/0Aw//8AMn//MDM//xAzT/9ANL//ADYP/0A2j/8ANr//QDef/0A4n/8wOL//MDjf/zA5P/9AOW//UD6v/wA+z/8APu//AD9v/xA/j/9AQA//QEEf/1BBP/8ABZACMADwA2/+YAOP/mADoADgA7/+YArQAPAK8ADwDN/+YAzwAOANH/5gDVAA4A2AAOANkACwDc/+UA7QAPAPT/6AD/AA8BCAAPART/5gEu/+YBNv/mAU0ADgHxAA8B8gAPAfMADwH0AA8B9QAPAfYADwH3AA8CC//mAigADwIqAA8CLAAPAoD/5gKC/+YChP/mApT/5gKW/+YC+AAPAv3/5gMAAA8DDP/mAw0ADgMP/+YDJwALAygADwMz/+YDNAAOA0v/5gNVAA8DYP/mA2j/5gNrAA4DbgAPA3AADwN5AA4DiQALA4sACwONAAsDj//lA5D/6AOTAA4DlgAOA5cADwOYAA8DmgAPA5wADwOeAA8DoAAPA6IADwOkAA8DpgAPA6gADwOqAA8DrAAPA64ADwPq/+YD7P/mA+7/5gP2/+YD+AAOA/r/5QP7/+gD/P/lA/3/6AQAAA4EEQAOBBIADwQT/+YALQAE/78ACf+/ADb/nwA4/8kAO/+tAM3/nwDR/58A2f/sANz/5gEU/8kBLv+fATb/nwFl/78BZv+/AWj/vwFp/78Bav+/Agv/rQKA/58Cgv+fAoT/nwKU/60Clv+tAv3/rQMM/60DD/+tAyf/7AMz/58DS/+tA03/vwNO/78DUv+/A2D/yQNo/60Dif/sA4v/7AON/+wDj//mA+r/rQPs/60D7v+tA/b/nwP6/+YD/P/mBBP/rQAuADb/4wA6/+UAO//kAM3/4wDP/+UA0f/jANX/5QDY/+UA2f/pAO3/6gD//+oBLv/jATb/4wFN/+UCC//kAoD/4wKC/+MChP/jApT/5AKW/+QC/f/kAwz/5AMN/+UDD//kAyf/6QMz/+MDNP/lA0v/5ANo/+QDa//lA3n/5QOJ/+kDi//pA43/6QOT/+UDlv/lA5f/6gPq/+QD7P/kA+7/5AP2/+MD+P/lBAD/5QQR/+UEEv/qBBP/5AAhADb/4gA6/+QAzf/iAM//5ADR/+IA1f/kANj/5ADZ/+kA7f/rAP//6wEu/+IBNv/iAU3/5AKA/+ICgv/iAoT/4gMN/+QDJ//pAzP/4gM0/+QDa//kA3n/5AOJ/+kDi//pA43/6QOT/+QDlv/kA5f/6wP2/+ID+P/kBAD/5AQR/+QEEv/rABcANv/rADv/8wDN/+sA0f/rAS7/6wE2/+sCC//zAoD/6wKC/+sChP/rApT/8wKW//MC/f/zAwz/8wMP//MDM//rA0v/8wNo//MD6v/zA+z/8wPu//MD9v/rBBP/8wAvAE//7wBQ/+8AUv/vAFr/8AC8/+8A5//vAOn/8ADr/+8A7P/vAO7/7wDv/+8A8P/vAPP/7wD1/+8A9v/vAPv/7wEA/+8BMf/vAUD/7wFF/+8CHP/vAmT/7wJm/+8CaP/vAmn/7wMS/+8DN//vAzn/7wM8//ADPv/vA0P/7wNU/+8DXf/vA2z/8AN6//ADfv/vA4D/7wOS/+8DlP/wA/P/7wP1/+8D+f/wA///7wQB//AEDP/vBA7/7wQQ/+8AHQAE//IACf/yAFj/9QBb//UAuP/1ARX/9QFl//IBZv/yAWj/8gFp//IBav/yAib/9QIn//UClf/1Axj/9QM7//UDRP/1A0z/9QNN//IDTv/yA1L/8gNh//UDaf/1A4r/9QOM//UDjv/1A+v/9QPt//UD7//1ACsAT//uAFD/7gBS/+4AvP/uAOf/7gDr/+4A7P/uAO7/7gDv/+4A8P/uAPP/7gD0/+0A9f/uAPb/7gD7/+4BAP/uATH/7gFA/+4BRf/uAhz/7gJk/+4CZv/uAmj/7gJp/+4DEv/uAzf/7gM5/+4DPv/uA0P/7gNU/+4DXf/uA37/7gOA/+4DkP/tA5L/7gPz/+4D9f/uA/v/7QP9/+0D///uBAz/7gQO/+4EEP/uAAoABP/1AAn/9QFl//UBZv/1AWj/9QFp//UBav/1A03/9QNO//UDUv/1AFQARf/wAEb/8ABH//AASf/wAFH/xwBT//AAkf/wAJX/8AC2//AAw//wAMT/8ADy//AA/v/wARP/xwEZ//ABHf/wATX/8AFH//ABSP/wAVL/8AIT//ACFP/wAhX/8AIW//ACF//wAh3/xwIe/8cCH//HAiD/xwIh/8cCL//wAjH/8AIz//ACNf/wAjf/8AI5//ACO//wAj3/8AI///ACQf/wAkP/8AJF//ACR//wAkn/8AJr/8cCbf/HAm//xwMQ//ADFv/HAxz/xwM2//ADOP/HAzr/8AM9//ADXP/wA2L/8ANn//ADdf/wA3f/8AN4//ADgv/HA4T/8AOG/8cDlf/wA7H/8AOz//ADtf/wA7f/8AO5//ADu//wA73/8AO///ADxf/HA8f/xwPJ/8cDy//HA83/xwPP/8cD0f/HA9P/8APV//AD1//wA9n/xwPb//AAjwAEAA0ACQANAEP/8ABF/8AARv/AAEf/wABJ/8AAUf/iAFP/wABYAAsAWwALAJH/wACV/8AAtv/AALgACwDE/8AA7f/XAPL/wAD+/8AA///XARP/4gEVAAsBGf/AAR3/wAE1/8ABR//AAUj/wAFS/8ABZQANAWYADQFoAA0BaQANAWoADQIM//ACDf/wAg7/8AIP//ACEP/wAhH/8AIS//ACE//AAhT/wAIV/8ACFv/AAhf/wAId/+ICHv/iAh//4gIg/+ICIf/iAiYACwInAAsCKf/wAiv/8AIt//ACL//AAjH/wAIz/8ACNf/AAjf/wAI5/8ACO//AAj3/wAI//8ACQf/AAkP/wAJF/8ACR//AAkn/wAJr/+ICbf/iAm//4gKVAAsDEP/AAxb/4gMYAAsDHP/iAzX/8AM2/8ADOP/iAzr/wAM7AAsDPf/AA0QACwNMAAsDTQANA04ADQNSAA0DVv/wA1z/wANhAAsDYv/AA2f/wANpAAsDb//wA3H/8AN1/8ADd//AA3j/wAOC/+IDhP/AA4b/4gOKAAsDjAALA44ACwOV/8ADl//XA5n/8AOb//ADnf/wA5//8AOh//ADo//wA6X/8AOn//ADqf/wA6v/8AOt//ADr//wA7H/wAOz/8ADtf/AA7f/wAO5/8ADu//AA73/wAO//8ADxf/iA8f/4gPJ/+IDy//iA83/4gPP/+ID0f/iA9P/wAPV/8AD1//AA9n/4gPb/8AD6wALA+0ACwPvAAsEEv/XAAgA7QAQAPT/8AD/ABADkP/wA5cAEAP7//AD/f/wBBIAEABFAEX/7gBG/+4AR//uAEn/7gBT/+4Akf/uAJX/7gC2/+4Aw//uAMT/7gDtAA4A8v/uAPT/4wD+/+4A/wAOARn/7gEd/+4BNf/uAUf/7gFI/+4BUv/uAhP/7gIU/+4CFf/uAhb/7gIX/+4CL//uAjH/7gIz/+4CNf/uAjf/7gI5/+4CO//uAj3/7gI//+4CQf/uAkP/7gJF/+4CR//uAkn/7gMQ/+4DNv/uAzr/7gM9/+4DXP/uA2L/7gNn/+4Ddf/uA3f/7gN4/+4DhP/uA5D/4wOV/+4DlwAOA7H/7gOz/+4Dtf/uA7f/7gO5/+4Du//uA73/7gO//+4D0//uA9X/7gPX/+4D2//uA/v/4wP9/+MEEgAOABcAWP/AAFv/wAC4/8AA9P/uARX/wAIm/8ACJ//AApX/wAMY/8ADO//AA0T/wANM/8ADYf/AA2n/wAOK/8ADjP/AA47/wAOQ/+4D6//AA+3/wAPv/8AD+//uA/3/7gAfAFj/9ABa//AAW//0ALj/9ADp//AA7f/zAP//8wEV//QCJv/0Aif/9AKV//QDGP/0Azv/9AM8//ADRP/0A0z/9ANh//QDaf/0A2z/8AN6//ADiv/0A4z/9AOO//QDlP/wA5f/8wPr//QD7f/0A+//9AP5//AEAf/wBBL/8wAKAAT/1gAJ/9YBZf/WAWb/1gFo/9YBaf/WAWr/1gNN/9YDTv/WA1L/1gAMAFr/4ADp/+AA9P/CAzz/4ANs/+ADev/gA5D/wgOU/+AD+f/gA/v/wgP9/8IEAf/gAAQA9P/SA5D/0gP7/9ID/f/SAAoABP/XAAn/1wFl/9cBZv/XAWj/1wFp/9cBav/XA03/1wNO/9cDUv/XAF4ABAALAAkACwBF/+sARv/rAEf/6wBJ/+sAUf/pAFP/6wCR/+sAlf/rALb/6wDD/+sAxP/rAPL/6wD+/+sBE//p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ANcCYwJvANgCcQJxAOUCcwJzAOYCdQJ1AOcCgAKAAOgCggKCAOkChAKEAOoChgKGAOsCiAKIAOwCigKKAO0CjAKMAO4CjgKOAO8CkAKQAPACkgKSAPEClAKXAPICmQKZAPYCmwKbAPcC+AL9APgDAAMPAP4DEgMSAQ4DFgMWAQ8DGAMYARADHAMcAREDHwMgARIDIgMrARQDLQMvAR4DMQM2ASEDOAM5AScDOwM+ASkDRANFAS0DRwNHAS8DSQNJATADSwNOATEDUgNXATUDWgNaATsDXANcATwDYANhAT0DZgNmAT8DaANxAUADdAN1AUoDdwN6AUwDgQOCAVADhgOGAVIDiAOOAVMDkwOUAVoDmAPAAVwDwgPCAYUDxAPRAYYD2QPZAZQD3APcAZUD3gPeAZYD6gPvAZcD8gPyAZ0D9AP0AZ4D9gP2AZ8D+AP5AaAD/gQBAaIEBAQEAaYEBgQHAacECQQJAakEDQQNAaoEDwQPAasEEwQTAawAAQAGAAoAKAAzADQAPQBIAAEALABIAE0AVgBZAF0AmQCwALIAswC0ALsAvgDAAMUAxwDIAMkAzQDPANAA0QDTANQA1gDeAN8A4gDjAOQA5QDmAOgA6gDsAPEA8wD2APcA+wD+AP8BAAEdAdwAAgB2AAQABAAAAAkACQABAA4ADgACABAAEAADACMAJwAEACoAMgAJADYAPAASAEMARQAZAEcARwAcAEoASgAdAE8AUgAeAFQAVAAiAFgAWAAjAFoAXAAkAIgAiAAnAKwArwAoALgAuAAsALwAvAAtAMIAwgAuAM8A0AAvANIA0gAxANUA1QAyANcA2QAzANsA2wA2AN0A3QA3AN8A3wA4AOEA4QA5AOcA5wA6AOkA6QA7APIA8gA8APcA9wA9APkA+gA+AP8BAABAAQUBBQBCAQgBCABDARMBFQBEAScBKQBHASwBLABKAS4BLgBLAUUBRQBMAWUBawBNAW8BcABUAewB7QBWAe8B7wBYAfECFwBZAhwCIQCAAiYCNgCGAjgCQQCXAkoCTAChAk4CTgCkAlACUAClAlICUgCmAlQCVACnAlcCVwCoAlkCWQCpAlsCWwCqAl0CXQCrAl8CXwCsAmECYQCtAmMCbwCuAnECcQC7AnMCcwC8AnUCdQC9AoACgAC+AoICggC/AoQChADAAoYChgDBAogCiADCAooCigDDAowCjADEAo4CjgDFApACkADGApICkgDHApQCnADIAvgC/QDRAwADDwDXAxIDEgDnAxYDFgDoAxgDGADpAxwDHADqAx8DIADrAyIDKwDtAy0DLwD3AzEDNgD6AzgDPgEAA0QDRQEHA0cDRwEJA0kDSQEKA0sDTgELA1IDVwEPA1oDWgEVA1wDXAEWA2ADYQEXA2YDcQEZA3QDdQElA3cDegEnA4EDggErA4YDhgEtA4gDjgEuA5MDlAE1A5gDwAE3A8IDwgFgA8QD0QFhA9kD2QFvA9wD3AFwA94D3gFxA+oD7wFyA/ID8gF4A/QD9AF5A/YD9gF6A/gD+QF7A/4EAQF9BAQEBAGBBAYEBwGCBAkECQGEBA0EDQGFBA8EDwGGBBMEEwGHAAIBOAAEAAQAHQAJAAkAHQAOAA4AHgAQABAAHgAkACQAAQAlACUABAAmACYAAwAnACcABQAqACsAAgAsACwADAAtAC0ACQAuAC4ACgAvADAAAgAxADEAAwAyADIACwA2ADYABgA3ADcADAA4ADgADQA5ADkAEAA6ADoADgA7ADsADwA8ADwAEQBDAEMAEwBEAEQAFQBFAEUAFABHAEcAFgBKAEoAFwBPAFAAFwBRAFEAGABSAFIAFQBUAFQAGgBYAFgAGQBaAFoAGwBbAFsAGQBcAFwAHACIAIgAFQCsAKwABwCuAK4AAwC4ALgAGQC8ALwAFwDCAMIAFQDPANAAHwDSANIAAgDVANUADgDXANgAAgDZANkAEgDbANsAAgDdAN0AAgDfAN8AHwDhAOEAHwDnAOcACADpAOkAGwDyAPIAFQD3APcAIAD5APkAIAD6APoAFQD/AQAAIAEFAQUAIAETARMAGAEUARQADQEVARUAGQEnAScAFQEoASgABwEpASkACAEsASwACQEuAS4ACQFFAUUACAFlAWYAHQFnAWcAHgFoAWoAHQFrAWsAHgFvAXAAHgHsAe0AAwHvAe8ABgH4AfgABAH5AfwABQH9AgEAAgICAgYAAwIHAgoADAILAgsADwIMAhIAEwITAhMAFAIUAhcAFgIcAhwAFwIdAiEAGAImAicAGQIpAikAEwIrAisAEwItAi0AEwIuAi4ABAIvAi8AFAIwAjAABAIxAjEAFAIyAjIABAIzAjMAFAI0AjQABAI1AjUAFAI2AjYAAwI4AjgABQI5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AAAAEgAAAAAAAAAAAAAAAAAAAAAAAAAGAAQABwAFAAYAAAAGABYABgAAAAYAFgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwAAAAAAAkAAAAAAAYAFgAMAAAAAAAAAAAAAAAAAAAAAAAAAAkAAAAAAAAAAAAJAAAAFgAWAAAAAAAAAAAAAgAAAAAAAAAGABYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGQAZAAAACwALABUACwALAAsAFQAAAAAAAAAVABUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABkAAAAAAAAAAAAAABIAEgASABIAEgASABIABgAAAAAAAAAAAAAAAAAAAAAAAAAGAAYABgAGAAYACAAIAAgACAAKABsAGwAbABsAGwAbABsAFgAWABYAFgAWAAAAAAAAAAAACQAEAAQABAAEAAQADQANAA0ADQAFAAUAEgAbABIAGwASABsABgAWAAYAFgAGABYABgAWAAAAFgAAABYAAAAWAAAAFgAAABYAAAAWAAYAFgAGABYABgAWAAYAFgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACQAAAAkAAAAJAAkABgAEAAYABAAGAAQAAAAAAAAAAAAAAAAAGgAYABoAGAAaABgAGgAYABoAGAAMAAAADAAAAAwAAAAIAA0ACAANAAgADQAIAA0ACAANAAgADQAPAAAACgAFAAoAFAABABQAAQAUAAEAAAAAAAYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAASAAAAAAAAAAYACgAAAAAAEgAAAAAAFAAAAAAAAAAAAAAABgAAAAAACgATAAAACgAWAAAACQAAAA0AAAAEAAAABQAAAAAADQAEAA0AAAAAAAAAAAAAAAAAHAAAAAAAEQASAAAAAAAAAAAAAAAAAAYAAAAAAAYADAATABsAFgAJAAQACQAWAAUAFwAWAAkAGAAAAAAAAAAJAAUADwAAAA8AAAAPAAAACgAFAAsACwAAAAAAAAALAAAACQASABsABgAAAAAAAAAAABYACQAAAAAABwAFABYABgAAAAAABgAWAAoABQAAABMAFwAAABIAGwASABsAAAAAAAAAFgAAABYAFgATABcAAAAAAAAACQAAAAkABgAEAAYAFgAGAAQAAAAAABEABQARAAUAEQAFAA4AAwAAAAkAEwAXABYAAgAQABIAGwASABsAEgAbABIAGwASABsAEgAbABIAGwASABsAEgAbABIAGwASABsAEgAbAAAAFgAAABYAAAAWAAAAFgAAABYAAAAWAAAAFgAAABYAAAAAAAAAAAAGAAQABgAEAAYABAAGAAQABgAEAAYABAAGAAQABgAWAAYAFgAGABYABgAEAAYAFgAIAA0ACAANAAAADQAAAA0AAAANAAAADQAAAA0ACgAFAAoABQAKAAUAAAAAAAAACQAAAAkADAAAABMAFwAOAAMADgADAAAACQATABcAAAAAAAAAAAAAAAAAAAAAAAAAAAAJAAAACQAAAAkAAgAQAAoAAAAAAAAAAAAAABkAAAABAAAACgAsAI4AAURGTFQACAAEAAAAAP//AAgAAAABAAIAAwAEAAUABgAHAAhsaWdhADJsbnVtADhzbWNwAD5zczAxAERzczAyAEpzczAzAFBzczA0AFZzczA1AFwAAAABAAEAAAABAAIAAAABAAAAAAABAAMAAAABAAQAAAABAAUAAAABAAYAAAABAAcACAASABoAIgAqADIAOgBCAEoAAQAAAAEAQAAEAAAAAQH2AAEAAAABAgAAAQAAAAECEgABAAAAAQIQAAEAAAABAg4AAQAAAAECDAABAAAAAQIOAAICEADcAaYBpwGoAakBqgGrAawBrQGuAa8BsAGxAbIBswG0AegBtQG2AbcBuAG5AboBuwG8Ab0BvgGmAacBqAGpAaoBqwGsAa0BrgGvAbABsQGyAbMBtAHoAbUBtgG3AbgBuQG6AbsBvAG9Ab4C9wKiAqECogKjAqMCpAKlAqYCpwKoAqkCqgKrAqwCrQKuAq8CsAKxArICswK0ArUCtgK3ArgCuQK6ArsCvAK9Ar4CpAKlAqYCpwKoAqkCqgKrAqwCrQKuAq8CsAKxArICswK0ArUCtgK3ArgCuQK6ArsCvAK9Ar4C8wK/Ar8CwALAAsECwQLCAsICwwLDAsUCxQLGAsYCxwLHAsgCyALJAskCygLKAssCywLMAswCzQLNAs8CzwLQAtAC0QLRAtIC0gLTAtMC1ALUAtUC1gLWAtcC1wLYAtgC2QLZAtoC2gLbAtsC3ALcAt0C3QLeAt4C3wLfAuAC4ALhAuEC4gLiAuMC4wLkAuQC5QLlAuYC5gLnAucC6ALo/////wLqAuoC6wLrAuwC7ALtAu0C7gLuAu8C7wLwAvAC8QLxAvIC8gLzAvQC9AL1AvUC9gL2AqEAAQCkAAEACAABAAQBkgACAEsAAgCYAAoBmAHMAcQB1gHXAdgB2QHbAd0B5wABAIgBkQABAIgBKAABAIgBrgACAIgAAgHjAeQAAgB+AAIB5QHmAAIADQAjADwAAABDAFwAGgCDAIMANACFAIUANQHsAe0ANgHvAjEAOAI0AkUAewJIAlQAjQJXAmgAmgJqAnsArAJ+An8AvgKCApwAwAPwA/AA2wABAAEASAACAAEAEgAbAAAAAQABAEkAAQABALYAAQABADQAAQACAC0ATQ==",
+"Roboto-Regular.ttf":"AAEAAAAOAIAAAwBgR0RFRgsuCy8AASx0AAAASEdQT1OC3T4oAAEsvAAAkPhHU1VCeolvLwABvbQAAANsT1MvMrivKcMAAAFoAAAAYFZETVhu6nZPAAASOAAABeBjbWFwf76BZgAAGBgAAA7iZ2x5ZusE9WMAACb8AADUeGhlYWT1kQ7EAAAA7AAAADZoaGVhC3AJkwAAASQAAAAkaG10eJaDaacAAAHIAAAQcGxvY2EvrvnGAAD7dAAACDptYXhwBDsA9gAAAUgAAAAgbmFtZbs83bQAAQOwAAAEeXBvc3Tfb5xiAAEILAAAJEYAAQAAAAEAAHdFsyVfDzz1AAkIAAAAAADE8BEuAAAAAM2CsmH6jf3VCXQIYgAAAAkAAgAAAAAAAAABAAAHbP4MAAAJkvqN/dgJdAABAAAAAAAAAAAAAAAAAAAEHAABAAAEHACXABYAXQAFAAEAAAAAAAAAAAAAAAAAAwABAAMElwGQAAUAAAWaBTMAAAEfBZoFMwAAA9EAZgIAAAAAAAAAAAAAAAAA4AAC/1AAIFsAAAAgAAAAAHB5cnMAQAAA//0GAP4AAGYHmgIAIAABn08BAAAEOgWwAAAAIAACAfsAAAAAAAAB+wAAAfsAAAKPAGkE+wBGBH4AbgXcAGkE+QBEAWUAZwKhAIUCqgAIA3IAHASJAE4BkgAdAjUAJQIbAKIDTAASBH4AcgR+ANcEfgBdBH4AXgR+ADkEfgCaBH4AhwR+AE0EfgBmBH4AVAH4AKACAABKBBEASASAAJgELgCGA8cAOgcvAGEFSgAnBRcAtgUeAIMFaQC2BKoAtgSnALYFfgCFBbMAtgI/AMMEagA/BSQAtgRgALYHAwC2BbQAtgWQAIIFGQC2BZAAggVMALUE4wBaBMYAOwVoAJYFKQAnBw0ASAUJAEEE8gAeBMkAYQIfAJIDSAAoAh8ACQNYAEADnAAEAnkATwRiAHIEiACRBDsAYQSIAGQENwBiAr4AQgSIAGYEiACRAfwAoQIL/7YEEwCSAfwAoQcCAJAEiACRBIgAYASIAJEEiABkAsoAkQQrAGYCjAAdBIgAjQQCAC4GDgAwBAIALgQCABsEAgBeArUAQAHzAK8CtQATBXEAggHzAJAEYQBuBKYARgW0AGkE2AAgAesAkwToAFoD9ACpBkkAWwOTAHoDwQBmBG4AfwZKAFoDqgB4Av0AggRHAGEDXwBxA2gAaQKCAIEEiACaA+kAQgIWAKIB+wB0AiYAXgOjAHoDwABvBjYAtAaWALQG6wB7A+0AcQd6//IERABZBXIAcwS6AKYEwgCLBsEAPQSwAEwEkQBHBIkAYAScAJoFmwAeAfoAmwRzAJoEMwAmAioAIwWLAKQEiACRB6EAaQdEAGEB/ACgArn/5AV/AHEEkwBgBZAAlgTzAI0CA/+0BDcAYgPEAKkDjQCMA2oAgQIhAKACtQCLAioAMgPGAIIC/ABoAp0AtgAA/NoAAP13AAD8kwAA/V4AAPwnAAD9QwINAMMECwChAhcAogRzALUFpAAgBXIAcwU+ADQEkQB6BbUAtgSRAEUFuwBOBYkAXQVSAHIEhQBkBL0AoAQCAC4EiABgBFAAYwQlAG0EiACRBI8AegKXAMMEbgAlA+wAZQTFAE8EiACRBE0AZQSIAGAELABRBF0AjwWjAFcFmgBfBpcAegTwAHQEQv/nBkgASgX/ACsFZQCHCJkAMgikALUGggBABbQAtQULAKYGBAA0B0MAGwS/AFEFtAC2BakAMAUHAFEGLQBTBdkAtAV6AJcHhwC0B8AAtAYSABEG6wC1BQUApgVkALEHJwDDBRgAYwRsAGEEkgCdA1sAmgTUAC4GIAAVBBAAWASeAJwEUgCcBKAAKAXvAJ0EnQCcBJ4AnAPYACgFzQBkBL0AnARZAGcGeACcBp8AkQT3AB4GNgCdBFgAnQRNAGQGiACdBGQALwSJ/+cETgBsBskAJwbkAJwEif/9BJ4AnAcIAJ8GKwCBBFb/3AcsAMQF+QCZBNIAKgRGAA8HDADWBgwAvAbRAJYF4QCWCQUAwwfRAJsEJABQA9sATAVyAHMEjABgBQoAFwQDAC4FcgBzBIkAYAcBAJ8GJAB+BwkAnwYsAIEFMgB4BEcAZAT9AHQAAPxnAAD8cQAA/WYAAP2kAAD6jQAA+qQEVv/cBRsAtQSKAJEEZACmA5AAkQTbALUEBgCRBQkApgR+AJoGjABFBYQAPgfPALUFtACRCDEAtAb0AJEF7gBzBNMAbQctADQFXAAfBXAAlwRrAIMFcACOBi8ARwS+/+MFCQCmBFoAmgWyALUEiACRBYcAXwSoAGkEqABpBLcAOgNJADsE9gBZBpQAWQbkAGQGVgA2BSsAMQRKAFMECAB5B8EARQZ1AD8H+wCtBqEAkAT2AHkEHQBlBa0AJAUgAEYFZACbBBQAAAgpAAAEFAAACCkAAAK5AAACCgAAAVwAAAR/AAACMAAAAaIAAADRAAAAAAAABYgAswZ9ALsDpgANAZkAYAGZADABlwAkAZoAUALUAGAC2wA8AsEAJARpAEYEjwBXArIAigPEAKYFWgCmB6oARAJmAGwCZgBZA6MAOwOrAEgDYAB6BKYARgaRAKcEPgBPBegAewPOAGgIywCrBQEAZgUXAJgGuwBvB1AAawd/AGwG2wBrBKIATAWOAKkErwBFBJIAqATFAD8IOgBrAgz/tASCAGUELQCYBDYAngQ8AJkECAArAkwAxwKPAG4CAwBcBG4AHwAAAAAIMwBbCDUAXAQcAFwDjQBXBIAAcwML/6IB/P+2AiUAGwGRAGcDpACDA54AgQOfAIED9ABtBA4AaQPz/14D7wBuA6QAWwH9AJ8EtQApBHUAmwSPAHIEpgCbBEMAmwQdAJsEzwByBPYAmwH6AJsECwBBBF0AmwO5AJsF9ACbBRkAmwTLAHIE4QByBKkAmwRvAF0ELABHBQIAjAS4ACoGBQBBBIQAOAReACAEPgBOBHcAewJpAEID4QBaBBIAWQRkAEcEaQBdBC0AegO5AEcELQBcBCcASwInAF4DVQBxA2gAaQL8AEoDeQByA3oAewMMAF4DggByA2sAaQOkAHwDlgCPArUAngNHAG8EfgBeBH4AOQR+AJoEjwCHBDoAHgRCADsEbwBaBH4AZgTDAGQEiABgBUQAtgRiAHIFLwC1BSQAtgQTAJIFPQC2BA8AkgR+AFQEdQCbA2oAgQH7AAACNQAlBYcALgWHAC4EpgAGBMYAOwKM/+MFSgAnBUoAJwVKACcFSgAnBUoAJwVKACcFSgAnBR4AgwSqALYEqgC2BKoAtgSqALYCP//cAj8AwwI///ICP//MBbQAtgWQAIIFkACCBZAAggWQAIIFkACCBWgAlgVoAJYFaACWBWgAlgTyAB4EYgByBGIAcgRiAHIEYgByBGIAcgRiAHIEYgByBDsAYQQ3AGIENwBiBDcAYgQ3AGIB+v+1AfoAmwH6/8sB+v+lBIgAkQSIAGAEiABgBIgAYASIAGAEiABgBIgAjQSIAI0EiACNBIgAjQQCABsEAgAbBUoAJwRiAHIFSgAnBGIAcgVKACcEYgByBR4AgwQ7AGEFHgCDBDsAYQUeAIMEOwBhBR4AgwQ7AGEFaQC2BR4AZASqALYENwBiBKoAtgQ3AGIEqgC2BDcAYgSqALYENwBiBKoAtgQ3AGIFfgCFBIgAZgV+AIUEiABmBX4AhQSIAGYFfgCFBIgAZgWzALYEiACRAj//xQH6/54CP/+/Afr/mAI///UB+v/OAj8AIQH8AAACPwC3BqkAwwQHAKEEagA/AgP/tAUkALYEEwCSBGAAtgH8AKEEYAC2AfwAWwRgALYCkgChBGAAtgLYAKEFtAC2BIgAkQW0ALYEiACRBbQAtgSIAJEEiP/SBZAAggSIAGAFkACCBIgAYAWQAIIEiABgBUwAtQLKAJEFTAC1AsoAWAVMALUCygBpBOMAWgQrAGYE4wBaBCsAZgTjAFoEKwBmBOMAWgQrAGYE4wBaBCsAZgTGADsCjAAdBMYAOwKMAB0ExgA7ArQAHQVoAJYEiACNBWgAlgSIAI0FaACWBIgAjQVoAJYEiACNBWgAlgSIAI0FaACWBIgAjQcNAEgGDgAwBPIAHgQCABsE8gAeBMkAYQQCAF4EyQBhBAIAXgTJAGEEAgBeB3r/8gbBAD0FcgBzBIkAYASm//MEpv/zBCwARwS1ACkEtQApBLUAKQS1ACkEtQApBLUAKQS1ACkEjwByBEMAmwRDAJsEQwCbBEMAmwH6/7MB+gCbAfr/yQH6/6MFGQCbBMsAcgTLAHIEywByBMsAcgTLAHIFAgCMBQIAjAUCAIwFAgCMBF4AIAS1ACkEtQApBLUAKQSPAHIEjwByBI8AcgSPAHIEpgCbBEMAmwRDAJsEQwCbBEMAmwRDAJsEzwByBM8AcgTPAHIEzwByBPYAmwH6/5wB+v+WAfr/zAH6//cB+gCPBAsAQQRdAJsDuQCbA7kAmwO5AJsDuQCbBRkAmwUZAJsFGQCbBMsAcgTLAHIEywByBKkAmwSpAJsEqQCbBG8AXQRvAF0EbwBdBG8AXQQsAEcELABHBQIAjAUCAIwFAgCMBQIAjAUCAIwFAgCMBgUAQQReACAEXgAgBD4ATgQ+AE4EPgBOCN4AXQVKACcFDv/mBhcAEwKjABkFpABSBVb/jQVmAD8Cl//IBUoAJwUXALYEqgC2BMkAYQWzALYCPwDDBSQAtgcDALYFtAC2BZAAggUZALYExgA7BPIAHgUJAEECP//MBPIAHgSFAGQEUABjBIgAkQKXAMMEXQCPBHMAmgSIAGAEiACaBAIALgQCAC4Cl//TBF0AjwSIAGAEXQCPBpcAegSqALYEcwC1BOMAWgI/AMMCP//MBGoAPwUkALYFJAC2BQcAUQVKACcFFwC2BHMAtQSqALYFtAC2BwMAtgWzALYFkACCBbUAtgUZALYFHgCDBMYAOwUJAEEEYgByBDcAYgSeAJwEiABgBIgAkQQ7AGEEAgAbBAIALgQ3AGIDWwCaBCsAZgH8AKEB+v+lAgv/tgRSAJwEAgAbBw0ASAYOADAHDQBIBg4AMAcNAEgGDgAwBPIAHgQCABsBZQBnAo8AaQQeAKkEugBCAgP/tAGZADAHAwC2BwIAkAVKACcEYgByBZD/PgcsAEIHeABCBKoAtgW0ALYENwBiBJ4AnAWJAF0FmgBfBQoAFwQD//kIigBgCZIAggS/AFEEEABYBR4AgwQ7AGEE8gAeBAIALgI/AMMHQwAbBiAAFQI/AMMFSgAnBGIAcgVKACcEYgByB3r/8gbBAD0EqgC2BDcAYgWHAF8ENwBiBDcAYgdDABsGIAAVBL8AUQQQAFgFtAC2BJ4AnAW0ALYEngCcBZAAggSIAGAFcgBzBIwAYAVyAHMEjABgBWQAsQRNAGQFBwBRBAIAGwUHAFEEAgAbBQcAUQQCABsFegCXBFkAZwbrALUGNgCdBQkAQQQCAC4EiABkBakAMASgACgFSgAnBGIAcgVKACcEYgByBUoAJwRiAHIFSgAnBGL/rgVKACcEYgByBUoAJwRiAHIFSgAnBGIAcgVKACcEYgByBUoAJwRiAHIFSgAnBGIAcgVKACcEYgByBUoAJwRiAHIEqgC2BDcAYgSqALYENwBiBKoAtgQ3AGIEqgC2BDcAYgSq//gEN/+zBKoAtgQ3AGIEqgC2BDcAYgSqALYENwBiAj8AwwH6AJsCPwC3AfwAlgWQAIIEiABgBZAAggSIAGAFkACCBIgAYAWQAEwEiP/LBZAAggSIAGAFkACCBIgAYAWQAIIEiABgBX8AcQSTAGAFfwBxBJMAYAV/AHEEkwBgBX8AcQSTAGAFfwBxBJMAYAVoAJYEiACNBWgAlgSIAI0FkACWBPMAjQWQAJYE8wCNBZAAlgTzAI0FkACWBPMAjQWQAJYE8wCNBPIAHgQCABsE8gAeBAIAGwTyAB4EAgAbBKYAZASmAGQFJAC2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ABEQACEzNTMDIgYVFBY7AREzETMyNjU0JiMDeBsBAgFO/rL+/hu5Hf79/rQBTAEDHbnWxtHRxh25HcTS0sQFHv69/vv++f67xsYBQwEHAQUBRc7+nenMzucDavyW6c7L6AAAAAABALT+oQWSBbAACwAAEzMRIREzETMDIxEhtLkC17mVEqX72QWw+uUFG/rp/ggBXwABAJcAAATEBbAAEwAAAREjEQ4BIyImNREzERQWMzI2NxEExLlhsHv187qMomm8ZwWw+lACYR0azvIBxv46q38cHAK4AAEAtAAABtIFsAALAAABESERMxEhETMRIREBbgH6uQH4ufniBbD65QUb+uUFG/pQBbAAAAABALT+oQdrBbAADwAAAREhETMRIREzETMDIxEhEQFuAfq5Afi5mRKm+gEFsPrlBRv65QUb+uX+DAFfBbAAAAAAAgARAAAFuAWwAAwAFQAAEyERITIWFRQGIyERIQERITI2NTQmIxECVQFo7vz97f3f/mQCVQFonJSUnAWw/ajhx8joBRv9qP3Sn355mAAAAAADALUAAAY1BbAACgATABcAAAEhMhYVFAYjIREzGQEhMjY1NCYjASMRMwFuAWju/P3t/d+5AWiclJScA1+5uQNY4cfI6AWw/RP90p9+eZj9PQWwAAACAKYAAASxBbAACgATAAABITIWFRQGIyERMxkBITI2NTQmIwFfAWju/P3t/d+5AWiclJScA1jhx8joBbD9E/3Sn355mAAAAAABALH/7AT2BcYAHwAAEzQAMzIAGQEQACMiADUzFBYzMhI9ASE1ITU0AiMiBhWxAST2+wEw/tD7+/7hubWsq8f9uwJFx6ustQPf1QES/qb+7f7//uz+qAEB46CvAQjNOJU2zgEJsKEAAAIAw//rBt4FxQAVACMAAAEQACEgABE1IxEjETMRMzUQACEgABEnNAIjIgIVERQSMzISNQbe/rv+9v7+/sbXubnXAToBAgEKAUW52ry0z8+0vdkCV/70/qABYAEMKP2BBbD9ZEQBCwFi/p7+9QLJAQb++sn+/cv++gEFzAACAGMAAARnBbAADQAWAAAhIwEuATU0JDMhESMRIQEhIgYVFBYzIQEoxQFVkJABC/UBz7r+qwFV/uujpKSdARsCbzbDktTi+lACPALeloiHowAAAAACAGH/6wQoBhEAGwApAAABMhId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ACkAAAAHAJoA0QFy//8AZv5MA/cGBAImAEkAAAAGAJpdGwAA//8Ahf/rBNsHYQImACkAAAAHAJwA/AGx//8AZv5MA/cGCgImAEkAAAAHAJwAiABa//8Ahf/rBNsHIgImACkAAAAHAJ0BoAFy//8AZv5MA/cFywImAEkAAAAHAJ0BLAAb//8Ahf3lBNsFxQImACkAAAAHAZEBq/62//8AZv5MA/cGbQImAEkAAAAHAaUBMwBW//8AtgAABP0HRgImACoAAAAHAJoA+gFd//8AkQAAA/oHRQImAEoAAAAHAJoAIwFc////xQAAAncHUQImACsAAAAHAKD/QwFg////ngAAAlAF+gImAIoAAAAHAKD/HAAJ////vwAAAokG+gImACsAAAAHAG7/RwFK////mAAAAmIFpAImAIoAAAAHAG7/IP/0////9QAAAkwHTAImACsAAAAHAJz/dAGc////zgAAAiUF9QImAIoAAAAHAJz/TQBF//8AIf5YAYEFsAImACsAAAAGAJ/vCAAA//8AAP5QAWAGGAImAEsAAAAGAJ/OAAAA//8AtwAAAYYHDQImACsAAAAHAJ0AFwFd//8Aw//rBf8FsAAmACsAAAAHACwCPwAA//8Aof5LA2MGGAAmAEsAAAAHAEwB/AAA//8AP//rBIsHOQImACwAAAAHAJoBhQFQ////tP5LAjkF3AImAJgAAAAHAJr/M//z//8Atv31BRwFsAImAC0AAAAHAZEBev7G//8Akv33BBQGGAImAE0AAAAHAZEBGP7I//8AtgAABCUG4AImAC4AAAAHAHMANwEa//8AoQAAAkMHXAImAE4AAAAHAHMAJQGW//8Atv33BCUFsAImAC4AAAAHAZEBdP7I//8AW/33AVoGGAImAE4AAAAHAZH///7I//8AtgAABCUFsQImAC4AAAAHAZEB2QTF//8AoQAAAq0GGAAmAE4AAAAHAZEBVgUs//8AtgAABCUFsAImAC4AAAAHAJ0Bxf3F//8AoQAAAq0GGAAmAE4AAAAHAJ0BPv23//8AtgAABP4HHwImADAAAAAHAHMB/wFZ//8AkQAAA/gF3QImAFAAAAAHAHMBaQAX//8Atv33BP4FsAImADAAAAAHAZEB2P7I//8Akf33A/gETgImAFAAAAAHAZEBQv7I//8AtgAABP4HRwImADAAAAAHAJsBFwFe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//8AWP5SA6wETAImAOoAAAAHAZwBQ/+5//8Ag/5RBMkFxQImACUAAAAHAZwB7v+4//8AYf5RA/IETgImAEUAAAAHAZwBWP+4//8AHgAABNMFsAIGADsAAP//AC7+YAPfBDoCBgC4AAD//wDDAAABfAWwAgYAKwAA//8AGwAABygHTAImANUAAAAHAJwB+AGc//8AFQAABgQF9QImAOkAAAAHAJwBjQBF//8AwwAAAXwFsAIGACsAAP//ACcAAAUiB0wCJgAjAAAABwCcAPsBnP//AHL/7APsBgoCJgBDAAAABgCcfVoAAP//ACcAAAUiBwwCJgAjAAAABwBoAKoBXP//AHL/7APsBcoCJgBDAAAABgBoLBoAAP////IAAAdXBbACBgB/AAD//wA9/+sGfAROAgYAhAAA//8AtgAABHUHTAImACcAAAAHAJwAxwGc//8AYv/sA+kGCwImAEcAAAAHAJwAggBb//8AX//rBRAG3gImAUEAAAAHAGgAfQEu//8AYv/sA+kETwIGAJkAAP//AGL/7APpBcsCJgCZAAAABgBoMRsAAP//ABsAAAcoBwwCJgDVAAAABwBoAacBXP//ABUAAAYEBbUCJgDpAAAABwBoATwABf//AFH/6wRnByECJgDWAAAABwBoAGEBcf//AFj/7QOsBckCJgDqAAAABgBoCBkAAP//ALYAAAT+BvoCJgDXAAAABwBuAQQBSv//AJwAAAQBBaQCJgDrAAAABgBudfQAAP//ALYAAAT+BwwCJgDXAAAABwBoAOABXP//AJwAAAQBBbUCJgDrAAAABgBoUQUAAP//AIL/6wUNByECJgAxAAAABwBoAMoBcf//AGD/7AQnBcoCJgBRAAAABgBoSRoAAP//AHP/6wT+BcUCBgESAAD//wBg/+wEJwROAgYBEwAA//8Ac//rBP4HBwImARIAAAAHAGgA0gFX//8AYP/sBCcF5gImARMAAAAGAGgyNgAA//8Asf/sBPYHIgImAOIAAAAHAGgAtwFy//8AZP/rA+AFygImAPoAAAAGAGgmGgAA//8AUf/rBMgG+gImANkAAAAHAG4ArQFK//8AG/5LA+QFpAImAFsAAAAGAG4p9AAA//8AUf/rBMgHDAImANkAAAAHAGgAiQFc//8AG/5LA+QFtQImAFsAAAAGAGgFBQAA//8AUf/rBMgHSwIm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IABMAGkAYwBlAG4AcwBlACwAIABWAGUAcgBzAGkAbwBuACAAMgAuADAAaAB0AHQAcAA6AC8ALwB3AHcAdwAuAGEAcABhAGMAaABlAC4AbwByAGcALwBsAGkAYwBlAG4AcwBlAHMALwBMAEkAQwBFAE4AUwBFAC0AMgAuADAAAAAAAgAAAAAAAP9qAGQAAAAAAAAAAAAAAAAAAAAAAAAAAAQcAAABAgACAAMABQAGAAcACAAJAAoACwAMAA0ADgAPABAAEQASABMAFAAVABYAFwAYABkAGgAbABwAHQAeAB8AIAAhACIAIwAkACUAJgAnACgAKQAqACsALAAtAC4ALwAwADEAMgAzADQANQA2ADcAOAA5ADoAOwA8AD0APgA/AEAAQQBCAEMARABFAEYARwBIAEkASgBLAEwATQBOAE8AUABRAFIAUwBUAFUAVgBXAFgAWQBaAFsAXABdAF4AXwBgAGEAowCEAIUAvQCWAOgAhgCOAIsAnQCpAKQAigEDAIMAkwDyAPMAjQCXAIgBBADeAPEAngCqAPUA9AD2AKIAkADwAJEA7QCJAKAA6gC4AKEA7gEFANcBBgDiAOMBBwEIALAAsQEJAKYBCgELAQwBDQEOAQ8A2ADhANsA3ADdAOAA2QDfARABEQESARMBFAEVARYBFwEYARkBGgEbARwBHQEeAR8BIAEhASIAnwEjASQBJQEmAScBKAEpASoBKwEsAS0AmwEuAS8BMAExATIBMwE0ATUBNgE3ATgBOQE6ATsBPAE9AT4BPwFAAUEBQgFDAUQBRQFGAUcBSAFJAUoBSwFMAU0BTgFPAVABUQFSAVMBVAFVAVYBVwFYAVkBWgFbAVwBXQFeAV8BYAFhAWIBYwFkAWUBZgFnAWgBaQFqAWsBbAFtAW4BbwFwAXEBcgFzAXQBdQF2AXcBeAF5AXoBewF8AX0BfgF/AYABgQGCAYMBhAGFAYYBhwGIAYkBigGLAYwBjQGOAY8BkAGRAZIBkwGUAZUBlgGXAZgBmQGaAZsBnAGdAZ4BnwGgAaEBogGjAaQBpQGmAacBqAGpAaoBqwGsAa0BrgGvAbABsQGyAbMBtAG1AbYBtwG4AbkBugG7AbwBvQG+Ab8BwAHBAcIBwwHEAcUBxgHHAcgByQHKAcsBzAHNALIAswHOALYAtwDEAc8AtAC1AMUAggDCAIcB0ACrAMYAvgC/ALwB0QHSAdMB1AHVAdYB1wHYAIwB2QHaAdsB3AHdAJgAmgCZAO8ApQCSAJwApwCPAJQAlQC5Ad4B3wHgAMAB4QHiAeMB5AHlAeYB5wHoAekB6gHrAewB7QHuAe8B8AHxAfIB8wH0AfUB9gH3AfgB+QH6AfsB/AH9Af4B/wIAAgECAgIDAgQCBQIGAgcCCAIJAgoCCwIMAg0CDgIPAhACEQISAhMCFAIVAhYCFwIYAhkCGgIbAhwCHQIeAh8CIAIhAiICIwIkAiUCJgInAigCKQIqAisCLAItAi4CLwIwAjECMgIzAjQCNQI2AjcArAI4AjkA6QI6AjsCPACtAMkAxwCuAGIAYwI9AGQAywBlAMgAygDPAMwAzQDOAGYA0wDQANEArwBnANYA1ADVAGgA6wBqAGkAawBtAGwAbgI+AG8AcQBwAHIAcwB1AHQAdgB3AHgAegB5AHsAfQB8AH8AfgCAAIEA7AC6Aj8CQAJBAkICQwJEAP0A/gJFAkYCRwJIAP8BAAJJAkoCSwJMAk0CTgJPAlACUQJSAlMCVAJVAlYA+AD5AlcCWAJZAloCWwJcAl0CXgJfAmACYQJiAmMCZAJlAmYCZwJoAmkCagJrAmwCbQJuAm8CcAJxAnICcwJ0AnUCdgJ3AngCeQJ6AnsCfAJ9An4CfwKAAoECggKDAoQChQKGAocCiAKJAooA+wD8AosCjADkAOUCjQKOAo8CkAKRApICkwKUApUClgKXApgCmQKaApsCnAKdAp4CnwKgAqECogC7AqMCpAKlAqYA5gDnAqcCqAKpAqoCqwKsAq0CrgKvArACsQKyArMCtAK1ArYCtwK4ArkCugK7ArwCvQK+Ar8CwALBAsICwwLEAsUCxgLHAsgCyQLKAssCzALNAs4CzwLQAtEC0gLTAtQC1QLWAtcC2ALZAtoC2wLcAt0C3gLfAuAC4QLiAuMC5ALlAuYC5wLoAukC6gLrAuwC7QLuAu8C8ALxAvIC8wL0AvUC9gL3AvgC+QL6AvsC/AL9Av4C/wMAAwEDAgMDAwQDBQMGAwcDCAMJAwoDCwMMAw0DDgMPAxADEQMSAxMDFAMVAxYDFwMYAxkDGgMbAxwDHQMeAx8DIAMhAyIDIwMkAyUDJgMnAygDKQMqAysDLAMtAy4DLwMwAzEDMgMzAzQDNQM2AzcDOAM5AzoDOwM8Az0DPgM/A0ADQQNCA0MDRANFA0YDRwNIA0kDSgNLA0wDTQNOA08DUANRA1IDUwNUA1UDVgNXA1gDWQNaA1sDXANdA14DXwNgA2EDYgNjA2QDZQNmA2cDaANpA2oDawNsA20DbgNvA3ADcQNyA3MDdAN1A3YDdwN4A3kDegN7A3wDfQN+A38DgAOBA4IDgwOEA4UDhgOHA4gDiQOKA4sDjAONA44DjwOQA5EDkgOTA5QDlQOWA5cDmAOZA5oDmwOcA50DngOfA6ADoQOiA6MDpAOlA6YDpwOoA6kDqgOrA6wDrQOuA68DsAOxA7IDswO0A7UDtgO3A7gDuQO6A7sDvAO9A74DvwPAA8EDwgPDA8QDxQPGA8cDyAPJA8oDywPMA80DzgPPA9AD0QPSA9MD1APVA9YD1wPYA9kD2gPbA9wD3QPeA98D4APhA+ID4wPkA+UD5gPnA+gD6QPqA+sD7APtA+4D7wPwA/ED8gPzA/QD9QP2A/cD+AP5A/oD+wP8A/0D/gP/BAAEAQQCBAMEBAQFBAYEBwQIBAkECgQLBAwEDQQOBA8EEAQRBBIEEwQUBBUEFgQXBBgEGQQaBBsEHAQdBB4EHwQgBCEA9wQiBCMABAd1bmkwMDA5Bm1hY3Jvbg5wZXJpb2RjZW50ZXJlZARIYmFyDGtncmVlbmxhbmRpYwNFbmcDZW5nBWxvbmdzBU9ob3JuBW9ob3JuBVVob3JuBXVob3JuB3VuaTAyMzcFc2Nod2EHdW5pMDJGMwlncmF2ZWNvbWIJYWN1dGVjb21iCXRpbGRlY29tYgRob29rB3VuaTAzMEYIZG90YmVsb3cFdG9ub3MNZGllcmVzaXN0b25vcwlhbm90ZWxlaWEFR2FtbWEFRGVsdGEFVGhldGEGTGFtYmRhAlhpAlBpBVNpZ21hA1BoaQNQc2kFYWxwaGEEYmV0YQVnYW1tYQVkZWx0YQdlcHNpbG9uBHpldGEDZXRhBXRoZXRhBGlvdGEGbGFtYmRhAnhpA3JobwZzaWdtYTEFc2lnbWEDdGF1B3Vwc2lsb24DcGhpA3BzaQVvbWVnYQd1bmkwM0QxB3VuaTAzRDIHdW5pMDNENgd1bmkwNDAyB3VuaTA0MDQHdW5pMDQwOQd1bmkwNDBBB3VuaTA0MEIHdW5pMDQwRgd1bmkwNDExB3VuaTA0MTQHdW5pMDQxNgd1bmkwNDE3B3VuaTA0MTgHdW5pMDQxQgd1bmkwNDIzB3VuaTA0MjQHdW5pMDQyNgd1bmkwNDI3B3VuaTA0MjgHdW5pMDQyOQd1bmkwNDJBB3VuaTA0MkIHdW5pMDQyQwd1bmkwNDJEB3VuaTA0MkUHdW5pMDQyRgd1bmkwNDMxB3VuaTA0MzIHdW5pMDQzMwd1bmkwNDM0B3VuaTA0MzYHdW5pMDQzNwd1bmkwNDM4B3VuaTA0M0EHdW5pMDQzQgd1bmkwNDNDB3VuaTA0M0QHdW5pMDQzRgd1bmkwNDQyB3VuaTA0NDQHdW5pMDQ0Ngd1bmkwNDQ3B3VuaTA0NDgHdW5pMDQ0OQd1bmkwNDRBB3VuaTA0NEIHdW5pMDQ0Qwd1bmkwNDREB3VuaTA0NEUHdW5pMDQ0Rgd1bmkwNDUyB3VuaTA0NTQHdW5pMDQ1OQd1bmkwNDVBB3VuaTA0NUIHdW5pMDQ1Rgd1bmkwNDYwB3VuaTA0NjEHdW5pMDQ2Mwd1bmkwNDY0B3VuaTA0NjUHdW5pMDQ2Ngd1bmkwNDY3B3VuaTA0NjgHdW5pMDQ2OQd1bmkwNDZBB3VuaTA0NkIHdW5pMDQ2Qwd1bmkwNDZEB3VuaTA0NkUHdW5pMDQ2Rgd1bmkwNDcyB3VuaTA0NzMHdW5pMDQ3NAd1bmkwNDc1B3VuaTA0N0EHdW5pMDQ3Qgd1bmkwNDdDB3VuaTA0N0QHdW5pMDQ3RQd1bmkwNDdGB3VuaTA0ODAHdW5pMDQ4MQd1bmkwNDgyB3VuaTA0ODMHdW5pMDQ4NAd1bmkwNDg1B3VuaTA0ODYHdW5pMDQ4OAd1bmkwNDg5B3VuaTA0OEQHdW5pMDQ4RQd1bmkwNDhGB3VuaTA0OTAHdW5pMDQ5MQd1bmkwNDk0B3VuaTA0OTUHdW5pMDQ5Qwd1bmkwNDlEB3VuaTA0QTAHdW5pMDRBMQd1bmkwNEE0B3VuaTA0QTUHdW5pMDRBNgd1bmkwNEE3B3VuaTA0QTgHdW5pMDRBOQd1bmkwNEI0B3VuaTA0QjUHdW5pMDRCOAd1bmkwNEI5B3VuaTA0QkEHdW5pMDRCQwd1bmkwNEJEB3VuaTA0QzMHdW5pMDRDNAd1bmkwNEM3B3VuaTA0QzgHdW5pMDREOAd1bmkwNEUwB3VuaTA0RTEHdW5pMDRGQQd1bmkwNEZCB3VuaTA1MDAHdW5pMDUwMgd1bmkwNTAzB3VuaTA1MDQHdW5pMDUwNQd1bmkwNTA2B3VuaTA1MDcHdW5pMDUwOAd1bmkwNTA5B3VuaTA1MEEHdW5pMDUwQgd1bmkwNTBDB3VuaTA1MEQHdW5pMDUwRQd1bmkwNTBGB3VuaTA1MTAHdW5pMjAwMAd1bmkyMDAxB3VuaTIwMDIHdW5pMjAwMwd1bmkyMDA0B3VuaTIwMDUHdW5pMjAwNgd1bmkyMDA3B3VuaTIwMDgHdW5pMjAwOQd1bmkyMDBBB3VuaTIwMEINdW5kZXJzY29yZWRibA1xdW90ZXJldmVyc2VkB3VuaTIwMjUHdW5pMjA3NAluc3VwZXJpb3IEbGlyYQZwZXNldGEERXVybwd1bmkyMTA1B3VuaTIxMTMHdW5pMjExNgllc3RpbWF0ZWQJb25lZWlnaHRoDHRocmVlZWlnaHRocwtmaXZlZWlnaHRocwxzZXZlbmVpZ2h0aHMKY29sb24ubG51bQlxdW90ZWRibHgLY29tbWFhY2NlbnQHdW5pRkVGRgd1bmlGRkZDB3VuaUZGRkQJZml2ZS5zbWNwCGZvdXIuc3VwCXplcm8ubG51bQ5sYXJnZXJpZ2h0aG9vawxjeXJpbGxpY2hvb2sQY3lyaWxsaWNob29rbGVmdAtjeXJpbGxpY3RpYw5icmV2ZXRpbGRlY29tYg1icmV2ZWhvb2tjb21iDmJyZXZlYWN1dGVjb21iE2NpcmN1bWZsZXh0aWxkZWNvbWISY2lyY3VtZmxleGhvb2tjb21iE2NpcmN1bWZsZXhncmF2ZWNvbWITY2lyY3VtZmxleGFjdXRlY29tYg5icmV2ZWdyYXZlY29tYhFjb21tYWFjY2VudHJvdGF0ZQZBLnNtY3AGQi5zbWNwBkMuc21jcAZELnNtY3AGRS5zbWNwBkYuc21jcAZHLnNtY3AGSC5zbWNwBkkuc21jcAZKLnNtY3AGSy5zbWNwBkwuc21jcAZNLnNtY3AGTi5zbWNwBk8uc21jcAZRLnNtY3AGUi5zbWNwBlMuc21jcAZULnNtY3AGVS5zbWNwBlYuc21jcAZXLnNtY3AGWC5zbWNwBlkuc21jcAZaLnNtY3AJemVyby5zbWNwCG9uZS5zbWNwCHR3by5zbWNwCnRocmVlLnNtY3AJZm91ci5zbWNwCHR3by5sbnVtCHNpeC5zbWNwCnNldmVuLnNtY3AKZWlnaHQuc21jcAluaW5lLnNtY3AHb25lLnN1cAd0d28uc3VwCXRocmVlLnN1cAhvbmUubG51bQhmaXZlLnN1cAdzaXguc3VwCXNldmVuLnN1cAllaWdodC5zdXAIbmluZS5zdXAIemVyby5zdXAIY3Jvc3NiYXIJcmluZ2FjdXRlCWRhc2lhb3hpYQp0aHJlZS5sbnVtCWZvdXIubG51bQlmaXZlLmxudW0Ic2l4LmxudW0FZy5hbHQKc2V2ZW4ubG51bQdjaGkuYWx0CmVpZ2h0LmxudW0JYWxwaGEuYWx0CWRlbHRhLmFsdARELmNuBGEuY24FUi5hbHQFSy5hbHQFay5hbHQGSy5hbHQyBmsuYWx0MgluaW5lLmxudW0GUC5zbWNwDWN5cmlsbGljYnJldmUHdW5pMDBBRAZEY3JvYXQEaGJhcgRUYmFyBHRiYXIKQXJpbmdhY3V0ZQphcmluZ2FjdXRlB0FtYWNyb24HYW1hY3JvbgZBYnJldmUGYWJyZXZlB0FvZ29uZWsHYW9nb25lawtDY2lyY3VtZmxleAtjY2lyY3VtZmxleAd1bmkwMTBBB3VuaTAxMEIGRGNhcm9uBmRjYXJvbgdFbWFjcm9uB2VtYWNyb24GRWJyZXZlBmVicmV2ZQpFZG90YWNjZW50CmVkb3RhY2NlbnQHRW9nb25lawdlb2dvbmVrBkVjYXJvbgZlY2Fyb24LR2NpcmN1bWZsZXgLZ2NpcmN1bWZsZXgHdW5pMDEyMAd1bmkwMTIxDEdjb21tYWFjY2VudAxnY29tbWFhY2NlbnQLSGNpcmN1bWZsZXgLaGNpcmN1bWZsZXgGSXRpbGRlBml0aWxkZQdJbWFjcm9uB2ltYWNyb24GSWJyZXZlBmlicmV2ZQdJb2dvbmVrB2lvZ29uZWsKSWRvdGFjY2VudAJJSgJpagtKY2lyY3VtZmxleAtqY2lyY3VtZmxleAxLY29tbWFhY2NlbnQMa2NvbW1hYWNjZW50BkxhY3V0ZQZsYWN1dGUMTGNvbW1hYWNjZW50DGxjb21tYWFjY2VudAZMY2Fyb24GbGNhcm9uBExkb3QEbGRvdAZOYWN1dGUGbmFjdXRlDE5jb21tYWFjY2VudAxuY29tbWFhY2NlbnQGTmNhcm9uBm5jYXJvbgtuYXBvc3Ryb3BoZQdPbWFjcm9uB29tYWNyb24GT2JyZXZlBm9icmV2ZQ1PaHVuZ2FydW1sYXV0DW9odW5nYXJ1bWxhdXQGUmFjdXRlBnJhY3V0ZQxSY29tbWFhY2NlbnQMcmNvbW1hYWNjZW50BlJjYXJvbgZyY2Fyb24GU2FjdXRlBnNhY3V0ZQtTY2lyY3VtZmxleAtzY2lyY3VtZmxleAd1bmkwMjE4B3VuaTAyMTkHdW5pMDIxQQd1bmkwMjFCB3VuaTAxNjIHdW5pMDE2MwZUY2Fyb24GdGNhcm9uBlV0aWxkZQZ1dGlsZGUHVW1hY3Jvbgd1bWFjcm9uBlVicmV2ZQZ1YnJldmUFVXJpbmcFdXJpbmcNVWh1bmdhcnVtbGF1dA11aHVuZ2FydW1sYXV0B1VvZ29uZWsHdW9nb25lawtXY2lyY3VtZmxleAt3Y2lyY3VtZmxleAtZY2lyY3VtZmxleAt5Y2lyY3VtZmxleAZaYWN1dGUGemFjdXRlClpkb3RhY2NlbnQKemRvdGFjY2VudAdBRWFjdXRlB2FlYWN1dGULT3NsYXNoYWN1dGULb3NsYXNoYWN1dGULRGNyb2F0LnNtY3AIRXRoLnNtY3AJVGJhci5zbWNwC0FncmF2ZS5zbWNwC0FhY3V0ZS5zbWNwEEFjaXJjdW1mbGV4LnNtY3ALQXRpbGRlLnNtY3AOQWRpZXJlc2lzLnNtY3AKQXJpbmcuc21jcA9BcmluZ2FjdXRlLnNtY3ANQ2NlZGlsbGEuc21jcAtFZ3JhdmUuc21jcAtFYWN1dGUuc21jcBBFY2lyY3VtZmxleC5zbWNwDkVkaWVyZXNpcy5zbWNwC0lncmF2ZS5zbWNwC0lhY3V0ZS5zbWNwEEljaXJjdW1mbGV4LnNtY3AOSWRpZXJlc2lzLnNtY3ALTnRpbGRlLnNtY3ALT2dyYXZlLnNtY3ALT2FjdXRlLnNtY3AQT2NpcmN1bWZsZXguc21jcAtPdGlsZGUuc21jcA5PZGllcmVzaXMuc21jcAtVZ3JhdmUuc21jcAtVYWN1dGUuc21jcBBVY2lyY3VtZmxleC5zbWNwDlVkaWVyZXNpcy5zbWNwC1lhY3V0ZS5zbWNwDEFtYWNyb24uc21jcAtBYnJldmUuc21jcAxBb2dvbmVrLnNtY3ALQ2FjdXRlLnNtY3AQQ2NpcmN1bWZsZXguc21jcAx1bmkwMTBBLnNtY3ALQ2Nhcm9uLnNtY3ALRGNhcm9uLnNtY3AMRW1hY3Jvbi5zbWNwC0VicmV2ZS5zbWNwD0Vkb3RhY2NlbnQuc21jcAxFb2dvbmVrLnNtY3ALRWNhcm9uLnNtY3AQR2NpcmN1bWZsZXguc21jcAtHYnJldmUuc21jcAx1bmkwMTIwLnNtY3ARR2NvbW1hYWNjZW50LnNtY3AQSGNpcmN1bWZsZXguc21jcAtJdGlsZGUuc21jcAxJbWFjcm9uLnNtY3ALSWJyZXZlLnNtY3AMSW9nb25lay5zbWNwD0lkb3RhY2NlbnQuc21jcBBKY2lyY3VtZmxleC5zbWNwEUtjb21tYWFjY2VudC5zbWNwC0xhY3V0ZS5zbWNwEUxjb21tYWFjY2VudC5zbWNwC0xjYXJvbi5zbWNwCUxkb3Quc21jcAtOYWN1dGUuc21jcBFOY29tbWFhY2NlbnQuc21jcAtOY2Fyb24uc21jcAxPbWFjcm9uLnNtY3ALT2JyZXZlLnNtY3AST2h1bmdhcnVtbGF1dC5zbWNwC1JhY3V0ZS5zbWNwEVJjb21tYWFjY2VudC5zbWNwC1JjYXJvbi5zbWNwC1NhY3V0ZS5zbWNwEFNjaXJjdW1mbGV4LnNtY3ANU2NlZGlsbGEuc21jcAtTY2Fyb24uc21jcBFUY29tbWFhY2NlbnQuc21jcAtUY2Fyb24uc21jcAtVdGlsZGUuc21jcAxVbWFjcm9uLnNtY3ALVWJyZXZlLnNtY3AKVXJpbmcuc21jcBJVaHVuZ2FydW1sYXV0LnNtY3AMVW9nb25lay5zbWNwEFdjaXJjdW1mbGV4LnNtY3AQWWNpcmN1bWZsZXguc21jcA5ZZGllcmVzaXMuc21jcAtaYWN1dGUuc21jcA9aZG90YWNjZW50LnNtY3ALWmNhcm9uLnNtY3APZ2VybWFuZGJscy5zbWNwCkFscGhhdG9ub3MMRXBzaWxvbnRvbm9zCEV0YXRvbm9zCUlvdGF0b25vcwxPbWljcm9udG9ub3MMVXBzaWxvbnRvbm9zCk9tZWdhdG9ub3MRaW90YWRpZXJlc2lzdG9ub3MFQWxwaGEEQmV0YQdFcHNpbG9uBFpldGEDRXRhBElvdGEFS2FwcGECTXUCTnUHT21pY3JvbgNSaG8DVGF1B1Vwc2lsb24DQ2hpDElvdGFkaWVyZXNpcw9VcHNpbG9uZGllcmVzaXMKYWxwaGF0b25vcwxlcHNpbG9udG9ub3MIZXRhdG9ub3MJaW90YXRvbm9zFHVwc2lsb25kaWVyZXNpc3Rvbm9zBWthcHBhB29taWNyb24HdW5pMDNCQwJudQNjaGkMaW90YWRpZXJlc2lzD3Vwc2lsb25kaWVyZXNpcwxvbWljcm9udG9ub3MMdXBzaWxvbnRvbm9zCm9tZWdhdG9ub3MHdW5pMDQwMQd1bmkwNDAzB3VuaTA0MDUHdW5pMDQwNgd1bmkwNDA3B3VuaTA0MDgHdW5pMDQxQQd1bmkwNDBDB3VuaTA0MEUHdW5pMDQxMAd1bmkwNDEyB3VuaTA0MTMHdW5pMDQxNQd1bmkwNDE5B3VuaTA0MUMHdW5pMDQxRAd1bmkwNDFFB3VuaTA0MUYHdW5pMDQyMAd1bmkwNDIxB3VuaTA0MjIHdW5pMDQyNQd1bmkwNDMwB3VuaTA0MzUHdW5pMDQzOQd1bmkwNDNFB3VuaTA0NDAHdW5pMDQ0MQd1bmkwNDQzB3VuaTA0NDUHdW5pMDQ1MQd1bmkwNDUzB3VuaTA0NTUHdW5pMDQ1Ngd1bmkwNDU3B3VuaTA0NTgHdW5pMDQ1Qwd1bmkwNDVFBldncmF2ZQZ3Z3JhdmUGV2FjdXRlBndhY3V0ZQlXZGllcmVzaXMJd2RpZXJlc2lzBllncmF2ZQZ5Z3JhdmUGbWludXRlBnNlY29uZAlleGNsYW1kYmwHdW5pRkIwMgd1bmkwMUYwB3VuaTAyQkMHdW5pMUUzRQd1bmkxRTNGB3VuaTFFMDAHdW5pMUUwMQd1bmkxRjREB3VuaUZCMDMHdW5pRkIwNAd1bmkwNDAwB3VuaTA0MEQHdW5pMDQ1MAd1bmkwNDVEB3VuaTA0NzAHdW5pMDQ3MQd1bmkwNDc2B3VuaTA0NzcHdW5pMDQ3OQd1bmkwNDc4B3VuaTA0OTgHdW5pMDQ5OQd1bmkwNEFBB3VuaTA0QUIHdW5pMDRBRQd1bmkwNEFGB3VuaTA0QzAHdW5pMDRDMQd1bmkwNEMyB3VuaTA0Q0YHdW5pMDREMAd1bmkwNEQxB3VuaTA0RDIHdW5pMDREMwd1bmkwNEQ0B3VuaTA0RDUHdW5pMDRENgd1bmkwNEQ3B3VuaTA0REEHdW5pMDREOQd1bmkwNERCB3VuaTA0REMHdW5pMDRERAd1bmkwNERFB3VuaTA0REYHdW5pMDRFMgd1bmkwNEUzB3VuaTA0RTQHdW5pMDRFNQd1bmkwNEU2B3VuaTA0RTcHdW5pMDRFOAd1bmkwNEU5B3VuaTA0RUEHdW5pMDRFQgd1bmkwNEVDB3VuaTA0RUQHdW5pMDRFRQd1bmkwNEVGB3VuaTA0RjAHdW5pMDRGMQd1bmkwNEYyB3VuaTA0RjMHdW5pMDRGNAd1bmkwNEY1B3VuaTA0RjgHdW5pMDRGOQd1bmkwNEZDB3VuaTA0RkQHdW5pMDUwMQd1bmkwNTEyB3VuaTA1MTMHdW5pMUVBMAd1bmkxRUExB3VuaTFFQTIHdW5pMUVBMwd1bmkxRUE0B3VuaTFFQTUHdW5pMUVBNgd1bmkxRUE3B3VuaTFFQTgHdW5pMUVBOQd1bmkxRUFBB3VuaTFFQUIHdW5pMUVBQwd1bmkxRUFEB3VuaTFFQUUHdW5pMUVBRgd1bmkxRUIwB3VuaTFFQjEHdW5pMUVCMgd1bmkxRUIzB3VuaTFFQjQHdW5pMUVCNQd1bmkxRUI2B3VuaTFFQjcHdW5pMUVCOAd1bmkxRUI5B3VuaTFFQkEHdW5pMUVCQgd1bmkxRUJDB3VuaTFFQkQHdW5pMUVCRQd1bmkxRUJGB3VuaTFFQzAHdW5pMUVDMQd1bmkxRUMyB3VuaTFFQzMHdW5pMUVDNAd1bmkxRUM1B3VuaTFFQzYHdW5pMUVDNwd1bmkxRUM4B3VuaTFFQzkHdW5pMUVDQQd1bmkxRUNCB3VuaTFFQ0MHdW5pMUVDRAd1bmkxRUNFB3VuaTFFQ0YHdW5pMUVEMAd1bmkxRUQxB3VuaTFFRDIHdW5pMUVEMwd1bmkxRUQ0B3VuaTFFRDUHdW5pMUVENgd1bmkxRUQ3B3VuaTFFRDgHdW5pMUVEOQd1bmkxRURBB3VuaTFFREIHdW5pMUVEQwd1bmkxRUREB3VuaTFFREUHdW5pMUVERgd1bmkxRUUwB3VuaTFFRTEHdW5pMUVFMgd1bmkxRUUzB3VuaTFFRTQHdW5pMUVFNQd1bmkxRUU2B3VuaTFFRTcHdW5pMUVFOAd1bmkxRUU5B3VuaTFFRUEHdW5pMUVFQgd1bmkxRUVDB3VuaTFFRUQH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Adz/4QALAOH/1ADx/8kBBP/lARv/4wEv/8QBOP/hAUn/1AFK//UBS//nAVP/0gFU/8kACQDh/8MA8f/PAS//zgE4/+cBO//fAUn/0QFL/+wBU/+gAVT/0QAJAOH/wwDx/88BL//OATj/5wE7/98BSf/RAUv/7AFT/6ABVP/RAAgA4f/JAPH/3wEE/+0BG//rAS//3wE7/+kBSv/1AVT/4AAIANQAFQDoABUBOP/kATn/5QE7/+QBSf/jAUv/4gFT/+QACADh/+YA8f/QAS//zgE4/+gBSf/nAUv/7QFT/+YBVP/QAAsA1AAUAOH/4ADoABMBOP/hATn/4AE8/+EBQf/pAUn/3wFL/94BU//fAVX/8gAYALP/1AC9/+0AvwARAMX/4ADH/+cAyP/lAMn/7gDUABIA5f/pAPH/1wEv/9cBOf/TATv/1gE8/8UBQf/nAUkADQFLAAwBVP/WAVX/8gGp/+kBrf/nAbX/5wG2/+kB3//wAAUAGf/yAOH/8QFJ//IBS//yAVP/8gAIANQAFQDoABUBOP/kATn/5QE7/+QBSf/jAUv/4gFT/+QACADUABUA6AAVATj/5AE5/+UBO//kAUn/4wFL/+IBU//kABIA1P+uAOEAEgDm/+AA6P+tAOr/1gD4/98A/P/SAQL/4AEX/84BJ//dASn/4gEt/+ABM//gATn/6QE8/9oBRv+9AVD/3wFTABEACADUABUA6AAVATj/5AE5/+UBO//kAUn/4wFL/+IBU//kAAgA1AAVAOgAFQE4/+QBOf/lATv/5AFJ/+MBS//iAVP/5AAMANQAEwDh/+YA4v/0AOgAEgDx/+cBL//nATj/5QE5/+gBSf/mAUv/5gFT/+YBVP/nAAkA4f/DAPH/zwEv/84BOP/nATv/3wFJ/9EBS//sAVP/oAFU/9EACQDh/8MA8f/PAS//zgE4/+cBO//fAUn/0QFL/+wBU/+gAVT/0QACANT/4gFT/+QAAgDU/+EA6P/kAAYA6P/uAPH/7gEE//QBG//xAS//7wFU/+8ABADx//QBBP/1AS//9QFU//UAAgDo/8kBF//uAAYA6AAUAPH/7QD3/+IBL//tATn/7QFU/+0AAQEX//EABQEX/+sBqf/rAa3/6QG1/+sBtv/rABMASAANAML/qwDD/8AAx//VAOj/qgEX/+IBGwAMAUoACwFMAAsBp/+/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/1EBOf97ATv/ygE8/90BQf/yAUn/dQFL/8oBU/9PAVT/jAGt//UBtf/1Abn/xwG6//EBu//NAbz/3QG+/8QAHAAh/8MAVv/vAFn/3wCW/+4As//lALT/0QC/ABEAxf/IANQAEwDh/8UA8f/KAS//nwE4/1EBOf97ATv/ygE8/90BQf/yAUn/dQFL/8oBU/9PAVT/jAGt//UBtf/1Abn/xwG6//EBu//NAbz/3QG+/8QAHAAh/8MAVv/vAFn/3wCW/+4As//lALT/0QC/ABEAxf/IANQAEwDh/8UA8f/KAS//nwE4/1EBOf97ATv/ygE8/90BQf/yAUn/dQFL/8oBU/9PAVT/jAGt//UBtf/1Abn/xwG6//EBu//NAbz/3QG+/8QAHAAh/8MAVv/vAFn/3wCW/+4As//lALT/0QC/ABEAxf/IANQAEwDh/8UA8f/KAS//nwE4/1EBOf97ATv/ygE8/90BQf/yAUn/dQFL/8oBU/9PAVT/jAGt//UBtf/1Abn/xwG6//EBu//NAbz/3QG+/8QAHAAh/8MAVv/vAFn/3wCW/+4As//lALT/0QC/ABEAxf/IANQAEwDh/8UA8f/KAS//nwE4/1EBOf97ATv/ygE8/90BQf/yAUn/dQFL/8oBU/9PAVT/jAGt//UBtf/1Abn/xwG6//EBu//NAbz/3QG+/8QAHAAh/8MAVv/vAFn/3wCW/+4As//lALT/0QC/ABEAxf/IANQAEwDh/8UA8f/KAS//nwE4/1EBOf97ATv/ygE8/90BQf/yAUn/dQFL/8oBU/9PAVT/jAGt//UBtf/1Abn/xwG6//EBu//NAbz/3QG+/8QABAAL/+YAP//0AF//7wE8/+0ABQBI/+4AWf/qAbv/8AG8/+0Bvv/wAAUASP/uAFn/6gG7//ABvP/tAb7/8AAFAEj/7gBZ/+oBu//wAbz/7QG+//AABQBI/+4AWf/qAbv/8AG8/+0Bvv/wAAgA1AAVAOgAFQE4/+QBOf/lATv/5AFJ/+MBS//iAVP/5AAIANQAFQDoABUBOP/kATn/5QE7/+QBSf/jAUv/4gFT/+QACADUABUA6AAVATj/5AE5/+UBO//kAUn/4wFL/+IBU//kAAgA1AAVAOgAFQE4/+QBOf/lATv/5AFJ/+MBS//iAVP/5AAIANQAFQDoABUBOP/kATn/5QE7/+QBSf/jAUv/4gFT/+QACQB//98AsP/zALL/8AC//+oA1P/fAOH/4AFT/+ABp//tAb3/9QAJAH//3wCw//MAsv/wAL//6gDU/98A4f/gAVP/4AGn/+0Bvf/1AAkAf//fALD/8wCy//AAv//qANT/3wDh/+ABU//gAaf/7QG9//UACQB//98AsP/zALL/8AC//+oA1P/fAOH/4AFT/+ABp//tAb3/9QAJAH//3wCw//MAsv/wAL//6gDU/98A4f/gAVP/4AGn/+0Bvf/1AAEBp//rAAEBp//rAAEBp//rAAEBp//rACQACP/iAAsAFAAM/88APwASAEj/6gBU/9gAVv/qAF8AEwBr/64Aev/NAH//oACE/8EAh//AALP/0AC3/+oAuv/GALsADQC9/+kAvv/WAMH/6ADC/7oAxf/pAMf/ywDI/9oAyf/HAW7/0wGn/6sBqf/NAa3/ywG1/8sBtv/LAbn/8wG8//MBvf/vAdz/6AHf/+4ABwDx//ABBP/xARv/8wEv//EBSv/zAUz/6QFU/9MABwDx//ABBP/xARv/8wEv//EBSv/zAUz/6QFU/9MABwDx//ABBP/xARv/8wEv//EBSv/zAUz/6QFU/9MABwDx//ABBP/xARv/8wEv//EBSv/zAUz/6QFU/9MABwDx//ABBP/xARv/8wEv//EBSv/zAUz/6QFU/9MABwDx//ABBP/xARv/8wEv//EBSv/zAUz/6QFU/9MABwDx//ABBP/xARv/8wEv//EBSv/zAUz/6QFU/9MAAQDx//UAAQDx//UAAQDx//UAAQDx//UAAQDx/8AACQDF/+oA6P+4APH/6gEE//ABG//xAS//6wFK//UBVP/sAdz/6gAJAMX/6gDo/7gA8f/qAQT/8AEb//EBL//rAUr/9QFU/+wB3P/qAAkAxf/qAOj/uADx/+oBBP/wARv/8QEv/+sBSv/1AVT/7AHc/+oACQDF/+oA6P+4APH/6gEE//ABG//xAS//6wFK//UBVP/sAdz/6gAJAMX/6gDo/7gA8f/qAQT/8AEb//EBL//rAUr/9QFU/+wB3P/qAAcASAANAMEACwDC/+oAxQAMAOj/yAEX//EB3//1AAcASAANAMEACwDC/+oAxQAMAOj/yAEX//EB3//1ABwAIf/DAFb/7wBZ/98Alv/uALP/5QC0/9EAvwARAMX/yADUABMA4f/FAPH/ygEv/58BOP9RATn/ewE7/8oBPP/dAUH/8gFJ/3UBS//KAVP/TwFU/4wBrf/1AbX/9QG5/8cBuv/xAbv/zQG8/90Bvv/EAAcA8f/wAQT/8QEb//MBL//xAUr/8wFM/+kBVP/TABwAIf/DAFb/7wBZ/98Alv/uALP/5QC0/9EAvwARAMX/yADUABMA4f/FAPH/ygEv/58BOP9RATn/ewE7/8oBPP/dAUH/8gFJ/3UBS//KAVP/TwFU/4wBrf/1AbX/9QG5/8cBuv/xAbv/zQG8/90Bvv/EAAcA8f/wAQT/8QEb//MBL//xAUr/8wFM/+kBVP/TABwAIf/DAFb/7wBZ/98Alv/uALP/5QC0/9EAvwARAMX/yADUABMA4f/FAPH/ygEv/58BOP9RATn/ewE7/8oBPP/dAUH/8gFJ/3UBS//KAVP/TwFU/4wBrf/1AbX/9QG5/8cBuv/xAbv/zQG8/90Bvv/EAAcA8f/wAQT/8QEb//MBL//xAUr/8wFM/+kBVP/TAAQAC//mAD//9ABf/+8BPP/tAAQAC//mAD//9ABf/+8BPP/tAAQAC//mAD//9ABf/+8BPP/tAAQAC//mAD//9ABf/+8BPP/tAAkAf//fALD/8wCy//AAv//qANT/3wDh/+ABU//gAaf/7QG9//UABQBI/+4AWf/qAbv/8AG8/+0Bvv/wAAEA8f/1AAUASP/uAFn/6gG7//ABvP/tAb7/8AABAPH/9QAFAEj/7gBZ/+oBu//wAbz/7QG+//AAAQDx//UABQBI/+4AWf/qAbv/8AG8/+0Bvv/wAAEA8f/1AAUASP/uAFn/6gG7//ABvP/tAb7/8AABAPH/9QAIANQAFQDoABUBOP/kATn/5QE7/+QBSf/jAUv/4gFT/+QAAQDx/8AACADUABUA6AAVATj/5AE5/+UBO//kAUn/4wFL/+IBU//kAAgA1AAVAOgAFQE4/+QBOf/lATv/5AFJ/+MBS//iAVP/5AAIANQAFQDoABUBOP/kATn/5QE7/+QBSf/jAUv/4gFT/+QACADUABUA6AAVATj/5AE5/+UBO//kAUn/4wFL/+IBU//kAAgA1AAVAOgAFQE4/+QBOf/lATv/5AFJ/+MBS//iAVP/5AABAaf/6wATAFn/wQCz/8UAxf+0AOX/1wDx/7kBBP+yARf/0gEb/8gBL/+gATn/xQFB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/+wAHAAh/8MAVv/vAFn/3wCW/+4As//lALT/0QC/ABEAxf/IANQAEwDh/8UA8f/KAS//nwE4/1EBOf97ATv/ygE8/90BQf/yAUn/dQFL/8oBU/9PAVT/jAGt//UBtf/1Abn/xwG6//EBu//NAbz/3QG+/8QABQBI/+4AWf/qAbv/8AG8/+0Bvv/wAAgA1AAVAOgAFQE4/+QBOf/lATv/5AFJ/+MBS//iAVP/5AAIANQAFQDoABUBOP/kATn/5QE7/+QBSf/jAUv/4gFT/+QACQB//98AsP/zALL/8AC//+oA1P/fAOH/4AFT/+ABp//tAb3/9QAkAAj/4gALABQADP/PAD8AEgBI/+oAVP/YAFb/6gBfABMAa/+uAHr/zQB//6AAhP/BAIf/wACz/9AAt//qALr/xgC7AA0Avf/pAL7/1gDB/+gAwv+6AMX/6QDH/8sAyP/aAMn/xwFu/9MBp/+rAan/zQGt/8sBtf/LAbb/ywG5//MBvP/zAb3/7wHc/+gB3//uABwAIf/DAFb/7wBZ/98Alv/uALP/5QC0/9EAvwARAMX/yADUABMA4f/FAPH/ygEv/58BOP9RATn/ewE7/8oBPP/dAUH/8gFJ/3UBS//KAVP/TwFU/4wBrf/1AbX/9QG5/8cBuv/xAbv/zQG8/90Bvv/EAAIBDAALAVP/5gAFAEj/7gBZ/+oBu//wAbz/7QG+//AACABZ/+UAs//LAMj/5AGnAA0Bqf/tAa3/6wG1/+wBtv/sAAgA1AAVAOgAFQE4/+QBOf/lATv/5AFJ/+MBS//iAVP/5AAIANQAFQDoABUBOP/kATn/5QE7/+QBSf/jAUv/4gFT/+QAEwBZ/8EAs//FAMX/tADl/9cA8f+5AQT/sgEX/9IBG//IAS//oAE5/8UBQf/kAUr/zAFM/8wBVP/LAVX/7wGp/+gBrf/mAbX/5wG2/+cACADUABUA6AAVATj/5AE5/+UBO//kAUn/4wFL/+IBU//kAAgA1AAVAOgAFQE4/+QBOf/lATv/5AFJ/+MBS//iAVP/5AAJAH//3wCw//MAsv/wAL//6gDU/98A4f/gAVP/4AGn/+0Bvf/1AAkAVgAOAH//nwC//94Awv/lANT/qADo/8oBRv/jAaf/xgHf//UAOQBU/7UAWf/HAGv+uAB6/ygAf/9NAIT/jgCH/6EAs/+uALr/fgC+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Abn/xwG6//EBu//NAbz/3QG+/8QABwDx//ABBP/xARv/8wEv//EBSv/zAUz/6QFU/9MACQB//98AsP/zALL/8AC//+oA1P/fAOH/4AFT/+ABp//tAb3/9QAFAEj/7gBZ/+oBu//wAbz/7QG+//AAAQDx//UACQALABQAPwARAFT/4gBfABMBp/+0Aan/2QGt/9kBtf/ZAbb/2QAHAEgADQDBAAsAwv/qAMUADADo/8gBF//xAd//9QAEAAv/5gA///QAX//vATz/7QAkAAj/4gALABQADP/PAD8AEgBI/+oAVP/YAFb/6gBfABMAa/+uAHr/zQB//6AAhP/BAIf/wACz/9AAt//qALr/xgC7AA0Avf/pAL7/1gDB/+gAwv+6AMX/6QDH/8sAyP/aAMn/xwFu/9MBp/+rAan/zQGt/8sBtf/LAbb/ywG5//MBvP/zAb3/7wHc/+gB3//uAAcASAANAMEACwDC/+oAxQAMAOj/yAEX//EB3//1AAgA1AAVAOgAFQE4/+QBOf/lATv/5AFJ/+MBS//iAVP/5AAYALP/1AC9/+0AvwARAMX/4ADH/+cAyP/lAMn/7gDUABIA5f/pAPH/1wEv/9cBOf/TATv/1gE8/8UBQf/nAUkADQFLAAwBVP/WAVX/8gGp/+kBrf/nAbX/5wG2/+kB3//wAAEBF//xAAgA1AAVAOgAFQE4/+QBOf/lATv/5AFJ/+MBS//iAVP/5AAcACH/wwBW/+8AWf/fAJb/7gCz/+UAtP/RAL8AEQDF/8gA1AATAOH/xQDx/8oBL/+fATj/UQE5/3sBO//KATz/3QFB//IBSf91AUv/ygFT/08BVP+MAa3/9QG1//UBuf/HAbr/8QG7/80BvP/dAb7/xAAHAPH/8AEE//EBG//zAS//8QFK//MBTP/pAVT/0wAcACH/wwBW/+8AWf/fAJb/7gCz/+UAtP/RAL8AEQDF/8gA1AATAOH/xQDx/8oBL/+fATj/UQE5/3sBO//KATz/3QFB//IBSf91AUv/ygFT/08BVP+MAa3/9QG1//UBuf/HAbr/8QG7/80BvP/dAb7/xAAHAPH/8AEE//EBG//zAS//8QFK//MBTP/pAVT/0wAFAEj/7gBZ/+oBu//wAbz/7QG+//AAAQDx//UAAQDx//UAAQDx//UAGACz/9QAvf/tAL8AEQDF/+AAx//nAMj/5QDJ/+4A1AASAOX/6QDx/9cBL//XATn/0wE7/9YBPP/FAUH/5wFJAA0BSwAMAVT/1gFV//IBqf/pAa3/5wG1/+cBtv/pAd//8AABARf/8QAJAH//3wCw//MAsv/wAL//6gDU/98A4f/gAVP/4AGn/+0Bvf/1AAkAxf/qAOj/uADx/+oBBP/wARv/8QEv/+sBSv/1AVT/7AHc/+oACQDF/+oA6P+4APH/6gEE//ABG//xAS//6wFK//UBVP/sAdz/6gAGAMX/6gDo/+4A8f+wAS//7AFU/+wB3P/oABIA1P+uAOEAEgDm/+AA6P+tAOr/1gD4/98A/P/SAQL/4AEX/84BJ//dASn/4gEt/+ABM//gATn/6QE8/9oBRv+9AVD/3wFTABEABwBIAA0AwQALAML/6gDFAAwA6P/IARf/8QHf//UAEgDU/64A4QASAOb/4ADo/60A6v/WAPj/3wD8/9IBAv/gARf/zgEn/90BKf/iAS3/4AEz/+ABOf/pATz/2gFG/70BUP/fAVMAEQAHAEgADQDBAAsAwv/qAMUADADo/8gBF//xAd//9QASANT/rgDhABIA5v/gAOj/rQDq/9YA+P/fAPz/0gEC/+ABF//OASf/3QEp/+IBLf/gATP/4AE5/+kBPP/aAUb/vQFQ/98BUwARAAcASAANAMEACwDC/+oAxQAMAOj/yAEX//EB3//1ABgAs//UAL3/7QC/ABEAxf/gAMf/5wDI/+UAyf/uANQAEgDl/+kA8f/XAS//1wE5/9MBO//WATz/xQFB/+cBSQANAUsADAFU/9YBVf/yAan/6QGt/+cBtf/nAbb/6QHf//AAAQEX//EAHAAh/8MAVv/vAFn/3wCW/+4As//lALT/0QC/ABEAxf/IANQAEwDh/8UA8f/KAS//nwE4/1EBOf97ATv/ygE8/90BQf/yAUn/dQFL/8oBU/9PAVT/jAGt//UBtf/1Abn/xwG6//EBu//NAbz/3QG+/8QABwDx//ABBP/xARv/8wEv//EBSv/zAUz/6QFU/9MAHAAh/8MAVv/vAFn/3wCW/+4As//lALT/0QC/ABEAxf/IANQAEwDh/8UA8f/KAS//nwE4/1EBOf97ATv/ygE8/90BQf/yAUn/dQFL/8oBU/9PAVT/jAGt//UBtf/1Abn/xwG6//EBu//NAbz/3QG+/8QABwDx//ABBP/xARv/8wEv//EBSv/zAUz/6QFU/9MAHAAh/8MAVv/vAFn/3wCW/+4As//lALT/0QC/ABEAxf/IANQAEwDh/8UA8f/KAS//nwE4/1EBOf97ATv/ygE8/90BQf/yAUn/dQFL/8oBU/9PAVT/jAGt//UBtf/1Abn/xwG6//EBu//NAbz/3QG+/8QABwDx//ABBP/xARv/8wEv//EBSv/zAUz/6QFU/9MAHAAh/8MAVv/vAFn/3wCW/+4As//lALT/0QC/ABEAxf/IANQAEwDh/8UA8f/KAS//nwE4/1EBOf97ATv/ygE8/90BQf/yAUn/dQFL/8oBU/9PAVT/jAGt//UBtf/1Abn/xwG6//EBu//NAbz/3QG+/8QABwDx//ABBP/xARv/8wEv//EBSv/zAUz/6QFU/9MAHAAh/8MAVv/vAFn/3wCW/+4As//lALT/0QC/ABEAxf/IANQAEwDh/8UA8f/KAS//nwE4/1EBOf97ATv/ygE8/90BQf/yAUn/dQFL/8oBU/9PAVT/jAGt//UBtf/1Abn/xwG6//EBu//NAbz/3QG+/8QABwDx//ABBP/xARv/8wEv//EBSv/zAUz/6QFU/9MAHAAh/8MAVv/vAFn/3wCW/+4As//lALT/0QC/ABEAxf/IANQAEwDh/8UA8f/KAS//nwE4/1EBOf97ATv/ygE8/90BQf/yAUn/dQFL/8oBU/9PAVT/jAGt//UBtf/1Abn/xwG6//EBu//NAbz/3QG+/8QABwDx//ABBP/xARv/8wEv//EBSv/zAUz/6QFU/9MAHAAh/8MAVv/vAFn/3wCW/+4As//lALT/0QC/ABEAxf/IANQAEwDh/8UA8f/KAS//nwE4/1EBOf97ATv/ygE8/90BQf/yAUn/dQFL/8oBU/9PAVT/jAGt//UBtf/1Abn/xwG6//EBu//NAbz/3QG+/8QABwDx//ABBP/xARv/8wEv//EBSv/zAUz/6QFU/9MAHAAh/8MAVv/vAFn/3wCW/+4As//lALT/0QC/ABEAxf/IANQAEwDh/8UA8f/KAS//nwE4/1EBOf97ATv/ygE8/90BQf/yAUn/dQFL/8oBU/9PAVT/jAGt//UBtf/1Abn/xwG6//EBu//NAbz/3QG+/8QABwDx//ABBP/xARv/8wEv//EBSv/zAUz/6QFU/9MAHAAh/8MAVv/vAFn/3wCW/+4As//lALT/0QC/ABEAxf/IANQAEwDh/8UA8f/KAS//nwE4/1EBOf97ATv/ygE8/90BQf/yAUn/dQFL/8oBU/9PAVT/jAGt//UBtf/1Abn/xwG6//EBu//NAbz/3QG+/8QABwDx//ABBP/xARv/8wEv//EBSv/zAUz/6QFU/9MAHAAh/8MAVv/vAFn/3wCW/+4As//lALT/0QC/ABEAxf/IANQAEwDh/8UA8f/KAS//nwE4/1EBOf97ATv/ygE8/90BQf/yAUn/dQFL/8oBU/9PAVT/jAGt//UBtf/1Abn/xwG6//EBu//NAbz/3QG+/8QABwDx//ABBP/xARv/8wEv//EBSv/zAUz/6QFU/9MAHAAh/8MAVv/vAFn/3wCW/+4As//lALT/0QC/ABEAxf/IANQAEwDh/8UA8f/KAS//nwE4/1EBOf97ATv/ygE8/90BQf/yAUn/dQFL/8oBU/9PAVT/jAGt//UBtf/1Abn/xwG6//EBu//NAbz/3QG+/8QABwDx//ABBP/xARv/8wEv//EBSv/zAUz/6QFU/9MAHAAh/8MAVv/vAFn/3wCW/+4As//lALT/0QC/ABEAxf/IANQAEwDh/8UA8f/KAS//nwE4/1EBOf97ATv/ygE8/90BQf/yAUn/dQFL/8oBU/9PAVT/jAGt//UBtf/1Abn/xwG6//EBu//NAbz/3QG+/8QABwDx//ABBP/xARv/8wEv//EBSv/zAUz/6QFU/9MABQBI/+4AWf/qAbv/8AG8/+0Bvv/wAAEA8f/1AAUASP/uAFn/6gG7//ABvP/tAb7/8AABAPH/9QAFAEj/7gBZ/+oBu//wAbz/7QG+//AAAQDx//UABQBI/+4AWf/qAbv/8AG8/+0Bvv/wAAEA8f/1AAUASP/uAFn/6gG7//ABvP/tAb7/8AABAPH/9QAFAEj/7gBZ/+oBu//wAbz/7QG+//AAAQDx//UABQBI/+4AWf/qAbv/8AG8/+0Bvv/wAAEA8f/1AAUASP/uAFn/6gG7//ABvP/tAb7/8AABAPH/9QAIANQAFQDoABUBOP/kATn/5QE7/+QBSf/jAUv/4gFT/+QACADUABUA6AAVATj/5AE5/+UBO//kAUn/4wFL/+IBU//kAAkAf//fALD/8wCy//AAv//qANT/3wDh/+ABU//gAaf/7QG9//UACQDF/+oA6P+4APH/6gEE//ABG//xAS//6wFK//UBVP/sAdz/6gAJAH//3wCw//MAsv/wAL//6gDU/98A4f/gAVP/4AGn/+0Bvf/1AAkAxf/qAOj/uADx/+oBBP/wARv/8QEv/+sBSv/1AVT/7AHc/+oACQB//98AsP/zALL/8AC//+oA1P/fAOH/4AFT/+ABp//tAb3/9QAJAMX/6gDo/7gA8f/qAQT/8AEb//EBL//rAUr/9QFU/+wB3P/qAAkAf//fALD/8wCy//AAv//qANT/3wDh/+ABU//gAaf/7QG9//UACQDF/+oA6P+4APH/6gEE//ABG//xAS//6wFK//UBVP/sAdz/6gAJAH//3wCw//MAsv/wAL//6gDU/98A4f/gAVP/4AGn/+0Bvf/1AAkAxf/qAOj/uADx/+oBBP/wARv/8QEv/+sBSv/1AVT/7AHc/+oACQB//98AsP/zALL/8AC//+oA1P/fAOH/4AFT/+ABp//tAb3/9QAJAMX/6gDo/7gA8f/qAQT/8AEb//EBL//rAUr/9QFU/+wB3P/qAAkAf//fALD/8wCy//AAv//qANT/3wDh/+ABU//gAaf/7QG9//UACQDF/+oA6P+4APH/6gEE//ABG//xAS//6wFK//UBVP/sAdz/6gAJAMX/6gDo/7gA8f/qAQT/8AEb//EBL//rAUr/9QFU/+wB3P/qAAEBp//rAAEBp//rACQACP/iAAsAFAAM/88APwASAEj/6gBU/9gAVv/qAF8AEwBr/64Aev/NAH//oACE/8EAh//AALP/0AC3/+oAuv/GALsADQC9/+kAvv/WAMH/6ADC/7oAxf/pAMf/ywDI/9oAyf/HAW7/0wGn/6sBqf/NAa3/ywG1/8sBtv/LAbn/8wG8//MBvf/vAdz/6AHf/+4ABwBIAA0AwQALAML/6gDFAAwA6P/IARf/8QHf//UAJAAI/+IACwAUAAz/zwA/ABIASP/qAFT/2ABW/+oAXwATAGv/rgB6/80Af/+gAIT/wQCH/8AAs//QALf/6gC6/8YAuwANAL3/6QC+/9YAwf/oAML/ugDF/+kAx//LAMj/2gDJ/8cBbv/TAaf/qwGp/80Brf/LAbX/ywG2/8sBuf/zAbz/8wG9/+8B3P/oAd//7gAHAEgADQDBAAsAwv/qAMUADADo/8gBF//xAd//9QAkAAj/4gAL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/94CE//rAhT/6wIV/+sCFv/rAhf/6wId/+sCHv/rAh//6wIg/+sCIf/rAiL/6gIj/+oCJP/qAiX/6gIm/+gCJ//oAij/VgIp/94CKv9WAiv/3gIs/1YCLf/eAi//6wIx/+sCM//rAjX/6wI3/+sCOf/rAjv/6wI9/+sCP//rAkH/6wJD/+sCRf/rAkf/6wJJ/+sCV/74Amv/6wJt/+sCb//rAoAAFAKCABQChAAUAof/6gKJ/+oCi//qAo3/6gKP/+oCkf/qApX/6AL4/1YDAP9WAxD/6wMU/+oDFv/rAxj/6AMb/+oDHP/rAx3/6gMk/vgDKP9WAzMAFAM1/94DNv/rAzj/6wM6/+sDO//oAz3/6wNE/+gDTP/oA1X/VgNW/94DXP/rA2H/6ANi/+sDZ//rA2n/6ANu/1YDb//eA3D/VgNx/94Ddf/rA3f/6wN4/+sDgv/rA4T/6wOG/+sDiv/oA4z/6AOO/+gDlf/rA5j/VgOZ/94Dmv9WA5v/3gOc/1YDnf/eA57/VgOf/94DoP9WA6H/3gOi/1YDo//eA6T/VgOl/94Dpv9WA6f/3gOo/1YDqf/eA6r/VgOr/94DrP9WA63/3gOu/1YDr//eA7H/6wOz/+sDtf/rA7f/6wO5/+sDu//rA73/6wO//+sDxf/rA8f/6wPJ/+sDy//rA83/6wPP/+sD0f/rA9P/6wPV/+sD1//rA9n/6wPb/+sD3f/qA9//6gPh/+oD4//qA+X/6gPn/+oD6f/qA+v/6APt/+gD7//oA/YAFAAfADb/1QA4/+QAOf/sADv/3QDN/9UA0f/VART/5AEu/9UBNv/VAgv/3QKA/9UCgv/VAoT/1QKS/+wClP/dApb/3QL9/90DDP/dAw//3QMz/9UDRf/sA0f/7ANJ/+wDS//dA2D/5ANo/90D6v/dA+z/3QPu/90D9v/VBBP/3QAaADb/sAA4/+0AO//QAM3/sADR/7ABFP/tAS7/sAE2/7ACC//QAoD/sAKC/7AChP+wApT/0AKW/9AC/f/QAwz/0AMP/9ADM/+wA0v/0ANg/+0DaP/QA+r/0APs/9AD7v/QA/b/sAQT/9AAEAAs/+4AN//uAgf/7gII/+4CCf/uAgr/7gJX/+4Chv/uAoj/7gKK/+4CjP/uAo7/7gKQ/+4DJP/uA9z/7gPe/+4ARwAEABAACQAQAEX/6ABG/+gAR//oAEn/6ABT/+gAkf/oAJX/6AC2/+gAw//oAMT/6ADy/+gA/v/oARn/6AEd/+gBNf/oAUf/6AFI/+gBUv/oAWUAEAFmABABaAAQAWkAEAFqABACE//oAhT/6AIV/+gCFv/oAhf/6AIv/+gCMf/oAjP/6AI1/+gCN//oAjn/6AI7/+gCPf/oAj//6AJB/+gCQ//oAkX/6AJH/+gCSf/oAxD/6AM2/+gDOv/oAz3/6ANNABADTgAQA1IAEANc/+gDYv/oA2f/6AN1/+gDd//oA3j/6AOE/+gDlf/oA7H/6AOz/+gDtf/oA7f/6AO5/+gDu//oA73/6AO//+gD0//oA9X/6APX/+gD2//oAD0ARf/sAEb/7ABH/+wASf/sAFP/7ACR/+wAlf/sALb/7ADD/+wAxP/sAPL/7AD+/+wBGf/sAR3/7AE1/+wBR//sAUj/7AFS/+wCE//sAhT/7AIV/+wCFv/sAhf/7AIv/+wCMf/sAjP/7AI1/+wCN//sAjn/7AI7/+wCPf/sAj//7AJB/+wCQ//sAkX/7AJH/+wCSf/sAxD/7AM2/+wDOv/sAz3/7ANc/+wDYv/sA2f/7AN1/+wDd//sA3j/7AOE/+wDlf/sA7H/7AOz/+wDtf/sA7f/7AO5/+wDu//sA73/7AO//+wD0//sA9X/7APX/+wD2//sABcAUf/sARP/7AId/+wCHv/sAh//7AIg/+wCIf/sAmv/7AJt/+wCb//sAxb/7AMc/+wDOP/sA4L/7AOG/+wDxf/sA8f/7APJ/+wDy//sA83/7APP/+wD0f/sA9n/7AAGAA7/hAAQ/4QBZ/+EAWv/hAFv/4QBcP+EABAALP/sADf/7AIH/+wCCP/sAgn/7AIK/+wCV//sAob/7AKI/+wCiv/sAoz/7AKO/+wCkP/sAyT/7APc/+wD3v/sAAEpLAAEAAAAIgBOAMQBqgKQA2oEBAaeCGQJNgosC/IMJAxWDNQOug8wEAISFBLKFDAU6hVwFc4WkBcGFxgXQhiUGtIa9BwKHIgcshzcAB0ABP/yAAn/8gBY//MAW//zALj/8wEV//MBZf/yAWb/8gFo//IBaf/yAWr/8gIm//MCJ//zApX/8wMY//MDO//zA0T/8wNM//MDTf/yA07/8gNS//IDYf/zA2n/8wOK//MDjP/zA47/8wPr//MD7f/zA+//8wA5ACX/8wAp//MAMf/zADP/8wCB//MAkP/zAJT/8wCu//MAzv/zAQP/8wES//MBFv/zARj/8wEa//MBHP/zATT/8wFR//MB+P/zAgL/8wID//MCBP/zAgX/8wIG//MCLv/zAjD/8wIy//MCNP/zAkL/8wJE//MCRv/zAkj/8wJq//MCbP/zAm7/8wKf//MC/P/zAwn/8wMv//MDMv/zA1f/8wNj//MDZv/zA4H/8wOD//MDhf/zA8T/8wPG//MDyP/zA8r/8wPM//MDzv/zA9D/8wPS//MD1P/zA9b/8wPY//MD2v/zADkAJf/mACn/5gAx/+YAM//mAIH/5gCQ/+YAlP/mAK7/5gDO/+YBA//mARL/5gEW/+YBGP/mARr/5gEc/+YBNP/mAVH/5gH4/+YCAv/mAgP/5gIE/+YCBf/mAgb/5gIu/+YCMP/mAjL/5gI0/+YCQv/mAkT/5gJG/+YCSP/mAmr/5gJs/+YCbv/mAp//5gL8/+YDCf/mAy//5gMy/+YDV//mA2P/5gNm/+YDgf/mA4P/5gOF/+YDxP/mA8b/5gPI/+YDyv/mA8z/5gPO/+YD0P/mA9L/5gPU/+YD1v/mA9j/5gPa/+YANgAj/+QAOv/SADv/0wCt/+QAr//kANX/0gEI/+QB8f/kAfL/5AHz/+QB9P/kAfX/5AH2/+QB9//kAgv/0wIo/+QCKv/kAiz/5AKU/9MClv/TAvj/5AL9/9MDAP/kAwz/0wMN/9IDD//TAyj/5AM0/9IDS//TA1X/5ANo/9MDa//SA27/5ANw/+QDef/SA5P/0gOY/+QDmv/kA5z/5AOe/+QDoP/kA6L/5AOk/+QDpv/kA6j/5AOq/+QDrP/kA67/5APq/9MD7P/TA+7/0wP4/9IEAP/SBBP/0wAmAA7/HgAQ/x4AI//NAK3/zQCv/80BCP/NAWf/HgFr/x4Bb/8eAXD/HgHx/80B8v/NAfP/zQH0/80B9f/NAfb/zQH3/80CKP/NAir/zQIs/80C+P/NAwD/zQMo/80DVf/NA27/zQNw/80DmP/NA5r/zQOc/80Dnv/NA6D/zQOi/80DpP/NA6b/zQOo/80Dqv/NA6z/zQOu/80ApgBF/9wARv/cAEf/3ABJ/9wAT//zAFD/8wBR/9YAUv/zAFP/3ABX/90AWP/hAFv/4QCR/9wAlf/cAJf/3QC2/9wAuP/hALz/8wDD/9wAxP/cAMb/3QDn//MA6//zAOz/8wDu//MA7//zAPD/8wDy/9wA8//zAPX/8wD2//MA+f/zAPv/8wD+/9wBAP/zARP/1gEV/+EBGf/cAR3/3AEx//MBNf/cAUD/8wFF//MBR//cAUj/3AFS/9wCE//cAhT/3AIV/9wCFv/cAhf/3AIc//MCHf/WAh7/1gIf/9YCIP/WAiH/1gIi/90CI//dAiT/3QIl/90CJv/hAif/4QIv/9wCMf/cAjP/3AI1/9wCN//cAjn/3AI7/9wCPf/cAj//3AJB/9wCQ//cAkX/3AJH/9wCSf/cAmT/8wJm//MCaP/zAmn/8wJr/9YCbf/WAm//1gKH/90Cif/dAov/3QKN/90Cj//dApH/3QKV/+EDEP/cAxL/8wMU/90DFv/WAxj/4QMb/90DHP/WAx3/3QM2/9wDN//zAzj/1gM5//MDOv/cAzv/4QM9/9wDPv/zA0P/8wNE/+EDTP/hA1T/8wNc/9wDXf/zA2H/4QNi/9wDZ//cA2n/4QN1/9wDd//cA3j/3AN+//MDgP/zA4L/1gOE/9wDhv/WA4r/4QOM/+EDjv/hA5L/8wOV/9wDsf/cA7P/3AO1/9wDt//cA7n/3AO7/9wDvf/cA7//3APF/9YDx//WA8n/1gPL/9YDzf/WA8//1gPR/9YD0//cA9X/3APX/9wD2f/WA9v/3APd/90D3//dA+H/3QPj/90D5f/dA+f/3QPp/90D6//hA+3/4QPv/+ED8//zA/X/8wP///MEDP/zBA7/8wQQ//MAcQAE/9oACf/aAEX/8ABG//AAR//wAEn/8ABT//AAV//vAFj/3ABb/9wAkf/wAJX/8ACX/+8Atv/wALj/3ADD//AAxP/wAMb/7wDy//AA/v/wARX/3AEZ//ABHf/wATX/8AFH//ABSP/wAVL/8AFl/9oBZv/aAWj/2gFp/9oBav/aAhP/8AIU//ACFf/wAhb/8AIX//ACIv/vAiP/7wIk/+8CJf/vAib/3AIn/9wCL//wAjH/8AIz//ACNf/wAjf/8AI5//ACO//wAj3/8AI///ACQf/wAkP/8AJF//ACR//wAkn/8AKH/+8Cif/vAov/7wKN/+8Cj//vApH/7wKV/9wDEP/wAxT/7wMY/9wDG//vAx3/7wM2//ADOv/wAzv/3AM9//ADRP/cA0z/3ANN/9oDTv/aA1L/2gNc//ADYf/cA2L/8ANn//ADaf/cA3X/8AN3//ADeP/wA4T/8AOK/9wDjP/cA47/3AOV//ADsf/wA7P/8AO1//ADt//wA7n/8AO7//ADvf/wA7//8APT//AD1f/wA9f/8APb//AD3f/vA9//7wPh/+8D4//vA+X/7wPn/+8D6f/vA+v/3APt/9wD7//cADQABP+gAAn/oABX//EAWP/FAFv/xQCX//EAuP/FAMb/8QEV/8UBZf+gAWb/oAFo/6ABaf+gAWr/oAIi//ECI//xAiT/8QIl//ECJv/FAif/xQKH//ECif/xAov/8QKN//ECj//xApH/8QKV/8UDFP/xAxj/xQMb//EDHf/xAzv/xQNE/8UDTP/FA03/oANO/6ADUv+gA2H/xQNp/8UDiv/FA4z/xQOO/8UD3f/xA9//8QPh//ED4//xA+X/8QPn//ED6f/xA+v/xQPt/8UD7//FAD0ARf/nAEb/5wBH/+cASf/nAFP/5wCR/+cAlf/nALb/5wDD/+cAxP/nAPL/5wD+/+cBGf/nAR3/5wE1/+cBR//nAUj/5wFS/+cCE//nAhT/5wIV/+cCFv/nAhf/5wIv/+cCMf/nAjP/5wI1/+cCN//nAjn/5wI7/+cCPf/nAj//5wJB/+cCQ//nAkX/5wJH/+cCSf/nAxD/5wM2/+cDOv/nAz3/5wNc/+cDYv/nA2f/5wN1/+cDd//nA3j/5wOE/+cDlf/nA7H/5wOz/+cDtf/nA7f/5wO5/+cDu//nA73/5wO//+cD0//nA9X/5wPX/+cD2//nAHEABAAMAAkADABF/+gARv/oAEf/6ABJ/+gAUf/qAFP/6ABYAAsAWwALAJH/6ACV/+gAtv/oALgACwDD/+gAxP/oAPL/6AD+/+gBE//qARUACwEZ/+gBHf/oATX/6AFH/+gBSP/oAVL/6AFlAAwBZgAMAWgADAFpAAwBagAMAhP/6AIU/+gCFf/oAhb/6AIX/+gCHf/qAh7/6gIf/+oCIP/qAiH/6gImAAsCJwALAi//6AIx/+gCM//oAjX/6AI3/+gCOf/oAjv/6AI9/+gCP//oAkH/6AJD/+gCRf/oAkf/6AJJ/+gCa//qAm3/6gJv/+oClQALAxD/6AMW/+oDGAALAxz/6gM2/+gDOP/qAzr/6AM7AAsDPf/oA0QACwNMAAsDTQAMA04ADANSAAwDXP/oA2EACwNi/+gDZ//oA2kACwN1/+gDd//oA3j/6AOC/+oDhP/oA4b/6gOKAAsDjAALA44ACwOV/+gDsf/oA7P/6AO1/+gDt//oA7n/6AO7/+gDvf/oA7//6APF/+oDx//qA8n/6gPL/+oDzf/qA8//6gPR/+oD0//oA9X/6APX/+gD2f/qA9v/6APrAAsD7QALA+8ACwAMAFr/7QBc/+0A6f/tApj/7QKa/+0CnP/tAzz/7QNs/+0Dev/tA5T/7QP5/+0EAf/tAAwAWv/yAFz/8gDp//ICmP/yApr/8gKc//IDPP/yA2z/8gN6//IDlP/yA/n/8gQB//IAHwBY//QAWv/yAFv/9ABc//MAuP/0AOn/8gEV//QCJv/0Aif/9AKV//QCmP/zApr/8wKc//MDGP/0Azv/9AM8//IDRP/0A0z/9ANh//QDaf/0A2z/8gN6//IDiv/0A4z/9AOO//QDlP/yA+v/9APt//QD7//0A/n/8gQB//IAeQAE/8oACf/KADb/0gA4/9QAOv/0ADv/0wBP/9EAUP/RAFL/0QBY/+YAWv/vAFv/5gC4/+YAvP/RAM3/0gDR/9IA1f/0ANn/7QDc/+EA5//RAOn/7wDr/9EA7P/RAO7/0QDv/9EA8P/RAPP/0QD1/9EA9v/RAPn/0QD7/9EBAP/RART/1AEV/+YBLv/SATH/0QE2/9IBQP/RAUX/0QFl/8oBZv/KAWj/ygFp/8oBav/KAgv/0wIc/9ECJv/mAif/5gJk/9ECZv/RAmj/0QJp/9ECgP/SAoL/0gKE/9IClP/TApX/5gKW/9MC/f/TAwz/0wMN//QDD//TAxL/0QMY/+YDJ//tAzP/0gM0//QDN//RAzn/0QM7/+YDPP/vAz7/0QND/9EDRP/mA0v/0wNM/+YDTf/KA07/ygNS/8oDVP/RA13/0QNg/9QDYf/mA2j/0wNp/+YDa//0A2z/7wN5//QDev/vA37/0QOA/9EDif/tA4r/5gOL/+0DjP/mA43/7QOO/+YDj//hA5L/0QOT//QDlP/vA+r/0wPr/+YD7P/TA+3/5gPu/9MD7//mA/P/0QP1/9ED9v/SA/j/9AP5/+8D+v/hA/z/4QP//9EEAP/0BAH/7wQM/9EEDv/RBBD/0QQT/9MAHQA2/74AWP/vAFv/7wC4/+8Azf++ANH/vgEV/+8BLv++ATb/vgIm/+8CJ//vAoD/vgKC/74ChP++ApX/7wMY/+8DM/++Azv/7wNE/+8DTP/vA2H/7wNp/+8Div/vA4z/7wOO/+8D6//vA+3/7wPv/+8D9v++ADQANv/mADj/5wA6//IAO//nAFr/8QDN/+YA0f/mANX/8gDZ/+4A3P/oAOn/8QEU/+cBLv/mATb/5gIL/+cCgP/mAoL/5gKE/+YClP/nApb/5wL9/+cDDP/nAw3/8gMP/+cDJ//uAzP/5gM0//IDPP/xA0v/5wNg/+cDaP/nA2v/8gNs//EDef/yA3r/8QOJ/+4Di//uA43/7gOP/+gDk//yA5T/8QPq/+cD7P/nA+7/5wP2/+YD+P/yA/n/8QP6/+gD/P/oBAD/8gQB//EEE//nAIQAIwAQACX/6AAp/+gAMf/oADP/6AA2/+AAOP/gADv/3wCB/+gAkP/oAJT/6ACtABAArv/oAK8AEADN/+AAzv/oAM8AEADR/+AA2AAQANz/4QDtABAA9P/gAP8AEAED/+gBCAAQARL/6AEU/+ABFv/oARj/6AEa/+gBHP/oAS7/4AE0/+gBNv/gAU0AEAFR/+gB8QAQAfIAEAHzABAB9AAQAfUAEAH2ABAB9wAQAfj/6AIC/+gCA//oAgT/6AIF/+gCBv/oAgv/3wIoABACKgAQAiwAEAIu/+gCMP/oAjL/6AI0/+gCQv/oAkT/6AJG/+gCSP/oAmr/6AJs/+gCbv/oAoD/4AKC/+AChP/gApT/3wKW/98Cn//oAvgAEAL8/+gC/f/fAwAAEAMJ/+gDDP/fAw//3wMoABADL//oAzL/6AMz/+ADS//fA1UAEANX/+gDYP/gA2P/6ANm/+gDaP/fA24AEANwABADgf/oA4P/6AOF/+gDj//hA5D/4AOWABADlwAQA5gAEAOaABADnAAQA54AEAOgABADogAQA6QAEAOmABADqAAQA6oAEAOsABADrgAQA8T/6APG/+gDyP/oA8r/6APM/+gDzv/oA9D/6APS/+gD1P/oA9b/6APY/+gD2v/oA+r/3wPs/98D7v/fA/b/4AP6/+ED+//gA/z/4QP9/+AEEQAQBBIAEAQT/98ALQA2//EAOP/0ADr/9AA7//AAzf/xAM//9QDR//EA1f/0ANj/9QDZ//MBFP/0AS7/8QE2//EBTf/1Agv/8AKA//ECgv/xAoT/8QKU//AClv/wAv3/8AMM//ADDf/0Aw//8AMn//MDM//xAzT/9ANL//ADYP/0A2j/8ANr//QDef/0A4n/8wOL//MDjf/zA5P/9AOW//UD6v/wA+z/8APu//AD9v/xA/j/9AQA//QEEf/1BBP/8ABZACMADwA2/+YAOP/mADoADgA7/+YArQAPAK8ADwDN/+YAzwAOANH/5gDVAA4A2AAOANkACwDc/+UA7QAPAPT/6AD/AA8BCAAPART/5gEu/+YBNv/mAU0ADgHxAA8B8gAPAfMADwH0AA8B9QAPAfYADwH3AA8CC//mAigADwIqAA8CLAAPAoD/5gKC/+YChP/mApT/5gKW/+YC+AAPAv3/5gMAAA8DDP/mAw0ADgMP/+YDJwALAygADwMz/+YDNAAOA0v/5gNVAA8DYP/mA2j/5gNrAA4DbgAPA3AADwN5AA4DiQALA4sACwONAAsDj//lA5D/6AOTAA4DlgAOA5cADwOYAA8DmgAPA5wADwOeAA8DoAAPA6IADwOkAA8DpgAPA6gADwOqAA8DrAAPA64ADwPq/+YD7P/mA+7/5gP2/+YD+AAOA/r/5QP7/+gD/P/lA/3/6AQAAA4EEQAOBBIADwQT/+YALgA2/+MAOv/lADv/5ADN/+MAz//lANH/4wDV/+UA2P/lANn/6QDt/+oA///qAS7/4wE2/+MBTf/lAgv/5AKA/+MCgv/jAoT/4wKU/+QClv/kAv3/5AMM/+QDDf/lAw//5AMn/+kDM//jAzT/5QNL/+QDaP/kA2v/5QN5/+UDif/pA4v/6QON/+kDk//lA5b/5QOX/+oD6v/kA+z/5APu/+QD9v/jA/j/5QQA/+UEEf/lBBL/6gQT/+QAIQA2/+IAOv/kAM3/4gDP/+QA0f/iANX/5ADY/+QA2f/pAO3/6wD//+sBLv/iATb/4gFN/+QCgP/iAoL/4gKE/+IDDf/kAyf/6QMz/+IDNP/kA2v/5AN5/+QDif/pA4v/6QON/+kDk//kA5b/5AOX/+sD9v/iA/j/5AQA/+QEEf/kBBL/6wAXADb/6wA7//MAzf/rANH/6wEu/+sBNv/rAgv/8wKA/+sCgv/rAoT/6wKU//MClv/zAv3/8wMM//MDD//zAzP/6wNL//MDaP/zA+r/8wPs//MD7v/zA/b/6wQT//MAMABP/+8AUP/vAFL/7wBa//AAvP/vAOf/7wDp//AA6//vAOz/7wDu/+8A7//vAPD/7wDz/+8A9f/vAPb/7wD5/+8A+//vAQD/7wEx/+8BQP/vAUX/7wIc/+8CZP/vAmb/7wJo/+8Caf/vAxL/7wM3/+8DOf/vAzz/8AM+/+8DQ//vA1T/7wNd/+8DbP/wA3r/8AN+/+8DgP/vA5L/7wOU//AD8//vA/X/7wP5//AD///vBAH/8AQM/+8EDv/vBBD/7wAdAAT/8gAJ//IAWP/1AFv/9QC4//UBFf/1AWX/8gFm//IBaP/yAWn/8gFq//ICJv/1Aif/9QKV//UDGP/1Azv/9QNE//UDTP/1A03/8gNO//IDUv/yA2H/9QNp//UDiv/1A4z/9QOO//UD6//1A+3/9QPv//UABAD0/+0DkP/tA/v/7QP9/+0ACgAE//UACf/1AWX/9QFm//UBaP/1AWn/9QFq//UDTf/1A07/9QNS//UAVABF//AARv/wAEf/8ABJ//AAUf/rAFP/8ACR//AAlf/wALb/8ADD//AAxP/wAPL/8AD+//ABE//rARn/8AEd//ABNf/wAUf/8AFI//ABUv/wAhP/8AIU//ACFf/wAhb/8AIX//ACHf/rAh7/6wIf/+sCIP/rAiH/6wIv//ACMf/wAjP/8AI1//ACN//wAjn/8AI7//ACPf/wAj//8AJB//ACQ//wAkX/8AJH//ACSf/wAmv/6wJt/+sCb//rAxD/8AMW/+sDHP/rAzb/8AM4/+sDOv/wAz3/8ANc//ADYv/wA2f/8AN1//ADd//wA3j/8AOC/+sDhP/wA4b/6wOV//ADsf/wA7P/8AO1//ADt//wA7n/8AO7//ADvf/wA7//8APF/+sDx//rA8n/6wPL/+sDzf/rA8//6wPR/+sD0//wA9X/8APX//AD2f/rA9v/8ACPAAQADQAJAA0AQ//wAEX/sABG/7AAR/+wAEn/sABR/9YAU/+wAFgACwBbAAsAkf+wAJX/sAC2/7AAuAALAMT/sADt/68A8v+wAP7/sAD//68BE//WARUACwEZ/7ABHf+wATX/sAFH/7ABSP+wAVL/sAFlAA0BZgANAWgADQFpAA0BagANAgz/8AIN//ACDv/wAg//8AIQ//ACEf/wAhL/8AIT/7ACFP+wAhX/sAIW/7ACF/+wAh3/1gIe/9YCH//WAiD/1gIh/9YCJgAL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AlQA0QJXAlcA0gJZAlkA0wJbAlsA1AJdAl0A1QJfAl8A1gJhAmEA1wJjAm8A2AJxAnEA5QJzAnMA5gJ1AnUA5wKAAoAA6AKCAoIA6QKEAoQA6gKGAoYA6wKIAogA7AKKAooA7QKMAowA7gKOAo4A7wKQApAA8AKSApIA8QKUApcA8gKZApkA9gKbApsA9wL4Av0A+AMAAw8A/gMSAxIBDgMWAxYBDwMYAxgBEAMcAxwBEQMfAyABEgMiAysBFAMtAy8BHgMxAzYBIQM4AzkBJwM7Az4BKQNEA0UBLQNHA0cBLwNJA0kBMANLA04BMQNSA1cBNQNaA1oBOwNcA1wBPANgA2EBPQNmA2YBPwNoA3EBQAN0A3UBSgN3A3oBTAOBA4IBUAOGA4YBUgOIA44BUwOTA5QBWgOYA8ABXAPCA8IBhQPEA9EBhgPZA9kBlAPcA9wBlQPeA94BlgPqA+8BlwPyA/IBnQP0A/QBngP2A/YBnwP4A/kBoAP+BAEBogQEBAQBpgQGBAcBpwQJBAkBqQQNBA0BqgQPBA8BqwQTBBMBrAABAAoACgAoADMANAA9AEgATQBWAFkAXQABACIAmQCwALIAswC0ALsAvgC/AMAAxQDHAMgAyQDNANEA0wDUANYA3gDiAOMA5ADlAOYA6ADqAOwA8QDzAPYA+wD+AR0B3AACAHYABAAEAAAACQAJAAEADgAOAAIAEAAQAAMAIwAnAAQAKgAyAAkANgA8ABIAQwBFABkARwBHABwASgBKAB0ATwBSAB4AVABUACIAWABYACMAWgBcACQAiACIACcArACvACgAuAC4ACwAvAC8AC0AwgDCAC4AzwDQAC8A0gDSADEA1QDVADIA1wDZADMA2wDbADYA3QDdADcA3wDfADgA4QDhADkA5wDnADoA6QDpADsA8gDyADwA9wD3AD0A+QD6AD4A/wEAAEABBQEFAEIBCAEIAEMBEwEVAEQBJwEpAEcBLAEsAEoBLgEuAEsBRQFFAEwBZQFrAE0BbwFwAFQB7AHtAFYB7wHvAFgB8QIXAFkCHAIhAIACJgI2AIYCOAJBAJcCSgJMAKECTgJOAKQCUAJQAKUCUgJSAKYCVAJUAKcCVwJXAKgCWQJZAKkCWwJbAKoCXQJdAKsCXwJfAKwCYQJhAK0CYwJvAK4CcQJxALsCcwJzALwCdQJ1AL0CgAKAAL4CggKCAL8ChAKEAMAChgKGAMECiAKIAMICigKKAMMCjAKMAMQCjgKOAMUCkAKQAMYCkgKSAMcClAKcAMgC+AL9ANEDAAMPANcDEgMSAOcDFgMWAOgDGAMYAOkDHAMcAOoDHwMgAOsDIgMrAO0DLQMvAPcDMQM2APoDOAM+AQADRANFAQcDRwNHAQkDSQNJAQoDSwNOAQsDUgNXAQ8DWgNaARUDXANcARYDYANhARcDZgNxARkDdAN1ASUDdwN6AScDgQOCASsDhgOGAS0DiAOOAS4DkwOUATUDmAPAATcDwgPCAWADxAPRAWED2QPZAW8D3APcAXAD3gPeAXED6gPvAXID8gPyAXgD9AP0AXkD9gP2AXoD+AP5AXsD/gQBAX0EBAQEAYEEBgQHAYIECQQJAYQEDQQNAYUEDwQPAYYEEwQTAYcAAgE4AAQABAAdAAkACQAdAA4ADgAeABAAEAAeACQAJAABACUAJQAEACYAJgADACcAJwAFACoAKwACACwALAAMAC0ALQAJAC4ALgAKAC8AMAACADEAMQADADIAMgALADYANgAGADcANwAMADgAOAANADkAOQAQADoAOgAOADsAOwAPADwAPAARAEMAQwATAEQARAAVAEUARQAUAEcARwAWAEoASgAXAE8AUAAXAFEAUQAYAFIAUgAVAFQAVAAaAFgAWAAZAFoAWgAbAFsAWwAZAFwAXAAcAIgAiAAVAKwArAAHAK4ArgADALgAuAAZALwAvAAXAMIAwgAVAM8A0AAfANIA0gACANUA1QAOANcA2AACANkA2QASANsA2wACAN0A3QACAN8A3wAfAOEA4QAfAOcA5wAIAOkA6QAbAPIA8gAVAPcA9wAgAPkA+QAgAPoA+gAVAP8BAAAgAQUBBQAgARMBEwAYARQBFAANARUBFQAZAScBJwAVASgBKAAHASkBKQAIASwBLAAJAS4BLgAJAUUBRQAIAWUBZgAdAWcBZwAeAWgBagAdAWsBawAeAW8BcAAeAewB7QADAe8B7wAGAfgB+AAEAfkB/AAFAf0CAQACAgICBgADAgcCCgAMAgsCCwAPAgwCEgATAhMCEwAUAhQCFwAWAhwCHAAXAh0CIQAYAiYCJwAZAikCKQATAisCKwATAi0CLQATAi4CLgAEAi8CLwAUAjACMAAEAjECMQAUAjICMgAEAjMCMwAU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AAAAGAAAAAAAFQAEABgAAAAAAAUAAAAAAAAAAAARAAAAAAAAAAAAAAAAAAAAAAAAAAUACAANAAIABQAAAAUAFQAFAAAABQAVAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAGAAAAAAABQAVAAoAAAAAAAAAAAAAAAAAAAAAAAAAGAAAAAAAAAAAABgAAAAVABUAAAAAAAAAAAABAAAAAAAAAAUAFQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAXABcAAAAHAAcAEwAHAAcABwATAAAAAAAAABMAEwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFwAAAAAAAAAAAAAAEQARABEAEQARABEAEQAFAAAAAAAAAAAAAAAAAAAAAAAAAAUABQAFAAUABQAGAAYABgAGAA4AGgAaABoAGgAaABoAGgAVABUAFQAVABUAAAAAAAAAAAAYAAgACAAIAAgACAALAAsACwALAAIAAgARABoAEQAaABEAGgAFABUABQAVAAUAFQAFABUAAAAVAAAAFQAAABUAAAAVAAAAFQAAABUABQAVAAUAFQAFABUABQAVAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYAAAAGAAAABgAGAAFAAgABQAIAAUACAAAAAAAAAAAAAAAAAAZABsAGQAbABkAGwAZABsAGQAbAAoAAAAKAAAACgAAAAYACwAGAAsABgALAAYACwAGAAsABgALAAkAAAAOAAIADgAUAAwAFAAMABQADAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA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",
+"sampleImage.jpg":"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AAGyAAAAEAAAAAEAAAAAABJwcmludE91dHB1dE9wdGlvbnMAAAASAAAAAENwdG5ib29sAAAAAABDbGJyYm9vbAAAAAAAUmdzTWJvb2wAAAAAAENybkNib29sAAAAAABDbnRDYm9vbAAAAAAATGJsc2Jvb2wAAAAAAE5ndHZib29sAAAAAABFbWxEYm9vbAAAAAAASW50cmJvb2wAAAAAAEJja2dPYmpjAAAAAQAAAAAAAFJHQkMAAAADAAAAAFJkICBkb3ViQG/gAAAAAAAAAAAAR3JuIGRvdWJAb+AAAAAAAAAAAABCbCAgZG91YkBv4AAAAAAAAAAAAEJyZFRVbnRGI1JsdAAAAAAAAAAAAAAAAEJsZCBVbnRGI1JsdAAAAAAAAAAAAAAAAFJzbHRVbnRGI1B4bEBSAAAAAAAAAAAACnZlY3RvckRhdGFib29sAQAAAABQZ1BzZW51bQAAAABQZ1BzAAAAAFBnUEMAAAAATGVmdFVudEYjUmx0AAAAAAAAAAAAAAAAVG9wIFVudEYjUmx0AAAAAAAAAAAAAAAAU2NsIFVudEYjUHJjQFkAAAAAAAA4QklNA+0AAAAAABAASAAAAAEAAgBIAAAAAQACOEJJTQQmAAAAAAAOAAAAAAAAAAAAAD+AAAA4QklNBA0AAAAAAAQAAAB4OEJJTQQZAAAAAAAEAAAAHjhCSU0D8wAAAAAACQAAAAAAAAAAAQA4QklNJxAAAAAAAAoAAQAAAAAAAAACOEJJTQP1AAAAAABIAC9mZgABAGxmZgAGAAAAAAABAC9mZgABAKGZmgAGAAAAAAABADIAAAABAFoAAAAGAAAAAAABADUAAAABAC0AAAAGAAAAAAABOEJJTQP4AAAAAABwAAD/////////////////////////////A+gAAAAA/////////////////////////////wPoAAAAAP////////////////////////////8D6AAAAAD/////////////////////////////A+gAADhCSU0EAAAAAAAAAgABOEJJTQQCAAAAAAAEAAAAADhCSU0EMAAAAAAAAgEBOEJJTQQtAAAAAAAGAAEAAAACOEJJTQQIAAAAAAAQAAAAAQAAAkAAAAJAAAAAADhCSU0EHgAAAAAABAAAAAA4QklNBBoAAAAAA0sAAAAGAAAA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aHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL3NUeXBlL1Jlc291cmNlRXZlbnQjIiB4bWxuczpkYz0iaHR0cDovL3B1cmwub3JnL2RjL2VsZW1lbnRzLzEuMS8iIHhtbG5zOnBob3Rvc2hvcD0iaHR0cDovL25zLmFkb2JlLmNvbS9waG90b3Nob3AvMS4wLyIgeG1wOkNyZWF0b3JUb29sPSJBZG9iZSBQaG90b3Nob3AgQ1M1LjEgTWFjaW50b3NoIiB4bXA6Q3JlYXRlRGF0ZT0iMjAxNC0wMy0xOVQwMzowMjoyNiswMTowMCIgeG1wOk1ldGFkYXRhRGF0ZT0iMjAxNC0wMy0xOVQwMzowMjoyNiswMTowMCIgeG1wOk1vZGlmeURhdGU9IjIwMTQtMDMtMTlUMDM6MDI6MjYrMDE6MDAiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6MDI4MDExNzQwNzIwNjgxMTg3MUY4MTMxRkI2RTY4OTgiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6MDE4MDExNzQwNzIwNjgxMTg3MUY4MTMxRkI2RTY4OTgiIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDowMTgwMTE3NDA3MjA2ODExODcxRjgxMzFGQjZFNjg5OCIgZGM6Zm9ybWF0PSJpbWFnZS9qcGVnIiBwaG90b3Nob3A6Q29sb3JNb2RlPSIzIiBwaG90b3Nob3A6SUNDUHJvZmlsZT0ic1JHQiBJRUM2MTk2Ni0yLjEiPiA8eG1wTU06SGlzdG9yeT4gPHJkZjpTZXE+IDxyZGY6bGkgc3RFdnQ6YWN0aW9uPSJjcmVhdGVkIiBzdEV2dDppbnN0YW5jZUlEPSJ4bXAuaWlkOjAxODAxMTc0MDcyMDY4MTE4NzFGODEzMUZCNkU2ODk4IiBzdEV2dDp3aGVuPSIyMDE0LTAzLTE5VDAzOjAyOjI2KzAxOjAwIiBzdEV2dDpzb2Z0d2FyZUFnZW50PSJBZG9iZSBQaG90b3Nob3AgQ1M1LjEgTWFjaW50b3NoIi8+IDxyZGY6bGkgc3RFdnQ6YWN0aW9uPSJzYXZlZCIgc3RFdnQ6aW5zdGFuY2VJRD0ieG1wLmlpZDowMjgwMTE3NDA3MjA2ODExODcxRjgxMzFGQjZFNjg5OCIgc3RFdnQ6d2hlbj0iMjAxNC0wMy0xOVQwMzowMjoyNiswMTowMCIgc3RFdnQ6c29mdHdhcmVBZ2VudD0iQWRvYmUgUGhvdG9zaG9wIENTNS4xIE1hY2ludG9zaCIgc3RFdnQ6Y2hhbmdlZD0iLyIvPiA8L3JkZjpTZXE+IDwveG1wTU06SGlzdG9yeT4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPD94cGFja2V0IGVuZD0idyI/Pv/iDFhJQ0NfUFJPRklMRQABAQAADEhMaW5vAhAAAG1udHJSR0IgWFlaIAfOAAIACQAGADEAAGFjc3BNU0ZUAAAAAElFQyBzUkdCAAAAAAAAAAAAAAABAAD21gABAAAAANMtSFAgIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEWNwcnQAAAFQAAAAM2Rlc2MAAAGEAAAAbHd0cHQAAAHwAAAAFGJrcHQAAAIEAAAAFHJYWVoAAAIYAAAAFGdYWVoAAAIsAAAAFGJYWVoAAAJAAAAAFGRtbmQAAAJUAAAAcGRtZGQAAALEAAAAiHZ1ZWQAAANMAAAAhnZpZXcAAAPUAAAAJGx1bWkAAAP4AAAAFG1lYXMAAAQMAAAAJHRlY2gAAAQwAAAADHJUUkMAAAQ8AAAIDGdUUkMAAAQ8AAAIDGJUUkMAAAQ8AAAIDHRleHQAAAAAQ29weXJpZ2h0IChjKSAxOTk4IEhld2xldHQtUGFja2FyZCBDb21wYW55AABkZXNjAAAAAAAAABJzUkdCIElFQzYxOTY2LTIuMQAAAAAAAAAA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"
\ No newline at end of file
diff --git a/public/app/67dd0d05.vendor.css b/public/app/67dd0d05.vendor.css
new file mode 100644
index 0000000..2c49360
--- /dev/null
+++ b/public/app/67dd0d05.vendor.css
@@ -0,0 +1,38 @@
+@charset "UTF-8";.label,sub,sup{vertical-align:baseline}.btn,.btn-group,.btn-group-vertical,.caret,.checkbox-inline,.radio-inline,img{vertical-align:middle}body,figure{margin:0}.navbar-fixed-bottom .navbar-collapse,.navbar-fixed-top .navbar-collapse,.pre-scrollable{max-height:340px}.bootstrap-select.btn-group .dropdown-menu .notify,.form-control-feedback,.steps-indicator li.current,.steps-indicator li.default,.steps-indicator li.editing,.ui-grid-cell.ui-grid-disable-selection.ui-grid-row-header-cell,a.btn.disabled,a.ui-grid-menu .ui-grid-menu-inner .ui-grid-menu-close-button.disabled,fieldset[disabled] a.btn,fieldset[disabled] a.ui-grid-menu .ui-grid-menu-inner .ui-grid-menu-close-button{pointer-events:none}.fa,.glyphicon,.icon-emoticon{-moz-osx-font-smoothing:grayscale}.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}hr,img{border:0}colorpicker-preview{display:block;height:10px;margin:5px 0 3px;clear:both;background-position:0 100%}/*!
+ * Bootstrap v3.3.5 (http://getbootstrap.com)
+ * Copyright 2011-2015 Twitter, Inc.
+ * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
+angular-xeditable - 0.1.9
+Edit-in-place for angular.js
+Build date: 2015-03-26 
+Animate.css - http://daneden.me/animate
+Licensed under the MIT license - http://opensource.org/licenses/MIT
+
+Copyright (c) 2015 Daniel Eden
+ * 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)
+ *  Font Awesome 4.4.0 by @davegandy - http://fontawesome.io - @fontawesome
+ *  License - http://fontawesome.io/license (Font: SIL OFL 1.1, CSS: MIT License)
+ * ui-select
+ * http://github.com/angular-ui/ui-select
+ * Version: 0.13.2 - 2015-10-09T15:34:24.045Z
+ * License: MIT
+ * ui-grid - v3.0.7 - 2015-10-06
+ * Copyright (c) 2015 ; License: MIT 
+ * Stylesheet for the Date Range Picker, for use with Bootstrap 3.x
+ *
+ * Copyright 2013 Dan Grossman ( http://www.dangrossman.info )
+ * Licensed under the Apache License v2.0
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Built for http://www.improvely.com
\ No newline at end of file
diff --git a/public/app/76616549.app.js b/public/app/76616549.app.js
new file mode 100644
index 0000000..772bfea
--- /dev/null
+++ b/public/app/76616549.app.js
@@ -0,0 +1,55 @@
+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/analytic/metric/list/create.modal.html",'<div class="modal-header">\n  <h3 class="modal-title">{{ \'APPLICATION_NEW_METRIC\' | translate }}</h3>\n</div>\n<div class="modal-body">\n  <form name="forms.metric" novalidate>\n\n    <!-- START NAME -->\n    <div class="form-group" data-ng-class="{\'has-error\': (forms.metric.name.$touched || forms.metric.$submitted) && forms.metric.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.metric.name.$touched || forms.metric.$submitted) && forms.metric.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 TABLE -->\n    <div class="form-group" data-ng-class="{\'has-error\': (forms.metric.table.$touched || forms.metric.$submitted) && forms.metric.table.$invalid}">\n      <label class="control-label">{{\'APPLICATION_TABLE\' | translate}}<span class="required" aria-required="true">*</span></label>\n      <ui-select data-ng-model="item.table" name="table" theme="bootstrap" required>\n        <ui-select-match placeholder="{{\'APPLICATION_SEARCH_FILTER\' | translate}}">{{$select.selected.name}}</ui-select-match>\n        <ui-select-choices repeat="table.value as table in tables | filter: $select.search">\n          <div ng-bind-html="table.name | highlight: $select.search"></div>\n        </ui-select-choices>\n      </ui-select>\n      <span data-ng-show="(forms.metric.table.$touched || forms.metric.$submitted) && forms.metric.table.$error.required" class="help-block help-block-error">\n        <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n      </span>\n    </div>\n    <!-- END TABLE-->\n\n    <!-- START METRIC -->\n    <div class="form-group" data-ng-class="{\'has-error\': (forms.metric.metric.$touched || forms.metric.$submitted) && forms.metric.metric.$invalid}">\n      <label class="control-label">{{\'APPLICATION_METRIC\' | translate}}<span class="required" aria-required="true">*</span></label>\n      <textarea type="text" name="metric" placeholder="{{\'APPLICATION_METRIC\' | translate}}" class="form-control" data-ng-model="item.metric" required/></textarea>\n      <span data-ng-show="(forms.metric.metric.$touched || forms.metric.$submitted) && forms.metric.metric.$error.required" class="help-block help-block-error">\n        <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n      </span>\n    </div>\n    <!-- END METRIC -->\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="metric.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.metric.$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/analytic/metric/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-calculator"></i>\n					<a href="/analytics/metrics/list">{{ \'APPLICATION_METRICS\' | 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-calculator font-green-sharp"></i>\n					<span class="caption-subject">{{ \'APPLICATION_METRICS\' | translate }}</a> </span>\n				</div>\n				<div class="actions">\n					<div class="btn-group" data-ng-show="Metrics.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_METRIC\' | translate }}\n						</button>\n					</div>\n					<a class="btn btn-icon-only btn-default" href="#" ng-csv="getMetrics([\'name\', \'description\'])" csv-header="[\'Name\', \'Description\']" field-separator=";" filename="metrics.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="displayedMetrics" 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.metricsByPage" theme="bootstrap" ng-disabled="disabled">\n												<ui-select-match placeholder="{{\'APPLICATION_SEARCH\' | translate}}">{{$select.selected.name}}</ui-select-match>\n												<ui-select-choices repeat="metricByPage in metricsByPage | filter: $select.search">\n													<div ng-bind-html="metricByPage.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(metric, 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="metric in displayedMetrics" class="animate-repeat">\n								<td style="text-align: center; vertical-align: middle"><input data-ng-hide="metric.defaultEntry" type="checkbox" checklist-model="Metrics.checked" checklist-value="metric.id"></td>\n								<td>{{metric.name}}</td>\n					      <td>{{metric.description}}</td>\n					      <td>\n					        <a class="btn default btn-xs blue-stripe" data-ng-href="/analytics/metrics/view/{{metric.id}}/settings" data-ng-class="{\'disabled\': metric.defaultEntry}">\n										{{ \'APPLICATION_SETTINGS\' | translate}}\n					        </a>\n					        <a class="btn default btn-xs red-stripe" data-ng-click="deleteItem(metric.name,metric.id)" data-ng-class="{\'disabled\': metric.defaultEntry}">\n										{{ \'APPLICATION_DELETE\' | translate }}\n					        </a>\n					      </td>\n					    </tr>\n							<tr data-ng-hide="displayedMetrics.length">\n								<td colspan="4" style="text-align:center;">\n									<i>{{ \'MESSAGE_NO_METRICS_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.metricsByPage.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/analytic/metric/view/view.html",'<!-- BEGIN PAGE CONTENT-->\n<div class="row" data-ng-init="getMetric()">\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="/analytics/metrics/list">{{ \'APPLICATION_METRICS\' | translate }}</a>\n					<i data-ng-show="metric" class="fa fa-angle-right"></i>\n				</li>\n				<li data-ng-show="metric">\n					<a href="#">{{metric.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/metric.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						{{metric.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.analytics.metrics.view.settings\')}">\n							<a data-ng-href="/analytics/metrics/view/{{metric.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/analytic/metric/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_METRIC\' | 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 && updateMetric()" 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="metric.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 TABLE -->\n							<div class="form-group" data-ng-class="{\'has-error\': (forms.general.table.$touched || forms.general.$submitted) && forms.general.table.$invalid}">\n								<label class="control-label">{{\'APPLICATION_TABLE\' | translate}}<span class="required" aria-required="true">*</span></label>\n								<ui-select data-ng-model="metric.table" name="table" theme="bootstrap" required>\n									<ui-select-match placeholder="{{\'APPLICATION_SEARCH_FILTER\' | translate}}">{{$select.selected.name}}</ui-select-match>\n									<ui-select-choices repeat="table.value as table in tables | filter: $select.search">\n										<div ng-bind-html="table.name | highlight: $select.search"></div>\n									</ui-select-choices>\n								</ui-select>\n								<span data-ng-show="(forms.general.table.$touched || forms.general.$submitted) && forms.general.table.$error.required" class="help-block help-block-error">\n									<strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n								</span>\n							</div>\n							<!-- END TABLE-->\n\n							<!-- START METRIC -->\n							<div class="form-group" data-ng-class="{\'has-error\': (forms.general.metric.$touched || forms.general.$submitted) && forms.general.metric.$invalid}">\n								<label class="control-label">{{\'APPLICATION_METRIC\' | translate}}<span class="required" aria-required="true">*</span></label>\n								<textarea type="text" name="metric" placeholder="{{\'APPLICATION_METRIC\' | translate}}" class="form-control" data-ng-model="metric.metric" required/></textarea>\n								<span data-ng-show="(forms.general.metric.$touched || forms.general.$submitted) && forms.general.metric.$error.required" class="help-block help-block-error">\n									<strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n								</span>\n							</div>\n							<!-- END METRIC -->\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="metric.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/analytic/report/list/copy.modal.html",'<div class="modal-header">\n  <h3 class="modal-title">{{ \'APPLICATION_COPY_REPORT\' | translate }}</h3>\n</div>\n<div class="modal-body">\n  <div class="portlet light bordered">\n    <div class="portlet-title">\n      <div class="caption font-green-sharp" style="padding-left:10px;">\n        <i class="icon-folder font-green-sharp"></i>\n        <span class="caption-subject">{{ \'APPLICATION_COPY_TO\' | translate }} </span>\n      </div>\n    </div>\n    <div class="portlet-body">\n      <div js-tree="customTreeConfig" ng-model="customTreeData" should-apply="ac()" tree="customTreeInstance" tree-events="ready:initCustomScopeTree;"></div>\n    </div>\n  </div>\n</div>\n<div class="modal-footer">\n  <button class="btn btn-success" type="button" data-ng-disabled="!customTree.get_selected(true).pop().id" ng-click="ok()" ng-disabled="forms.report.$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/analytic/report/list/create.modal.html",'<div class="modal-header">\n  <h3 class="modal-title">{{ \'APPLICATION_NEW_REPORT\' | translate }}</h3>\n</div>\n<div class="modal-body">\n  <form name="forms.report" novalidate>\n\n    <!-- START NAME -->\n    <div class="form-group" data-ng-class="{\'has-error\': (forms.report.name.$touched || forms.report.$submitted) && forms.report.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.report.name.$touched || forms.report.$submitted) && forms.report.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    <div class="form-group" data-ng-class="{\'has-error\': (forms.report.name.$touched || forms.report.$submitted) && forms.report.name.$invalid}">\n      <label class="control-label">{{\'APPLICATION_PATH\' | translate}}<span class="required" aria-required="true"></span></label>\n      <input type="text" name="name" placeholder="{{\'APPLICATION_PATH\' | translate}}" class="form-control" data-ng-model="path" disabled/>\n      <span data-ng-show="(forms.report.name.$touched || forms.report.$submitted) && forms.report.name.$error.required" class="help-block help-block-error">\n        <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n      </span>\n    </div>\n\n  </form>\n</div>\n<div class="modal-footer">\n  <button class="btn btn-success" type="button" ng-click="ok()" ng-disabled="forms.report.$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/analytic/report/list/extract.modal.html",'<div class="modal-header">\n  <h3 class="modal-title">{{ \'APPLICATION_EXTRACT_REPORT\' | translate }}</h3>\n</div>\n<div class="modal-body" style="text-align:center;">\n  <form name="forms.report" class="form-inline mbottom20" novalidate>\n    <div class="form-group">\n      <label class="control-label">{{\'APPLICATION_DATE_RANGE\' | translate}}<span class="required" aria-required="true"></span></label>\n      <input type="daterange" name="dates" ranges="ranges" placeholder="{{\'APPLICATION_DATE_RANGE\' | translate}}" class="form-control" data-ng-model="dates" data-ng-change="getPage()" required/>\n    </div>\n  </form>\n</div>\n<div class="modal-footer">\n  <button class="btn default green-jungle" type="button" data-ng-click="extract(\'csv\')"><i class="fa fa-file-excel-o"></i> {{ \'APPLICATION_SAVE_TO_CSV\' | translate }}</button>\n  <button class="btn default red-intense" type="button" data-ng-click="extract(\'pdf\')"><i class="fa fa-file-pdf-o"></i> {{ \'APPLICATION_SAVE_TO_PDF\' | translate }}</button>\n  <button class="btn default" type="button" ng-click="cancel()">{{ \'APPLICATION_CANCEL\' | translate }}</button>\n</div>\n'),a.put("app/analytic/report/list/list.html",'<!-- BEGIN PAGE CONTENT-->\n<div class="row" data-ng-init="getTrees()">\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-book-open"></i>\n					<a href="/analytics/reports/list">{{ \'APPLICATION_REPORTS\' | translate }}</a>\n				</li>\n			</ul>\n		</div>\n		<div class="col-fixed">\n			<!-- BEGIN Portlet PORTLET-->\n			<div class="portlet light bordered">\n				<div class="portlet-title">\n					<div class="caption font-green-sharp" style="padding-left:10px;">\n						<i class="icon-folder font-green-sharp"></i>\n						<span class="caption-subject">{{ \'APPLICATION_FOLDERS\' | translate }} </span>\n					</div>\n					<div class="inputs">\n						<div class="portlet-input input-inline input-small">\n							<div class="input-icon right">\n								<i class="icon-magnifier"></i>\n								<input type="text" data-ng-model="searchField" data-ng-change="searchTrees()" class="form-control input-circle" placeholder="search...">\n							</div>\n						</div>\n					</div>\n				</div>\n				<div class="portlet-body">\n					<div js-tree="defaultTreeConfig" ng-model="defaultTreeData" should-apply="ac()" tree="defaultTreeInstance" tree-events="ready:initDefaultScopeTree;select_node:selectDefaultNode;"></div>\n					<div js-tree="customTreeConfig" ng-model="customTreeData" should-apply="ac()" tree="customTreeInstance" tree-events="ready:initCustomScopeTree;select_node:selectCustomNode;rename_node:updateCustomTree;delete_node:updateCustomTree;move_node:updateCustomTree;create_node:updateCustomTree;"></div>\n				</div>\n			</div>\n			<!-- END Portlet PORTLET-->\n		</div>\n		<div class="row tree-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-book-open font-green-sharp"></i>\n							<span class="caption-subject">{{ \'APPLICATION_REPORTS\' | translate }}<span data-ng-if="selectedNode"> - {{selectedNode}}</span></span>\n						</div>\n						<div data-ng-if="!defaultTreeActive" class="actions">\n							<div class="btn-group" data-ng-show="Reports.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								<span class="btn default btn-file">\n								<span class="fileinput-new">\n								<i class="icon-cloud-upload"></i> {{\'APPLICATION_IMPORT_FROM_JSON\' | translate}}</span>\n								<input type="file" on-read-file="import($fileContent)"/>\n								</span>\n							</div>\n							<div class="btn-group">\n								<button class="btn green-jungle " ng-click="create()">\n									<i class="icon-plus"></i> {{ \'APPLICATION_NEW_REPORT\' | translate }}\n								</button>\n							</div>\n						</div>\n					</div>\n					<div class="portlet-body">\n						<!-- START TABLE -->\n						<table data-ng-if="defaultTreeReady && customTreeReady" st-table="displayedReports" st-pipe="initList" class="table table-striped table-bordered table-hover">\n							<div class="table-responsive" data-ng-init="firstSelect()">\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.reportsByPage" theme="bootstrap" ng-disabled="disabled">\n														<ui-select-match placeholder="{{\'APPLICATION_SEARCH\' | translate}}">{{$select.selected.name}}</ui-select-match>\n														<ui-select-choices repeat="reportByPage in reportsByPage | filter: $select.search">\n															<div ng-bind-html="reportByPage.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 data-ng-checked="Reports.checked.length" data-ng-hide="defaultTreeActive" type="checkbox" ng-change="check(report, 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_MANAGE\' | translate }}</th>\n										<th>{{ \'APPLICATION_ACTIONS\' | translate }}</th>\n									</tr>\n								</thead>\n								<tbody>\n									<tr data-ng-repeat="report in displayedReports" class="animate-repeat">\n										<td style="text-align: center; vertical-align: middle"><input data-ng-hide="defaultTreeActive" type="checkbox" checklist-model="Reports.checked" checklist-value="report.id"></td>\n										<td>{{report.name}}</td>\n										<td>{{report.description}}</td>\n										<td>\n											<a data-ng-if="!defaultTreeActive" class="btn default btn-xs blue-stripe" data-ng-href="/analytics/reports/view/{{report.id}}/settings">\n												{{ \'APPLICATION_SETTINGS\' | translate}}\n											</a>\n											<a data-ng-if="!defaultTreeActive" class="btn default btn-xs red-stripe" data-ng-click="deleteItem(report.name,report.id)">\n												{{ \'APPLICATION_DELETE\' | translate }}\n											</a>\n											<a class="btn default btn-xs green-stripe" data-ng-click="copy(report.id)">\n												{{ \'APPLICATION_COPY\' | translate }}\n											</a>\n											<a class="btn default btn-xs purple-stripe" data-ng-click="export(report.id)">\n												{{ \'APPLICATION_EXPORT\' | translate }}\n											</a>\n										</td>\n										<td>\n											<a class="btn default btn-xs yellow-stripe" data-ng-click="preview(report.id)">\n												{{ \'APPLICATION_PREVIEW\' | translate }}\n											</a>\n											<button type="button" data-ng-click="extract(report.id)" class="btn default btn-xs green-seagreen-stripe">\n												{{ \'APPLICATION_RUN \' | translate }}\n											</button>\n										</td>\n									</tr>\n									<tr data-ng-hide="displayedReports.length">\n										<td colspan="5" style="text-align:center;">\n											<i>{{ \'MESSAGE_NO_REPORTS_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										<td/>\n									</tr>\n									<tr>\n										<td colspan="5" class="text-center">\n											<div st-pagination class="pagination" st-items-by-page="conf.reportsByPage.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	</div>\n</div>\n<!-- END PAGE CONTENT-->\n'),a.put("app/analytic/report/list/preview.modal.html",'<div class="modal-header">\n  <h3 class="modal-title">{{ \'APPLICATION_REPORT_PREVIEW\' | translate }}</h3>\n</div>\n<div class="modal-body" style="text-align:center;">\n  <form name="forms.report" class="form-inline mbottom20" novalidate>\n    <div class="form-group">\n      <label class="control-label">{{\'APPLICATION_DATE_RANGE\' | translate}}<span class="required" aria-required="true"></span></label>\n      <input type="daterange" name="dates" ranges="ranges" placeholder="{{\'APPLICATION_DATE_RANGE\' | translate}}" class="form-control" data-ng-model="dates" data-ng-change="getPage()" required/>\n    </div>\n  </form>\n  <div ng-slide-down="showResult" lazy-render duration="1">\n    <div ui-grid="gridOptions" ui-grid-pagination ui-grid-exporter class="grid extract-grid"></div>\n  </div>\n</div>\n<div class="modal-footer">\n<button class="btn default" type="button" ng-click="cancel()">{{ \'APPLICATION_CLOSE\' | translate }}</button>\n</div>\n'),a.put("app/analytic/report/view/view.html",'<!-- BEGIN PAGE CONTENT-->\n<div class="row" data-ng-init="getReport()">\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-book-open"></i>\n					<a href="/analytics/reports/list">{{ \'APPLICATION_REPORTS\' | translate }}</a>\n					<i data-ng-show="report" class="fa fa-angle-right"></i>\n				</li>\n				<li data-ng-show="report">\n					<a href="#">{{report.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/report.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						{{report.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.analytics.reports.view.settings\')}">\n							<a data-ng-href="/analytics/reports/view/{{report.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/analytic/report/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_REPORT\' | translate}} {{ \'APPLICATION_SETTINGS\' | translate}} </span>\n				</div>\n				<ul class="nav nav-tabs">\n					<li>\n						<a href="#" data-target="#tab_1_1" data-toggle="tab">{{ \'APPLICATION_GENERAL\' | translate}}</a>\n					</li>\n					<li class="active">\n						<a href="#" data-target="#tab_1_2" data-toggle="tab">{{ \'APPLICATION_BUILD\' | translate}}</a>\n					</li>\n					<li>\n						<a href="#" data-target="#tab_1_3" data-toggle="tab">{{ \'APPLICATION_TEST_PREVIEW\' | translate}}</a>\n					</li>\n				</ul>\n			</div>\n\n			<div class="portlet-body">\n\n				<div class="tab-content">\n					<!-- GENERAL TAB -->\n					<div class="tab-pane" id="tab_1_1">\n						<form name="forms.general" data-ng-submit="forms.report.$valid && forms.general.$valid && updateReport()" novalidate>\n\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="report.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="report.description"></textarea>\n							</div>\n							<!-- END DESCRIPTION -->\n\n							<!-- START TABLE INPUT -->\n\n\n							<input class="btn green-haze" type="submit" value="{{\'APPLICATION_UPDATE\' | translate}}"/>\n						</form>\n\n					</div>\n					<!-- END GENERAL TAB -->\n					<div class="tab-pane active" id="tab_1_2">\n						<form name="forms.report" data-ng-submit="forms.report.$valid && forms.general.$valid && updateReport()" novalidate>\n						<div class="form-group" data-ng-class="{\'has-error\': (forms.report.table.$touched || forms.report.$submitted) && forms.report.table.$invalid}">\n							<label class="control-label">{{\'APPLICATION_TABLE\' | translate}}<span class="required" aria-required="true">*</span></label>\n							<ui-select data-ng-model="report.table" name="table" theme="bootstrap" required>\n								<ui-select-match placeholder="{{\'APPLICATION_SEARCH_FILTER\' | translate}}">{{$select.selected.name}}</ui-select-match>\n								<ui-select-choices repeat="table.table as table in tables | filter: $select.search">\n									<div ng-bind-html="table.name | highlight: $select.search"></div>\n								</ui-select-choices>\n							</ui-select>\n							<span class="help-block">\n							</span>\n							<span data-ng-show="(forms.report.table.$touched || forms.report.$submitted) && forms.report.table.$error.required" class="help-block help-block-error">\n								<strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n							</span>\n						</div>\n						<!-- END TABLE INPUT-->\n						<div data-ng-if="report.table" class="mbottom20 pbottom20">\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_FIELDS\' | translate}} </span>\n							</div>\n						</div>\n								<!-- START TABLE -->\n								<table class="table table-striped table-bordered table-hover">\n									<thead>\n										<tr>\n											<th>{{ \'APPLICATION_FIELD\' | translate }} / {{ \'APPLICATION_METRIC\' | translate }}</th>\n											<th>{{ \'APPLICATION_ALIAS\' | translate }}</th>\n											<th>{{ \'APPLICATION_FUNCTION\' | translate }}</th>\n											<th>{{ \'APPLICATION_GROUP_BY\' | translate }}</th>\n											<th>{{ \'APPLICATION_ORDER_BY\' | translate }}</th>\n											<th></th>\n											<th></th>\n										</tr>\n									</thead>\n										<tbody ui-sortable="sortableOptions" data-ng-model="report.Fields">\n											<tr data-ng-repeat="field in report.Fields">\n												<td>\n													<!-- START FIELD -->\n													<div class="form-group" data-ng-class="{\'has-error\': forms.report.$submitted && !field.field}">\n														<!-- <label class="control-label">{{\'APPLICATION_FIELD\' | translate}}<span class="required" aria-required="true">*</span></label> -->\n														<ui-select data-ng-model="field.field" dynamic-name="randomName()" theme="bootstrap" required>\n															<ui-select-match placeholder="{{\'APPLICATION_SEARCH_FILTER\' | translate}}"><span ng-bind-html="$select.selected.name"></span></ui-select-match>\n															<ui-select-choices repeat="tableField.value as tableField in tableFields | filter: $select.search">\n																<div ng-bind-html="tableField.name | highlight: $select.search"></div>\n															</ui-select-choices>\n														</ui-select>\n														<span data-ng-show="forms.report.$submitted && !field.field" class="help-block help-block-error">\n															<strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n														</span>\n													</div>\n													<!-- END FIELD-->\n												</td>\n												<td>\n													<!-- START ALIAS -->\n													<div class="form-group" data-ng-class="{\'has-error\': forms.report.$submitted && !field.alias}">\n														<!-- <label class="control-label">{{\'APPLICATION_ALIAS\' | translate}}<span class="required" aria-required="true">*</span></label> -->\n														<input type="text" dynamic-name="randomName()" placeholder="{{\'APPLICATION_ALIAS\' | translate}}" class="form-control" data-ng-model="field.alias" required/>\n														<span data-ng-show="forms.report.$submitted && !field.alias" class="help-block help-block-error">\n															<strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n														</span>\n													</div>\n													<!-- END ALIAS -->\n												</td>\n												<td>\n													<!-- START FUNCTION -->\n													<div class="form-group">\n														<!-- <label class="control-label">{{\'APPLICATION_FIELD\' | translate}}<span class="required" aria-required="true">*</span></label> -->\n														<ui-select data-ng-model="field.function" name="function" theme="bootstrap">\n															<ui-select-match placeholder="{{\'APPLICATION_FUNCTION\' | translate}}" allow-clear>{{$select.selected.name}}</ui-select-match>\n															<ui-select-choices repeat="function.value as function in functions | filter: $select.search">\n																<div ng-bind-html="function.name | highlight: $select.search"></div>\n															</ui-select-choices>\n														</ui-select>\n													</div>\n													<!-- END FUNCTION-->\n												</td>\n												<td>\n													<!-- START GROUP_BY -->\n													<div class="form-group">\n														<!-- <label class="control-label">{{\'APPLICATION_FIELD\' | translate}}<span class="required" aria-required="true">*</span></label> -->\n														<ui-select data-ng-model="field.groupBy" name="groupBy" theme="bootstrap" required>\n															<ui-select-match placeholder="{{\'APPLICATION_GROUP_BY\' | translate}}">{{$select.selected.name | translate}}</ui-select-match>\n															<ui-select-choices repeat="groupBy.value as groupBy in groupByField | filter: $select.search">\n																{{$translate.instant(groupBy.name)}}\n															</ui-select-choices>\n														</ui-select>\n													</div>\n													<!-- END GROUP_BY-->\n												</td>\n												<td>\n													<!-- START ORDER_BY -->\n													<div class="form-group">\n														<!-- <label class="control-label">{{\'APPLICATION_FIELD\' | translate}}<span class="required" aria-required="true">*</span></label> -->\n														<ui-select data-ng-model="field.orderBy" name="orderBy" theme="bootstrap">\n															<ui-select-match placeholder="{{\'APPLICATION_ORDER_BY\' | translate}}" allow-clear>{{$select.selected}}</ui-select-match>\n															<ui-select-choices repeat="orderBy in [\'ASC\',\'DESC\'] | filter: $select.search">\n																<div ng-bind-html="orderBy | highlight: $select.search"></div>\n															</ui-select-choices>\n														</ui-select>\n													</div>\n													<!-- END TABLE INPUT-->\n												</td>\n												<td class="report-field-remove">\n													<button class="btn red" type="button" data-ng-click="removeField($index)"><i class="fa fa-times"></i></button>\n												</td>\n												<td class="report-field-handle">\n													<!-- <img data-ng-src="assets/images/move.png" class="img-responsive"> -->\n												</td>\n											</tr>\n											<tr data-ng-hide="report.Fields.length" class="unsortable">\n												<td colspan="7" style="text-align:center;">\n													<i>{{ \'MESSAGE_ADD_A_FIELD\' | translate }}</i>\n												</td>\n											</tr>\n										</tbody>\n								</table>\n								<button type="button" class="btn btn-sm green padding-bottom" ng-click="addField()">\n									<i class="fa fa-plus"></i> {{\'APPLICATION_ADD_FIELD\' | translate}}\n								</button>\n								<!-- END TABLE -->\n							</div>\n								<div data-ng-if="report.Fields.length" class="mbottom20 pbottom20">\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_CONDITIONS\' | translate}} </span>\n										</div>\n									</div>\n									<div class="alert alert-info">\n											<strong>Output</strong><br>\n											<span ng-bind-html="output"></span>\n									</div>\n\n									<report-builder group="report.conditions.group" fields="report.Fields" forms="forms" firstCall=\'true\'></report-builder>\n								</div>\n								<input class="btn green-haze" type="submit" value="{{\'APPLICATION_UPDATE\' | translate}}"/>\n								</form>\n								<!-- <pre>\n									{{report | json}}\n								</pre> -->\n\n					</div>\n					<div class="tab-pane" id="tab_1_3">\n						<div data-ng-if="showPreview" ui-grid="gridOptions" ui-grid-move-columns class="grid"></div>\n					</div>\n				</div>\n			</div>\n		</div>\n	</div>\n</div>\n'),
+a.put("app/analytic/report/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="/analytics/reports/list">{{ \'APPLICATION_REPORTS\' | translate }}</a>\n				<i class="fa fa-angle-right"></i>\n			</li>\n			<li>\n				<i class="icon-options"></i>\n				<a href="#">{{ \'APPLICATION_NEW_REPORT\' | 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_NEW_REPORT\' | translate }}</a> </span>\n  		</div>\n  	</div>\n  	<div class="portlet-body">\n			<form name="forms.general" data-ng-submit="forms.general.$valid && createItem()" novalidate>\n			</form>\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/queue/queue.html",'<!-- BEGIN PAGE CONTENT-->\n<div class="row" data-ng-init="initAgents()">\n	<div class="col-md-12">\n		<!-- START TABLE -->\n		<div id="grid1" ui-grid="gridOptions" ui-grid-tree-view class="grid"></div>\n		<!-- END TABLE -->\n	</div>\n</div>\n<!-- END PAGE CONTENT-->\n'),a.put("app/chat/realtime/view/agent/timeline/timeline.html",'<!-- BEGIN PAGE CONTENT-->\n<div class="row" data-ng-init="initAgents()">\n	<div class="col-md-12">\n		<!-- START TABLE -->\n		<div id="grid1" ui-grid="gridOptions" class="grid"></div>\n		<!-- START 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									{{application.User ? \'agent\' : \'queue\' | uppercase}} [{{application.User ? application.User.fullname : application.ChatQueue.name}}]\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="initView()">\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					<li>\n						<a href="#" data-target="#tab_1_6" data-toggle="tab">{{\'APPLICATION_OFFLINE\' | 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_MOTION_ADDRESS\' | translate}} <span class="required" aria-required="true">*</span></label>\n											<input type="url" name="remote" placeholder="{{\'APPLICATION_MOTION_ADDRESS\' | 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\n								<!-- OFFLINE TAB -->\n								<div class="tab-pane" id="tab_1_6">\n									<form name="forms.formOffline" data-ng-submit="forms.formOffline.$valid && updateItem()" novalidate>\n\n										<!-- START ENQUIRY FORWARDING -->\n										<div class="form-group">\n											<div class="row">\n												<label class="col-md-4">\n													{{\'APPLICATION_ENQUIRY_FORWARDING\' | translate}}\n												</label>\n												<label class="col-md-8">\n													<input type="checkbox" ng-model="chatWebsite.enquiry_forwarding">\n												</label>\n											</div>\n											<div class="row">\n												<span class="help-block col-md-12">\n														{{\'MESSAGE_REMEMBER_SMTP_SERVICE_ACCOUNT\' | translate}}.\n												</span>\n											</div>\n										</div>\n										<!-- END ENQUIRY FORWARDING -->\n\n										<!-- START REMOTE IP -->\n										<div class="form-group" data-ng-if="chatWebsite.enquiry_forwarding" data-ng-class="{\'has-error\': (forms.formOffline.forwardingAddress.$touched || forms.formOffline.$submitted) && forms.formSetting.forwardingAddress.$invalid}">\n											<label class="control-label">{{\'APPLICATION_ENQUIRY_FORWARDING_ADDRESS\' | translate}}<span class="required" aria-required="true">*</span></label>\n											<input type="text" name="forwardingAddress" placeholder="{{\'APPLICATION_ADDRESS\' | translate}}" class="form-control" data-ng-model="chatWebsite.enquiry_forwarding_address" required/>\n											<span data-ng-show="(forms.formOffline.forwardingAddress.$touched || forms.formOffline.$submitted) && forms.formOffline.forwardingAddress.$invalid && forms.formOffline.forwardingAddress.$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 HEADER SHAPE -->\n										<div class="form-group" data-ng-if="chatWebsite.enquiry_forwarding" data-ng-class="{\'has-error\': (forms.formOffline.OfflineTemplateId.$touched || forms.formOffline.$submitted) && forms.formOffline.OfflineTemplateId.$invalid}">\n											<label class="control-label">{{\'APPLICATION_TEMPLATE\' | translate}}<span class="required" aria-required="true">*</span></label>\n											<ui-select data-ng-model="chatWebsite.OfflineTemplateId" name="OfflineTemplateId" theme="bootstrap" required>\n												<ui-select-match placeholder="{{\'APPLICATION_SEARCH_FILTER\' | translate}}">{{$select.selected.name}}</ui-select-match>\n												<ui-select-choices repeat="mailTemplate.id as mailTemplate in mailTemplates | filter: $select.search">\n													<div ng-bind-html="mailTemplate.name | highlight: $select.search"></div>\n												</ui-select-choices>\n											</ui-select>\n											<span data-ng-show="(forms.formOffline.OfflineTemplateId.$touched || forms.formOffline.$submitted) && forms.formOffline.OfflineTemplateId.$invalid && forms.formOffline.OfflineTemplateId.$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\n										<input class="btn green-haze" type="submit" value="{{\'APPLICATION_UPDATE\' | translate}}"/>\n									</form>\n								</div>\n								<!-- END OFFLINE 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_MOTION_ADDRESS\' | translate}} <span class="required" aria-required="true">*</span></label>\n								<input type="url" name="remote" placeholder="{{\'APPLICATION_MOTION_ADDRESS\' | 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/contactmanager/company/list/create.modal.html",'<div class="modal-header">\n  <h3 class="modal-title">{{ \'APPLICATION_NEW_COMPANY\' | translate }}</h3>\n</div>\n<div class="modal-body">\n  <form name="forms.company" novalidate>\n\n    <!-- START NAME -->\n    <div class="form-group" data-ng-class="{\'has-error\': (forms.company.name.$touched || forms.company.$submitted) && forms.company.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.cmopany.name.$touched || forms.company.$submitted) && forms.company.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.company.$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/contactmanager/company/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-briefcase"></i>\n					<a href="/contactmanager/companies/list">{{ \'APPLICATION_COMPANIES\' | 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-briefcase font-green-sharp"></i>\n					<span class="caption-subject">{{ \'APPLICATION_COMPANIES\' | translate }}</a> </span>\n				</div>\n				<div class="actions">\n					<div class="btn-group" data-ng-show="Companies.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_COMPANY\' | translate }}\n						</button>\n					</div>\n					<a class="btn btn-icon-only btn-default" href="#" ng-csv="getCompanies([\'name\', \'description\'])" csv-header="[\'Name\', \'Description\']" field-separator=";" filename="companies.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="displayedCompanies" 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.companiesByPage" theme="bootstrap" ng-disabled="disabled">\n												<ui-select-match placeholder="{{\'APPLICATION_SEARCH\' | translate}}">{{$select.selected.name}}</ui-select-match>\n												<ui-select-choices repeat="companyByPage in companiesByPage | filter: $select.search">\n													<div ng-bind-html="companyByPage.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(company, 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="company in displayedCompanies" class="animate-repeat">\n								<td style="text-align: center; vertical-align: middle"><input type="checkbox" checklist-model="Companies.checked" checklist-value="company.id"></td>\n								<td>{{company.name}}</td>\n					      <td>{{company.description}}</td>\n					      <td>\n					        <a class="btn default btn-xs blue-stripe" data-ng-href="/contactmanager/companies/view/{{company.id}}/settings">\n										{{ \'APPLICATION_SETTINGS\' | translate}}\n					        </a>\n					        <a class="btn default btn-xs red-stripe" data-ng-click="deleteItem(company.name,company.id)">\n										{{ \'APPLICATION_DELETE\' | translate }}\n					        </a>\n					      </td>\n					    </tr>\n							<tr data-ng-hide="displayedCompanies.length">\n								<td colspan="4" style="text-align:center;">\n									<i>{{ \'MESSAGE_NO_COMPANIES_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.companiesByPage.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/contactmanager/company/view/view.html",'<!-- BEGIN PAGE CONTENT-->\n<div class="row" data-ng-init="getCompany()">\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-briefcase"></i>\n					<a href="/contactmanager/companies/list">{{ \'APPLICATION_COMPANIES\' | translate }}</a>\n					<i data-ng-show="company" class="fa fa-angle-right"></i>\n				</li>\n				<li data-ng-show="company">\n					<a href="#">{{company.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/company.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						{{company.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.contactmanager.companies.view.settings\')}">\n							<a data-ng-href="/contactmanager/companies/view/{{company.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/contactmanager/company/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_COMPANY\' | 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_ADDRESS\' | translate}}</a>\n					</li>\n					<li>\n						<a href="#" data-target="#tab_1_3" data-toggle="tab">{{ \'APPLICATION_SHIPMENT_ADDRESS\' | 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 && updateCompany()" 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="company.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="company.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					<div class="tab-pane" id="tab_1_2">\n						<!-- START STREET -->\n						<div class="form-group" data-ng-class="{\'has-error\': (forms.general.street.$touched || forms.general.$submitted) && forms.general.street.$invalid}">\n							<label class="control-label">{{\'APPLICATION_STREET\' | translate}}</label>\n							<input type="text" name="street" placeholder="{{\'APPLICATION_STREET\' | translate}}" class="form-control" data-ng-model="company.street"/>\n							<span data-ng-show="(forms.general.street.$touched || forms.general.$submitted) && forms.general.street.$error.required" class="help-block help-block-error">\n								<strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n							</span>\n						</div>\n						<!-- END STREET -->\n\n						<!-- START POSTALCODE -->\n						<div class="form-group" data-ng-class="{\'has-error\': (forms.general.postalCode.$touched || forms.general.$submitted) && forms.general.postalCode.$invalid}">\n							<label class="control-label">{{\'APPLICATION_POSTALCODE\' | translate}}</label>\n							<input type="text" name="postalCode" placeholder="{{\'APPLICATION_POSTALCODE\' | translate}}" class="form-control" data-ng-model="company.postalCode"/>\n							<span data-ng-show="(forms.general.postalCode.$touched || forms.general.$submitted) && forms.general.postalCode.$error.required" class="help-block help-block-error">\n								<strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n							</span>\n						</div>\n						<!-- END POSTALCODE -->\n\n						<!-- START CITY -->\n						<div class="form-group" data-ng-class="{\'has-error\': (forms.general.city.$touched || forms.general.$submitted) && forms.general.city.$invalid}">\n							<label class="control-label">{{\'APPLICATION_CITY\' | translate}}</label>\n							<input type="text" name="city" placeholder="{{\'APPLICATION_CITY\' | translate}}" class="form-control" data-ng-model="company.city"/>\n							<span data-ng-show="(forms.general.city.$touched || forms.general.$submitted) && forms.general.city.$error.required" class="help-block help-block-error">\n								<strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n							</span>\n						</div>\n						<!-- END CITY -->\n						<!-- START COUNTRY -->\n						<div class="form-group" data-ng-class="{\'has-error\': (forms.general.country.$touched || forms.general.$submitted) && forms.general.country.$invalid}">\n							<label class="control-label">{{\'APPLICATION_COUNTRY\' | translate}}</label>\n							<input type="text" name="country" placeholder="{{\'APPLICATION_COUNTRY\' | translate}}" class="form-control" data-ng-model="company.country"/>\n							<span data-ng-show="(forms.general.country.$touched || forms.general.$submitted) && forms.general.country.$error.required" class="help-block help-block-error">\n								<strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n							</span>\n						</div>\n						<!-- END COUNTRY -->\n						<input class="btn green-haze" type="submit" value="{{\'APPLICATION_UPDATE\' | translate}}"/>\n					</div>\n					<div class="tab-pane" id="tab_1_3">\n						<!-- START STREET -->\n						<div class="form-group" data-ng-class="{\'has-error\': (forms.general.sStreet.$touched || forms.general.$submitted) && forms.general.sStreet.$invalid}">\n							<label class="control-label">{{\'APPLICATION_STREET\' | translate}}</label>\n							<input type="text" name="sStreet" placeholder="{{\'APPLICATION_STREET\' | translate}}" class="form-control" data-ng-model="company.sStreet"/>\n							<span data-ng-show="(forms.general.sStreet.$touched || forms.general.$submitted) && forms.general.sStreet.$error.required" class="help-block help-block-error">\n								<strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n							</span>\n						</div>\n						<!-- END STREET -->\n\n						<!-- START POSTALCODE -->\n						<div class="form-group" data-ng-class="{\'has-error\': (forms.general.sPostalCode.$touched || forms.general.$submitted) && forms.general.sPostalCode.$invalid}">\n							<label class="control-label">{{\'APPLICATION_POSTALCODE\' | translate}}</label>\n							<input type="text" name="sPostalCode" placeholder="{{\'APPLICATION_POSTALCODE\' | translate}}" class="form-control" data-ng-model="company.sPostalCode"/>\n							<span data-ng-show="(forms.general.sPostalCode.$touched || forms.general.$submitted) && forms.general.sPostalCode.$error.required" class="help-block help-block-error">\n								<strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n							</span>\n						</div>\n						<!-- END POSTALCODE -->\n\n						<!-- START CITY -->\n						<div class="form-group" data-ng-class="{\'has-error\': (forms.general.sCity.$touched || forms.general.$submitted) && forms.general.sCity.$invalid}">\n							<label class="control-label">{{\'APPLICATION_CITY\' | translate}}</label>\n							<input type="text" name="sCity" placeholder="{{\'APPLICATION_CITY\' | translate}}" class="form-control" data-ng-model="company.sCity"/>\n							<span data-ng-show="(forms.general.sCity.$touched || forms.general.$submitted) && forms.general.sCity.$error.required" class="help-block help-block-error">\n								<strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n							</span>\n						</div>\n						<!-- END CITY -->\n						<!-- START COUNTRY -->\n						<div class="form-group" data-ng-class="{\'has-error\': (forms.general.sCountry.$touched || forms.general.$submitted) && forms.general.sCountry.$invalid}">\n							<label class="control-label">{{\'APPLICATION_COUNTRY\' | translate}}</label>\n							<input type="text" name="sCountry" placeholder="{{\'APPLICATION_COUNTRY\' | translate}}" class="form-control" data-ng-model="company.sCountry"/>\n							<span data-ng-show="(forms.general.sCountry.$touched || forms.general.$submitted) && forms.general.sCountry.$error.required" class="help-block help-block-error">\n								<strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n							</span>\n						</div>\n						<!-- END COUNTRY -->\n						<input class="btn green-haze" type="submit" value="{{\'APPLICATION_UPDATE\' | translate}}"/>\n					</div>\n				</div>\n			</div>\n		</div>\n	</div>\n</div>\n'),
+a.put("app/contactmanager/contact/list/import.modal.html",'<div class="modal-header" data-ng-init="getCustomFields();">\n  <h3 class="modal-title">{{ \'APPLICATION_IMPORT_FROM_CSV\' | translate }}</h3>\n</div>\n<div class="modal-body">\n  <form name="forms.csv" novalidate>\n    <div class="row">\n      <div class="col-md-6">\n    <!-- START FULLNAME -->\n    <div class="form-group" data-ng-class="{\'has-error\': forms.csv.fullname.$invalid && forms.csv.$submitted}">\n      <label class="control-label">{{\'APPLICATION_FULLNAME\' | translate}}</label>\n      <ui-select data-ng-model="item.fullname" theme="bootstrap" name="fullname" data-ng-disabled="disabled" required>\n        <ui-select-match allow-clear placeholder="{{ \'APPLICATION_FULLNAME\' | translate }}">{{$select.selected}}</ui-select-match>\n        <ui-select-choices repeat="index in indexes | filter: $select.search">\n          <div ng-bind-html="index | highlight: $select.search"></div>\n        </ui-select-choices>\n      </ui-select>\n      <span data-ng-show="forms.csv.fullname.$invalid && forms.csv.$touched" 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 STREET -->\n    <div class="form-group" data-ng-class="{\'has-error\': forms.csv.street.$invalid && forms.csv.$submitted}">\n      <label class="control-label">{{\'APPLICATION_STREET\' | translate}}</label>\n      <ui-select data-ng-model="item.street" theme="bootstrap" name="street" data-ng-disabled="disabled">\n        <ui-select-match allow-clear placeholder="{{ \'APPLICATION_STREET\' | translate }}">{{$select.selected}}</ui-select-match>\n        <ui-select-choices repeat="index in indexes | filter: $select.search">\n          <div ng-bind-html="index | highlight: $select.search"></div>\n        </ui-select-choices>\n      </ui-select>\n      <span data-ng-show="forms.csv.street.$invalid && forms.csv.$touched" class="help-block help-block-error">\n        <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n      </span>\n    </div>\n    <!-- END STREET -->\n\n    <!-- START POSTALCODE -->\n    <div class="form-group" data-ng-class="{\'has-error\': forms.csv.postalCode.$invalid && forms.csv.$submitted}">\n      <label class="control-label">{{\'APPLICATION_POSTALCODE\' | translate}}</label>\n      <ui-select data-ng-model="item.postalCode" theme="bootstrap" name="postalCode" data-ng-disabled="disabled">\n        <ui-select-match allow-clear placeholder="{{ \'APPLICATION_POSTALCODE\' | translate }}">{{$select.selected}}</ui-select-match>\n        <ui-select-choices repeat="index in indexes | filter: $select.search">\n          <div ng-bind-html="index | highlight: $select.search"></div>\n        </ui-select-choices>\n      </ui-select>\n      <span data-ng-show="forms.csv.postalCode.$invalid && forms.csv.$touched" class="help-block help-block-error">\n        <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n      </span>\n    </div>\n    <!-- END POSTALCODE -->\n\n    <!-- START CITY -->\n    <div class="form-group" data-ng-class="{\'has-error\': forms.csv.city.$invalid && forms.csv.$submitted}">\n      <label class="control-label">{{\'APPLICATION_CITY\' | translate}}</label>\n      <ui-select data-ng-model="item.city" theme="bootstrap" name="city" data-ng-disabled="disabled">\n        <ui-select-match allow-clear placeholder="{{ \'APPLICATION_CITY\' | translate }}">{{$select.selected}}</ui-select-match>\n        <ui-select-choices repeat="index in indexes | filter: $select.search">\n          <div ng-bind-html="index | highlight: $select.search"></div>\n        </ui-select-choices>\n      </ui-select>\n      <span data-ng-show="forms.csv.city.$invalid && forms.csv.$touched" class="help-block help-block-error">\n        <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n      </span>\n    </div>\n    <!-- END CITY -->\n\n    <!-- START PHONES -->\n    <div class="form-group" data-ng-class="{\'has-error\': forms.csv.Phones.$invalid && forms.csv.$submitted}">\n      <label class="control-label">{{\'APPLICATION_PHONES\' | translate}}</label>\n      <ui-select multiple data-ng-model="item.Phones" theme="bootstrap" name="Phones" data-ng-disabled="disabled">\n        <ui-select-match allow-clear placeholder="{{ \'APPLICATION_PHONES\' | translate }}">{{$item}}</ui-select-match>\n        <ui-select-choices repeat="index in indexes | filter: $select.search">\n          <div ng-bind-html="index | highlight: $select.search"></div>\n        </ui-select-choices>\n      </ui-select>\n      <span data-ng-show="forms.csv.Phones.$invalid && forms.csv.$touched" class="help-block help-block-error">\n        <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n      </span>\n    </div>\n    <!-- END PHONES -->\n\n  </div>\n  <div class="col-md-6">\n\n    <!-- START COUNTRY -->\n    <div class="form-group" data-ng-class="{\'has-error\': forms.csv.country.$invalid && forms.csv.$submitted}">\n      <label class="control-label">{{\'APPLICATION_COUNTRY\' | translate}}</label>\n      <ui-select data-ng-model="item.country" theme="bootstrap" name="country" data-ng-disabled="disabled">\n        <ui-select-match allow-clear placeholder="{{ \'APPLICATION_COUNTRY\' | translate }}">{{$select.selected}}</ui-select-match>\n        <ui-select-choices repeat="index in indexes | filter: $select.search">\n          <div ng-bind-html="index | highlight: $select.search"></div>\n        </ui-select-choices>\n      </ui-select>\n      <span data-ng-show="forms.csv.country.$invalid && forms.csv.$touched" class="help-block help-block-error">\n        <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n      </span>\n    </div>\n    <!-- END COUNTRY -->\n\n    <!-- START DATEOFBIRTH -->\n    <div class="form-group" data-ng-class="{\'has-error\': forms.csv.dateOfBirth.$invalid && forms.csv.$submitted}">\n      <label class="control-label">{{\'APPLICATION_DATEOFBIRTH\' | translate}}</label>\n      <ui-select data-ng-model="item.dateOfBirth" theme="bootstrap" name="dateOfBirth" data-ng-disabled="disabled">\n        <ui-select-match allow-clear placeholder="{{ \'APPLICATION_DATEOFBIRTH\' | translate }}">{{$select.selected}}</ui-select-match>\n        <ui-select-choices repeat="index in indexes | filter: $select.search">\n          <div ng-bind-html="index | highlight: $select.search"></div>\n        </ui-select-choices>\n      </ui-select>\n      <span data-ng-show="forms.csv.dateOfBirth.$invalid && forms.csv.$touched" class="help-block help-block-error">\n        <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n      </span>\n    </div>\n    <!-- END DATEOFBIRTH -->\n\n    <!-- START TAGS -->\n    <div class="form-group" data-ng-class="{\'has-error\': forms.csv.tags.$invalid && forms.csv.$submitted}">\n      <label class="control-label">{{\'APPLICATION_TAGS\' | translate}}</label>\n      <ui-select multiple data-ng-model="item.tags" theme="bootstrap" name="tags" data-ng-disabled="disabled">\n        <ui-select-match allow-clear placeholder="{{ \'APPLICATION_TAGS\' | translate }}">{{$item}}</ui-select-match>\n        <ui-select-choices repeat="index in indexes | filter: $select.search">\n          <div ng-bind-html="index | highlight: $select.search"></div>\n        </ui-select-choices>\n      </ui-select>\n      <span data-ng-show="forms.csv.tags.$invalid && forms.csv.$touched" class="help-block help-block-error">\n        <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n      </span>\n    </div>\n    <!-- END TAGS -->\n\n    <!-- START DESCRIPTION -->\n    <div class="form-group" data-ng-class="{\'has-error\': forms.csv.description.$invalid && forms.csv.$submitted}">\n      <label class="control-label">{{\'APPLICATION_DESCRIPTION\' | translate}}</label>\n      <ui-select data-ng-model="item.description" theme="bootstrap" name="description" data-ng-disabled="disabled">\n        <ui-select-match allow-clear placeholder="{{ \'APPLICATION_DESCRIPTION\' | translate }}">{{$select.selected}}</ui-select-match>\n        <ui-select-choices repeat="index in indexes | filter: $select.search">\n          <div ng-bind-html="index | highlight: $select.search"></div>\n        </ui-select-choices>\n      </ui-select>\n      <span data-ng-show="forms.csv.description.$invalid && forms.csv.$touched" 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    <!-- START EMAILS -->\n    <div class="form-group" data-ng-class="{\'has-error\': forms.csv.Emails.$invalid && forms.csv.$submitted}">\n      <label class="control-label">{{\'APPLICATION_EMAILS\' | translate}}</label>\n      <ui-select multiple data-ng-model="item.Emails" theme="bootstrap" name="Emails" data-ng-disabled="disabled">\n        <ui-select-match allow-clear placeholder="{{ \'APPLICATION_EMAILS\' | translate }}">{{$item}}</ui-select-match>\n        <ui-select-choices repeat="index in indexes | filter: $select.search">\n          <div ng-bind-html="index | highlight: $select.search"></div>\n        </ui-select-choices>\n      </ui-select>\n      <span data-ng-show="forms.csv.Emails.$invalid && forms.csv.$touched" class="help-block help-block-error">\n        <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n      </span>\n    </div>\n    <!-- END EMAILS -->\n\n  </div>\n  </div>\n\n  <!-- START CUSTOMFIELDS -->\n  <div data-ng-repeat="customField in customFields">\n    <div class="form-group" data-ng-class="{\'has-error\': forms.csv[customField.name].$invalid && forms.csv.$submitted}">\n      <label class="control-label">{{customField.name}}</label>\n      <ui-select data-ng-if="!joinPrompt" data-ng-model="item.customFields[customField.id]" theme="bootstrap" name="{{customField.name}}" data-ng-disabled="disabled">\n        <ui-select-match allow-clear placeholder="{{customField.name}}">{{$select.selected}}</ui-select-match>\n        <ui-select-choices repeat="index in indexes | filter: $select.search">\n          <div ng-bind-html="index | highlight: $select.search"></div>\n        </ui-select-choices>\n      </ui-select>\n      <span data-ng-show="forms.csv[customField.name].$invalid && forms.csv.$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 CUSTOMFIELDS -->\n\n  <div>\n    <p>{{\'APPLICATION_IMPORT_SUCCEEDED\' | translate}}: {{import.succeeded}}/{{csvLength}}</p>\n    <div class="progress progress-sm" style="">\n      <div class="progress-bar progress-bar-info" role="progressbar" ng-style="{ \'width\': import.success + \'%\' }"></div>\n    </div>\n  </div>\n  <div>\n    <p>{{\'APPLICATION_IMPORT_FAILED\' | translate}}: {{import.failed}}/{{csvLength}}</p>\n    <div class="progress progress-sm" style="">\n      <div class="progress-bar progress-bar-info" role="progressbar" ng-style="{ \'width\': import.fail + \'%\' }"></div>\n    </div>\n  </div>\n\n  </form>\n</div>\n<div class="modal-footer">\n  <button class="btn btn-success" type="button" ng-click="start()" ng-disabled="forms.csv.$invalid || !forms.csv.fullname || submitted">{{ \'APPLICATION_SUBMIT\' | translate }}</button>\n  <button class="btn default" type="button" ng-click="close()" data-ng-if="!importing">{{ \'APPLICATION_CLOSE\' | translate }}</button>\n  <button class="btn default" type="button" ng-click="stop()" data-ng-if="importing">{{ \'APPLICATION_STOP\' | translate }}</button>\n</div>\n'),a.put("app/contactmanager/contact/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-users"></i>\n					<a href="/contactmanager/contacts/list">{{ \'APPLICATION_CONTACT_MANAGER\' | translate }}</a>\n				</li>\n			</ul>\n		</div>\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="fa fa-users font-green-sharp"></i>\n					<span class="caption-subject">{{ \'APPLICATION_CONTACTS\' | translate }}</a> </span>\n				</div>\n				<div class="actions">\n					<div class="btn-group" data-ng-show="contacts.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" data-ng-click="newContact();">\n							<i class="icon-plus"></i> {{ \'APPLICATION_NEW_CONTACT\' | translate }}\n						</button>\n						<span class="btn default btn-file">\n						<span class="fileinput-new">\n						<i class="icon-cloud-upload"></i> {{\'APPLICATION_IMPORT_FROM_CSV\' | translate}}</span>\n						<input type="file" nv-file-select="" uploader="uploader"/>\n						</span>\n					</div>\n					<a class="btn btn-icon-only btn-default" href="#" ng-csv="getContacts([\'mailbox\', \'fullname\', \'email\'])" csv-header="[\'name\', \'surname\', \'description\']" field-separator=";" filename="contacts.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="displayedContacts" 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.contactsByPage" theme="bootstrap" ng-disabled="disabled">\n												<ui-select-match placeholder="{{\'APPLICATION_SEARCH\' | translate}}">{{$select.selected.name}}</ui-select-match>\n												<ui-select-choices repeat="contactByPage in contactsByPage | filter: $select.search">\n													<div ng-bind-html="contactByPage.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(contact, checked)" checklist-model checklist-value="id"></th>\n						    <th st-sort="fullname">{{ \'APPLICATION_FULLNAME\' | 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="contact in displayedContacts" class="animate-repeat">\n								<td style="text-align: center; vertical-align: middle"><input type="checkbox" checklist-model="contacts.checked" checklist-value="contact.id"></td>\n								<td>{{contact.fullname}} {{}}</td>\n					      <td>{{contact.description}}</td>\n					      <td>\n					        <button class="btn default btn-xs blue-stripe" data-ng-click="openContactTab(contact)">\n										{{ \'APPLICATION_SETTINGS\' | translate}}\n					        </button>\n					        <a class="btn default btn-xs red-stripe" data-ng-click="deleteItem(contact.fullname,contact.id)">\n										{{ \'APPLICATION_DELETE\' | translate }}\n					        </a>\n					      </td>\n					    </tr>\n							<tr data-ng-hide="displayedContacts.length">\n								<td colspan="4" style="text-align:center;">\n									<i>{{ \'MESSAGE_NO_CONTACTS_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="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="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="4" class="text-center">\n					        <div st-pagination class="pagination" st-items-by-page="conf.contactsByPage.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-->\n	</div>\n</div>\n<!-- END PAGE CONTENT-->\n'),a.put("app/contactmanager/customfield/list/create.modal.html",'<div class="modal-header">\n  <h3 class="modal-title">{{ \'APPLICATION_NEW_CUSTOM_FIELD\' | translate }}</h3>\n</div>\n<div class="modal-body">\n  <form name="forms.customField" novalidate>\n\n    <!-- START NAME -->\n    <div class="form-group" data-ng-class="{\'has-error\': (forms.customField.name.$touched || forms.customField.$submitted) && forms.customField.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.customField.name.$touched || forms.customField.$submitted) && forms.customField.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 TYPE -->\n    <div class="form-group"  data-ng-class="{\'has-error\': (forms.customField.type.$touched || forms.customField.$submitted) && forms.customField.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_TYPE\' | translate }}">{{$translate.instant($select.selected.name)}}</ui-select-match>\n        <ui-select-choices repeat="type.value as type in types| filter: $select.search">\n          {{$translate.instant(type.name)}}\n        </ui-select-choices>\n      </ui-select>\n      <span data-ng-show="(forms.customField.type.$touched || forms.customField.$submitted) && forms.customField.type.$invalid && forms.customField.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    <div ng-slide-down="item.type == \'select\'" lazy-render duration="1">\n      <div>\n        <label class="control-label">{{\'APPLICATION_CHOICES\' | translate}}</label>\n      </div>\n      <div class="padding-bottom" ng-repeat="choice in choices">\n        <div class="form-group">\n          <div class="input-group">\n            <input type="text" class="form-control" ng-model="choice.value" required>\n            <span class="input-group-btn">\n            <button class="btn red" type="button"data-ng-click="removeField($index)" data-ng-disabled="choices.length<=1"><i class="fa fa-times"></i></button>\n            </span>\n          </div>\n        </div>\n      </div>\n      <button type="button" class="btn btn-sm green padding-bottom" ng-click="addField()">\n        <i class="fa fa-plus"></i> {{\'APPLICATION_ADD_CHOICE\' | translate}}\n      </button>\n\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="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.customField.$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/contactmanager/customfield/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-pencil"></i>\n					<a href="/contactmanager/customfields/list">{{ \'APPLICATION_CUSTOM_FIELDS\' | 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-pencil font-green-sharp"></i>\n					<span class="caption-subject">{{ \'APPLICATION_CUSTOM_FIELDS\' | translate }}</a> </span>\n				</div>\n				<div class="actions">\n					<div class="btn-group" data-ng-show="CustomFields.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_CUSTOM_FIELD\' | translate }}\n						</button>\n					</div>\n					<a class="btn btn-icon-only btn-default" href="#" ng-csv="getCs([\'name\', \'description\'])" csv-header="[\'Name\', \'Description\']" field-separator=";" filename="customFields.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="displayedCustomFields" 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.customFieldsByPage" theme="bootstrap" ng-disabled="disabled">\n												<ui-select-match placeholder="{{\'APPLICATION_SEARCH\' | translate}}">{{$select.selected.name}}</ui-select-match>\n												<ui-select-choices repeat="customFieldByPage in customFieldsByPage | filter: $select.search">\n													<div ng-bind-html="customFieldByPage.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(customField, checked)" checklist-model checklist-value="id"></th>\n						    <th st-sort="name">{{ \'APPLICATION_NAME\' | translate }}</th>\n								<th st-sort="type">{{ \'APPLICATION_TYPE\' | 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="customField in displayedCustomFields" class="animate-repeat">\n								<td style="text-align: center; vertical-align: middle"><input type="checkbox" checklist-model="customFields.checked" checklist-value="customField.id"></td>\n								<td>{{customField.name}}</td>\n								<td>{{customField.type}}</td>\n					      <td>{{customField.description}}</td>\n					      <td>\n					        <a class="btn default btn-xs blue-stripe" data-ng-href="/contactmanager/customfields/view/{{customField.id}}/settings">\n										{{ \'APPLICATION_SETTINGS\' | translate}}\n					        </a>\n					        <a class="btn default btn-xs red-stripe" data-ng-click="deleteItem(customField.name,customField.id)">\n										{{ \'APPLICATION_DELETE\' | translate }}\n					        </a>\n					      </td>\n					    </tr>\n							<tr data-ng-hide="displayedCustomFields.length">\n								<td colspan="5" style="text-align:center;">\n									<i>{{ \'MESSAGE_NO_CUSTOM_FIELDS_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="name" placeholder="{{ \'APPLICATION_SEARCH\' | translate }} {{ \'APPLICATION_BY\' | translate | lowercase }} {{ \'APPLICATION_TYPE\' | 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.customFieldsByPage.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/contactmanager/customfield/view/view.html",'<!-- BEGIN PAGE CONTENT-->\n<div class="row" data-ng-init="getCustomField()">\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-pencil"></i>\n					<a href="/contactmanager/customfields/list">{{ \'APPLICATION_CUSTOM_FIELDS\' | translate }}</a>\n					<i data-ng-show="customField" class="fa fa-angle-right"></i>\n				</li>\n				<li data-ng-show="customField">\n					<a href="#">{{customField.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/customfield.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						{{customField.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.contactmanager.customfields.view.settings\')}">\n							<a data-ng-href="/contactmanager/customfields/view/{{customField.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/contactmanager/customfield/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_CUSTOM_FIELD\' | 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 && updateCustomField()" 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="customField.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							<div ng-slide-down="customField.type == \'select\'" lazy-render duration="1" class="mbottom20">\n								<div>\n									<label class="control-label">{{\'APPLICATION_CHOICES\' | translate}}</label>\n								</div>\n								<div class="padding-bottom" ng-repeat="choice in choices">\n									<div class="form-group">\n										<div class="input-group">\n											<input type="text" class="form-control" ng-model="choice.value" required>\n											<span class="input-group-btn">\n											<button class="btn red" type="button"data-ng-click="removeField($index)" data-ng-disabled="choices.length<=1"><i class="fa fa-times"></i></button>\n											</span>\n										</div>\n									</div>\n								</div>\n								<button type="button" class="btn btn-sm green padding-bottom" ng-click="addField()">\n									<i class="fa fa-plus"></i> {{\'APPLICATION_ADD_CHOICE\' | translate}}\n								</button>\n\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="customField.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/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/desk/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="/desk/list">{{ \'APPLICATION_DESK_COM\' | 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_DESK_COM\' | 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="/desk/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\',\'consumerKey\',\'consumerSecret\',\'token\',\'tokenSecret\',\'password\'])" csv-header="[\'Name\', \'Username\', \'Remote Address\', \'Authentication Type\', \'Consumer Key\', \'Consumer Secret\', \'Token\', \'Token Secret\', \'Password\']" field-separator=";" filename="desk_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="displayedDeskAccounts" 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 displayedDeskAccounts" 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="/desk/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="displayedDeskAccounts.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/desk/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              <!-- 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							<!-- 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_USERNAME\' | 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 [\'basic\', \'oauth\'] | 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 == \'basic\'" 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_PASSWORD\' | 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 CONSUMER KEY -->\n							<div class="form-group" data-ng-class="{\'has-error\': forms.formSetting.$submitted && forms.formSetting.consumerKey.$invalid}" ng-slide-down="account.authType == \'oauth\'" lazy-render duration="1">\n								<label class="control-label">{{\'APPLICATION_CONSUMER_KEY\' | translate}} <span class="required" aria-required="true">*</span></label>\n								<input type="text" name="consumerKey" placeholder="{{\'APPLICATION_CONSUMER_KEY\' | translate}}" class="form-control" data-ng-model="account.consumerKey" required/>\n								<span data-ng-show="forms.formSetting.consumerKey.$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 CONSUMER KEY -->\n\n              <!-- START CONSUMER SECRET -->\n							<div class="form-group" data-ng-class="{\'has-error\': forms.formSetting.$submitted && forms.formSetting.consumerSecret.$invalid}" ng-slide-down="account.authType == \'oauth\'" lazy-render duration="1">\n								<label class="control-label">{{\'APPLICATION_CONSUMER_SECRET\' | translate}} <span class="required" aria-required="true">*</span></label>\n								<input type="text" name="consumerSecret" placeholder="{{\'APPLICATION_CONSUMER_SECRET\' | translate}}" class="form-control" data-ng-model="account.consumerSecret" required/>\n								<span data-ng-show="forms.formSetting.consumerSecret.$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 CONSUMER SECRET -->\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 == \'oauth\'" 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_TOKEN\' | 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              <!-- START TOKEN SECRET-->\n							<div class="form-group" data-ng-class="{\'has-error\': forms.formSetting.$submitted && forms.formSetting.tokenSecret.$invalid}" ng-slide-down="account.authType == \'oauth\'" lazy-render duration="1">\n								<label class="control-label">{{\'APPLICATION_TOKEN_SECRET\' | translate}} <span class="required" aria-required="true">*</span></label>\n								<input type="text" name="tokenSecret" placeholder="{{\'APPLICATION_TOKEN_SECRET\' | translate}}" class="form-control" data-ng-model="account.tokenSecret" required/>\n								<span data-ng-show="forms.formSetting.tokenSecret.$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 SECRET-->\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/desk/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								<!-- 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/desk/view/view.configurationSettings.html",'<div class="row" data-ng-init="getConfiguration();getVariables();getFields();">\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}}: {{configurationName}}</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 ui-padding active" id="tab_1_1">\n            <div class="row">\n              <div class="col-md-11">\n                <span class="caption-subject">All following fields will be join by blank space:</span>\n              </div>\n              <div class="col-md-1 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 ng-scrollbars ng-scrollbars-config="config"> -->\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-8" 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="updateField(subjectItem)">\n	                </div>\n	              </div>\n	              <div class="col-md-8" 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="updateField(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-1">\n	                <div class="form-group">\n	                  <button class="btn btn-icon-only red" data-ng-click="removeItem(subjectItem)"><i class="fa fa-times"></i></button>\n	                </div>\n	              </div>\n	            </div>\n						<!-- </div> -->\n					</div>\n					<!-- END SUBJECT TAB -->\n          <!-- DESCRIPTION TAB -->\n					<div class="tab-pane ui-padding" id="tab_1_2">\n						<div class="row">\n              <div class="col-md-11">\n                <span class="caption-subject">All following fields will be join by new line:</span>\n              </div>\n              <div class="col-md-1 pull-rigth">\n                <button class="btn btn-icon-only green" data-ng-click="addItemDescription()"><i class="fa fa-plus"></i></button>\n              </div>\n            </div>\n            <hr>\n						<!-- <div ng-scrollbars ng-scrollbars-config="config"> -->\n							<div class="row" data-ng-repeat="descriptionItem in descriptionConfig">\n								<!-- <pre>\n									{{descriptionItem|json}}\n								</pre> -->\n	              <div class="col-md-2">\n	                <ui-select ng-model="descriptionItem.type" theme="bootstrap" ng-disabled="disabled" data-ng-change="changeDescType(descriptionItem)">\n	                  <ui-select-match placeholder="{{\'APPLICATION_SEARCH\' | translate}}">{{$select.selected | ucfirst}}</ui-select-match>\n	                  <ui-select-choices repeat="item in descFieldType | filter: $select.search">\n	                    <div ng-bind-html="item | highlight: $select.search | ucfirst"></div>\n	                  </ui-select-choices>\n	                </ui-select>\n	              </div>\n	              <div class="col-md-9" data-ng-if="descriptionItem.type==\'string\'">\n	                <div class="form-group">\n	                  <input type="text" class="form-control" data-ng-model="descriptionItem.content" data-ng-change="updateField(descriptionItem)">\n	                </div>\n	              </div>\n								<div class="col-md-3" data-ng-if="descriptionItem.type==\'key_value\'">\n									<input type="text" class="form-control" placeholder="Key" data-ng-model="descriptionItem.key" data-ng-change="updateField(descriptionItem)">\n								</div>\n								<div class="col-md-3" data-ng-if="descriptionItem.type==\'key_value\'">\n									<ui-select ng-model="descriptionItem.keyType" theme="bootstrap" ng-disabled="disabled" data-ng-change="changeDescType(descriptionItem)">\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-3" data-ng-if="descriptionItem.type==\'key_value\' && descriptionItem.keyType==\'string\'">\n									<input type="text" class="form-control" placeholder="Value" data-ng-model="descriptionItem.keyContent" data-ng-change="updateField(descriptionItem)">\n								</div>\n	              <div class="col-md-3" data-ng-if="descriptionItem.type==\'key_value\' && descriptionItem.keyType==\'variable\'">\n	                <div class="form-group">\n	                  <ui-select theme="bootstrap" ng-disabled="disabled" data-ng-model="descriptionItem.VariableId" data-ng-change="updateField(descriptionItem)">\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-1">\n	                <div class="form-group">\n	                  <button class="btn btn-icon-only red" data-ng-click="removeItem(descriptionItem)"><i class="fa fa-times"></i></button>\n	                </div>\n	              </div>\n	            </div>\n						<!-- </div> -->\n					</div>\n					<!-- END DESCRIPTION TAB -->\n          <!-- FIELDS TAB -->\n					<div class="tab-pane ui-padding" id="tab_1_3">\n						<div class="row">\n              <div class="col-md-11">\n                <span class="caption-subject">Add how to fill the fields present in your account:</span>\n              </div>\n              <div class="col-md-1 pull-rigth">\n                <button class="btn btn-icon-only green" data-ng-click="addItemField()"><i class="fa fa-plus"></i></button>\n              </div>\n            </div>\n            <hr>\n						<!-- <div ng-scrollbars ng-scrollbars-config="config"> -->\n	            <div class="row" data-ng-repeat="fieldItem in fieldConfig">\n	              <div class="col-md-3">\n	                <ui-select ng-model="fieldItem.idField" theme="bootstrap" ng-disabled="disabled" data-ng-change="changeFieldType(fieldItem)">\n	                  <ui-select-match placeholder="{{\'APPLICATION_SEARCH\' | translate}}">{{$select.selected.label}}</ui-select-match>\n	                  <ui-select-choices repeat="item.id as item in accountFields | filter: $select.search">\n	                    <div ng-bind-html="item.label | highlight: $select.search"></div>\n	                  </ui-select-choices>\n	                </ui-select>\n	              </div>\n	              <div class="col-md-8" data-ng-if="getSystemFieldOptions(fieldItem.idField)">\n	                <div class="form-group">\n										<ui-select ng-model="fieldItem.content" theme="bootstrap" ng-disabled="disabled" data-ng-change="updateField(fieldItem)">\n		                  <ui-select-match placeholder="{{\'APPLICATION_SEARCH\' | translate}}">{{$select.selected}}</ui-select-match>\n		                  <ui-select-choices repeat="item in getSystemFieldOptions(fieldItem.idField) | filter: $select.search">\n		                    <div ng-bind-html="item | highlight: $select.search"></div>\n		                  </ui-select-choices>\n		                </ui-select>\n	                </div>\n	              </div>\n								<div class="col-md-4" data-ng-if="!getSystemFieldOptions(fieldItem.idField)">\n									<div class="form-group">\n										<ui-select ng-model="fieldItem.type" theme="bootstrap" ng-disabled="disabled" data-ng-change="changeType(fieldItem)">\n		                  <ui-select-match placeholder="{{\'APPLICATION_SEARCH\' | translate}}">{{$select.selected | ucfirst}}</ui-select-match>\n		                  <ui-select-choices repeat="item in fieldType | filter: $select.search">\n		                    <div ng-bind-html="item | highlight: $select.search | ucfirst"></div>\n		                  </ui-select-choices>\n		                </ui-select>\n									</div>\n								</div>\n								<div class="col-md-4" data-ng-if="!getSystemFieldOptions(fieldItem.idField) && fieldItem.type === \'string\'">\n	                <div class="form-group">\n										<input type="text" class="form-control" data-ng-model="fieldItem.content" data-ng-change="updateField(fieldItem)">\n	                </div>\n	              </div>\n								<div class="col-md-4" data-ng-if="!getSystemFieldOptions(fieldItem.idField) && fieldItem.type === \'variable\'">\n	                <div class="form-group">\n										<ui-select theme="bootstrap" ng-disabled="disabled" data-ng-model="fieldItem.VariableId" data-ng-change="updateField(fieldItem)">\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-1">\n	                <div class="form-group">\n	                  <button class="btn btn-icon-only red" data-ng-click="removeItem(fieldItem)"><i class="fa fa-times"></i></button>\n	                </div>\n	              </div>\n	            </div>\n						<!-- </div> -->\n					</div>\n					<!-- END FIELDS TAB -->\n				</div>\n			</div>\n		</div>\n	</div>\n</div>\n'),
+a.put("app/desk/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="/desk/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="/desk/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/desk/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="/desk/list">{{ \'APPLICATION_DESK_COM\' | 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/desk.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.desk.view.account\')}">\n							<a ng-href="/desk/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.desk.view.configurations\') || $state.is(\'main.desk.view.configuration\')}">\n							<a ng-href="/desk/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/desk/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="/desk/list">{{ \'APPLICATION_DESK_COM\' | 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/desk/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\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/desk/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 [\'basic\', \'oauth\'] | 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 == \'basic\'" 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 CONSUMER KEY -->\n							<div class="form-group" data-ng-class="{\'has-error\': forms.formSetting.$submitted && forms.formSetting.consumerKey.$invalid}" ng-slide-down="item.authType == \'oauth\'" lazy-render duration="1">\n								<label class="control-label">{{\'APPLICATION_CONSUMER_KEY\' | translate}} <span class="required" aria-required="true">*</span></label>\n								<input type="text" name="consumerKey" placeholder="{{\'APPLICATION_CONSUMER_KEY\' | translate}}" class="form-control" data-ng-model="item.consumerKey" required/>\n								<span data-ng-show="forms.formSetting.consumerKey.$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 CONSUMER KEY -->\n\n              <!-- START CONSUMER SECRET -->\n							<div class="form-group" data-ng-class="{\'has-error\': forms.formSetting.$submitted && forms.formSetting.consumerSecret.$invalid}" ng-slide-down="item.authType == \'oauth\'" lazy-render duration="1">\n								<label class="control-label">{{\'APPLICATION_CONSUMER_SECRET\' | translate}} <span class="required" aria-required="true">*</span></label>\n								<input type="text" name="consumerSecret" placeholder="{{\'APPLICATION_CONSUMER_SECRET\' | translate}}" class="form-control" data-ng-model="item.consumerSecret" required/>\n								<span data-ng-show="forms.formSetting.consumerSecret.$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 CONSUMER SECRET -->\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 == \'oauth\'" 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_TOKEN\' | 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              <!-- START TOKEN SECRET-->\n							<div class="form-group" data-ng-class="{\'has-error\': forms.formSetting.$submitted && forms.formSetting.tokenSecret.$invalid}" ng-slide-down="item.authType == \'oauth\'" lazy-render duration="1">\n								<label class="control-label">{{\'APPLICATION_TOKEN_SECRET\' | translate}} <span class="required" aria-required="true">*</span></label>\n								<input type="text" name="tokenSecret" placeholder="{{\'APPLICATION_TOKEN_SECRET\' | translate}}" class="form-control" data-ng-model="item.tokenSecret" required/>\n								<span data-ng-show="forms.formSetting.tokenSecret.$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 SECRET-->\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/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/freshdesk/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="/freshdesk/list">{{ \'APPLICATION_FRESHDESK\' | 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_FRESHDESK\' | 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="/freshdesk/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\',\'apiKey\'])" csv-header="[\'Name\', \'Username\', \'Remote Address\', \'Api Key\']" field-separator=";" filename="freshdesk_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="displayedFreshdeskAccounts" 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 displayedFreshdeskAccounts" 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="/freshdesk/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="displayedFreshdeskAccounts.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/freshdesk/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              <!-- 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							<!-- 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_USERNAME\' | 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 API KEY -->\n							<div class="form-group" data-ng-class="{\'has-error\': forms.formSetting.$submitted && forms.formSetting.apiKey.$invalid}">\n								<label class="control-label">{{\'APPLICATION_API_KEY\' | translate}} <span class="required" aria-required="true">*</span></label>\n								<input type="text" name="apiKey" placeholder="{{\'APPLICATION_API_KEY\' | translate}}" class="form-control" data-ng-model="account.apiKey" required/>\n								<span data-ng-show="forms.formSetting.apiKey.$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 API KEY -->\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/freshdesk/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								<!-- 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/freshdesk/view/view.configurationSettings.html",'<div class="row" data-ng-init="getConfiguration();getVariables();getFields();">\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}}: {{configurationName}}</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 ui-padding active" id="tab_1_1">\n            <div class="row">\n              <div class="col-md-11">\n                <span class="caption-subject">All following fields will be join by blank space:</span>\n              </div>\n              <div class="col-md-1 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 ng-scrollbars ng-scrollbars-config="config"> -->\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-8" 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="updateField(subjectItem)">\n	                </div>\n	              </div>\n	              <div class="col-md-8" 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="updateField(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-1">\n	                <div class="form-group">\n	                  <button class="btn btn-icon-only red" data-ng-click="removeItem(subjectItem)"><i class="fa fa-times"></i></button>\n	                </div>\n	              </div>\n	            </div>\n						<!-- </div> -->\n					</div>\n					<!-- END SUBJECT TAB -->\n          <!-- DESCRIPTION TAB -->\n					<div class="tab-pane ui-padding" id="tab_1_2">\n						<div class="row">\n              <div class="col-md-11">\n                <span class="caption-subject">All following fields will be join by new line:</span>\n              </div>\n              <div class="col-md-1 pull-rigth">\n                <button class="btn btn-icon-only green" data-ng-click="addItemDescription()"><i class="fa fa-plus"></i></button>\n              </div>\n            </div>\n            <hr>\n						<!-- <div ng-scrollbars ng-scrollbars-config="config"> -->\n							<div class="row" data-ng-repeat="descriptionItem in descriptionConfig">\n								<!-- <pre>\n									{{descriptionItem|json}}\n								</pre> -->\n	              <div class="col-md-2">\n	                <ui-select ng-model="descriptionItem.type" theme="bootstrap" ng-disabled="disabled" data-ng-change="changeDescType(descriptionItem)">\n	                  <ui-select-match placeholder="{{\'APPLICATION_SEARCH\' | translate}}">{{$select.selected | ucfirst}}</ui-select-match>\n	                  <ui-select-choices repeat="item in descFieldType | filter: $select.search">\n	                    <div ng-bind-html="item | highlight: $select.search | ucfirst"></div>\n	                  </ui-select-choices>\n	                </ui-select>\n	              </div>\n	              <div class="col-md-9" data-ng-if="descriptionItem.type==\'string\'">\n	                <div class="form-group">\n	                  <input type="text" class="form-control" data-ng-model="descriptionItem.content" data-ng-change="updateField(descriptionItem)">\n	                </div>\n	              </div>\n								<div class="col-md-3" data-ng-if="descriptionItem.type==\'key_value\'">\n									<input type="text" class="form-control" placeholder="Key" data-ng-model="descriptionItem.key" data-ng-change="updateField(descriptionItem)">\n								</div>\n								<div class="col-md-3" data-ng-if="descriptionItem.type==\'key_value\'">\n									<ui-select ng-model="descriptionItem.keyType" theme="bootstrap" ng-disabled="disabled" data-ng-change="changeDescType(descriptionItem)">\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-3" data-ng-if="descriptionItem.type==\'key_value\' && descriptionItem.keyType==\'string\'">\n									<input type="text" class="form-control" placeholder="Value" data-ng-model="descriptionItem.keyContent" data-ng-change="updateField(descriptionItem)">\n								</div>\n	              <div class="col-md-3" data-ng-if="descriptionItem.type==\'key_value\' && descriptionItem.keyType==\'variable\'">\n	                <div class="form-group">\n	                  <ui-select theme="bootstrap" ng-disabled="disabled" data-ng-model="descriptionItem.VariableId" data-ng-change="updateField(descriptionItem)">\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-1">\n	                <div class="form-group">\n	                  <button class="btn btn-icon-only red" data-ng-click="removeItem(descriptionItem)"><i class="fa fa-times"></i></button>\n	                </div>\n	              </div>\n	            </div>\n						<!-- </div> -->\n					</div>\n					<!-- END DESCRIPTION TAB -->\n          <!-- FIELDS TAB -->\n					<div class="tab-pane ui-padding" id="tab_1_3">\n						<div class="row">\n              <div class="col-md-11">\n                <span class="caption-subject">Add how to fill the fields present in your account:</span>\n              </div>\n              <div class="col-md-1 pull-rigth">\n                <button class="btn btn-icon-only green" data-ng-click="addItemField()"><i class="fa fa-plus"></i></button>\n              </div>\n            </div>\n            <hr>\n						<!-- <div ng-scrollbars ng-scrollbars-config="config"> -->\n	            <div class="row" data-ng-repeat="fieldItem in fieldConfig">\n	              <div class="col-md-3">\n	                <ui-select ng-model="fieldItem.idField" theme="bootstrap" ng-disabled="disabled" data-ng-change="changeFieldType(fieldItem)">\n	                  <ui-select-match placeholder="{{\'APPLICATION_SEARCH\' | translate}}">{{$select.selected.label}}</ui-select-match>\n	                  <ui-select-choices repeat="item.name as item in accountFields | filter: $select.search">\n	                    <div ng-bind-html="item.label | highlight: $select.search"></div>\n	                  </ui-select-choices>\n	                </ui-select>\n	              </div>\n	              <div class="col-md-8" data-ng-if="getSystemFieldOptions(fieldItem.idField)">\n	                <div class="form-group">\n										<ui-select ng-model="fieldItem.content" theme="bootstrap" ng-disabled="disabled" data-ng-change="updateField(fieldItem)">\n		                  <ui-select-match placeholder="{{\'APPLICATION_SEARCH\' | translate}}">{{$select.selected[0]}}</ui-select-match>\n		                  <ui-select-choices repeat="item[0] as item in getSystemFieldOptions(fieldItem.idField) | filter: $select.search">\n		                    <div ng-bind-html="item[0] | highlight: $select.search"></div>\n		                  </ui-select-choices>\n		                </ui-select>\n	                </div>\n	              </div>\n								<div class="col-md-4" data-ng-if="!getSystemFieldOptions(fieldItem.idField)">\n									<div class="form-group">\n										<ui-select ng-model="fieldItem.type" theme="bootstrap" ng-disabled="disabled" data-ng-change="changeType(fieldItem)">\n		                  <ui-select-match placeholder="{{\'APPLICATION_SEARCH\' | translate}}">{{$select.selected | ucfirst}}</ui-select-match>\n		                  <ui-select-choices repeat="item in fieldType | filter: $select.search">\n		                    <div ng-bind-html="item | highlight: $select.search | ucfirst"></div>\n		                  </ui-select-choices>\n		                </ui-select>\n									</div>\n								</div>\n								<div class="col-md-4" data-ng-if="!getSystemFieldOptions(fieldItem.idField) && fieldItem.type === \'string\'">\n	                <div class="form-group">\n										<input type="text" class="form-control" data-ng-model="fieldItem.content" data-ng-change="updateField(fieldItem)">\n	                </div>\n	              </div>\n								<div class="col-md-4" data-ng-if="!getSystemFieldOptions(fieldItem.idField) && fieldItem.type === \'variable\'">\n	                <div class="form-group">\n										<ui-select theme="bootstrap" ng-disabled="disabled" data-ng-model="fieldItem.VariableId" data-ng-change="updateField(fieldItem)">\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-1">\n	                <div class="form-group">\n	                  <button class="btn btn-icon-only red" data-ng-click="removeItem(fieldItem)"><i class="fa fa-times"></i></button>\n	                </div>\n	              </div>\n	            </div>\n						<!-- </div> -->\n					</div>\n					<!-- END FIELDS TAB -->\n				</div>\n			</div>\n		</div>\n	</div>\n</div>\n'),a.put("app/freshdesk/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="/freshdesk/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="/freshdesk/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/freshdesk/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="/freshdesk/list">{{ \'APPLICATION_FRESHDESK\' | 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/freshdesk.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.freshdesk.view.account\')}">\n							<a ng-href="/freshdesk/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.freshdesk.view.configurations\') || $state.is(\'main.freshdesk.view.configuration\')}">\n							<a ng-href="/freshdesk/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/freshdesk/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="/freshdesk/list">{{ \'APPLICATION_FRESHDESK\' | 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_USERNAME\' | translate}}" class="form-control" data-ng-model="item.username" required ng-remote-validate="/api/freshdesk/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\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/freshdesk/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 API KEY -->\n							<div class="form-group" data-ng-class="{\'has-error\': forms.formSetting.$submitted && forms.formSetting.apiKey.$invalid}">\n								<label class="control-label">{{\'APPLICATION_API_KEY\' | translate}} <span class="required" aria-required="true">*</span></label>\n								<input type="text" name="apiKey" placeholder="{{\'APPLICATION_API_KEY\' | translate}}" class="form-control" data-ng-model="item.apiKey" required/>\n								<span data-ng-show="forms.formSetting.apiKey.$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 API KEY -->\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/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="7">\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>IMAP</th>\n							<th>SMTP</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 data-ng-switch="mailAccount.MailServerIn.state">\n								<span class="label label-sm label-success" ng-switch-when="CONNECTED">\n									{{ mailAccount.MailServerIn.state}}\n								</span>\n								<span class="label label-sm label-warning" ng-switch-when="DISCONNECTED">\n									{{ mailAccount.MailServerIn.state}}\n								</span>\n								<span class="label label-sm label-danger" ng-switch-when="ERROR">\n									{{ mailAccount.MailServerIn.state}}\n								</span>\n								<span class="label label-sm label-default" ng-switch-default>\n									{{ mailAccount.MailServerIn.state}}\n								</span>\n							</td>\n							<td data-ng-switch="mailAccount.MailServerOut.state">\n								<span class="label label-sm label-success" ng-switch-when="CONNECTED">\n									{{ mailAccount.MailServerOut.state}}\n								</span>\n								<span class="label label-sm label-warning" ng-switch-when="DISCONNECTED">\n									{{ mailAccount.MailServerOut.state}}\n								</span>\n								<span class="label label-sm label-danger" ng-switch-when="ERROR">\n									{{ mailAccount.MailServerOut.state}}\n								</span>\n								<span class="label label-sm label-default" ng-switch-default>\n									{{ mailAccount.MailServerOut.state}}\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="7" 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 colspan="4"/>\n					  </tr>\n						<tr>\n							<td colspan="7" 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 align="center">\n									{{application.User ? \'agent\' : \'queue\' | uppercase}} [{{application.User ? application.User.fullname : application.MailQueue.name}}]\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		<div ui-view class="profile-content"></div>\n		<!-- END PROFILE CONTENT -->\n	</div>\n<!-- END PAGE CONTENT-->\n</div>\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							<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" 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							</div>\n							<!-- START SEARCH FILTER -->\n\n							<!-- START DELETE -->\n							<div class="form-group row">\n								<label class="col-md-3">\n									{{\'APPLICATION_DELETE_MAIL_FROM_SERVER\' | translate}}\n								</label>\n								<label class="col-md-9">\n									<input type="checkbox" ng-model="account.MailServerIn.delete">\n								</label>\n							</div>\n							<!-- END DELETE -->\n\n							<!-- START SSL -->\n							<div class="form-group row">\n								<label class="col-md-3">\n									SSL\n								</label>\n								<label class="col-md-9">\n										<input type="checkbox" data-ng-model="account.MailServerIn.ssl">\n								</label>\n							</div>\n							<!-- END SSL -->\n\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 row">\n								<label class="col-md-3">\n									SSL\n								</label>\n								<label class="col-md-9">\n										<input type="checkbox" data-ng-model="account.MailServerOut.ssl">\n								</label>\n							</div>\n							<!-- END SSL -->\n							<input class="btn green-haze" type="submit" value="{{\'APPLICATION_UPDATE\' | translate}}"/>\n							<input class="btn blue-madison" type="button" value="Test" data-ng-click="test()"/>\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								<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 row">\n									<label class="col-md-3">\n										{{\'APPLICATION_DELETE_MAIL_FROM_SERVER\' | translate}}\n									</label>\n									<label class="col-md-9">\n											<input type="checkbox" data-ng-model="in.delete">\n									</label>\n								</div>\n								<!-- END DELETE -->\n\n								<!-- START SSL -->\n								<div class="form-group row">\n									<label class="col-md-3">\n										SSL\n									</label>\n									<label class="col-md-9">\n											<input type="checkbox" data-ng-model="in.ssl">\n									</label>\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 row">\n									<label class="col-md-3">\n										SSL\n									</label>\n									<label class="col-md-9">\n											<input type="checkbox" data-ng-model="out.ssl">\n									</label>\n								</div>\n								<!-- END DELETE -->\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/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 data-ng-repeat="user in mailRoom.Users"> {{user.fullname}} {{!$last ? \', \' : \'\'}} </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.agents.modal.html",'<div class="modal-header" data-ng-init="initModal()">\n  <h3 class="modal-title">{{ \'APPLICATION_AGENTS\' | translate }}</h3>\n</div>\n<div class="modal-body">\n  <!-- START TRANSPORT -->\n  <div class="form-group">\n    <form name="form" novalidate>\n      <!-- START TRANSPORT -->\n      <div class="form-group">\n        <ui-select multiple name="agents" data-ng-model="item.agents" theme="bootstrap">\n          <ui-select-match placeholder="Select transport...">{{$item.fullname}}</ui-select-match>\n          <ui-select-choices repeat="agent.id as agent in agents | filter: $select.search">\n            {{agent.fullname}}\n          </ui-select-choices>\n        </ui-select>\n      </div>\n      <!-- END TRANSPORT -->\n    </form>\n  </div>\n  <!-- END TRANSPORT -->\n</div>\n<div class="modal-footer">\n  <button class="btn btn-success" type="button" ng-click="ok()">{{ \'APPLICATION_CONFIRM\' | translate }}</button>\n  <button class="btn default" type="button" ng-click="cancel()">{{ \'APPLICATION_CANCEL\' | translate }}</button>\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		<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-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" data-ng-show="Auth.isAdmin()">\n				<a href="#" class="btn default blue-stripe" data-ng-click="assignAgents()">\n					{{ \'APPLICATION_ASSIGN\' | translate }}\n				</a>\n				<a href="#" class="btn default green-stripe">\n					{{ \'APPLICATION_STORE\' | translate }}\n				</a>\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="assignAgents()">\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" data-ng-click="updateStatus(\'CLOSED\')">\n					{{ \'APPLICATION_STORE\' | translate }}\n					</a>\n				</div> -->\n			</div>\n		</div>\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: 725px; 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="bold">From: </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-if="mailMessage.cc" class="bold">Cc: </span>\n									<span data-ng-if="mailMessage.cc">{{mailMessage.cc}} </span>\n									<br>\n									<span class="todo-tasklist-date">\n										<span class="pull-right">\n											<a data-ng-click="(mailMessage.status == \'SENDING\' || mailMessage.status == \'FAILED\') && retry(mailMessage.id)" href="#" class="btn default btn-xs" data-ng-class="{\'green-stripe\': mailMessage.status == \'SENT\' || mailMessage.status == \'RECEIVED\', \'blue-stripe\': mailMessage.status == \'SENDING\', \'red-stripe\': mailMessage.status == \'FAILED\'}"> {{mailMessage.status | uppercase}}\n												<i data-ng-class="{\'fa fa-check\': mailMessage.status == \'SENT\' || mailMessage.status == \'RECEIVED\', \'fa fa-warning\': mailMessage.status == \'SENDING\', \'fa fa-times\': mailMessage.status == \'FAILED\'}"></i>\n											</a>\n										</span>\n										<i class="fa fa-calendar"></i><time is="relative-time" datetime="{{mailMessage.updatedAt}}">April 1, 2014</time>\n									</span>\n									<hr>\n									<span class="body text-left" data-ng-bind-html="mailMessage.html || mailMessage.text" style="white-space: pre-wrap;"></span>\n									<!-- <br> -->\n									<hr data-ng-if="mailMessage.MailAttachments.length">\n									<div data-ng-repeat="mailAttachment in mailMessage.MailAttachments">\n										<strong>{{mailAttachment.name}}</strong>\n										<span>\n										{{mailAttachment.size}}B </span>\n										<a target="_self" download="{{mailAttachment.name}}" 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							<!-- 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>\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.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							<!-- MAIL 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 data-ng-model="form.sto" theme="bootstrap" name="to">\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" multiple="">\n                    <table class="table">\n                      <tbody>\n                        <tr ng-repeat="item in uploader.queue">\n                          <td style="border-top-style:none"><strong>{{ item.file.name }}</strong></td>\n                          <td style="border-top-style:none" ng-show="uploader.isHTML5" nowrap>{{ item.file.size/1024/1024|number:2 }} MB</td>\n                          <td style="border-top-style:none" ng-show="uploader.isHTML5">\n                            <div class="progress" style="margin-bottom: 0;">\n                                <div class="progress-bar" role="progressbar" ng-style="{ \'width\': item.progress + \'%\' }"></div>\n                            </div>\n                          </td>\n                          <td style="border-top-style:none" class="text-center">\n                            <span ng-show="item.isSuccess"><i class="glyphicon glyphicon-ok"></i></span>\n                            <span ng-show="item.isCancel"><i class="glyphicon glyphicon-ban-circle"></i></span>\n                            <span ng-show="item.isError"><i class="glyphicon glyphicon-remove"></i></span>\n                          </td>\n                          <td style="border-top-style:none" nowrap>\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								</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					</form>\n				</div>\n			</div>\n		</div>\n	</div>\n</div>\n<!-- END TODO CONTENT -->\n'),a.put("app/mail/inbox/room/room.retry.modal.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" class="modal-title">{{modal.title | translate}}</h4>\n</div>\n<div class="modal-body">\n  <p ng-if="modal.text">{{modal.text | translate}}</p>\n</div>\n<div class="modal-footer">\n  <button ng-repeat="button in modal.buttons" ng-class="button.classes" ng-click="button.click($event)" class="btn">{{button.text | translate}}</button>\n</div>\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.queues.html",'<!-- BEGIN PAGE CONTENT-->\n<div class="row" data-ng-init="initAgents()">\n	<div class="col-md-12">\n		<!-- START TABLE -->\n		<div id="grid1" ui-grid="gridOptions" ui-grid-tree-view class="grid"></div>\n		<!-- END TABLE -->\n	</div>\n</div>\n<!-- END PAGE CONTENT-->\n'),a.put("app/mail/realtime/view/agent/agent.timeline.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/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/chooseContact.modal.html",'<div class="modal-header">\n  <h3 class="modal-title">{{ \'APPLICATION_CHOOSE_CONTACT\' | translate }}</h3>\n</div>\n<div class="modal-body">\n  <form name="forms.choose" novalidate>\n    <div class="form-group" data-ng-class="{\'has-error\': forms.choose.contactId.$invalid && forms.choose.$submitted}">\n      <label class="control-label">{{\'APPLICATION_CONTACT\' | translate}}</label>\n      <ui-select data-ng-model="item.contactId" theme="bootstrap" name="contactId" ng-disabled="disabled">\n        <ui-select-match allow-clear placeholder="{{ \'APPLICATION_CONTACT\' | translate }}">{{$select.selected.name}}</ui-select-match>\n        <ui-select-choices repeat="contact.id as contact in contacts | filter: $select.search">\n          <div ng-bind-html="contact.name | highlight: $select.search"></div>\n        </ui-select-choices>\n      </ui-select>\n      <span data-ng-show="forms.choose.CompanyId.$invalid && forms.choose.$submitted" class="help-block help-block-error">\n        <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n      </span>\n    </div>\n  </form>\n</div>\n<div class="modal-footer">\n  <button class="btn btn-success" type="button" ng-click="ok()" ng-disabled="forms.tag.$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/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" data-ng-class="{\'demo\': !license.expiration}">\n\n      <!-- BEGIN PAGE CONTENT -->\n      <uib-tabset>\n        <uib-tab select="addWorkspace()" active="mainTab.active">\n          <uib-tab-heading>\n            Motion <i class="icon-rocket"></i>\n          </uib-tab-heading>\n          <div ui-view class=""></div>\n        </uib-tab>\n        <uib-tab data-ng-repeat="workspace in workspaces" active="workspace.active" data-ng-switch="workspace.type">\n          <uib-tab-heading>\n            {{workspace.name}} <i class="icon-close pointer-cursor" data-ng-click="closeTab($index)"></i>\n          </uib-tab-heading>\n          <div class="" data-ng-switch="workspace.type">\n            <new-contact data-ng-switch-when="newContact" workspace="workspace" index="$index" on-submit="createContact(index,item)"></new-contact>\n            <contact data-ng-switch-when="contact" workspace="workspace" index="$index" on-submit="updateContact(index,item)"></contact>\n          </div>\n        </uib-tab>\n\n      </uib-tabset>\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.contactTab.html",'<div class="row margin-top-20 contact-tab-container" >\n  <!-- <pre>\n    {{workspaces}}\n  </pre> -->\n  <!-- <pre>\n    {{contact | json}}\n  </pre> -->\n  <div class="col-md-12 contact-tab">\n    <form name="forms.general" data-ng-submit="submit({index:index,item:contact})" novalidate>\n    <!-- BEGIN PROFILE SIDEBAR -->\n    <div class="profile-sidebar">\n      <!-- PORTLET MAIN -->\n      <div class="portlet light pbottom20">\n        <!-- SIDEBAR USERPIC -->\n        <div class="profile-userpic">\n          <img src="assets/images/media/contact.png" class="img-responsive" alt="">\n        </div>\n        <!-- END SIDEBAR USERPIC -->\n        <!-- SIDEBAR USER TITLE -->\n        <div class="profile-usertitle">\n          <div class="profile-usertitle-name">\n            {{contact.fullname}}\n          </div>\n          <div class="profile-usertitle-job">\n          </div>\n        </div>\n        <!-- END SIDEBAR USER TITLE -->\n        <!-- SIDEBAR BUTTONS -->\n        <div class="profile-userbuttons">\n          <button type="submit" class="btn btn-circle green-haze btn-sm" data-ng-disabled="!contact.fullname">{{\'APPLICATION_UPDATE\' | translate}}</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 class="active">\n              <a href="extra_profile.html">\n              <i class="icon-home"></i>\n              Overview </a>\n            </li>\n            <li>\n              <a href="extra_profile_account.html">\n              <i class="icon-settings"></i>\n              Account Settings </a>\n            </li>\n            <li>\n              <a href="page_todo.html" target="_blank">\n              <i class="icon-check"></i>\n              Tasks </a>\n            </li>\n            <li>\n              <a href="extra_profile_help.html">\n              <i class="icon-info"></i>\n              Help </a>\n            </li>\n          </ul>\n        </div> -->\n        <!-- END MENU -->\n      </div>\n      <!-- END PORTLET MAIN -->\n      <!-- PORTLET MAIN -->\n      <div class="portlet light">\n        <!-- STAT -->\n        <div class="row list-separated profile-stat">\n          <div class="col-md-4 col-sm-4 col-xs-6">\n            <div class="uppercase profile-stat-title">\n               37\n            </div>\n            <div class="uppercase profile-stat-text">\n               Projects\n            </div>\n          </div>\n          <div class="col-md-4 col-sm-4 col-xs-6">\n            <div class="uppercase profile-stat-title">\n               51\n            </div>\n            <div class="uppercase profile-stat-text">\n               Tasks\n            </div>\n          </div>\n          <div class="col-md-4 col-sm-4 col-xs-6">\n            <div class="uppercase profile-stat-title">\n               61\n            </div>\n            <div class="uppercase profile-stat-text">\n               Uploads\n            </div>\n          </div>\n        </div>\n        <!-- END STAT -->\n        <div>\n          <h4 class="profile-desc-title">{{\'APPLICATION_ABOUT\' | translate}} {{contact.fullname}}</h4>\n          <span class="profile-desc-text break-overflow">{{contact.description}}</span>\n          <div class="margin-top-20 profile-desc-link">\n            <i class="fa fa-globe"></i>\n            <a href="http://www.keenthemes.com">www.keenthemes.com</a>\n          </div>\n          <div class="margin-top-20 profile-desc-link">\n            <i class="fa fa-twitter"></i>\n            <a href="http://www.twitter.com/keenthemes/">@keenthemes</a>\n          </div>\n          <div class="margin-top-20 profile-desc-link">\n            <i class="fa fa-facebook"></i>\n            <a href="http://www.facebook.com/keenthemes/">keenthemes</a>\n          </div>\n        </div>\n      </div>\n      <!-- END PORTLET MAIN -->\n    </div>\n    <!-- END BEGIN PROFILE SIDEBAR -->\n    <!-- BEGIN PROFILE CONTENT -->\n    <div class="profile-content">\n      <div class="row">\n        <div class="col-md-6">\n          <!-- BEGIN PORTLET -->\n          <div class="portlet light ">\n            <div class="portlet-title">\n              <div class="caption caption-md">\n                <i class="icon-bar-chart theme-font hide"></i>\n                <span class="caption-subject font-blue-madison bold uppercase">{{\'APPLICATION_DETAIL\' | translate}}</span>\n              </div>\n              <div class="actions">\n                <div class="btn-group btn-group-devided" data-toggle="buttons">\n                  <label class="btn btn-transparent grey-salsa btn-circle btn-sm active" data-ng-click="detail.tab=\'main\'">\n                  <input type="radio" class="toggle">{{\'APPLICATION_MAIN\' | translate}}</label>\n                  <label class="btn btn-transparent grey-salsa btn-circle btn-sm" data-ng-click="detail.tab=\'address\'">\n                  <input type="radio" class="toggle">{{\'APPLICATION_ADDRESS\' | translate}}</label>\n                  <label class="btn btn-transparent grey-salsa btn-circle btn-sm" data-ng-click="detail.tab=\'other\'">\n                  <input type="radio" class="toggle">{{\'APPLICATION_OTHER\' | translate}}</label>\n                  <label class="btn btn-transparent grey-salsa btn-circle btn-sm" data-ng-click="detail.tab=\'customFields\'">\n                  <input type="radio" class="toggle">{{\'APPLICATION_CUSTOM_FIELDS\' | translate}}</label>\n                </div>\n              </div>\n            </div>\n            <div class="portlet-body">\n              <div data-ng-class="{\'hidden\':detail.tab != \'main\'}" class="portlet-body contact-portlet">\n              <!-- START FULLNAME -->\n              <div class="form-group" data-ng-class="{\'has-error\': (forms.general.fullname.$touched || 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="contact.fullname" required/>\n                <span data-ng-show="(forms.general.fullname.$touched || forms.general.$submitted) && forms.general.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 FULLNAME -->\n\n              <!-- START COMPANY -->\n              <div class="form-group" data-ng-class="{\'has-error\': forms.general.CompanyId.$invalid && forms.general.$submitted}">\n                <label class="control-label">{{\'APPLICATION_COMPANY\' | translate}}</label>\n                <ui-select data-ng-model="contact.CompanyId" theme="bootstrap" name="CompanyId" ng-disabled="disabled">\n                  <ui-select-match allow-clear placeholder="{{ \'APPLICATION_COMPANY\' | translate }}">{{$select.selected.name}}</ui-select-match>\n                  <ui-select-choices repeat="company.id as company in companies | filter: $select.search">\n                    <div ng-bind-html="company.name | highlight: $select.search"></div>\n                  </ui-select-choices>\n                </ui-select>\n                <span data-ng-show="forms.general.CompanyId.$invalid && forms.general.$submitted" class="help-block help-block-error">\n                  <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n                </span>\n              </div>\n              <!-- END COMPANY -->\n\n              <!-- START TAGS -->\n              <div class="form-group" data-ng-class="{\'has-error\': forms.general.tags.$invalid && forms.general.$submitted}">\n                <label class="control-label">{{\'APPLICATION_TAGS\' | translate}}</label>\n                <ui-select tagging tagging-label="" multiple=\'true\' data-ng-model="contact.tags" theme="bootstrap" name="tags" ng-disabled="disabled">\n                  <ui-select-match placeholder="{{ \'APPLICATION_TAGS\' | translate }}">{{$item}}</ui-select-match>\n                  <ui-select-choices repeat="tag in tags | filter: $select.search">\n                    {{tag}}\n                  </ui-select-choices>\n                </ui-select>\n                <span data-ng-show="forms.general.tags.$invalid && forms.general.$submitted" class="help-block help-block-error">\n                  <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n                </span>\n              </div>\n              <!-- END TAGS -->\n\n            </div>\n            <div data-ng-class="{\'hidden\':detail.tab != \'address\'}" class="portlet-body contact-portlet">\n              <!-- START STREET -->\n              <div class="form-group" data-ng-class="{\'has-error\': (forms.general.street.$touched || forms.general.$submitted) && forms.general.street.$invalid}">\n                <label class="control-label">{{\'APPLICATION_STREET\' | translate}}</label>\n                <input type="text" name="street" placeholder="{{\'APPLICATION_STREET\' | translate}}" class="form-control" data-ng-model="contact.street"/>\n                <span data-ng-show="(forms.general.street.$touched || forms.general.$submitted) && forms.general.street.$error.required" class="help-block help-block-error">\n                  <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n                </span>\n              </div>\n              <!-- END STREET -->\n\n              <!-- START POSTALCODE -->\n              <div class="form-group" data-ng-class="{\'has-error\': (forms.general.postalCode.$touched || forms.general.$submitted) && forms.general.postalCode.$invalid}">\n                <label class="control-label">{{\'APPLICATION_POSTALCODE\' | translate}}</label>\n                <input type="text" name="postalCode" placeholder="{{\'APPLICATION_POSTALCODE\' | translate}}" class="form-control" data-ng-model="contact.postalCode"/>\n                <span data-ng-show="(forms.general.postalCode.$touched || forms.general.$submitted) && forms.general.postalCode.$error.required" class="help-block help-block-error">\n                  <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n                </span>\n              </div>\n              <!-- END POSTALCODE -->\n\n              <!-- START CITY -->\n              <div class="form-group" data-ng-class="{\'has-error\': (forms.general.city.$touched || forms.general.$submitted) && forms.general.city.$invalid}">\n                <label class="control-label">{{\'APPLICATION_CITY\' | translate}}</label>\n                <input type="text" name="city" placeholder="{{\'APPLICATION_CITY\' | translate}}" class="form-control" data-ng-model="contact.city"/>\n                <span data-ng-show="(forms.general.city.$touched || forms.general.$submitted) && forms.general.city.$error.required" class="help-block help-block-error">\n                  <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n                </span>\n              </div>\n              <!-- END CITY -->\n\n              <!-- START COUNTRY -->\n              <div class="form-group" data-ng-class="{\'has-error\': (forms.general.country.$touched || forms.general.$submitted) && forms.general.country.$invalid}">\n                <label class="control-label">{{\'APPLICATION_COUNTRY\' | translate}}</label>\n                <input type="text" name="country" placeholder="{{\'APPLICATION_COUNTRY\' | translate}}" class="form-control" data-ng-model="contact.country"/>\n                <span data-ng-show="(forms.general.country.$touched || forms.general.$submitted) && forms.general.country.$error.required" class="help-block help-block-error">\n                  <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n                </span>\n              </div>\n              <!-- END COUNTRY -->\n            </div>\n            <div data-ng-class="{\'hidden\':detail.tab != \'other\'}" class="portlet-body contact-portlet">\n              <!-- START DATEOFBIRTH -->\n              <div class="form-group" data-ng-class="{\'has-error\': (forms.general.dateOfBirth.$touched || forms.general.$submitted) && forms.general.dateOfBirth.$invalid}">\n                <label class="control-label">{{\'APPLICATION_DATEOFBIRTH\' | translate}}</label>\n                <input name="dateOfBirth" type="date" placeholder="{{\'APPLICATION_DATEOFBIRTH\' | translate}}" class="form-control date-picker" data-ng-model="contact.dateOfBirth"/>\n                <span data-ng-show="(forms.general.dateOfBirth.$touched || forms.general.$submitted) && forms.general.dateOfBirth.$error.required" class="help-block help-block-error">\n                  <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n                </span>\n              </div>\n              <!-- END DATEOFBIRTH -->\n\n              <!-- START DESCRIPTION -->\n              <div class="form-group">\n                <label class="control-label">{{\'APPLICATION_DESCRIPTION\' | translate}}</label>\n                <textarea style="resize: vertical;" type="text" name="description" placeholder="{{\'APPLICATION_DESCRIPTION\' | translate}}" class="form-control" data-ng-model="contact.description"></textarea>\n              </div>\n              <!-- END DESCRIPTION -->\n              <!-- START CREATED_BY -->\n              <div class="form-group">\n                <label class="control-label">{{\'APPLICATION_CREATED_BY\' | translate}}</label>\n                <input type="text" name="createdBy" placeholder="{{\'APPLICATION_CREATED_BY\' | translate}}" class="form-control" data-ng-model="contact.User.name" disabled/>\n              </div>\n              <!-- END CREATED_BY -->\n            </div>\n            <div data-ng-class="{\'hidden\':detail.tab != \'customFields\'}" class="portlet-body contact-portlet">\n              <div data-ng-repeat="customField in customFields">\n                <div data-ng-if="customField.active || _.find(contact.CustomFields,{id:customField.id})">\n                <div data-ng-if="customField.type==\'text\'" class="form-group" data-ng-class="{\'has-error\': (forms.general[customField.name].$touched || forms.general.$submitted) && forms.general[customField.name].$invalid}">\n                  <label class="control-label">{{customField.name}}</label>\n                  <input data-ng-if="!joinPrompt" type="text" name="{{customField.name}}" placeholder="{{customField.name}}" class="form-control" data-ng-model="contact.customFields[customField.id]"/>\n                  <span data-ng-show="(forms.general[customField.name].$touched || forms.general.$submitted) && forms.general[customField.name].$error.required" class="help-block help-block-error">\n                    <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n                  </span>\n                </div>\n                <div data-ng-if="customField.type==\'select\'" class="form-group" data-ng-class="{\'has-error\': forms.general[customField.name].$invalid && forms.general.$submitted}">\n                  <label class="control-label">{{customField.name}}</label>\n                  <ui-select data-ng-if="!joinPrompt" data-ng-model="contact.customFields[customField.id]" theme="bootstrap" name="{{customField.name}}" data-ng-disabled="disabled">\n                    <ui-select-match allow-clear placeholder="{{customField.name}}">{{$select.selected.value}}</ui-select-match>\n                    <ui-select-choices repeat="choice.value as choice in customField.values | filter: $select.search">\n                      <div ng-bind-html="choice.value | highlight: $select.search"></div>\n                    </ui-select-choices>\n                  </ui-select>\n                  <span data-ng-show="forms.general[customField.name].$invalid && forms.general.$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            </div>\n          </div>\n          <!-- END PORTLET -->\n        </div>\n        <div class="col-md-6">\n          <!-- BEGIN PORTLET -->\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_CONTACTS\' | 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_PHONES\' | translate}}</a>\n                </li>\n                <li>\n                  <a href="#" data-target="#tab_1_2" data-toggle="tab">{{ \'APPLICATION_EMAILS\' | translate}}</a>\n                </li>\n              </ul>\n            </div>\n            <div class="portlet-body">\n              <!--BEGIN TABS-->\n              <div class="tab-content">\n                <div class="tab-pane active" id="tab_1_1">\n                  <div class="contact-portlet">\n                    <!-- START PHONES -->\n                    <div class="padding-bottom mbottom20">\n                    <div data-ng-if="contact.Phones.length>0">\n                      <label class="control-label">{{\'APPLICATION_PHONES\' | translate}}</label>\n                    </div>\n                    <div class="padding-bottom" ng-repeat="phone in contact.Phones">\n                      <div class="form-group">\n                        <div class="input-group">\n                          <input type="text" class="form-control" ng-model="phone.phone" required>\n                          <span class="input-group-btn">\n                          <button class="btn red" type="button"data-ng-click="removeField(\'Phones\',$index)"><i class="fa fa-times"></i></button>\n                          </span>\n                        </div>\n                      </div>\n                    </div>\n                    <button type="button" class="btn btn-sm green padding-bottom" ng-click="addField(\'Phones\')">\n                      <i class="fa fa-plus"></i> {{\'APPLICATION_ADD_PHONE\' | translate}}\n                    </button>\n                  </div>\n                  <!-- END PHONES -->\n                </div>\n              </div>\n                <div class="tab-pane" id="tab_1_2">\n                  <div class="contact-portlet">\n                    <!-- START EMAILS -->\n                      <div class="padding-bottom mbottom20">\n                      <div data-ng-if="contact.Emails.length>0">\n                        <label class="control-label">{{\'APPLICATION_EMAILS\' | translate}}</label>\n                      </div>\n                      <div class="padding-bottom" ng-repeat="email in contact.Emails">\n                        <div class="form-group">\n                          <div class="input-group">\n                            <input type="email" class="form-control" ng-model="email.email" required>\n                            <span class="input-group-btn">\n                            <button class="btn btn-danger" type="button" data-ng-click="removeField(\'Emails\',$index)"><i class="fa fa-times"></i></button>\n                            </span>\n                          </div>\n                        </div>\n                      </div>\n                      <button type="button" class="btn btn-sm green padding-bottom" ng-click="addField(\'Emails\')">\n                        <i class="fa fa-plus"></i> {{\'APPLICATION_ADD_EMAIL\' | translate}}\n                      </button>\n                    </div>\n                    <!-- END EMAILS -->\n                  </div>\n                </div>\n              </div>\n              <!--END TABS-->\n            </div>\n          </div>\n          <!-- END PORTLET -->\n        </div>\n      </div>\n      <div class="row">\n        <div class="col-md-6">\n          <!-- BEGIN PORTLET -->\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_LOG\' | translate}}</span>\n              </div>\n              <ul class="nav nav-tabs">\n                <li class="active">\n                  <a href="#" data-target="#tab_2_1" data-toggle="tab">{{ \'APPLICATION_JOURNAL\' | translate}}</a>\n                </li>\n                <li>\n                  <a href="#" data-target="#tab_2_2" data-toggle="tab">{{ \'APPLICATION_HISTORY\' | translate}}</a>\n                </li>\n              </ul>\n            </div>\n            <div class="portlet-body">\n              <!--BEGIN TABS-->\n              <div class="tab-content">\n                <div class="tab-pane active" id="tab_2_1">\n                  <div class="contact-portlet">\n                    <div class="actions">\n                      <div class="btn-group btn-group-devided" data-toggle="buttons">\n                        <label class="btn btn-transparent grey-salsa btn-circle btn-sm active" data-ng-click="log.journal.show=\'Phones\';getRows(\'journal\');">\n                        <input type="radio" class="toggle">{{\'APPLICATION_PHONES\' | translate}}</label>\n                        <label class="btn btn-transparent grey-salsa btn-circle btn-sm" data-ng-click="log.journal.show=\'Emails\';log.journal.detail=\'general\';getRows(\'journal\');">\n                        <input type="radio" class="toggle">{{\'APPLICATION_EMAILS\' | translate}}</label>\n                      </div> |\n                      <div class="btn-group btn-group-devided" data-toggle="buttons">\n                        <label class="btn btn-transparent grey-salsa btn-circle btn-sm active" data-ng-click="log.journal.type=\'Inbounds\';getRows(\'journal\');">\n                        <input type="radio" class="toggle">{{\'APPLICATION_INBOUND\' | translate}}</label>\n                        <label class="btn btn-transparent grey-salsa btn-circle btn-sm" data-ng-click="log.journal.type=\'Outbounds\';getRows(\'journal\');">\n                        <input type="radio" class="toggle">{{\'APPLICATION_OUTBOUND\' | translate}}</label>\n                      </div> |\n                      <div class="btn-group btn-group-devided" data-toggle="buttons" data-ng-if="log.journal.show==\'Phones\'">\n                        <label class="btn btn-transparent grey-salsa btn-circle btn-sm active" data-ng-click="log.journal.detail=\'general\';getRows(\'journal\');">\n                        <input type="radio" class="toggle">{{\'APPLICATION_GENERAL\' | translate}}</label>\n                        <label class="btn btn-transparent grey-salsa btn-circle btn-sm" data-ng-click="log.journal.detail=\'QueueCalls\';getRows(\'journal\');">\n                        <input type="radio" class="toggle">{{\'APPLICATION_QUEUES\' | translate}}</label>\n                        <label class="btn btn-transparent grey-salsa btn-circle btn-sm" data-ng-click="log.journal.detail=\'ReportAgents\';getRows(\'journal\');">\n                        <input type="radio" class="toggle">{{\'APPLICATION_AGENTS\' | translate}}</label>\n                      </div>\n                    </div>\n                    <table st-table="journal" class="table table-striped">\n                  		<thead>\n                  		<tr>\n                  			<th data-ng-repeat="column in columns[log.journal.show][log.journal.detail].header">{{column | translate}}</th>\n                  		</tr>\n                  		</thead>\n                  		<tbody>\n                  		<tr data-ng-repeat="row in rows[\'journal\']">\n                  			<td data-ng-repeat="col in columns[log.journal.show][log.journal.detail].indexes">{{col == \'createdAt\' ? moment(row[col]).format(\'DD/MM/YYYY HH:mm:ss\') : row[col]}}</td>\n                  		</tr>\n                      <tr data-ng-hide="rows[\'journal\'].length">\n                        <td colspan="{{columns[log.journal.show][log.journal.detail].header.length}}" class="text-center">\n                          {{\'MESSAGE_NO_RESULTS_AVAILABLE\' | translate}}\n                        </td>\n                      </tr>\n                  		</tbody>\n                  		<tfoot>\n                  			<tr>\n                  				<td colspan="{{columns[log.journal.show][log.journal.detail].header.length}}" class="text-center">\n                  					<div st-pagination="" st-items-by-page="itemsByPage" st-displayed-pages="7"></div>\n                  				</td>\n                  			</tr>\n                  		</tfoot>\n                  	</table>\n\n                  </div>\n              </div>\n                <div class="tab-pane" id="tab_2_2">\n                  <div class="contact-portlet">\n                    <div class="actions">\n                      <div class="btn-group btn-group-devided" data-toggle="buttons">\n                        <label class="btn btn-transparent grey-salsa btn-circle btn-sm active" data-ng-click="log.history.show=\'Phones\';getRows(\'history\');">\n                        <input type="radio" class="toggle">{{\'APPLICATION_PHONES\' | translate}}</label>\n                        <label class="btn btn-transparent grey-salsa btn-circle btn-sm" data-ng-click="log.history.show=\'Emails\';log.history.detail=\'general\';getRows(\'history\');">\n                        <input type="radio" class="toggle">{{\'APPLICATION_EMAILS\' | translate}}</label>\n                      </div> |\n                      <div class="btn-group btn-group-devided" data-toggle="buttons">\n                        <label class="btn btn-transparent grey-salsa btn-circle btn-sm active" data-ng-click="log.history.type=\'HistoryInbounds\';getRows(\'history\');">\n                        <input type="radio" class="toggle">{{\'APPLICATION_INBOUND\' | translate}}</label>\n                        <label class="btn btn-transparent grey-salsa btn-circle btn-sm" data-ng-click="log.history.type=\'HistoryOutbounds\';getRows(\'history\');">\n                        <input type="radio" class="toggle">{{\'APPLICATION_OUTBOUND\' | translate}}</label>\n                      </div> |\n                      <div class="btn-group btn-group-devided" data-toggle="buttons" data-ng-if="log.history.show==\'Phones\'">\n                        <label class="btn btn-transparent grey-salsa btn-circle btn-sm active" data-ng-click="log.history.detail=\'general\';getRows(\'history\');">\n                        <input type="radio" class="toggle">{{\'APPLICATION_GENERAL\' | translate}}</label>\n                        <label class="btn btn-transparent grey-salsa btn-circle btn-sm" data-ng-click="log.history.detail=\'HistoryQueueCalls\';getRows(\'history\');">\n                        <input type="radio" class="toggle">{{\'APPLICATION_QUEUES\' | translate}}</label>\n                        <label class="btn btn-transparent grey-salsa btn-circle btn-sm" data-ng-click="log.history.detail=\'HistoryReportAgents\';getRows(\'history\');">\n                        <input type="radio" class="toggle">{{\'APPLICATION_AGENTS\' | translate}}</label>\n                      </div>\n                    </div>\n                    <table st-table="history" class="table table-striped">\n                      <thead>\n                      <tr>\n                        <th data-ng-repeat="column in columns[log.history.show][log.history.detail].header">{{column | translate}}</th>\n                      </tr>\n                      </thead>\n                      <tbody>\n                      <tr data-ng-repeat="row in rows[\'history\']">\n                        <td data-ng-repeat="col in columns[log.history.show][log.history.detail].indexes">{{col == \'createdAt\' ? moment(row[col]).format(\'DD/MM/YYYY HH:mm:ss\') : row[col]}}</td>\n                      </tr>\n                      <tr data-ng-hide="rows[\'history\'].length">\n                        <td colspan="{{columns[log.history.show][log.history.detail].header.length}}" class="text-center">\n                          {{\'MESSAGE_NO_RESULTS_AVAILABLE\' | translate}}\n                        </td>\n                      </tr>\n                      </tbody>\n                      <tfoot>\n                        <tr>\n                          <td colspan="{{columns[log.history.show][log.history.detail].header.length}}" class="text-center">\n                            <div st-pagination="" st-items-by-page="itemsByPage" st-displayed-pages="7"></div>\n                          </td>\n                        </tr>\n                      </tfoot>\n                    </table>\n\n                  </div>\n                </div>\n              </div>\n              <!--END TABS-->\n            </div>\n          </div>\n          <!-- END PORTLET -->\n        </div>\n        <div class="col-md-6">\n          <!-- BEGIN PORTLET -->\n          <div class="portlet light tasks-widget">\n            <div class="portlet-title">\n              <div class="caption caption-md">\n                <i class="icon-bar-chart theme-font hide"></i>\n                <span class="caption-subject font-blue-madison bold uppercase">Tasks</span>\n                <span class="caption-helper">16 pending</span>\n              </div>\n              <div class="inputs">\n                <div class="portlet-input input-small input-inline">\n                  <div class="input-icon right">\n                    <i class="icon-magnifier"></i>\n                    <input type="text" class="form-control form-control-solid" placeholder="search...">\n                  </div>\n                </div>\n              </div>\n            </div>\n            <div class="portlet-body">\n              <div class="task-content">\n                <div class="contact-portlet">\n                  <!-- START TASK LIST -->\n                  <ul class="task-list">\n                    <li>\n                      <div class="task-checkbox">\n                        <input type="hidden" value="1" name="test"/>\n                        <input type="checkbox" class="liChild" value="2" name="test"/>\n                      </div>\n                      <div class="task-title">\n                        <span class="task-title-sp">\n                        Present 2013 Year IPO Statistics at Board Meeting </span>\n                        <span class="label label-sm label-success">Company</span>\n                        <span class="task-bell">\n                        <i class="fa fa-bell-o"></i>\n                        </span>\n                      </div>\n                      <div class="task-config">\n                        <div class="task-config-btn btn-group">\n                          <a class="btn btn-xs default" href="#" data-toggle="dropdown" data-hover="dropdown" data-close-others="true">\n                          <i class="fa fa-cog"></i><i class="fa fa-angle-down"></i>\n                          </a>\n                          <ul class="dropdown-menu pull-right">\n                            <li>\n                              <a href="#">\n                              <i class="fa fa-check"></i> Complete </a>\n                            </li>\n                            <li>\n                              <a href="#">\n                              <i class="fa fa-pencil"></i> Edit </a>\n                            </li>\n                            <li>\n                              <a href="#">\n                              <i class="fa fa-trash-o"></i> Cancel </a>\n                            </li>\n                          </ul>\n                        </div>\n                      </div>\n                    </li>\n                    <li>\n                      <div class="task-checkbox">\n                        <input type="checkbox" class="liChild" value=""/>\n                      </div>\n                      <div class="task-title">\n                        <span class="task-title-sp">\n                        Hold An Interview for Marketing Manager Position </span>\n                        <span class="label label-sm label-danger">Marketing</span>\n                      </div>\n                      <div class="task-config">\n                        <div class="task-config-btn btn-group">\n                          <a class="btn btn-xs default" href="#" data-toggle="dropdown" data-hover="dropdown" data-close-others="true">\n                          <i class="fa fa-cog"></i><i class="fa fa-angle-down"></i>\n                          </a>\n                          <ul class="dropdown-menu pull-right">\n                            <li>\n                              <a href="#">\n                              <i class="fa fa-check"></i> Complete </a>\n                            </li>\n                            <li>\n                              <a href="#">\n                              <i class="fa fa-pencil"></i> Edit </a>\n                            </li>\n                            <li>\n                              <a href="#">\n                              <i class="fa fa-trash-o"></i> Cancel </a>\n                            </li>\n                          </ul>\n                        </div>\n                      </div>\n                    </li>\n                    <li>\n                      <div class="task-checkbox">\n                        <input type="checkbox" class="liChild" value=""/>\n                      </div>\n                      <div class="task-title">\n                        <span class="task-title-sp">\n                        AirAsia Intranet System Project Internal Meeting </span>\n                        <span class="label label-sm label-success">AirAsia</span>\n                        <span class="task-bell">\n                        <i class="fa fa-bell-o"></i>\n                        </span>\n                      </div>\n                      <div class="task-config">\n                        <div class="task-config-btn btn-group">\n                          <a class="btn btn-xs default" href="#" data-toggle="dropdown" data-hover="dropdown" data-close-others="true">\n                          <i class="fa fa-cog"></i><i class="fa fa-angle-down"></i>\n                          </a>\n                          <ul class="dropdown-menu pull-right">\n                            <li>\n                              <a href="#">\n                              <i class="fa fa-check"></i> Complete </a>\n                            </li>\n                            <li>\n                              <a href="#">\n                              <i class="fa fa-pencil"></i> Edit </a>\n                            </li>\n                            <li>\n                              <a href="#">\n                              <i class="fa fa-trash-o"></i> Cancel </a>\n                            </li>\n                          </ul>\n                        </div>\n                      </div>\n                    </li>\n                    <li>\n                      <div class="task-checkbox">\n                        <input type="checkbox" class="liChild" value=""/>\n                      </div>\n                      <div class="task-title">\n                        <span class="task-title-sp">\n                        Technical Management Meeting </span>\n                        <span class="label label-sm label-warning">Company</span>\n                      </div>\n                      <div class="task-config">\n                        <div class="task-config-btn btn-group">\n                          <a class="btn btn-xs default" href="#" data-toggle="dropdown" data-hover="dropdown" data-close-others="true">\n                          <i class="fa fa-cog"></i><i class="fa fa-angle-down"></i>\n                          </a>\n                          <ul class="dropdown-menu pull-right">\n                            <li>\n                              <a href="#">\n                              <i class="fa fa-check"></i> Complete </a>\n                            </li>\n                            <li>\n                              <a href="#">\n                              <i class="fa fa-pencil"></i> Edit </a>\n                            </li>\n                            <li>\n                              <a href="#">\n                              <i class="fa fa-trash-o"></i> Cancel </a>\n                            </li>\n                          </ul>\n                        </div>\n                      </div>\n                    </li>\n                    <li>\n                      <div class="task-checkbox">\n                        <input type="checkbox" class="liChild" value=""/>\n                      </div>\n                      <div class="task-title">\n                        <span class="task-title-sp">\n                        Kick-off Company CRM Mobile App Development </span>\n                        <span class="label label-sm label-info">Internal Products</span>\n                      </div>\n                      <div class="task-config">\n                        <div class="task-config-btn btn-group">\n                          <a class="btn btn-xs default" href="#" data-toggle="dropdown" data-hover="dropdown" data-close-others="true">\n                          <i class="fa fa-cog"></i><i class="fa fa-angle-down"></i>\n                          </a>\n                          <ul class="dropdown-menu pull-right">\n                            <li>\n                              <a href="#">\n                              <i class="fa fa-check"></i> Complete </a>\n                            </li>\n                            <li>\n                              <a href="#">\n                              <i class="fa fa-pencil"></i> Edit </a>\n                            </li>\n                            <li>\n                              <a href="#">\n                              <i class="fa fa-trash-o"></i> Cancel </a>\n                            </li>\n                          </ul>\n                        </div>\n                      </div>\n                    </li>\n                    <li>\n                      <div class="task-checkbox">\n                        <input type="checkbox" class="liChild" value=""/>\n                      </div>\n                      <div class="task-title">\n                        <span class="task-title-sp">\n                        Prepare Commercial Offer For SmartVision Website Rewamp </span>\n                        <span class="label label-sm label-danger">SmartVision</span>\n                      </div>\n                      <div class="task-config">\n                        <div class="task-config-btn btn-group">\n                          <a class="btn btn-xs default" href="#" data-toggle="dropdown" data-hover="dropdown" data-close-others="true">\n                          <i class="fa fa-cog"></i><i class="fa fa-angle-down"></i>\n                          </a>\n                          <ul class="dropdown-menu pull-right">\n                            <li>\n                              <a href="#">\n                              <i class="fa fa-check"></i> Complete </a>\n                            </li>\n                            <li>\n                              <a href="#">\n                              <i class="fa fa-pencil"></i> Edit </a>\n                            </li>\n                            <li>\n                              <a href="#">\n                              <i class="fa fa-trash-o"></i> Cancel </a>\n                            </li>\n                          </ul>\n                        </div>\n                      </div>\n                    </li>\n                    <li>\n                      <div class="task-checkbox">\n                        <input type="checkbox" class="liChild" value=""/>\n                      </div>\n                      <div class="task-title">\n                        <span class="task-title-sp">\n                        Sign-Off The Comercial Agreement With AutoSmart </span>\n                        <span class="label label-sm label-default">AutoSmart</span>\n                        <span class="task-bell">\n                        <i class="fa fa-bell-o"></i>\n                        </span>\n                      </div>\n                      <div class="task-config">\n                        <div class="task-config-btn btn-group">\n                          <a class="btn btn-xs default" href="#" data-toggle="dropdown" data-hover="dropdown" data-close-others="true">\n                          <i class="fa fa-cog"></i><i class="fa fa-angle-down"></i>\n                          </a>\n                          <ul class="dropdown-menu pull-right">\n                            <li>\n                              <a href="#">\n                              <i class="fa fa-check"></i> Complete </a>\n                            </li>\n                            <li>\n                              <a href="#">\n                              <i class="fa fa-pencil"></i> Edit </a>\n                            </li>\n                            <li>\n                              <a href="#">\n                              <i class="fa fa-trash-o"></i> Cancel </a>\n                            </li>\n                          </ul>\n                        </div>\n                      </div>\n                    </li>\n                    <li>\n                      <div class="task-checkbox">\n                        <input type="checkbox" class="liChild" value=""/>\n                      </div>\n                      <div class="task-title">\n                        <span class="task-title-sp">\n                        Company Staff Meeting </span>\n                        <span class="label label-sm label-success">Cruise</span>\n                        <span class="task-bell">\n                        <i class="fa fa-bell-o"></i>\n                        </span>\n                      </div>\n                      <div class="task-config">\n                        <div class="task-config-btn btn-group">\n                          <a class="btn btn-xs default" href="#" data-toggle="dropdown" data-hover="dropdown" data-close-others="true">\n                          <i class="fa fa-cog"></i><i class="fa fa-angle-down"></i>\n                          </a>\n                          <ul class="dropdown-menu pull-right">\n                            <li>\n                              <a href="#">\n                              <i class="fa fa-check"></i> Complete </a>\n                            </li>\n                            <li>\n                              <a href="#">\n                              <i class="fa fa-pencil"></i> Edit </a>\n                            </li>\n                            <li>\n                              <a href="#">\n                              <i class="fa fa-trash-o"></i> Cancel </a>\n                            </li>\n                          </ul>\n                        </div>\n                      </div>\n                    </li>\n                    <li class="last-line">\n                      <div class="task-checkbox">\n                        <input type="checkbox" class="liChild" value=""/>\n                      </div>\n                      <div class="task-title">\n                        <span class="task-title-sp">\n                        KeenThemes Investment Discussion </span>\n                        <span class="label label-sm label-warning">KeenThemes </span>\n                      </div>\n                      <div class="task-config">\n                        <div class="task-config-btn btn-group">\n                          <a class="btn btn-xs default" href="#" data-toggle="dropdown" data-hover="dropdown" data-close-others="true">\n                          <i class="fa fa-cog"></i><i class="fa fa-angle-down"></i>\n                          </a>\n                          <ul class="dropdown-menu pull-right">\n                            <li>\n                              <a href="#">\n                              <i class="fa fa-check"></i> Complete </a>\n                            </li>\n                            <li>\n                              <a href="#">\n                              <i class="fa fa-pencil"></i> Edit </a>\n                            </li>\n                            <li>\n                              <a href="#">\n                              <i class="fa fa-trash-o"></i> Cancel </a>\n                            </li>\n                          </ul>\n                        </div>\n                      </div>\n                    </li>\n                  </ul>\n                  <!-- END START TASK LIST -->\n                </div>\n              </div>\n            </div>\n          </div>\n          <!-- END PORTLET -->\n        </div>\n      </div>\n    </div>\n    <!-- END PROFILE CONTENT -->\n  </form>\n  </div>\n</div>\n'),
+a.put("app/main/template.newContactTab.html",'<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_NEW_CONTACT\' | translate }}</a> </span>\n    </div>\n  </div>\n  <div class="portlet-body">\n    <!-- <pre>\n      {{forms.general | json}}\n    </pre> -->\n    <!-- <pre>\n      {{item | json}}\n    </pre>\n    <pre>\n      {{index}}\n    </pre> -->\n        <form name="forms.general" data-ng-submit="submit({index: index,item: item})" novalidate>\n          <!-- <pre>\n            {{checkboxes | json}}\n          </pre>\n          <pre>\n            {{item | json}}\n          </pre> -->\n          <!-- BEGIN PORTLET -->\n          <div class="portlet light">\n            <div class="portlet-title">\n              <div class="caption caption-md">\n                <i class="icon-bar-chart theme-font hide"></i>\n                <span class="caption-subject font-blue-madison bold uppercase">{{\'APPLICATION_DETAILS\' | translate}}</span>\n              </div>\n              <div class="inputs">\n                <div class="portlet-input input-inline input-small ">\n                </div>\n              </div>\n            </div>\n            <div class="portlet-body">\n          <div class="row">\n            <div class="col-md-6">\n          <!-- START FULLNAME -->\n          <div class="form-group" data-ng-class="{\'has-error\': (forms.general.fullname.$touched || forms.general.$submitted) && forms.general.fullname.$invalid}">\n            <label class="control-label">{{\'APPLICATION_FULLNAME\' | translate}}<span class="required" aria-required="true">*</span></label>\n            <!-- <div class="input-group" data-ng-if="joinPrompt">\n              <input type="text" name="fullname" placeholder="{{\'APPLICATION_FULLNAME\' | translate}}" class="form-control" data-ng-model="item.fullname" data-ng-disabled="checkboxes.fullname ? !checkboxes.fullname : true" required/>\n              <span class="input-group-addon">\n              <input type="checkbox" data-ng-model="checkboxes.fullname">\n              </span>\n            </div> -->\n            <input data-ng-if="!joinPrompt" type="text" name="fullname" placeholder="{{\'APPLICATION_FULLNAME\' | translate}}" class="form-control" data-ng-model="item.fullname" required/>\n            <span data-ng-show="(forms.general.fullname.$touched || forms.general.$submitted) && forms.general.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 FULLNAME -->\n\n          <!-- START COMPANY -->\n          <div class="form-group" data-ng-class="{\'has-error\': forms.general.CompanyId.$invalid && forms.general.$submitted}">\n            <label class="control-label">{{\'APPLICATION_COMPANY\' | translate}}</label>\n            <!-- <div class="input-group" data-ng-if="joinPrompt">\n              <ui-select data-ng-model="item.CompanyId" theme="bootstrap" name="CompanyId" data-ng-disabled="checkboxes.CompanyId ? !checkboxes.CompanyId : true">\n                <ui-select-match allow-clear placeholder="{{ \'APPLICATION_COMPANY\' | translate }}">{{$select.selected.name}}</ui-select-match>\n                <ui-select-choices repeat="company.id as company in companies | filter: $select.search">\n                  <div ng-bind-html="company.name | highlight: $select.search"></div>\n                </ui-select-choices>\n              </ui-select>\n              <span class="input-group-addon">\n              <input type="checkbox" data-ng-model="checkboxes.CompanyId">\n              </span>\n            </div> -->\n            <ui-select data-ng-if="!joinPrompt" data-ng-model="item.CompanyId" theme="bootstrap" name="CompanyId" data-ng-disabled="disabled">\n              <ui-select-match allow-clear placeholder="{{ \'APPLICATION_COMPANY\' | translate }}">{{$select.selected.name}}</ui-select-match>\n              <ui-select-choices repeat="company.id as company in companies | filter: $select.search">\n                <div ng-bind-html="company.name | highlight: $select.search"></div>\n              </ui-select-choices>\n            </ui-select>\n            <span data-ng-show="forms.general.CompanyId.$invalid && forms.general.$submitted" class="help-block help-block-error">\n              <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n            </span>\n          </div>\n          <!-- END COMPANY -->\n\n          <!-- START STREET -->\n          <div class="form-group" data-ng-class="{\'has-error\': (forms.general.street.$touched || forms.general.$submitted) && forms.general.street.$invalid}">\n            <label class="control-label">{{\'APPLICATION_STREET\' | translate}}</label>\n            <!-- <div class="input-group" data-ng-if="joinPrompt">\n              <input type="text" name="street" placeholder="{{\'APPLICATION_STREET\' | translate}}" class="form-control" data-ng-model="item.street" data-ng-disabled="checkboxes.street ? !checkboxes.street : true"/>\n              <span class="input-group-addon">\n              <input type="checkbox" data-ng-model="checkboxes.street">\n              </span>\n            </div> -->\n            <input data-ng-if="!joinPrompt" type="text" name="street" placeholder="{{\'APPLICATION_STREET\' | translate}}" class="form-control" data-ng-model="item.street"/>\n            <span data-ng-show="(forms.general.street.$touched || forms.general.$submitted) && forms.general.street.$error.required" class="help-block help-block-error">\n              <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n            </span>\n          </div>\n          <!-- END STREET -->\n\n          <!-- START POSTALCODE -->\n          <div class="form-group" data-ng-class="{\'has-error\': (forms.general.postalCode.$touched || forms.general.$submitted) && forms.general.postalCode.$invalid}">\n            <label class="control-label">{{\'APPLICATION_POSTALCODE\' | translate}}</label>\n            <!-- <div class="input-group" data-ng-if="joinPrompt">\n              <input type="text" name="postalCode" placeholder="{{\'APPLICATION_POSTALCODE\' | translate}}" class="form-control" data-ng-model="item.postalCode" data-ng-disabled="checkboxes.postalCode ? !checkboxes.postalCode : true"/>\n              <span class="input-group-addon">\n              <input type="checkbox" data-ng-model="checkboxes.postalCode">\n              </span>\n            </div> -->\n            <input data-ng-if="!joinPrompt" type="text" name="postalCode" placeholder="{{\'APPLICATION_POSTALCODE\' | translate}}" class="form-control" data-ng-model="item.postalCode"/>\n            <span data-ng-show="(forms.general.postalCode.$touched || forms.general.$submitted) && forms.general.postalCode.$error.required" class="help-block help-block-error">\n              <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n            </span>\n          </div>\n          <!-- END POSTALCODE -->\n\n          <!-- START CITY -->\n          <div class="form-group" data-ng-class="{\'has-error\': (forms.general.city.$touched || forms.general.$submitted) && forms.general.city.$invalid}">\n            <label class="control-label">{{\'APPLICATION_CITY\' | translate}}</label>\n            <!-- <div class="input-group" data-ng-if="joinPrompt">\n              <input type="text" name="city" placeholder="{{\'APPLICATION_CITY\' | translate}}" class="form-control" data-ng-model="item.city" data-ng-disabled="checkboxes.city ? !checkboxes.city : true"/>\n              <span class="input-group-addon">\n              <input type="checkbox" data-ng-model="checkboxes.city">\n              </span>\n            </div> -->\n            <input data-ng-if="!joinPrompt" type="text" name="city" placeholder="{{\'APPLICATION_CITY\' | translate}}" class="form-control" data-ng-model="item.city"/>\n            <span data-ng-show="(forms.general.city.$touched || forms.general.$submitted) && forms.general.city.$error.required" class="help-block help-block-error">\n              <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n            </span>\n          </div>\n          <!-- END CITY -->\n        </div>\n        <div class="col-md-6">\n          <!-- START COUNTRY -->\n          <div class="form-group" data-ng-class="{\'has-error\': (forms.general.country.$touched || forms.general.$submitted) && forms.general.country.$invalid}">\n            <label class="control-label">{{\'APPLICATION_COUNTRY\' | translate}}</label>\n            <!-- <div class="input-group" data-ng-if="joinPrompt">\n              <input type="text" name="country" placeholder="{{\'APPLICATION_COUNTRY\' | translate}}" class="form-control" data-ng-model="item.country" data-ng-disabled="checkboxes.country ? !checkboxes.country : true"/>\n              <span class="input-group-addon">\n              <input type="checkbox" data-ng-model="checkboxes.country">\n              </span>\n            </div> -->\n            <input data-ng-if="!joinPrompt" type="text" name="country" placeholder="{{\'APPLICATION_COUNTRY\' | translate}}" class="form-control" data-ng-model="item.country"/>\n            <span data-ng-show="(forms.general.country.$touched || forms.general.$submitted) && forms.general.country.$error.required" class="help-block help-block-error">\n              <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n            </span>\n          </div>\n          <!-- END COUNTRY -->\n\n          <!-- START DATEOFBIRTH -->\n          <div class="form-group" data-ng-class="{\'has-error\': (forms.general.dateOfBirth.$touched || forms.general.$submitted) && forms.general.dateOfBirth.$invalid}">\n            <label class="control-label">{{\'APPLICATION_DATEOFBIRTH\' | translate}}</label>\n            <!-- <div class="input-group" data-ng-if="joinPrompt">\n              <input type="date" name="dateOfBirth" placeholder="{{\'APPLICATION_DATEOFBIRTH\' | translate}}" class="form-control" data-ng-model="item.dateOfBirth" data-ng-disabled="checkboxes.dateOfBirth ? !checkboxes.dateOfBirth : true"/>\n              <span class="input-group-addon">\n              <input type="checkbox" data-ng-model="checkboxes.dateOfBirth">\n              </span>\n            </div> -->\n            <input data-ng-if="!joinPrompt" type="date" name="dateOfBirth" placeholder="{{\'APPLICATION_DATEOFBIRTH\' | translate}}" class="form-control" data-ng-model="item.dateOfBirth"/>\n            <span data-ng-show="(forms.general.dateOfBirth.$touched || forms.general.$submitted) && forms.general.dateOfBirth.$error.required" class="help-block help-block-error">\n              <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n            </span>\n          </div>\n          <!-- END DATEOFBIRTH -->\n\n          <!-- START TAGS -->\n          <div class="form-group" data-ng-class="{\'has-error\': forms.general.tags.$invalid && forms.general.$submitted}">\n            <label class="control-label">{{\'APPLICATION_TAGS\' | translate}}</label>\n            <!-- <div class="input-group" data-ng-if="joinPrompt">\n              <ui-select tagging tagging-label="" multiple=\'true\' data-ng-model="item.tags" theme="bootstrap" name="tags" data-ng-readonly="checkboxes.tags ? !checkboxes.tags : true">\n                <ui-select-match placeholder="{{ \'APPLICATION_TAGS\' | translate }}">{{$item}}</ui-select-match>\n                <ui-select-choices repeat="tag in tags | filter: $select.search">\n                  {{tag}}\n                </ui-select-choices>\n              </ui-select>\n              <span class="input-group-addon">\n              <input type="checkbox" data-ng-model="checkboxes.tags">\n              </span>\n            </div> -->\n            <ui-select data-ng-if="!joinPrompt" tagging tagging-label="" multiple=\'true\' data-ng-model="item.tags" theme="bootstrap" name="tags" ng-disabled="disabled">\n              <ui-select-match placeholder="{{ \'APPLICATION_TAGS\' | translate }}">{{$item}}</ui-select-match>\n              <ui-select-choices repeat="tag in tags | filter: $select.search">\n                {{tag}}\n              </ui-select-choices>\n            </ui-select>\n            <span data-ng-show="forms.general.tags.$invalid && forms.general.$submitted" class="help-block help-block-error">\n              <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n            </span>\n          </div>\n          <!-- END TAGS -->\n\n          <!-- START DESCRIPTION -->\n          <div class="form-group">\n            <label class="control-label">{{\'APPLICATION_DESCRIPTION\' | translate}}</label>\n            <!-- <div class="input-group" data-ng-if="joinPrompt">\n              <textarea style="resize: vertical;" name="description" placeholder="{{\'APPLICATION_DESCRIPTION\' | translate}}" class="form-control" data-ng-model="item.description" data-ng-disabled="checkboxes.description ? !checkboxes.description : true"></textarea>\n              <span class="input-group-addon">\n              <input type="checkbox" data-ng-model="checkboxes.description">\n              </span>\n            </div> -->\n            <textarea data-ng-if="!joinPrompt" style="resize: vertical;" name="description" placeholder="{{\'APPLICATION_DESCRIPTION\' | translate}}" class="form-control" data-ng-model="item.description"></textarea>\n          </div>\n          <!-- END DESCRIPTION -->\n        </div>\n      </div>\n    </div>\n  </div>\n  <!-- END PORTLET -->\n  <!-- START PORTLET -->\n  <div class="portlet light">\n    <div class="portlet-title">\n      <div class="caption caption-md">\n        <i class="icon-bar-chart theme-font hide"></i>\n        <span class="caption-subject font-blue-madison bold uppercase">{{\'APPLICATION_CUSTOM_FIELDS\' | translate}}</span>\n      </div>\n      <div class="inputs">\n        <div class="portlet-input input-inline input-small ">\n        </div>\n      </div>\n    </div>\n    <div class="portlet-body">\n      <div data-ng-repeat="customField in customFields">\n        <div data-ng-if="customField.type==\'text\'" class="form-group" data-ng-class="{\'has-error\': (forms.general[customField.name].$touched || forms.general.$submitted) && forms.general[customField.name].$invalid}">\n          <label class="control-label">{{customField.name}}</label>\n          <input data-ng-if="!joinPrompt" type="text" name="{{customField.name}}" placeholder="{{customField.name}}" class="form-control" data-ng-model="item.customFields[customField.id]"/>\n          <span data-ng-show="(forms.general[customField.name].$touched || forms.general.$submitted) && forms.general[customField.name].$error.required" class="help-block help-block-error">\n            <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n          </span>\n        </div>\n        <div data-ng-if="customField.type==\'select\'" class="form-group" data-ng-class="{\'has-error\': forms.general[customField.name].$invalid && forms.general.$submitted}">\n          <label class="control-label">{{customField.name}}</label>\n          <ui-select data-ng-if="!joinPrompt" data-ng-model="item.customFields[customField.id]" theme="bootstrap" name="{{customField.name}}" data-ng-disabled="disabled">\n            <ui-select-match allow-clear placeholder="{{customField.name}}">{{$select.selected.value}}</ui-select-match>\n            <ui-select-choices repeat="choice.value as choice in customField.values | filter: $select.search">\n              <div ng-bind-html="choice.value | highlight: $select.search"></div>\n            </ui-select-choices>\n          </ui-select>\n          <span data-ng-show="forms.general[customField.name].$invalid && forms.general.$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 PORTLET -->\n  <div class="row">\n    <div class="col-md-6">\n  <!-- START PORTLET -->\n  <div class="portlet light">\n    <div class="portlet-title">\n      <div class="caption caption-md">\n        <i class="icon-bar-chart theme-font hide"></i>\n        <span class="caption-subject font-blue-madison bold uppercase">{{\'APPLICATION_PHONES\' | translate}}</span>\n      </div>\n      <div class="inputs">\n        <div class="portlet-input input-inline input-small ">\n        </div>\n      </div>\n    </div>\n    <div class="portlet-body">\n          <!-- START PHONES -->\n          <div class="">\n          <div data-ng-if="item.Phones.length>0">\n            <!-- <label class="control-label">{{\'APPLICATION_PHONES\' | translate}}</label> -->\n          </div>\n          <div class="padding-bottom" ng-repeat="phone in item.Phones">\n            <div class="form-group">\n              <div class="input-group">\n                <input type="text" class="form-control" ng-model="phone.phone" required>\n                <span class="input-group-btn">\n                <button class="btn red" type="button"data-ng-click="removeField(\'Phones\',$index)"><i class="fa fa-times"></i></button>\n                </span>\n              </div>\n            </div>\n          </div>\n          <button type="button" class="btn btn-sm green padding-bottom" ng-click="addField(\'Phones\')">\n            <i class="fa fa-plus"></i> {{\'APPLICATION_ADD_PHONE\' | translate}}\n          </button>\n        </div>\n        <!-- END PHONES -->\n      </div>\n    </div>\n    <!-- END PORTLET -->\n  </div>\n  <div class="col-md-6">\n    <!-- START PORTLET -->\n    <div class="portlet light">\n      <div class="portlet-title">\n        <div class="caption caption-md">\n          <i class="icon-bar-chart theme-font hide"></i>\n          <span class="caption-subject font-blue-madison bold uppercase">{{\'APPLICATION_EMAILS\' | translate}}</span>\n        </div>\n        <div class="inputs">\n          <div class="portlet-input input-inline input-small ">\n          </div>\n        </div>\n      </div>\n      <div class="portlet-body">\n        <!-- START EMAILS -->\n          <div class="">\n          <div data-ng-if="item.Emails.length>0">\n            <!-- <label class="control-label">{{\'APPLICATION_EMAILS\' | translate}}</label> -->\n          </div>\n          <div class="padding-bottom" ng-repeat="email in item.Emails">\n            <div class="form-group">\n              <div class="input-group">\n                <input type="email" class="form-control" ng-model="email.email" required>\n                <span class="input-group-btn">\n                <button class="btn btn-danger" type="button" data-ng-click="removeField(\'Emails\',$index)"><i class="fa fa-times"></i></button>\n                </span>\n              </div>\n            </div>\n          </div>\n          <button type="button" class="btn btn-sm green padding-bottom" ng-click="addField(\'Emails\')">\n            <i class="fa fa-plus"></i> {{\'APPLICATION_ADD_EMAIL\' | translate}}\n          </button>\n        </div>\n        <!-- END EMAILS -->\n      </div>\n    </div>\n    <!-- END PORTLET -->\n  </div>\n</div>\n    <!-- START PORTLET -->\n    <div class="portlet light">\n      <div class="portlet-title">\n        <div class="caption caption-md">\n          <i class="icon-bar-chart theme-font hide"></i>\n          <!-- <span class="caption-subject font-blue-madison bold uppercase">{{\'APPLICATION_PHONES\' | translate}}</span> -->\n        </div>\n        <div class="inputs">\n          <div class="portlet-input input-inline input-small ">\n          </div>\n        </div>\n      </div>\n      <div class="portlet-body">\n          <div class="mbottom20">\n          <input class="btn green-haze" type="submit" value="{{\'APPLICATION_CONFIRM\' | translate}}" data-ng-disabled="!item.fullname"/>\n        </div>\n        <!-- <div data-ng-if="joinPrompt">\n          <p>{{\'APPLICATION_OR\' | translate}}</p>\n          <input class="btn green-haze mbottom20" type="button" value="{{\'APPLICATION_JOIN_WITH\' | translate}}" data-ng-disabled="!item.id" data-ng-click="joinContact(index)"/>\n\n          <div class="form-group" data-ng-class="{\'has-error\': forms.general.id.$invalid && forms.general.$submitted}">\n            <ui-select  data-ng-model="item.id" theme="bootstrap" name="id" data-ng-disabled="disabled">\n              <ui-select-match placeholder="{{ \'APPLICATION_EXISTING_CONTACT\' | translate }}">{{$select.selected.fullname}}</ui-select-match>\n              <ui-select-choices repeat="contact.id as contact in contacts | filter: $select.search">\n                <div ng-bind-html="contact.fullname | highlight: $select.search"></div>\n              </ui-select-choices>\n            </ui-select>\n            <span data-ng-show="forms.general.id.$invalid && forms.general.$submitted" class="help-block help-block-error">\n'+"              <strong>{{'APPLICATION_WARNING' | translate}}!</strong> {{'MESSAGE_REQUIRED_FIELD' | translate}}.\n            </span>\n          </div>\n\n        </div> -->\n      </div>\n    </div>\n    <!-- END PORTLET -->\n\n        </form>\n  </div>\n</div>\n<pre>\n  {{item | json}}\n</pre>\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" data-ng-init="initChoices(rule,rule.field.subField.api,rule.data,$index,0,\'data2\');initChoices(rule,rule.field.subField.subField.api,rule.data,$index,1,\'data3\',rule.data2);">\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\n															<ui-select data-ng-model="rule.field" theme="bootstrap" class="col-md-2" data-ng-change="clearData(rule,[\'operator\',\'data\',\'data2\',\'data3\']);">\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\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\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" data-ng-change="clearData(rule,[\'data2\',\'data3\']);getResults(rule.field.subField.api,rule.data,$index,0)">\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\n															<div class="col-md-2 left-margin" ng-if="rule.data && rule.field && rule.field.subField && rule.field.subField.propertyField==\'input\'">\n																<input type="text" ng-model="rule.data2" class="form-control"/>\n															</div>\n															<div class="col-md-2 left-margin" ng-if=" rule.data && rule.field && rule.field.subField && rule.field.subField.propertyField==\'number\'">\n																<input type="number" ng-model="rule.data2" class="form-control"/>\n															</div>\n															<ui-select ng-if="rule.data && rule.field && rule.field.subField && rule.field.subField.propertyField==\'select\'" data-ng-model="rule.data2" class="col-md-2 left-margin" theme="bootstrap" data-ng-change="clearData(rule,[\'data3\']);getResults(rule.field.subField.subField.api,rule.data,$index,1,rule.data2)">\n																<ui-select-match placeholder="">{{$select.selected.name | translate}}</ui-select-match>\n																<ui-select-choices repeat="property.value as property in (rule.field.subField.api ? choices[$index][0] : properties[rule.field.subField.value])| filter: $select.search">\n																	<div ng-bind-html="property.name | translate | highlight: $select.search"></div>\n																</ui-select-choices>\n															</ui-select>\n\n															<div class="col-md-2 left-margin" ng-if="rule.data && rule.data2 && rule.field && rule.field.subField && rule.field.subField.subField && rule.field.subField.subField.propertyField==\'input\'">\n																<input type="text" ng-model="rule.data3" class="form-control"/>\n															</div>\n															<div class="col-md-2 left-margin" ng-if="rule.data && rule.data2 && rule.field && rule.field.subField && rule.field.subField.subField && rule.field.subField.subField.propertyField==\'number\'">\n																<input type="number" ng-model="rule.data3" class="form-control"/>\n															</div>\n															<ui-select ng-if="rule.data && rule.data2 && rule.field && rule.field.subField && rule.field.subField.subField && rule.field.subField.subField.propertyField==\'select\'" data-ng-model="rule.data3" 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 (rule.field.subField.subField.api ? choices[$index][1] : properties[rule.field.subField.subField.value])| filter: $select.search">\n																	<div ng-bind-html="property.name | translate | highlight: $select.search"></div>\n																</ui-select-choices>\n															</ui-select>\n\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/main/template.reportBuilderView.html",'<div class="alert alert-warning alert-group">\n        <div class="form-inline" data-ng-class="{\'has-error\': forms.report.$submitted && !group.rules.length}">\n            <select ng-options="o.name as o.name for o in operators" ng-model="group.operator" class="form-control input-sm"></select>\n            <button style="margin-left: 5px" type="button" ng-click="addCondition()" class="btn btn-sm btn-success"><span class="glyphicon glyphicon-plus-sign"></span> {{\'APPLICATION_ADD_CONDITION\' | translate}}</button>\n            <button style="margin-left: 5px" type="button" ng-click="addGroup()" class="btn btn-sm btn-success"><span class="glyphicon glyphicon-plus-sign"></span> {{\'APPLICATION_ADD_GROUP\' | translate}}</button>\n            <button style="margin-left: 5px" type="button" ng-click="removeGroup()" class="btn btn-sm btn-danger"><span class="glyphicon glyphicon-minus-sign"></span> {{\'APPLICATION_REMOVE_GROUP\' | translate}}</button>\n        </div>\n        <div class="group-conditions">\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                        <report-builder group="rule.group" fields="fields" forms="forms"></report-builder>\n                    </div>\n                    <div ng-switch-default="ng-switch-default">\n                        <div class="row">\n                          <div class="col-md-2" data-ng-class="{\'has-error\': forms.report.$submitted && !rule.field}">\n                          <ui-select data-ng-model="rule.field" theme="bootstrap" dynamic-name="randomName()" required>\n                            <ui-select-match placeholder="">{{$select.selected.field | translate}}</ui-select-match>\n                            <ui-select-choices repeat="field.field as field in fields | filter: $select.search">\n                              <div ng-bind-html="field.field | highlight: $select.search"></div>\n                            </ui-select-choices>\n                          </ui-select>\n                          <span data-ng-show="forms.report.$submitted && !rule.field" class="help-block help-block-error">\n                            <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n                          </span>\n                        </div>\n                          <ui-select data-ng-model="rule.condition" theme="bootstrap" class="col-md-1" dynamic-name="randomName()">\n                            <ui-select-match placeholder="">{{$select.selected.name}}</ui-select-match>\n                            <ui-select-choices repeat="condition.name as condition in conditions | filter: $select.search">\n                              <div ng-bind-html="condition.name | highlight: $select.search"></div>\n                            </ui-select-choices>\n                          </ui-select>\n                          <div class="col-md-2 left-margin" data-ng-class="{\'has-error\': forms.report.$submitted && !rule.value}">\n                            <input type="text" ng-model="rule.value" class="form-control" dynamic-name="randomName()" required/>\n                            <span data-ng-show="forms.report.$submitted && !rule.value" class="help-block help-block-error">\n															<strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n														</span>\n                          </div>\n                            <button style="margin-left: 5px" ng-click="removeCondition($index)" class="btn btn-sm btn-danger" type="button"><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">\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" data-ng-init="initView()">\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" data-ng-repeat="group in groupedIntegration">\n      <div class="col-md-3" data-ng-repeat="integration in group">\n        <div class="our-integrations">\n          <h3> {{integration.name}} <small> {{integration.author}}</small></h3>\n          <img data-ng-src="{{integration.logo}}" alt="{{integration.name}}" class="img-responsive"/>\n          <div class="integration-info" data-ng-if="!integration.downloading">\n            <p>\n              {{integration.description}}\n            </p>\n            <div class="pull-right">\n	            <a data-ng-disabled="isProgressing" data-ng-if="!integration.active" data-ng-click="installIntegration(integration)" href="#" class="btn btn-xs green-meadow">Install <i class="fa fa-download"></i></a>\n							<a data-ng-disabled="isProgressing" data-ng-if="integration.active" data-ng-click="uninstallIntegration(integration)" href="#" class="btn btn-xs red-sunglo">Uninstall <i class="fa fa-trash"></i></a>\n	            <a href="https://wiki.xcallymotion.com/" class="btn btn-xs grey-cascade" target="_blank">More <i class="fa fa-link"></i></a>\n            </div>\n          </div>\n					<div class="integration-info" data-ng-if="integration.downloading">\n						<div>\n							<uib-progressbar class="progress-striped active" value="percentage" type="success"><i style="color:black;">{{status}}</i></uib-progressbar>\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" style="margin-top: -92px;"></div>\n'),a.put("app/salesforce/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="/salesforce/list">{{ \'APPLICATION_SALESFORCE\' | 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_SALESFORCE\' | 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="/salesforce/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\',\'password\',\'clientId\',\'clientSecret\',\'securityToken\'])" csv-header="[\'Name\', \'Username\', \'Remote Address\', \'Password\', \'Client Id\', \'Client Secret\', \'Security token\']" field-separator=";" filename="salesforce_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="displayedSalesforceAccounts" 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 displayedSalesforceAccounts" 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="/salesforce/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="displayedSalesforceAccounts.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/salesforce/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              <!-- 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							<!-- 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_USERNAME\' | 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 PASSWORD -->\n							<div class="form-group" data-ng-class="{\'has-error\': forms.formSetting.$submitted && forms.formSetting.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.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 CLIENT ID -->\n							<div class="form-group" data-ng-class="{\'has-error\': forms.formSetting.$submitted && forms.formSetting.clientId.$invalid}">\n								<label class="control-label">{{\'APPLICATION_CLIENT_ID\' | translate}} <span class="required" aria-required="true">*</span></label>\n								<input type="text" name="clientId" placeholder="{{\'APPLICATION_CLIENT_ID\' | translate}}" class="form-control" data-ng-model="account.clientId" required/>\n								<span data-ng-show="forms.formSetting.clientId.$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 CLIENT ID -->\n\n              <!-- START CLIENT SECRET -->\n							<div class="form-group" data-ng-class="{\'has-error\': forms.formSetting.$submitted && forms.formSetting.clientSecret.$invalid}">\n								<label class="control-label">{{\'APPLICATION_CLIENT_SECRET\' | translate}} <span class="required" aria-required="true">*</span></label>\n								<input type="text" name="clientSecret" placeholder="{{\'APPLICATION_CLIENT_SECRET\' | translate}}" class="form-control" data-ng-model="account.clientSecret" required/>\n								<span data-ng-show="forms.formSetting.clientSecret.$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 CLIENT SECRET -->\n\n              <!-- START SECURITY TOKEN -->\n							<div class="form-group" data-ng-class="{\'has-error\': forms.formSetting.$submitted && forms.formSetting.securityToken.$invalid}">\n								<label class="control-label">{{\'APPLICATION_SECURITY_TOKEN\' | translate}} <span class="required" aria-required="true">*</span></label>\n								<input type="text" name="securityToken" placeholder="{{\'APPLICATION_SECURITY_TOKEN\' | translate}}" class="form-control" data-ng-model="account.securityToken" required/>\n								<span data-ng-show="forms.formSetting.securityToken.$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 SECURITY 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/salesforce/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								<!-- 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/salesforce/view/view.configurationSettings.html",'<div class="row" data-ng-init="getConfiguration();getVariables();getFields();">\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}}: {{configurationName}}</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 ui-padding active" id="tab_1_1">\n            <div class="row">\n              <div class="col-md-11">\n                <span class="caption-subject">All following fields will be join by blank space:</span>\n              </div>\n              <div class="col-md-1 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 ng-scrollbars ng-scrollbars-config="config"> -->\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-8" 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="updateField(subjectItem)">\n	                </div>\n	              </div>\n	              <div class="col-md-8" 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="updateField(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-1">\n	                <div class="form-group">\n	                  <button class="btn btn-icon-only red" data-ng-click="removeItem(subjectItem)"><i class="fa fa-times"></i></button>\n	                </div>\n	              </div>\n	            </div>\n						<!-- </div> -->\n					</div>\n					<!-- END SUBJECT TAB -->\n          <!-- DESCRIPTION TAB -->\n					<div class="tab-pane ui-padding" id="tab_1_2">\n						<div class="row">\n              <div class="col-md-11">\n                <span class="caption-subject">All following fields will be join by new line:</span>\n              </div>\n              <div class="col-md-1 pull-rigth">\n                <button class="btn btn-icon-only green" data-ng-click="addItemDescription()"><i class="fa fa-plus"></i></button>\n              </div>\n            </div>\n            <hr>\n						<!-- <div ng-scrollbars ng-scrollbars-config="config"> -->\n							<div class="row" data-ng-repeat="descriptionItem in descriptionConfig">\n								<!-- <pre>\n									{{descriptionItem|json}}\n								</pre> -->\n	              <div class="col-md-2">\n	                <ui-select ng-model="descriptionItem.type" theme="bootstrap" ng-disabled="disabled" data-ng-change="changeDescType(descriptionItem)">\n	                  <ui-select-match placeholder="{{\'APPLICATION_SEARCH\' | translate}}">{{$select.selected | ucfirst}}</ui-select-match>\n	                  <ui-select-choices repeat="item in descFieldType | filter: $select.search">\n	                    <div ng-bind-html="item | highlight: $select.search | ucfirst"></div>\n	                  </ui-select-choices>\n	                </ui-select>\n	              </div>\n	              <div class="col-md-9" data-ng-if="descriptionItem.type==\'string\'">\n	                <div class="form-group">\n	                  <input type="text" class="form-control" data-ng-model="descriptionItem.content" data-ng-change="updateField(descriptionItem)">\n	                </div>\n	              </div>\n								<div class="col-md-3" data-ng-if="descriptionItem.type==\'key_value\'">\n									<input type="text" class="form-control" placeholder="Key" data-ng-model="descriptionItem.key" data-ng-change="updateField(descriptionItem)">\n								</div>\n								<div class="col-md-3" data-ng-if="descriptionItem.type==\'key_value\'">\n									<ui-select ng-model="descriptionItem.keyType" theme="bootstrap" ng-disabled="disabled" data-ng-change="changeDescType(descriptionItem)">\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-3" data-ng-if="descriptionItem.type==\'key_value\' && descriptionItem.keyType==\'string\'">\n									<input type="text" class="form-control" placeholder="Value" data-ng-model="descriptionItem.keyContent" data-ng-change="updateField(descriptionItem)">\n								</div>\n	              <div class="col-md-3" data-ng-if="descriptionItem.type==\'key_value\' && descriptionItem.keyType==\'variable\'">\n	                <div class="form-group">\n	                  <ui-select theme="bootstrap" ng-disabled="disabled" data-ng-model="descriptionItem.VariableId" data-ng-change="updateField(descriptionItem)">\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-1">\n	                <div class="form-group">\n	                  <button class="btn btn-icon-only red" data-ng-click="removeItem(descriptionItem)"><i class="fa fa-times"></i></button>\n	                </div>\n	              </div>\n	            </div>\n						<!-- </div> -->\n					</div>\n					<!-- END DESCRIPTION TAB -->\n          <!-- FIELDS TAB -->\n					<div class="tab-pane ui-padding" id="tab_1_3">\n						<div class="row">\n              <div class="col-md-11">\n                <span class="caption-subject">Add how to fill the fields present in your account:</span>\n              </div>\n              <div class="col-md-1 pull-rigth">\n                <button class="btn btn-icon-only green" data-ng-click="addItemField()"><i class="fa fa-plus"></i></button>\n              </div>\n            </div>\n            <hr>\n						<!-- <div ng-scrollbars ng-scrollbars-config="config"> -->\n	            <div class="row" data-ng-repeat="fieldItem in fieldConfig">\n	              <div class="col-md-3">\n	                <ui-select ng-model="fieldItem.idField" theme="bootstrap" ng-disabled="disabled" data-ng-change="changeFieldType(fieldItem)">\n	                  <ui-select-match placeholder="{{\'APPLICATION_SEARCH\' | translate}}">{{$select.selected.label}}</ui-select-match>\n	                  <ui-select-choices repeat="item.name as item in accountFields | filter: $select.search">\n	                    <div ng-bind-html="item.label | highlight: $select.search"></div>\n	                  </ui-select-choices>\n	                </ui-select>\n	              </div>\n	              <div class="col-md-8" data-ng-if="getSystemFieldOptions(fieldItem.idField)">\n	                <div class="form-group">\n										<ui-select ng-model="fieldItem.content" theme="bootstrap" ng-disabled="disabled" data-ng-change="updateField(fieldItem)">\n		                  <ui-select-match placeholder="{{\'APPLICATION_SEARCH\' | translate}}">{{$select.selected.label}}</ui-select-match>\n		                  <ui-select-choices repeat="item.value as item in getSystemFieldOptions(fieldItem.idField) | filter: $select.search">\n		                    <div ng-bind-html="item.value | highlight: $select.search"></div>\n		                  </ui-select-choices>\n		                </ui-select>\n	                </div>\n	              </div>\n								<div class="col-md-4" data-ng-if="!getSystemFieldOptions(fieldItem.idField)">\n									<div class="form-group">\n										<ui-select ng-model="fieldItem.type" theme="bootstrap" ng-disabled="disabled" data-ng-change="changeType(fieldItem)">\n		                  <ui-select-match placeholder="{{\'APPLICATION_SEARCH\' | translate}}">{{$select.selected | ucfirst}}</ui-select-match>\n		                  <ui-select-choices repeat="item in fieldType | filter: $select.search">\n		                    <div ng-bind-html="item | highlight: $select.search | ucfirst"></div>\n		                  </ui-select-choices>\n		                </ui-select>\n									</div>\n								</div>\n								<div class="col-md-4" data-ng-if="!getSystemFieldOptions(fieldItem.idField) && fieldItem.type === \'string\'">\n	                <div class="form-group">\n										<input type="text" class="form-control" data-ng-model="fieldItem.content" data-ng-change="updateField(fieldItem)">\n	                </div>\n	              </div>\n								<div class="col-md-4" data-ng-if="!getSystemFieldOptions(fieldItem.idField) && fieldItem.type === \'variable\'">\n	                <div class="form-group">\n										<ui-select theme="bootstrap" ng-disabled="disabled" data-ng-model="fieldItem.VariableId" data-ng-change="updateField(fieldItem)">\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-1">\n	                <div class="form-group">\n	                  <button class="btn btn-icon-only red" data-ng-click="removeItem(fieldItem)"><i class="fa fa-times"></i></button>\n	                </div>\n	              </div>\n	            </div>\n						<!-- </div> -->\n					</div>\n					<!-- END FIELDS TAB -->\n				</div>\n			</div>\n		</div>\n	</div>\n</div>\n'),a.put("app/salesforce/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="/salesforce/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="/salesforce/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/salesforce/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="/salesforce/list">{{ \'APPLICATION_SALESFORCE\' | 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/salesforce.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.salesforce.view.account\')}">\n							<a ng-href="/salesforce/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.salesforce.view.configurations\') || $state.is(\'main.salesforce.view.configuration\')}">\n							<a ng-href="/salesforce/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/salesforce/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="/salesforce/list">{{ \'APPLICATION_SALESFORCE\' | 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_USERNAME\' | translate}}" class="form-control" data-ng-model="item.username" required ng-remote-validate="/api/salesforce/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\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/>\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 PASSWORD -->\n							<div class="form-group" data-ng-class="{\'has-error\': forms.formSetting.$submitted && forms.formSetting.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.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 CLIENT ID -->\n							<div class="form-group" data-ng-class="{\'has-error\': forms.formSetting.$submitted && forms.formSetting.clientId.$invalid}">\n								<label class="control-label">{{\'APPLICATION_CLIENT_ID\' | translate}} <span class="required" aria-required="true">*</span></label>\n								<input type="text" name="clientId" placeholder="{{\'APPLICATION_CLIENT_ID\' | translate}}" class="form-control" data-ng-model="item.clientId" required/>\n								<span data-ng-show="forms.formSetting.clientId.$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 CLIENT ID -->\n\n              <!-- START CLIENT SECRET -->\n							<div class="form-group" data-ng-class="{\'has-error\': forms.formSetting.$submitted && forms.formSetting.clientSecret.$invalid}">\n								<label class="control-label">{{\'APPLICATION_CLIENT_SECRET\' | translate}} <span class="required" aria-required="true">*</span></label>\n								<input type="text" name="clientSecret" placeholder="{{\'APPLICATION_CLIENT_SECRET\' | translate}}" class="form-control" data-ng-model="item.clientSecret" required/>\n								<span data-ng-show="forms.formSetting.clientSecret.$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 CLIENT SECRET -->\n\n              <!-- START SECURITY TOKEN -->\n							<div class="form-group" data-ng-class="{\'has-error\': forms.formSetting.$submitted && forms.formSetting.securityToken.$invalid}">\n								<label class="control-label">{{\'APPLICATION_SECURITY_TOKEN\' | translate}} <span class="required" aria-required="true">*</span></label>\n								<input type="text" name="securityToken" placeholder="{{\'APPLICATION_SECURITY_TOKEN\' | translate}}" class="form-control" data-ng-model="item.securityToken" required/>\n								<span data-ng-show="forms.formSetting.securityToken.$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 SECURITY 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("app/setting/license/view/view.html",'<!-- BEGIN PAGE CONTENT-->\n<div\n 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="#">{{ \'APPLICATION_SETTINGS\' | translate }}</a>\n				</li>\n			</ul>\n		</div>\n\n		<!-- BEGIN PROFILE CONTENT -->\n		<div class="profile-content">\n			<div class="row">\n				<div class="col-md-6">\n					<div class="pricing hover-effect">\n						<div class="pricing-head" data-ng-switch="license.months">\n							<h3 ng-switch-when="1">{{\'APPLICATION_MONTH_TO_MONTH\' | translate}}<span>{{license.token || \'unknown\'}} </span></h3>\n							<h3 ng-switch-when="12">{{\'APPLICATION_YEARLY\' | translate}}<span>{{license.token || \'unknown\'}} </span></h3>\n							<h3 ng-switch-when="36">{{\'APPLICATION_PERPETUAL\' | translate}}<span>{{license.token || \'unknown\'}} </span></h3>\n							<h3 ng-switch-default>{{\'APPLICATION_UNKNOWN\' | translate}}<span>{{license.token || \'unknown\'}} </span></h3>\n							<h4><i>{{license.expiration ? (license.expiration | date:\'medium\') : \'DEMO\'}}</i>\n							<span data-ng-show="license.expiration">Expiration Date </span>\n							</h4>\n						</div>\n						<ul class="pricing-content list-unstyled">\n							<li class="row">\n								<div class="col-md-9">\n									<i class="icon-eye"></i> {{\'APPLICATION_USERS\' | translate}}:\n								</div>\n								<div class="col-md-3 text-center">\n									{{(license.users || license.users >= 0) ? license.users : \'unknown\'}}\n								</div>\n							</li>\n							<li class="row">\n								<div class="col-md-9">\n									<i class="icon-people"></i> {{\'APPLICATION_AGENTS\' | translate}} ({{\'APPLICATION_CONCURRENTS\' | translate}}):\n								</div>\n								<div class="col-md-3 text-center">\n									{{(license.agents || license.agents >= 0)  ? license.agents : \'unknown\'}}\n								</div>\n							</li>\n							<li class="row">\n								<div class="col-md-9">\n									<i class="icon-phone"></i> {{\'APPLICATION_TELEPHONES\' | translate}}:\n								</div>\n								<div class="col-md-3 text-center">\n									{{(license.telephones || license.telephones >= 0) ? license.telephones : \'unknown\'}}\n								</div>\n							</li>\n							<li class="row">\n								<div class="col-md-9">\n									<i class="icon-bubble"></i> {{\'APPLICATION_CHAT\' | translate}}:\n								</div>\n								<div class="col-md-3 text-center">\n									<span class="label label-sm" data-ng-class="license.chat ? \'label-success\' : \'label-danger\'">{{license.chat ? \'APPLICATION_ENABLED\' : \'APPLICATION_DISABLED\' | translate}}</span>\n								</div>\n							</li>\n							<li class="row">\n								<div class="col-md-9">\n									<i class="icon-envelope"></i> {{\'APPLICATION_MAIL\' | translate}}:\n								</div>\n								<div class="col-md-3 text-center">\n								 <span class="label label-sm" data-ng-class="license.mail ? \'label-success\' : \'label-danger\'">{{license.mail ? \'APPLICATION_ENABLED\' : \'APPLICATION_DISABLED\' | translate}}</span>\n								</div>\n							</li>\n							<li class="row">\n								<div class="col-md-9">\n									<i class="icon-paper-plane"></i> {{\'APPLICATION_FAX\' | translate}}:\n								</div>\n								<div class="col-md-3 text-center">\n									 <span class="label label-sm" data-ng-class="license.fax ? \'label-success\' : \'label-danger\'">{{license.fax ? \'APPLICATION_ENABLED\' : \'APPLICATION_DISABLED\' | translate}}</span>\n								</div>\n							</li>\n						</ul>\n						<div class="pricing-footer">\n							<p>\n								 {{license.description}}\n							</p>\n							<a href="#" class="btn yellow-crusta">\n							{{\'APPLICATION_PRICES\' | translate}} <i class="m-icon-swapright m-icon-white"></i>\n							</a>\n						</div>\n					</div>\n				</div>\n				<div class="col-md-6">\n					<div class="portlet light bordered">\n						<div class="portlet-title">\n							<div class="caption font-green-sharp">\n								<i class="icon-info font-green-sharp"></i>\n								<span class="caption-subject">FORM {{ \'APPLICATION_LICENSE\' | translate }}</a> </span>\n							</div>\n						</div>\n						<div class="portlet-body">\n							<form name="form" novalidate data-ng-submit="submitRequest()">\n\n								<!-- START USERS -->\n								<div class="form-group" data-ng-class="{\'has-error\': (form.users.$touched || form.$submitted) && form.users.$invalid}">\n									<label class="control-label">{{\'APPLICATION_USERS\' | translate}}</label>\n									<div class="input-icon">\n										<i class="icon-eye"></i>\n										<input type="number" name="users" placeholder="{{\'APPLICATION_USERS\' | translate}}" class="form-control" data-ng-model="item.users" min="0" required>\n									</div>\n									<span data-ng-show="(form.users.$touched || forms.$submitted) && form.users.$error.required" class="help-block help-block-error">\n										<strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n									</span>\n								</div>\n								<!-- END USERS -->\n\n								<!-- START AGENTS -->\n								<div class="form-group" data-ng-class="{\'has-error\': (form.agents.$touched || form.$submitted) && form.agents.$invalid}">\n									<label class="control-label">{{\'APPLICATION_AGENTS\' | translate}} ({{\'APPLICATION_CONCURRENTS\' | translate}})</label>\n									<div class="input-icon">\n										<i class="icon-people"></i>\n										<input type="number" name="agents" placeholder="{{\'APPLICATION_AGENTS\' | translate}} ({{\'APPLICATION_CONCURRENTS\' | translate}})" class="form-control" data-ng-model="item.agents" min="0" required>\n									</div>\n									<span data-ng-show="(form.users.$touched || forms.$submitted) && form.users.$error.required" class="help-block help-block-error">\n										<strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n									</span>\n								</div>\n								<!-- END AGENTS -->\n\n								<!-- START TELEPHONES -->\n								<div class="form-group" data-ng-class="{\'has-error\': (form.telephones.$touched || form.$submitted) && form.telephones.$invalid}">\n									<label class="control-label">{{\'APPLICATION_TELEPHONES\' | translate}}</label>\n									<div class="input-icon">\n										<i class="icon-phone"></i>\n										<input type="number" name="telephones" placeholder="{{\'APPLICATION_TELEPHONES\' | translate}}" class="form-control" data-ng-model="item.telephones" min="0" required>\n									</div>\n									<span data-ng-show="(form.telephones.$touched || forms.$submitted) && form.telephones.$error.required" class="help-block help-block-error">\n										<strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n									</span>\n								</div>\n								<!-- END TELEPHONES -->\n\n								<!-- START CHAT -->\n								<div class="form-group" data-ng-class="{\'has-error\': (form.chat.$touched || form.$submitted) && form.chat.$invalid}">\n									<label class="control-label">{{\'APPLICATION_CHAT\' | translate}}</label>\n									<div class="input-group input-icon">\n										<i class="icon-bubble"></i>\n										<input type="text" placeholder="{{\'APPLICATION_CHAT\' | translate}}" class="form-control" readonly>\n										<span class="input-group-addon">\n											<input type="checkbox" name="chat" data-ng-model="item.chat" required>\n										</span>\n									</div>\n									<span data-ng-show="(form.chat.$touched || forms.$submitted) && form.chat.$error.required" class="help-block help-block-error">\n										<strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n									</span>\n								</div>\n								<!-- END CHAT -->\n\n								<!-- START MAIL -->\n								<div class="form-group" data-ng-class="{\'has-error\': (form.mail.$touched || form.$submitted) && form.mail.$invalid}">\n									<label class="control-label">{{\'APPLICATION_MAIL\' | translate}}</label>\n									<div class="input-group input-icon">\n										<i class="icon-envelope"></i>\n										<input type="text" placeholder="{{\'APPLICATION_MAIL\' | translate}}" class="form-control" readonly>\n										<span class="input-group-addon">\n											<input type="checkbox" name="mail" data-ng-model="item.mail" required>\n										</span>\n									</div>\n									<span data-ng-show="(form.mail.$touched || forms.$submitted) && form.mail.$error.required" class="help-block help-block-error">\n										<strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n									</span>\n								</div>\n								<!-- END MAIL -->\n\n								<!-- START FAX -->\n								<div class="form-group" data-ng-class="{\'has-error\': (form.fax.$touched || form.$submitted) && form.fax.$invalid}">\n									<label class="control-label">{{\'APPLICATION_FAX\' | translate}}</label>\n									<div class="input-group input-icon">\n										<i class="icon-paper-plane"></i>\n										<input type="text" placeholder="{{\'APPLICATION_FAX\' | translate}}" class="form-control" readonly>\n										<span class="input-group-addon">\n											<input type="checkbox" name="fax" data-ng-model="item.fax" required>\n										</span>\n									</div>\n									<span data-ng-show="(form.fax.$touched || forms.$submitted) && form.fax.$error.required" class="help-block help-block-error">\n										<strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n									</span>\n								</div>\n								<!-- END FAX -->\n\n								<input class="btn green-haze" type="submit" value="{{\'APPLICATION_SUBMIT\' | translate}} {{\'APPLICATION_REQUEST\' | translate}}"/>\n							</form>\n						</div>\n					</div>\n				</div>\n			</div>\n		</div>\n		<!-- END PROFILE CONTENT -->\n	</div>\n</div>\n<!-- END PAGE CONTENT-->\n'),a.put("app/setting/smtp/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-settings"></i>\n					<a href="#">{{ \'APPLICATION_SETTINGS\' | translate }}</a>\n				</li>\n			</ul>\n		</div>\n\n		<!-- BEGIN PROFILE CONTENT -->\n		<div class="profile-content">\n			<!-- START SMTP TAB -->\n			<form name="form" data-ng-submit="form.$valid && updateItem()" novalidate>\n\n				<!-- START HOST -->\n				<div class="form-group" data-ng-class="{\'has-error\': (form.host.$touched || form.$submitted) && form.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 data-ng-show="(form.host.$touched || form.$submitted) && form.host.$invalid && form.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\': (form.username.$touched || form.$submitted) && form.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="item.username" required/>\n					<span data-ng-show="(form.username.$touched || form.$submitted) && form.username.$invalid && form.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\': (form.password.$touched || form.$submitted) && form.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="(form.password.$touched || form.$submitted) && form.password.$invalid && form.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\': (form.port.$touched || form.$submitted) && form.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="item.port" required/>\n					<span data-ng-show="(form.form.$touched || form.$submitted) && form.port.$invalid && form.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="(form.form.$touched || form.$submitted) && form.port.$invalid && form.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 row">\n					<label class="col-md-3">\n						SSL\n					</label>\n					<label class="col-md-9">\n							<input type="checkbox" data-ng-model="item.ssl">\n					</label>\n				</div>\n				<!-- END SSL -->\n				<input class="btn green-haze" type="submit" value="{{\'APPLICATION_UPDATE\' | translate}}"/>\n				<input class="btn blue-madison" type="button" value="Test" data-ng-click="test()"/>\n			</form>\n			<!-- END SMTP TAB -->\n		</div>\n		<!-- END PROFILE CONTENT -->\n	</div>\n</div>\n<!-- END PAGE CONTENT-->\n'),a.put("app/setting/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-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="Templates.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="/setting/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="getTemplates([\'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="displayedTemplates" 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>{{ \'APPLICATION_ACTIONS\' | translate }}</th>\n						  </tr>\n					  </thead>\n					  <tbody>\n					    <tr data-ng-repeat="template in displayedTemplates">\n								<td style="text-align: center; vertical-align: middle"><input type="checkbox" checklist-model="Templates.checked" checklist-value="template.id"></td>\n					      <td>{{template.name}}</td>\n								<td>{{template.description}}</td>\n					      <td>\n					        <a class="btn default btn-xs blue-stripe" data-ng-href="/setting/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="displayedTemplates.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						  </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/setting/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-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>\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.setting.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/setting/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\n				<form name="form" data-ng-submit="form.$valid && updateItem()" class="form-horizontal" novalidate>\n					<!-- START NAME -->\n					<div class="form-group" data-ng-class="{\'has-error\': form.name.$invalid && form.$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}}..." data-ng-model="item.name" required>\n									<span data-ng-show="form.name.$invalid && form.$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\': form.description.$invalid && form.$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="description" class="form-control todo-taskbody-taskdesc" placeholder="{{\'APPLICATION_DESCRIPTION\' | translate}}..." rows="8" data-ng-model="item.description">\n									<span data-ng-show="form.description.$invalid && form.$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					<hr>\n\n					<!-- START SUBJECT -->\n					<div class="form-group row" data-ng-class="{\'has-error\': form.subject.$invalid && form.$submitted}">\n						<div class="col-md-12">\n							<div class="row">\n								<div class="col-md-4">\n									<label class="control-label pull-right">{{\'APPLICATION_SUBJECT\' | translate}}:</label>\n								</div>\n								<div class="col-md-8">\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="form.subject.$invalid && form.$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 row" data-ng-class="{\'has-error\': form.text.$invalid && form.$submitted}">\n\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-pencil"></i>{{\'APPLICATION_VARIABLES\' | translate}}\n									</div>\n								</div>\n								<div class="portlet-body">\n									<uib-accordion>\n								    <uib-accordion-group heading="{{group.title | translate}}" data-ng-repeat="group in groups">\n								      {{group.content | translate}}\n											<ol>\n												<li data-ng-repeat="variable in group.variables">\n													 {{variable}}\n												</li>\n											</ol>\n								    </uib-accordion-group>\n								  </uib-accordion>\n								</div>\n							</div>\n						</div>\n						<div class="col-md-8">\n							<div class="inbox-editor inbox-wysihtml5" text-angular data-ng-model="item.html" name="html"></div>\n								<span data-ng-show="form.text.$invalid && form.$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/setting/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\n      <li>\n				<i class="icon-settings"></i>\n				<a href="#">{{ \'APPLICATION_SETTINGS\' | 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="initWizard()">\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 }} FORM</a> </span>\n  		</div>\n  	</div>\n  	<div class="portlet-body">\n			<form name="form" data-ng-submit="form.$valid && createItem()" class="form-horizontal" novalidate>\n				<!-- START HEAD -->\n				<div class="form">\n					<!-- START NAME -->\n					<div class="form-group" data-ng-class="{\'has-error\': form.name.$invalid && form.$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}}..." data-ng-model="item.name" required>\n									<span data-ng-show="form.name.$invalid && form.$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\': form.description.$invalid && form.$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="description" class="form-control todo-taskbody-taskdesc" placeholder="{{\'APPLICATION_DESCRIPTION\' | translate}}..." rows="8" data-ng-model="item.description">\n									<span data-ng-show="form.description.$invalid && form.$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 SUBJECT -->\n					<div class="form-group" data-ng-class="{\'has-error\': form.subject.$invalid && form.$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}}:</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="form.subject.$invalid && form.$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 row" data-ng-class="{\'has-error\': form.text.$invalid && form.$submitted}">\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-pencil"></i>{{\'APPLICATION_VARIABLES\' | translate}}\n									</div>\n								</div>\n								<div class="portlet-body">\n									<uib-accordion>\n								    <uib-accordion-group heading="{{group.title | translate}}" data-ng-repeat="group in groups">\n								      {{group.content | translate}}\n											<ol>\n												<li data-ng-repeat="variable in group.variables">\n													 {{variable}}\n												</li>\n											</ol>\n								    </uib-accordion-group>\n								  </uib-accordion>\n								</div>\n							</div>\n						</div>\n						<div class="col-md-8">\n							<div class="inbox-editor inbox-wysihtml5" text-angular data-ng-model="item.html" name="html"></div>\n								<span data-ng-show="form.text.$invalid && form.$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				</div>\n				<input class="btn green-haze" type="submit" value="{{\'APPLICATION_CONTINUE\' | translate}}" data-ng-click="goNext()"/>\n			</form>\n  	</div>\n  </div>\n  <!-- END PORTLET-->\n</div>\n'),a.put("app/setting/update/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-settings"></i>\n					<a href="#">{{ \'APPLICATION_SETTINGS\' | 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-cloud-download font-green-sharp"></i>\n					<span class="caption-subject">{{ \'APPLICATION_UPDATES\' | translate }}</a> </span>\n				</div>\n				<div class="actions">\n					<a class="btn btn-default" href="#" data-ng-click="pull()">\n						<i class="icon-cloud-download"></i> {{ \'APPLICATION_UPDATE\' | translate }}\n					</a>\n				</div>\n			</div>\n			<div class="portlet-body" data-ng-init="initList()">\n				<!-- BEGIN TABLE -->\n					<table st-table="displayedUpdates" st-safe-src="updates" 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-12">\n												<ui-select class="input-xsmall" ng-model="conf.updatesByPage" theme="bootstrap" ng-disabled="disabled">\n													<ui-select-match placeholder="{{\'APPLICATION_SEARCH\' | translate}}">{{$select.selected.name}}</ui-select-match>\n													<ui-select-choices repeat="updateByPage in updatesByPage | filter: $select.search">\n														<div ng-bind-html="updateByPage.name | highlight: $select.search"></div>\n													</ui-select-choices>\n												</ui-select>\n											</div>\n										</div>\n									</th>\n								</tr>\n								<tr>\n									<th st-sort="message">{{ \'APPLICATION_MESSAGE\' | translate }}</th>\n									<th st-sort="version">{{ \'APPLICATION_VERSION\' | translate }}</th>\n									<th>{{ \'APPLICATION_DATE\' | translate }}</th>\n									<!-- <th class="small-cells"></th> -->\n							  </tr>\n						  </thead>\n							<tbody>\n						    <tr data-ng-repeat="update in displayedUpdates">\n									<td>\n										{{update.message}}\n									</td>\n									<td>\n										{{update.version}}\n									</td>\n									<td>\n										{{update.date}}\n									</td>\n						    </tr>\n								<tr data-ng-hide="displayedUpdates.length">\n									<td colspan="9" style="text-align:center;">\n										<i>{{\'MESSAGE_NO_AVAILABLE_UPDATES\' | translate}}</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="message" placeholder="{{ \'APPLICATION_MESSAGE\' | 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.updatesByPage.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/setting/update/list/list.pull.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("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/sugarcrm/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="/sugarcrm/list">{{ \'APPLICATION_SUGARCRM\' | 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_SUGARCRM\' | 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="/sugarcrm/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\',\'password\'])" csv-header="[\'Name\', \'Username\', \'Remote Address\', \'Password\']" field-separator=";" filename="sugarcrm_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="displayedSugarcrmAccounts" 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 displayedSugarcrmAccounts" 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="/sugarcrm/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="displayedSugarcrmAccounts.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/sugarcrm/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              <!-- 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							<!-- 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_USERNAME\' | 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 PASSWORD -->\n							<div class="form-group" data-ng-class="{\'has-error\': forms.formSetting.$submitted && forms.formSetting.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.password" required/>\n								<span data-ng-show="forms.formSetting.apiKey.$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 API KEY -->\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/sugarcrm/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								<!-- 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/sugarcrm/view/view.configurationSettings.html",'<div class="row" data-ng-init="getConfiguration();getVariables();getFields();">\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}}: {{configurationName}}</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 ui-padding active" id="tab_1_1">\n            <div class="row">\n              <div class="col-md-11">\n                <span class="caption-subject">All following fields will be join by blank space:</span>\n              </div>\n              <div class="col-md-1 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 ng-scrollbars ng-scrollbars-config="config"> -->\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-8" 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="updateField(subjectItem)">\n	                </div>\n	              </div>\n	              <div class="col-md-8" 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="updateField(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-1">\n	                <div class="form-group">\n	                  <button class="btn btn-icon-only red" data-ng-click="removeItem(subjectItem)"><i class="fa fa-times"></i></button>\n	                </div>\n	              </div>\n	            </div>\n						<!-- </div> -->\n					</div>\n					<!-- END SUBJECT TAB -->\n          <!-- DESCRIPTION TAB -->\n					<div class="tab-pane ui-padding" id="tab_1_2">\n						<div class="row">\n              <div class="col-md-11">\n                <span class="caption-subject">All following fields will be join by new line:</span>\n              </div>\n              <div class="col-md-1 pull-rigth">\n                <button class="btn btn-icon-only green" data-ng-click="addItemDescription()"><i class="fa fa-plus"></i></button>\n              </div>\n            </div>\n            <hr>\n						<!-- <div ng-scrollbars ng-scrollbars-config="config"> -->\n							<div class="row" data-ng-repeat="descriptionItem in descriptionConfig">\n								<!-- <pre>\n									{{descriptionItem|json}}\n								</pre> -->\n	              <div class="col-md-2">\n	                <ui-select ng-model="descriptionItem.type" theme="bootstrap" ng-disabled="disabled" data-ng-change="changeDescType(descriptionItem)">\n	                  <ui-select-match placeholder="{{\'APPLICATION_SEARCH\' | translate}}">{{$select.selected | ucfirst}}</ui-select-match>\n	                  <ui-select-choices repeat="item in descFieldType | filter: $select.search">\n	                    <div ng-bind-html="item | highlight: $select.search | ucfirst"></div>\n	                  </ui-select-choices>\n	                </ui-select>\n	              </div>\n	              <div class="col-md-9" data-ng-if="descriptionItem.type==\'string\'">\n	                <div class="form-group">\n	                  <input type="text" class="form-control" data-ng-model="descriptionItem.content" data-ng-change="updateField(descriptionItem)">\n	                </div>\n	              </div>\n								<div class="col-md-3" data-ng-if="descriptionItem.type==\'key_value\'">\n									<input type="text" class="form-control" placeholder="Key" data-ng-model="descriptionItem.key" data-ng-change="updateField(descriptionItem)">\n								</div>\n								<div class="col-md-3" data-ng-if="descriptionItem.type==\'key_value\'">\n									<ui-select ng-model="descriptionItem.keyType" theme="bootstrap" ng-disabled="disabled" data-ng-change="changeDescType(descriptionItem)">\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-3" data-ng-if="descriptionItem.type==\'key_value\' && descriptionItem.keyType==\'string\'">\n									<input type="text" class="form-control" placeholder="Value" data-ng-model="descriptionItem.keyContent" data-ng-change="updateField(descriptionItem)">\n								</div>\n	              <div class="col-md-3" data-ng-if="descriptionItem.type==\'key_value\' && descriptionItem.keyType==\'variable\'">\n	                <div class="form-group">\n	                  <ui-select theme="bootstrap" ng-disabled="disabled" data-ng-model="descriptionItem.VariableId" data-ng-change="updateField(descriptionItem)">\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-1">\n	                <div class="form-group">\n	                  <button class="btn btn-icon-only red" data-ng-click="removeItem(descriptionItem)"><i class="fa fa-times"></i></button>\n	                </div>\n	              </div>\n	            </div>\n						<!-- </div> -->\n					</div>\n					<!-- END DESCRIPTION TAB -->\n          <!-- FIELDS TAB -->\n					<div class="tab-pane ui-padding" id="tab_1_3">\n						<div class="row">\n              <div class="col-md-11">\n                <span class="caption-subject">Add how to fill the fields present in your account:</span>\n              </div>\n              <div class="col-md-1 pull-rigth">\n                <button class="btn btn-icon-only green" data-ng-click="addItemField()"><i class="fa fa-plus"></i></button>\n              </div>\n            </div>\n            <hr>\n						<!-- <div ng-scrollbars ng-scrollbars-config="config"> -->\n	            <div class="row" data-ng-repeat="fieldItem in fieldConfig">\n	              <div class="col-md-3">\n	                <ui-select ng-model="fieldItem.idField" theme="bootstrap" ng-disabled="disabled" data-ng-change="changeFieldType(fieldItem)">\n	                  <ui-select-match placeholder="{{\'APPLICATION_SEARCH\' | translate}}">{{$select.selected.label}}</ui-select-match>\n	                  <ui-select-choices repeat="item.name as item in accountFields | filter: $select.search">\n	                    <div ng-bind-html="item.label | highlight: $select.search"></div>\n	                  </ui-select-choices>\n	                </ui-select>\n	              </div>\n	              <div class="col-md-8" data-ng-if="getSystemFieldOptions(fieldItem.idField)">\n	                <div class="form-group">\n										<ui-select ng-model="fieldItem.content" theme="bootstrap" ng-disabled="disabled" data-ng-change="updateField(fieldItem)">\n		                  <ui-select-match placeholder="{{\'APPLICATION_SEARCH\' | translate}}">{{$select.selected.name}}</ui-select-match>\n		                  <ui-select-choices repeat="item.value as item in getSystemFieldOptions(fieldItem.idField) | filter: $select.search">\n		                    <div ng-bind-html="item.name | highlight: $select.search"></div>\n		                  </ui-select-choices>\n		                </ui-select>\n	                </div>\n	              </div>\n								<div class="col-md-4" data-ng-if="!getSystemFieldOptions(fieldItem.idField)">\n									<div class="form-group">\n										<ui-select ng-model="fieldItem.type" theme="bootstrap" ng-disabled="disabled" data-ng-change="changeType(fieldItem)">\n		                  <ui-select-match placeholder="{{\'APPLICATION_SEARCH\' | translate}}">{{$select.selected | ucfirst}}</ui-select-match>\n		                  <ui-select-choices repeat="item in fieldType | filter: $select.search">\n		                    <div ng-bind-html="item | highlight: $select.search | ucfirst"></div>\n		                  </ui-select-choices>\n		                </ui-select>\n									</div>\n								</div>\n								<div class="col-md-4" data-ng-if="!getSystemFieldOptions(fieldItem.idField) && fieldItem.type === \'string\'">\n	                <div class="form-group">\n										<input type="text" class="form-control" data-ng-model="fieldItem.content" data-ng-change="updateField(fieldItem)">\n	                </div>\n	              </div>\n								<div class="col-md-4" data-ng-if="!getSystemFieldOptions(fieldItem.idField) && fieldItem.type === \'variable\'">\n	                <div class="form-group">\n										<ui-select theme="bootstrap" ng-disabled="disabled" data-ng-model="fieldItem.VariableId" data-ng-change="updateField(fieldItem)">\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-1">\n	                <div class="form-group">\n	                  <button class="btn btn-icon-only red" data-ng-click="removeItem(fieldItem)"><i class="fa fa-times"></i></button>\n	                </div>\n	              </div>\n	            </div>\n						<!-- </div> -->\n					</div>\n					<!-- END FIELDS TAB -->\n				</div>\n			</div>\n		</div>\n	</div>\n</div>\n'),
+a.put("app/sugarcrm/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="/sugarcrm/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="/sugarcrm/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/sugarcrm/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="/sugarcrm/list">{{ \'APPLICATION_SUGARCRM\' | 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/sugarcrm.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.sugarcrm.view.account\')}">\n							<a ng-href="/sugarcrm/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.sugarcrm.view.configurations\') || $state.is(\'main.sugarcrm.view.configuration\')}">\n							<a ng-href="/sugarcrm/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/sugarcrm/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="/sugarcrm/list">{{ \'APPLICATION_SUGARCRM\' | 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_USERNAME\' | translate}}" class="form-control" data-ng-model="item.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\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/sugarcrm/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 PASSWORD -->\n							<div class="form-group" data-ng-class="{\'has-error\': forms.formSetting.$submitted && forms.formSetting.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.formSetting.apiKey.$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							<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/tag/list/create.modal.html",'<div class="modal-header">\n  <h3 class="modal-title">{{ \'APPLICATION_NEW_TAG\' | translate }}</h3>\n</div>\n<div class="modal-body">\n  <form name="forms.tag" novalidate>\n\n    <!-- START NAME -->\n    <div class="form-group" data-ng-class="{\'has-error\': (forms.tag.name.$touched || forms.tag.$submitted) && forms.tag.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.tag.name.$touched || forms.tag.$submitted) && forms.tag.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.tag.$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/tag/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-tag"></i>\n					<a href="/tags/list">{{ \'APPLICATION_TAGS\' | 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_TAGS\' | translate }}</a> </span>\n				</div>\n				<div class="actions">\n					<div class="btn-group" data-ng-show="Tags.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_TAG\' | translate }}\n						</button>\n					</div>\n					<a class="btn btn-icon-only btn-default" href="#" ng-csv="getTags([\'name\', \'description\'])" csv-header="[\'Name\', \'Description\']" field-separator=";" filename="tags.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="displayedTags" 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.tagsByPage" theme="bootstrap" ng-disabled="disabled">\n												<ui-select-match placeholder="{{\'APPLICATION_SEARCH\' | translate}}">{{$select.selected.name}}</ui-select-match>\n												<ui-select-choices repeat="tagByPage in tagsByPage | filter: $select.search">\n													<div ng-bind-html="tagByPage.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(tag, 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="tag in displayedTags" class="animate-repeat">\n								<td style="text-align: center; vertical-align: middle"><input data-ng-hide="tag.defaultEntry" type="checkbox" checklist-model="Tags.checked" checklist-value="tag.id"></td>\n								<td>{{tag.name}}</td>\n					      <td>{{tag.description}}</td>\n					      <td>\n					        <a class="btn default btn-xs blue-stripe" data-ng-href="/tags/view/{{tag.id}}/settings" data-ng-class="{\'disabled\': tag.defaultEntry}">\n										{{ \'APPLICATION_SETTINGS\' | translate}}\n					        </a>\n					        <a class="btn default btn-xs red-stripe" data-ng-click="deleteItem(tag.name,tag.id)" data-ng-class="{\'disabled\': tag.defaultEntry}">\n										{{ \'APPLICATION_DELETE\' | translate }}\n					        </a>\n					      </td>\n					    </tr>\n							<tr data-ng-hide="displayedTags.length">\n								<td colspan="4" style="text-align:center;">\n									<i>{{ \'MESSAGE_NO_TAGS_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.tagsByPage.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/tag/view/view.html",'<!-- BEGIN PAGE CONTENT-->\n<div class="row" data-ng-init="getTag()">\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-tag"></i>\n					<a href="/tags/list">{{ \'APPLICATION_TAGS\' | translate }}</a>\n					<i data-ng-show="tag" class="fa fa-angle-right"></i>\n				</li>\n				<li data-ng-show="tag">\n					<a href="#">{{tag.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/tag.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						{{tag.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.tags.view.settings\')}">\n							<a data-ng-href="/tags/view/{{tag.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/tag/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_TAG\' | 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 && updateTag()" 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="tag.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="tag.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/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					<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="$triggers.operators" properties="properties[trigger.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[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" 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-->\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-eye"></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-eye"></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              <!-- 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							<!-- 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								<!-- 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();getFields();">\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}}: {{configurationName}}</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 ui-padding active" id="tab_1_1">\n            <div class="row">\n              <div class="col-md-11">\n                <span class="caption-subject">All following fields will be join by blank space:</span>\n              </div>\n              <div class="col-md-1 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 ng-scrollbars ng-scrollbars-config="config"> -->\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-8" 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="updateField(subjectItem)">\n	                </div>\n	              </div>\n	              <div class="col-md-8" 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="updateField(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-1">\n	                <div class="form-group">\n	                  <button class="btn btn-icon-only red" data-ng-click="removeItem(subjectItem)"><i class="fa fa-times"></i></button>\n	                </div>\n	              </div>\n	            </div>\n						<!-- </div> -->\n					</div>\n					<!-- END SUBJECT TAB -->\n          <!-- DESCRIPTION TAB -->\n					<div class="tab-pane ui-padding" id="tab_1_2">\n						<div class="row">\n              <div class="col-md-11">\n                <span class="caption-subject">All following fields will be join by new line:</span>\n              </div>\n              <div class="col-md-1 pull-rigth">\n                <button class="btn btn-icon-only green" data-ng-click="addItemDescription()"><i class="fa fa-plus"></i></button>\n              </div>\n            </div>\n            <hr>\n						<!-- <div ng-scrollbars ng-scrollbars-config="config"> -->\n							<div class="row" data-ng-repeat="descriptionItem in descriptionConfig">\n								<!-- <pre>\n									{{descriptionItem|json}}\n								</pre> -->\n	              <div class="col-md-2">\n	                <ui-select ng-model="descriptionItem.type" theme="bootstrap" ng-disabled="disabled" data-ng-change="changeDescType(descriptionItem)">\n	                  <ui-select-match placeholder="{{\'APPLICATION_SEARCH\' | translate}}">{{$select.selected | ucfirst}}</ui-select-match>\n	                  <ui-select-choices repeat="item in descFieldType | filter: $select.search">\n	                    <div ng-bind-html="item | highlight: $select.search | ucfirst"></div>\n	                  </ui-select-choices>\n	                </ui-select>\n	              </div>\n	              <div class="col-md-9" data-ng-if="descriptionItem.type==\'string\'">\n	                <div class="form-group">\n	                  <input type="text" class="form-control" data-ng-model="descriptionItem.content" data-ng-change="updateField(descriptionItem)">\n	                </div>\n	              </div>\n								<div class="col-md-3" data-ng-if="descriptionItem.type==\'key_value\'">\n									<input type="text" class="form-control" placeholder="Key" data-ng-model="descriptionItem.key" data-ng-change="updateField(descriptionItem)">\n								</div>\n								<div class="col-md-3" data-ng-if="descriptionItem.type==\'key_value\'">\n									<ui-select ng-model="descriptionItem.keyType" theme="bootstrap" ng-disabled="disabled" data-ng-change="changeDescType(descriptionItem)">\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-3" data-ng-if="descriptionItem.type==\'key_value\' && descriptionItem.keyType==\'string\'">\n									<input type="text" class="form-control" placeholder="Value" data-ng-model="descriptionItem.keyContent" data-ng-change="updateField(descriptionItem)">\n								</div>\n	              <div class="col-md-3" data-ng-if="descriptionItem.type==\'key_value\' && descriptionItem.keyType==\'variable\'">\n	                <div class="form-group">\n	                  <ui-select theme="bootstrap" ng-disabled="disabled" data-ng-model="descriptionItem.VariableId" data-ng-change="updateField(descriptionItem)">\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-1">\n	                <div class="form-group">\n	                  <button class="btn btn-icon-only red" data-ng-click="removeItem(descriptionItem)"><i class="fa fa-times"></i></button>\n	                </div>\n	              </div>\n	            </div>\n						<!-- </div> -->\n					</div>\n					<!-- END DESCRIPTION TAB -->\n          <!-- FIELDS TAB -->\n					<div class="tab-pane ui-padding" id="tab_1_3">\n						<div class="row">\n              <div class="col-md-11">\n                <span class="caption-subject">Add how to fill the fields present in your account:</span>\n              </div>\n              <div class="col-md-1 pull-rigth">\n                <button class="btn btn-icon-only green" data-ng-click="addItemField()"><i class="fa fa-plus"></i></button>\n              </div>\n            </div>\n            <hr>\n						<!-- <div ng-scrollbars ng-scrollbars-config="config"> -->\n	            <div class="row" data-ng-repeat="fieldItem in fieldConfig">\n	              <div class="col-md-3">\n	                <ui-select ng-model="fieldItem.idField" theme="bootstrap" ng-disabled="disabled" data-ng-change="changeFieldType(fieldItem)">\n	                  <ui-select-match placeholder="{{\'APPLICATION_SEARCH\' | translate}}">{{$select.selected.title}}</ui-select-match>\n	                  <ui-select-choices repeat="item.id as item in accountFields | filter: $select.search">\n	                    <div ng-bind-html="item.title | highlight: $select.search"></div>\n	                  </ui-select-choices>\n	                </ui-select>\n	              </div>\n	              <div class="col-md-8" data-ng-if="getSystemFieldOptions(fieldItem.idField)">\n	                <div class="form-group">\n										<ui-select ng-model="fieldItem.content" theme="bootstrap" ng-disabled="disabled" data-ng-change="updateField(fieldItem)">\n		                  <ui-select-match placeholder="{{\'APPLICATION_SEARCH\' | translate}}">{{$select.selected.name}}</ui-select-match>\n		                  <ui-select-choices repeat="item.value as item in getSystemFieldOptions(fieldItem.idField) | filter: $select.search">\n		                    <div ng-bind-html="item.name | highlight: $select.search"></div>\n		                  </ui-select-choices>\n		                </ui-select>\n	                </div>\n	              </div>\n								<div class="col-md-4" data-ng-if="!getSystemFieldOptions(fieldItem.idField)">\n									<div class="form-group">\n										<ui-select ng-model="fieldItem.type" theme="bootstrap" ng-disabled="disabled" data-ng-change="changeType(fieldItem)">\n		                  <ui-select-match placeholder="{{\'APPLICATION_SEARCH\' | translate}}">{{$select.selected | ucfirst}}</ui-select-match>\n		                  <ui-select-choices repeat="item in fieldType | filter: $select.search">\n		                    <div ng-bind-html="item | highlight: $select.search | ucfirst"></div>\n		                  </ui-select-choices>\n		                </ui-select>\n									</div>\n								</div>\n								<div class="col-md-4" data-ng-if="!getSystemFieldOptions(fieldItem.idField) && fieldItem.type === \'string\'">\n	                <div class="form-group">\n										<input type="text" class="form-control" data-ng-model="fieldItem.content" data-ng-change="updateField(fieldItem)">\n	                </div>\n	              </div>\n								<div class="col-md-4" data-ng-if="!getSystemFieldOptions(fieldItem.idField) && fieldItem.type === \'variable\'">\n	                <div class="form-group">\n										<ui-select theme="bootstrap" ng-disabled="disabled" data-ng-model="fieldItem.VariableId" data-ng-change="updateField(fieldItem)">\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-1">\n	                <div class="form-group">\n	                  <button class="btn btn-icon-only red" data-ng-click="removeItem(fieldItem)"><i class="fa fa-times"></i></button>\n	                </div>\n	              </div>\n	            </div>\n						<!-- </div> -->\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.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.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" data-ng-init="initFooter()">\n  <div class="page-footer-inner">\n     {{info.name}} v. {{info.version}} | 2015-2016 &copy; Powered by Xenialab\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>\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>\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>\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>\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              <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              <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}}..." data-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 | QuickSidebarFilterUsersLowerThan:2 | filter:{type:\'external\'} | filter:searchChatRoomsExternals as resultsChatRoomsExternals">\n              <div class="media-status">\n                <i class="icon icon-close" data-ng-show="chatRoom.status === \'close\'"></i>\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.fullname}}</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}}..." data-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 | QuickSidebarFilterUsersGreaterThan:2 | filter:searchChatRoomsGroups as resultsChatRoomsGroups">\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.fullname}}</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" 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-repeat" 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>\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 data-ng-click="mainTab.active=true" 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}" data-ng-init="getSidebarIntegrations()">\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.includes(\'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 CONTACT_MANAGER SEPARATOR -->\n    <li class="heading" data-ng-show="Auth.isAdmin()">\n      <h3 class="uppercase"> <span >{{\'APPLICATION_CONTACT_MANAGER\' | translate}}  </span> </h3>\n    </li>\n    <!-- END CONTACT_MANAGER SEPARATOR -->\n\n    <!-- START CONTACTS CASE -->\n    <li data-ng-show="Auth.isAdmin()" data-ng-class="{active: $state.includes(\'main.contactmanager.contacts\')}">\n      <a href="/contactmanager/contacts/list">\n        <i class=" fa fa-users"></i>\n        <span class="title" >{{\'APPLICATION_CONTACTS\' | translate}}</span>\n        <span data-ng-show="$state.includes(\'main.contactmanager.contacts\')" class="selected"></span>\n      </a>\n    </li>\n    <!-- END CONTACTS CASE -->\n    <!-- START COMPANIES CASE -->\n    <li data-ng-show="Auth.isAdmin()" data-ng-class="{active: $state.includes(\'main.contactmanager.companies\')}">\n      <a href="/contactmanager/companies/list">\n        <i class="icon-briefcase"></i>\n        <span class="title" >{{\'APPLICATION_COMPANIES\' | translate}}</span>\n        <span data-ng-show="$state.includes(\'main.contactmanager.companies\')" class="selected"></span>\n      </a>\n    </li>\n    <!-- END COMPANIES CASE -->\n    <!-- START CUSTOMFIELDS CASE -->\n    <li data-ng-show="Auth.isAdmin()" data-ng-class="{active: $state.includes(\'main.contactmanager.customfields\')}">\n      <a href="/contactmanager/customfields/list">\n        <i class="icon-pencil"></i>\n        <span class="title" >{{\'APPLICATION_CUSTOM_FIELDS\' | translate}}</span>\n        <span data-ng-show="$state.includes(\'main.contactmanager.customfields\')" class="selected"></span>\n      </a>\n    </li>\n    <!-- END CUSTOMFIELDS CASE -->\n    <!-- END CONTACT_MANAGER 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-class="{active: $state.includes(\'main.chat\')}" data-ng-if="license.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/agent/queues">\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\')}" data-ng-if="license.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        <!-- 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/queues">\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\')}" data-ng-if="license.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 ANALYTICS SEPARATOR -->\n    <li class="heading">\n      <h3 class="uppercase"> <span >{{\'APPLICATION_ANALYTICS\' | translate}}  </span> </h3>\n    </li>\n    <li data-ng-show="Auth.isAdmin()" data-ng-class="{active: $state.includes(\'main.analytics.reports\')}">\n      <a href="/analytics/reports/list">\n        <i class="icon-book-open"></i>\n        <span class="title" >{{\'APPLICATION_REPORTS\' | translate}}</span>\n        <span data-ng-show="$state.includes(\'main.analytics.reports\')" class="selected"></span>\n      </a>\n    </li>\n    <li data-ng-show="Auth.isAdmin()" data-ng-class="{active: $state.includes(\'main.analytics.metrics\')}">\n      <a href="/analytics/metrics/list">\n        <i class="icon-calculator"></i>\n        <span class="title" >{{\'APPLICATION_METRICS\' | translate}}</span>\n        <span data-ng-show="$state.includes(\'main.metrics.reports\')" class="selected"></span>\n      </a>\n    </li>\n    <!-- END ANALYTICS 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\n    <!-- START INTEGRATION CASE -->\n    <li data-ng-repeat="integration in integrations" data-ng-if="integration.active" data-ng-show="Auth.isAdmin()" data-ng-class="{active: $state.includes(\'main.{{integration.state}}\')}">\n      <a href="/{{integration.state}}/list">\n        <i class="icon-handbag"></i>\n        <span class="title" >{{integration.name}}</span>\n        <span data-ng-show="$state.includes(\'main.{{integration.state}}\')" class="selected"></span>\n      </a>\n    </li>\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    <!-- 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    <li data-ng-show="Auth.isAdmin()" data-ng-class="{active: $state.includes(\'main.tags\')}">\n      <a href="/tags/list">\n      <i class="icon-tag"></i>\n      <span class="title" >{{\'APPLICATION_TAGS\' | translate}}  </span>\n      </a>\n    </li>\n    <!-- START CALLYSQUARE CASE -->\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\n    <li data-ng-show="Auth.isAdmin()" data-ng-class="{active: $state.includes(\'main.jscripty\')}">\n      <a href="javascript:;">\n        <i class="fa fa-edit"></i>\n        <span class="title" >{{\'APPLICATION_JSCRIPTY\' | translate}}</span>\n        <span class="arrow"></span>\n      </a>\n      <ul class="sub-menu">\n        <li data-ng-class="{active: $state.includes(\'main.jscripty.projects\')}">\n          <a href="/jscripty/projects/list">\n          <i class="fa fa-slack"></i>\n          <span class="title" >{{\'APPLICATION_PROJECTS\' | 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\n    <!-- START SETTINGS SEPARATOR -->\n    <li data-ng-show="Auth.isAdmin()" class="heading">\n      <h3 class="uppercase"> <span >{{\'APPLICATION_SETTINGS\' | translate}}  </span> </h3>\n    </li>\n    <!-- END SETTINGS SEPARATOR -->\n\n    <li data-ng-show="Auth.isAdmin()" data-ng-class="{active: $state.includes(\'main.setting\')}">\n      <a href="javascript:;">\n        <i class="icon-settings"></i>\n        <span class="title" >{{\'APPLICATION_SETTINGS\' | translate}}</span>\n        <span class="arrow"></span>\n      </a>\n      <ul class="sub-menu">\n        <!-- START UPDATES CASE -->\n        <li data-ng-show="Auth.isAdmin()" data-ng-class="{active: $state.includes(\'main.setting.updates\')}">\n          <a href="/setting/updates/list">\n            <i class="icon-cloud-download"></i>\n            <span class="title" >{{\'APPLICATION_UPDATES\' | translate}}</span>\n            <!-- <span data-ng-show="$state.includes(\'main.updates\')" class="selected"></span> -->\n          </a>\n        </li>\n        <!-- END UPDATES CASE -->\n\n        <!-- START SMTP CASE -->\n        <li data-ng-show="Auth.isAdmin()" data-ng-class="{active: $state.includes(\'main.setting.smtp\')}">\n          <a href="/setting/smtp/view">\n            <i class="icon-envelope"></i>\n            <span class="title">SMTP</span>\n            <!-- <span data-ng-show="$state.includes(\'main.smtp\')" class="selected"></span> -->\n          </a>\n        </li>\n        <!-- END SMTP CASE -->\n\n        <!-- START TEMPLATE CASE -->\n        <li data-ng-show="Auth.isAdmin()" data-ng-class="{active: $state.includes(\'main.setting.templates\')}">\n          <a href="/setting/templates/list">\n          <i class="icon-docs"></i>\n          <span class="title"> {{\'APPLICATION_TEMPLATES\' | translate}} </span>\n          </a>\n        </li>\n        <!-- END TEMPLATE CASE -->\n\n        <!-- START LICENSE CASE -->\n        <li data-ng-show="Auth.isAdmin()" data-ng-class="{active: $state.includes(\'main.setting.license\')}">\n          <a href="/setting/license/view">\n          <i class="icon-info"></i>\n          <span class="title"> {{\'APPLICATION_LICENSE\' | translate}} </span>\n          </a>\n        </li>\n        <!-- END LICENSE CASE -->\n       </ul>\n    </li>\n\n  </ul>\n  <!-- END SIDEBAR MENU -->\n</div>\n');
+}]);
\ No newline at end of file
diff --git a/public/app/7b2a74e6.app.css b/public/app/7b2a74e6.app.css
deleted file mode 100644
index 530429f..0000000
--- a/public/app/7b2a74e6.app.css
+++ /dev/null
@@ -1 +0,0 @@
\ No newline at end of file
diff --git a/public/app/9210b25d.app.js b/public/app/9210b25d.app.js
deleted file mode 100644
index 449f6a4..0000000
--- a/public/app/9210b25d.app.js
+++ /dev/null
@@ -1,55 +0,0 @@
-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/analytic/metric/list/create.modal.html",'<div class="modal-header">\n  <h3 class="modal-title">{{ \'APPLICATION_NEW_METRIC\' | translate }}</h3>\n</div>\n<div class="modal-body">\n  <form name="forms.metric" novalidate>\n\n    <!-- START NAME -->\n    <div class="form-group" data-ng-class="{\'has-error\': (forms.metric.name.$touched || forms.metric.$submitted) && forms.metric.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.metric.name.$touched || forms.metric.$submitted) && forms.metric.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 TABLE -->\n    <div class="form-group" data-ng-class="{\'has-error\': (forms.metric.table.$touched || forms.metric.$submitted) && forms.metric.table.$invalid}">\n      <label class="control-label">{{\'APPLICATION_TABLE\' | translate}}<span class="required" aria-required="true">*</span></label>\n      <ui-select data-ng-model="item.table" name="table" theme="bootstrap" required>\n        <ui-select-match placeholder="{{\'APPLICATION_SEARCH_FILTER\' | translate}}">{{$select.selected.name}}</ui-select-match>\n        <ui-select-choices repeat="table.value as table in tables | filter: $select.search">\n          <div ng-bind-html="table.name | highlight: $select.search"></div>\n        </ui-select-choices>\n      </ui-select>\n      <span data-ng-show="(forms.metric.table.$touched || forms.metric.$submitted) && forms.metric.table.$error.required" class="help-block help-block-error">\n        <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n      </span>\n    </div>\n    <!-- END TABLE-->\n\n    <!-- START METRIC -->\n    <div class="form-group" data-ng-class="{\'has-error\': (forms.metric.metric.$touched || forms.metric.$submitted) && forms.metric.metric.$invalid}">\n      <label class="control-label">{{\'APPLICATION_METRIC\' | translate}}<span class="required" aria-required="true">*</span></label>\n      <textarea type="text" name="metric" placeholder="{{\'APPLICATION_METRIC\' | translate}}" class="form-control" data-ng-model="item.metric" required/></textarea>\n      <span data-ng-show="(forms.metric.metric.$touched || forms.metric.$submitted) && forms.metric.metric.$error.required" class="help-block help-block-error">\n        <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n      </span>\n    </div>\n    <!-- END METRIC -->\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="metric.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.metric.$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/analytic/metric/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-calculator"></i>\n					<a href="/analytics/metrics/list">{{ \'APPLICATION_METRICS\' | 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-calculator font-green-sharp"></i>\n					<span class="caption-subject">{{ \'APPLICATION_METRICS\' | translate }}</a> </span>\n				</div>\n				<div class="actions">\n					<div class="btn-group" data-ng-show="Metrics.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_METRIC\' | translate }}\n						</button>\n					</div>\n					<a class="btn btn-icon-only btn-default" href="#" ng-csv="getMetrics([\'name\', \'description\'])" csv-header="[\'Name\', \'Description\']" field-separator=";" filename="metrics.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="displayedMetrics" 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.metricsByPage" theme="bootstrap" ng-disabled="disabled">\n												<ui-select-match placeholder="{{\'APPLICATION_SEARCH\' | translate}}">{{$select.selected.name}}</ui-select-match>\n												<ui-select-choices repeat="metricByPage in metricsByPage | filter: $select.search">\n													<div ng-bind-html="metricByPage.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(metric, 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="metric in displayedMetrics" class="animate-repeat">\n								<td style="text-align: center; vertical-align: middle"><input data-ng-hide="metric.defaultEntry" type="checkbox" checklist-model="Metrics.checked" checklist-value="metric.id"></td>\n								<td>{{metric.name}}</td>\n					      <td>{{metric.description}}</td>\n					      <td>\n					        <a class="btn default btn-xs blue-stripe" data-ng-href="/analytics/metrics/view/{{metric.id}}/settings" data-ng-class="{\'disabled\': metric.defaultEntry}">\n										{{ \'APPLICATION_SETTINGS\' | translate}}\n					        </a>\n					        <a class="btn default btn-xs red-stripe" data-ng-click="deleteItem(metric.name,metric.id)" data-ng-class="{\'disabled\': metric.defaultEntry}">\n										{{ \'APPLICATION_DELETE\' | translate }}\n					        </a>\n					      </td>\n					    </tr>\n							<tr data-ng-hide="displayedMetrics.length">\n								<td colspan="4" style="text-align:center;">\n									<i>{{ \'MESSAGE_NO_METRICS_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.metricsByPage.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/analytic/metric/view/view.html",'<!-- BEGIN PAGE CONTENT-->\n<div class="row" data-ng-init="getMetric()">\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="/analytics/metrics/list">{{ \'APPLICATION_METRICS\' | translate }}</a>\n					<i data-ng-show="metric" class="fa fa-angle-right"></i>\n				</li>\n				<li data-ng-show="metric">\n					<a href="#">{{metric.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/metric.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						{{metric.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.analytics.metrics.view.settings\')}">\n							<a data-ng-href="/analytics/metrics/view/{{metric.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/analytic/metric/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_METRIC\' | 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 && updateMetric()" 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="metric.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 TABLE -->\n							<div class="form-group" data-ng-class="{\'has-error\': (forms.general.table.$touched || forms.general.$submitted) && forms.general.table.$invalid}">\n								<label class="control-label">{{\'APPLICATION_TABLE\' | translate}}<span class="required" aria-required="true">*</span></label>\n								<ui-select data-ng-model="metric.table" name="table" theme="bootstrap" required>\n									<ui-select-match placeholder="{{\'APPLICATION_SEARCH_FILTER\' | translate}}">{{$select.selected.name}}</ui-select-match>\n									<ui-select-choices repeat="table.value as table in tables | filter: $select.search">\n										<div ng-bind-html="table.name | highlight: $select.search"></div>\n									</ui-select-choices>\n								</ui-select>\n								<span data-ng-show="(forms.general.table.$touched || forms.general.$submitted) && forms.general.table.$error.required" class="help-block help-block-error">\n									<strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n								</span>\n							</div>\n							<!-- END TABLE-->\n\n							<!-- START METRIC -->\n							<div class="form-group" data-ng-class="{\'has-error\': (forms.general.metric.$touched || forms.general.$submitted) && forms.general.metric.$invalid}">\n								<label class="control-label">{{\'APPLICATION_METRIC\' | translate}}<span class="required" aria-required="true">*</span></label>\n								<textarea type="text" name="metric" placeholder="{{\'APPLICATION_METRIC\' | translate}}" class="form-control" data-ng-model="metric.metric" required/></textarea>\n								<span data-ng-show="(forms.general.metric.$touched || forms.general.$submitted) && forms.general.metric.$error.required" class="help-block help-block-error">\n									<strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n								</span>\n							</div>\n							<!-- END METRIC -->\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="metric.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/analytic/report/list/copy.modal.html",'<div class="modal-header">\n  <h3 class="modal-title">{{ \'APPLICATION_COPY_REPORT\' | translate }}</h3>\n</div>\n<div class="modal-body">\n  <div class="portlet light bordered">\n    <div class="portlet-title">\n      <div class="caption font-green-sharp" style="padding-left:10px;">\n        <i class="icon-folder font-green-sharp"></i>\n        <span class="caption-subject">{{ \'APPLICATION_COPY_TO\' | translate }} </span>\n      </div>\n    </div>\n    <div class="portlet-body">\n      <div js-tree="customTreeConfig" ng-model="customTreeData" should-apply="ac()" tree="customTreeInstance" tree-events="ready:initCustomScopeTree;"></div>\n    </div>\n  </div>\n</div>\n<div class="modal-footer">\n  <button class="btn btn-success" type="button" data-ng-disabled="!customTree.get_selected(true).pop().id" ng-click="ok()" ng-disabled="forms.report.$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/analytic/report/list/create.modal.html",'<div class="modal-header">\n  <h3 class="modal-title">{{ \'APPLICATION_NEW_REPORT\' | translate }}</h3>\n</div>\n<div class="modal-body">\n  <form name="forms.report" novalidate>\n\n    <!-- START NAME -->\n    <div class="form-group" data-ng-class="{\'has-error\': (forms.report.name.$touched || forms.report.$submitted) && forms.report.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.report.name.$touched || forms.report.$submitted) && forms.report.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    <div class="form-group" data-ng-class="{\'has-error\': (forms.report.name.$touched || forms.report.$submitted) && forms.report.name.$invalid}">\n      <label class="control-label">{{\'APPLICATION_PATH\' | translate}}<span class="required" aria-required="true"></span></label>\n      <input type="text" name="name" placeholder="{{\'APPLICATION_PATH\' | translate}}" class="form-control" data-ng-model="path" disabled/>\n      <span data-ng-show="(forms.report.name.$touched || forms.report.$submitted) && forms.report.name.$error.required" class="help-block help-block-error">\n        <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n      </span>\n    </div>\n\n  </form>\n</div>\n<div class="modal-footer">\n  <button class="btn btn-success" type="button" ng-click="ok()" ng-disabled="forms.report.$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/analytic/report/list/extract.modal.html",'<div class="modal-header">\n  <h3 class="modal-title">{{ \'APPLICATION_EXTRACT_REPORT\' | translate }}</h3>\n</div>\n<div class="modal-body" style="text-align:center;">\n  <form name="forms.report" class="form-inline" novalidate>\n    <div class="form-group">\n      <label class="control-label">{{\'APPLICATION_DATE_RANGE\' | translate}}<span class="required" aria-required="true"></span></label>\n      <input type="daterange" name="dates" ranges="ranges" placeholder="{{\'APPLICATION_DATE_RANGE\' | translate}}" class="form-control" data-ng-model="dates" data-ng-change="getPage()" required/>\n    </div>\n  </form>\n  <div ng-slide-down="showResult" lazy-render duration="1">\n    <div ui-grid="gridOptions" ui-grid-pagination class="grid"></div>\n  </div>\n</div>\n<div class="modal-footer">\n<button class="btn default" type="button" ng-click="cancel()">{{ \'APPLICATION_CLOSE\' | translate }}</button>\n</div>\n'),a.put("app/analytic/report/list/list.html",'<!-- BEGIN PAGE CONTENT-->\n<div class="row" data-ng-init="getTrees()">\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-book-open"></i>\n					<a href="/analytics/reports/list">{{ \'APPLICATION_REPORTS\' | translate }}</a>\n				</li>\n			</ul>\n		</div>\n		<div class="col-fixed">\n			<!-- BEGIN Portlet PORTLET-->\n			<div class="portlet light bordered">\n				<div class="portlet-title">\n					<div class="caption font-green-sharp" style="padding-left:10px;">\n						<i class="icon-folder font-green-sharp"></i>\n						<span class="caption-subject">{{ \'APPLICATION_FOLDERS\' | translate }} </span>\n					</div>\n					<div class="inputs">\n						<div class="portlet-input input-inline input-small">\n							<div class="input-icon right">\n								<i class="icon-magnifier"></i>\n								<input type="text" data-ng-model="searchField" data-ng-change="searchTrees()" class="form-control input-circle" placeholder="search...">\n							</div>\n						</div>\n					</div>\n				</div>\n				<div class="portlet-body">\n					<div js-tree="defaultTreeConfig" ng-model="defaultTreeData" should-apply="ac()" tree="defaultTreeInstance" tree-events="ready:initDefaultScopeTree;select_node:selectDefaultNode;"></div>\n					<div js-tree="customTreeConfig" ng-model="customTreeData" should-apply="ac()" tree="customTreeInstance" tree-events="ready:initCustomScopeTree;select_node:selectCustomNode;rename_node:updateCustomTree;delete_node:updateCustomTree;move_node:updateCustomTree;create_node:updateCustomTree;"></div>\n				</div>\n			</div>\n			<!-- END Portlet PORTLET-->\n		</div>\n		<div class="row tree-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-book-open font-green-sharp"></i>\n							<span class="caption-subject">{{ \'APPLICATION_REPORTS\' | translate }}<span data-ng-if="selectedNode"> - {{selectedNode}}</span></span>\n						</div>\n						<div data-ng-if="!defaultTreeActive" class="actions">\n							<div class="btn-group" data-ng-show="Reports.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								<span class="btn default btn-file">\n								<span class="fileinput-new">\n								<i class="icon-cloud-upload"></i> {{\'APPLICATION_IMPORT_FROM_JSON\' | translate}}</span>\n								<input type="file" on-read-file="import($fileContent)"/>\n								</span>\n							</div>\n							<div class="btn-group">\n								<button class="btn green-jungle " ng-click="create()">\n									<i class="icon-plus"></i> {{ \'APPLICATION_NEW_REPORT\' | translate }}\n								</button>\n							</div>\n						</div>\n					</div>\n					<div class="portlet-body">\n						<!-- START TABLE -->\n						<table data-ng-if="defaultTreeReady && customTreeReady" st-table="displayedReports" st-pipe="initList" class="table table-striped table-bordered table-hover">\n							<div class="table-responsive" data-ng-init="firstSelect()">\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.reportsByPage" theme="bootstrap" ng-disabled="disabled">\n														<ui-select-match placeholder="{{\'APPLICATION_SEARCH\' | translate}}">{{$select.selected.name}}</ui-select-match>\n														<ui-select-choices repeat="reportByPage in reportsByPage | filter: $select.search">\n															<div ng-bind-html="reportByPage.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 data-ng-checked="Reports.checked.length" data-ng-hide="defaultTreeActive" type="checkbox" ng-change="check(report, 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="report in displayedReports" class="animate-repeat">\n										<td style="text-align: center; vertical-align: middle"><input data-ng-hide="defaultTreeActive" type="checkbox" checklist-model="Reports.checked" checklist-value="report.id"></td>\n										<td>{{report.name}}</td>\n										<td>{{report.description}}</td>\n										<td>\n											<a data-ng-if="!defaultTreeActive" class="btn default btn-xs blue-stripe" data-ng-href="/analytics/reports/view/{{report.id}}/settings">\n												{{ \'APPLICATION_SETTINGS\' | translate}}\n											</a>\n											<a data-ng-if="!defaultTreeActive" class="btn default btn-xs red-stripe" data-ng-click="deleteItem(report.name,report.id)">\n												{{ \'APPLICATION_DELETE\' | translate }}\n											</a>\n											<a class="btn default btn-xs green-stripe" data-ng-click="copy(report.id)">\n												{{ \'APPLICATION_COPY\' | translate }}\n											</a>\n											<a class="btn default btn-xs purple-stripe" data-ng-click="export(report.id)">\n												{{ \'APPLICATION_EXPORT\' | translate }}\n											</a>\n											<a class="btn default btn-xs yellow-stripe" data-ng-click="extract(report.id)">\n												{{ \'APPLICATION_EXTRACT\' | translate }}\n											</a>\n										</td>\n									</tr>\n									<tr data-ng-hide="displayedReports.length">\n										<td colspan="4" style="text-align:center;">\n											<i>{{ \'MESSAGE_NO_REPORTS_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.reportsByPage.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	</div>\n</div>\n<!-- END PAGE CONTENT-->\n'),a.put("app/analytic/report/view/view.html",'<!-- BEGIN PAGE CONTENT-->\n<div class="row" data-ng-init="getReport()">\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-book-open"></i>\n					<a href="/analytics/reports/list">{{ \'APPLICATION_REPORTS\' | translate }}</a>\n					<i data-ng-show="report" class="fa fa-angle-right"></i>\n				</li>\n				<li data-ng-show="report">\n					<a href="#">{{report.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/report.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						{{report.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.analytics.reports.view.settings\')}">\n							<a data-ng-href="/analytics/reports/view/{{report.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/analytic/report/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_REPORT\' | translate}} {{ \'APPLICATION_SETTINGS\' | translate}} </span>\n				</div>\n				<ul class="nav nav-tabs">\n					<li>\n						<a href="#" data-target="#tab_1_1" data-toggle="tab">{{ \'APPLICATION_GENERAL\' | translate}}</a>\n					</li>\n					<li class="active">\n						<a href="#" data-target="#tab_1_2" data-toggle="tab">{{ \'APPLICATION_BUILD\' | translate}}</a>\n					</li>\n					<li>\n						<a href="#" data-target="#tab_1_3" data-toggle="tab">{{ \'APPLICATION_PREVIEW\' | translate}}</a>\n					</li>\n				</ul>\n			</div>\n\n			<div class="portlet-body">\n\n				<div class="tab-content">\n					<!-- GENERAL TAB -->\n					<div class="tab-pane" id="tab_1_1">\n						<form name="forms.general" data-ng-submit="forms.report.$valid && forms.general.$valid && updateReport()" novalidate>\n\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="report.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="report.description"></textarea>\n							</div>\n							<!-- END DESCRIPTION -->\n\n							<!-- START TABLE INPUT -->\n\n\n							<input class="btn green-haze" type="submit" value="{{\'APPLICATION_UPDATE\' | translate}}"/>\n						</form>\n\n					</div>\n					<!-- END GENERAL TAB -->\n					<div class="tab-pane active" id="tab_1_2">\n						<form name="forms.report" data-ng-submit="forms.report.$valid && forms.general.$valid && updateReport()" novalidate>\n						<div class="form-group" data-ng-class="{\'has-error\': (forms.report.table.$touched || forms.report.$submitted) && forms.report.table.$invalid}">\n							<label class="control-label">{{\'APPLICATION_TABLE\' | translate}}<span class="required" aria-required="true">*</span></label>\n							<ui-select data-ng-model="report.table" name="table" theme="bootstrap" required>\n								<ui-select-match placeholder="{{\'APPLICATION_SEARCH_FILTER\' | translate}}">{{$select.selected.name}}</ui-select-match>\n								<ui-select-choices repeat="table.table as table in tables | filter: $select.search">\n									<div ng-bind-html="table.name | highlight: $select.search"></div>\n								</ui-select-choices>\n							</ui-select>\n							<span class="help-block">\n							</span>\n							<span data-ng-show="(forms.report.table.$touched || forms.report.$submitted) && forms.report.table.$error.required" class="help-block help-block-error">\n								<strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n							</span>\n						</div>\n						<!-- END TABLE INPUT-->\n						<div data-ng-if="report.table" class="mbottom20 pbottom20">\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_FIELDS\' | translate}} </span>\n							</div>\n						</div>\n								<!-- START TABLE -->\n								<table class="table table-striped table-bordered table-hover">\n									<thead>\n										<tr>\n											<th>{{ \'APPLICATION_FIELD\' | translate }} / {{ \'APPLICATION_METRIC\' | translate }}</th>\n											<th>{{ \'APPLICATION_ALIAS\' | translate }}</th>\n											<th>{{ \'APPLICATION_FUNCTION\' | translate }}</th>\n											<th>{{ \'APPLICATION_GROUP_BY\' | translate }}</th>\n											<th>{{ \'APPLICATION_ORDER_BY\' | translate }}</th>\n											<th></th>\n											<th></th>\n										</tr>\n									</thead>\n										<tbody ui-sortable="sortableOptions" data-ng-model="report.Fields">\n											<tr data-ng-repeat="field in report.Fields">\n												<td>\n													<!-- START FIELD -->\n													<div class="form-group" data-ng-class="{\'has-error\': forms.report.$submitted && !field.field}">\n														<!-- <label class="control-label">{{\'APPLICATION_FIELD\' | translate}}<span class="required" aria-required="true">*</span></label> -->\n														<ui-select data-ng-model="field.field" dynamic-name="randomName()" theme="bootstrap" required>\n															<ui-select-match placeholder="{{\'APPLICATION_SEARCH_FILTER\' | translate}}"><span ng-bind-html="$select.selected.name"></span></ui-select-match>\n															<ui-select-choices repeat="tableField.value as tableField in tableFields | filter: $select.search">\n																<div ng-bind-html="tableField.name | highlight: $select.search"></div>\n															</ui-select-choices>\n														</ui-select>\n														<span data-ng-show="forms.report.$submitted && !field.field" class="help-block help-block-error">\n															<strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n														</span>\n													</div>\n													<!-- END FIELD-->\n												</td>\n												<td>\n													<!-- START ALIAS -->\n													<div class="form-group" data-ng-class="{\'has-error\': forms.report.$submitted && !field.alias}">\n														<!-- <label class="control-label">{{\'APPLICATION_ALIAS\' | translate}}<span class="required" aria-required="true">*</span></label> -->\n														<input type="text" dynamic-name="randomName()" placeholder="{{\'APPLICATION_ALIAS\' | translate}}" class="form-control" data-ng-model="field.alias" required/>\n														<span data-ng-show="forms.report.$submitted && !field.alias" class="help-block help-block-error">\n															<strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n														</span>\n													</div>\n													<!-- END ALIAS -->\n												</td>\n												<td>\n													<!-- START FUNCTION -->\n													<div class="form-group">\n														<!-- <label class="control-label">{{\'APPLICATION_FIELD\' | translate}}<span class="required" aria-required="true">*</span></label> -->\n														<ui-select data-ng-model="field.function" name="function" theme="bootstrap">\n															<ui-select-match placeholder="{{\'APPLICATION_FUNCTION\' | translate}}" allow-clear>{{$select.selected.name}}</ui-select-match>\n															<ui-select-choices repeat="function.value as function in functions | filter: $select.search">\n																<div ng-bind-html="function.name | highlight: $select.search"></div>\n															</ui-select-choices>\n														</ui-select>\n													</div>\n													<!-- END FUNCTION-->\n												</td>\n												<td>\n													<!-- START GROUP_BY -->\n													<div class="form-group">\n														<!-- <label class="control-label">{{\'APPLICATION_FIELD\' | translate}}<span class="required" aria-required="true">*</span></label> -->\n														<ui-select data-ng-model="field.groupBy" name="groupBy" theme="bootstrap" required>\n															<ui-select-match placeholder="{{\'APPLICATION_GROUP_BY\' | translate}}">{{$select.selected.name | translate}}</ui-select-match>\n															<ui-select-choices repeat="groupBy.value as groupBy in groupByField | filter: $select.search">\n																{{$translate.instant(groupBy.name)}}\n															</ui-select-choices>\n														</ui-select>\n													</div>\n													<!-- END GROUP_BY-->\n												</td>\n												<td>\n													<!-- START ORDER_BY -->\n													<div class="form-group">\n														<!-- <label class="control-label">{{\'APPLICATION_FIELD\' | translate}}<span class="required" aria-required="true">*</span></label> -->\n														<ui-select data-ng-model="field.orderBy" name="orderBy" theme="bootstrap">\n															<ui-select-match placeholder="{{\'APPLICATION_ORDER_BY\' | translate}}" allow-clear>{{$select.selected}}</ui-select-match>\n															<ui-select-choices repeat="orderBy in [\'ASC\',\'DESC\'] | filter: $select.search">\n																<div ng-bind-html="orderBy | highlight: $select.search"></div>\n															</ui-select-choices>\n														</ui-select>\n													</div>\n													<!-- END TABLE INPUT-->\n												</td>\n												<td class="report-field-remove">\n													<button class="btn red" type="button" data-ng-click="removeField($index)"><i class="fa fa-times"></i></button>\n												</td>\n												<td class="report-field-handle">\n													<!-- <img data-ng-src="assets/images/move.png" class="img-responsive"> -->\n												</td>\n											</tr>\n											<tr data-ng-hide="report.Fields.length" class="unsortable">\n												<td colspan="7" style="text-align:center;">\n													<i>{{ \'MESSAGE_ADD_A_FIELD\' | translate }}</i>\n												</td>\n											</tr>\n										</tbody>\n								</table>\n								<button type="button" class="btn btn-sm green padding-bottom" ng-click="addField()">\n									<i class="fa fa-plus"></i> {{\'APPLICATION_ADD_FIELD\' | translate}}\n								</button>\n								<!-- END TABLE -->\n							</div>\n								<div data-ng-if="report.Fields.length" class="mbottom20 pbottom20">\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_CONDITIONS\' | translate}} </span>\n										</div>\n									</div>\n									<div class="alert alert-info">\n											<strong>Output</strong><br>\n											<span ng-bind-html="output"></span>\n									</div>\n\n									<report-builder group="report.conditions.group" fields="report.Fields" forms="forms" firstCall=\'true\'></report-builder>\n								</div>\n								<input class="btn green-haze" type="submit" value="{{\'APPLICATION_UPDATE\' | translate}}"/>\n								</form>\n								<!-- <pre>\n									{{report | json}}\n								</pre> -->\n\n					</div>\n					<div class="tab-pane" id="tab_1_3">\n						<div data-ng-if="showPreview" ui-grid="gridOptions" ui-grid-move-columns class="grid"></div>\n					</div>\n				</div>\n			</div>\n		</div>\n	</div>\n</div>\n'),a.put("app/analytic/report/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="/analytics/reports/list">{{ \'APPLICATION_REPORTS\' | translate }}</a>\n				<i class="fa fa-angle-right"></i>\n			</li>\n			<li>\n				<i class="icon-options"></i>\n				<a href="#">{{ \'APPLICATION_NEW_REPORT\' | 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_NEW_REPORT\' | translate }}</a> </span>\n  		</div>\n  	</div>\n  	<div class="portlet-body">\n			<form name="forms.general" data-ng-submit="forms.general.$valid && createItem()" novalidate>\n			</form>\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/queue/queue.html",'<!-- BEGIN PAGE CONTENT-->\n<div class="row" data-ng-init="initAgents()">\n	<div class="col-md-12">\n		<!-- START TABLE -->\n		<div id="grid1" ui-grid="gridOptions" ui-grid-tree-view class="grid"></div>\n		<!-- END TABLE -->\n	</div>\n</div>\n<!-- END PAGE CONTENT-->\n'),a.put("app/chat/realtime/view/agent/timeline/timeline.html",'<!-- BEGIN PAGE CONTENT-->\n<div class="row" data-ng-init="initAgents()">\n	<div class="col-md-12">\n		<!-- START TABLE -->\n		<div id="grid1" ui-grid="gridOptions" class="grid"></div>\n		<!-- START 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									{{application.User ? \'agent\' : \'queue\' | uppercase}} [{{application.User ? application.User.fullname : application.ChatQueue.name}}]\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="initView()">\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					<li>\n						<a href="#" data-target="#tab_1_6" data-toggle="tab">{{\'APPLICATION_OFFLINE\' | 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_MOTION_ADDRESS\' | translate}} <span class="required" aria-required="true">*</span></label>\n											<input type="url" name="remote" placeholder="{{\'APPLICATION_MOTION_ADDRESS\' | 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\n								<!-- OFFLINE TAB -->\n								<div class="tab-pane" id="tab_1_6">\n									<form name="forms.formOffline" data-ng-submit="forms.formOffline.$valid && updateItem()" novalidate>\n\n										<!-- START ENQUIRY FORWARDING -->\n										<div class="form-group">\n											<div class="row">\n												<label class="col-md-4">\n													{{\'APPLICATION_ENQUIRY_FORWARDING\' | translate}}\n												</label>\n												<label class="col-md-8">\n													<input type="checkbox" ng-model="chatWebsite.enquiry_forwarding">\n												</label>\n											</div>\n											<div class="row">\n												<span class="help-block col-md-12">\n														{{\'MESSAGE_REMEMBER_SMTP_SERVICE_ACCOUNT\' | translate}}.\n												</span>\n											</div>\n										</div>\n										<!-- END ENQUIRY FORWARDING -->\n\n										<!-- START REMOTE IP -->\n										<div class="form-group" data-ng-if="chatWebsite.enquiry_forwarding" data-ng-class="{\'has-error\': (forms.formOffline.forwardingAddress.$touched || forms.formOffline.$submitted) && forms.formSetting.forwardingAddress.$invalid}">\n											<label class="control-label">{{\'APPLICATION_ENQUIRY_FORWARDING_ADDRESS\' | translate}}<span class="required" aria-required="true">*</span></label>\n											<input type="text" name="forwardingAddress" placeholder="{{\'APPLICATION_ADDRESS\' | translate}}" class="form-control" data-ng-model="chatWebsite.enquiry_forwarding_address" required/>\n											<span data-ng-show="(forms.formOffline.forwardingAddress.$touched || forms.formOffline.$submitted) && forms.formOffline.forwardingAddress.$invalid && forms.formOffline.forwardingAddress.$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 HEADER SHAPE -->\n										<div class="form-group" data-ng-if="chatWebsite.enquiry_forwarding" data-ng-class="{\'has-error\': (forms.formOffline.OfflineTemplateId.$touched || forms.formOffline.$submitted) && forms.formOffline.OfflineTemplateId.$invalid}">\n											<label class="control-label">{{\'APPLICATION_TEMPLATE\' | translate}}<span class="required" aria-required="true">*</span></label>\n											<ui-select data-ng-model="chatWebsite.OfflineTemplateId" name="OfflineTemplateId" theme="bootstrap" required>\n												<ui-select-match placeholder="{{\'APPLICATION_SEARCH_FILTER\' | translate}}">{{$select.selected.name}}</ui-select-match>\n												<ui-select-choices repeat="mailTemplate.id as mailTemplate in mailTemplates | filter: $select.search">\n													<div ng-bind-html="mailTemplate.name | highlight: $select.search"></div>\n												</ui-select-choices>\n											</ui-select>\n											<span data-ng-show="(forms.formOffline.OfflineTemplateId.$touched || forms.formOffline.$submitted) && forms.formOffline.OfflineTemplateId.$invalid && forms.formOffline.OfflineTemplateId.$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\n										<input class="btn green-haze" type="submit" value="{{\'APPLICATION_UPDATE\' | translate}}"/>\n									</form>\n								</div>\n								<!-- END OFFLINE 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_MOTION_ADDRESS\' | translate}} <span class="required" aria-required="true">*</span></label>\n								<input type="url" name="remote" placeholder="{{\'APPLICATION_MOTION_ADDRESS\' | 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/contactmanager/company/list/create.modal.html",'<div class="modal-header">\n  <h3 class="modal-title">{{ \'APPLICATION_NEW_COMPANY\' | translate }}</h3>\n</div>\n<div class="modal-body">\n  <form name="forms.company" novalidate>\n\n    <!-- START NAME -->\n    <div class="form-group" data-ng-class="{\'has-error\': (forms.company.name.$touched || forms.company.$submitted) && forms.company.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.cmopany.name.$touched || forms.company.$submitted) && forms.company.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.company.$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/contactmanager/company/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-briefcase"></i>\n					<a href="/contactmanager/companies/list">{{ \'APPLICATION_COMPANIES\' | 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-briefcase font-green-sharp"></i>\n					<span class="caption-subject">{{ \'APPLICATION_COMPANIES\' | translate }}</a> </span>\n				</div>\n				<div class="actions">\n					<div class="btn-group" data-ng-show="Companies.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_COMPANY\' | translate }}\n						</button>\n					</div>\n					<a class="btn btn-icon-only btn-default" href="#" ng-csv="getCompanies([\'name\', \'description\'])" csv-header="[\'Name\', \'Description\']" field-separator=";" filename="companies.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="displayedCompanies" 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.companiesByPage" theme="bootstrap" ng-disabled="disabled">\n												<ui-select-match placeholder="{{\'APPLICATION_SEARCH\' | translate}}">{{$select.selected.name}}</ui-select-match>\n												<ui-select-choices repeat="companyByPage in companiesByPage | filter: $select.search">\n													<div ng-bind-html="companyByPage.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(company, 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="company in displayedCompanies" class="animate-repeat">\n								<td style="text-align: center; vertical-align: middle"><input type="checkbox" checklist-model="Companies.checked" checklist-value="company.id"></td>\n								<td>{{company.name}}</td>\n					      <td>{{company.description}}</td>\n					      <td>\n					        <a class="btn default btn-xs blue-stripe" data-ng-href="/contactmanager/companies/view/{{company.id}}/settings">\n										{{ \'APPLICATION_SETTINGS\' | translate}}\n					        </a>\n					        <a class="btn default btn-xs red-stripe" data-ng-click="deleteItem(company.name,company.id)">\n										{{ \'APPLICATION_DELETE\' | translate }}\n					        </a>\n					      </td>\n					    </tr>\n							<tr data-ng-hide="displayedCompanies.length">\n								<td colspan="4" style="text-align:center;">\n									<i>{{ \'MESSAGE_NO_COMPANIES_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.companiesByPage.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/contactmanager/company/view/view.html",'<!-- BEGIN PAGE CONTENT-->\n<div class="row" data-ng-init="getCompany()">\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-briefcase"></i>\n					<a href="/contactmanager/companies/list">{{ \'APPLICATION_COMPANIES\' | translate }}</a>\n					<i data-ng-show="company" class="fa fa-angle-right"></i>\n				</li>\n				<li data-ng-show="company">\n					<a href="#">{{company.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/company.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						{{company.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.contactmanager.companies.view.settings\')}">\n							<a data-ng-href="/contactmanager/companies/view/{{company.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/contactmanager/company/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_COMPANY\' | 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_ADDRESS\' | translate}}</a>\n					</li>\n					<li>\n						<a href="#" data-target="#tab_1_3" data-toggle="tab">{{ \'APPLICATION_SHIPMENT_ADDRESS\' | 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 && updateCompany()" 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="company.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="company.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					<div class="tab-pane" id="tab_1_2">\n						<!-- START STREET -->\n						<div class="form-group" data-ng-class="{\'has-error\': (forms.general.street.$touched || forms.general.$submitted) && forms.general.street.$invalid}">\n							<label class="control-label">{{\'APPLICATION_STREET\' | translate}}</label>\n							<input type="text" name="street" placeholder="{{\'APPLICATION_STREET\' | translate}}" class="form-control" data-ng-model="company.street"/>\n							<span data-ng-show="(forms.general.street.$touched || forms.general.$submitted) && forms.general.street.$error.required" class="help-block help-block-error">\n								<strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n							</span>\n						</div>\n						<!-- END STREET -->\n\n						<!-- START POSTALCODE -->\n						<div class="form-group" data-ng-class="{\'has-error\': (forms.general.postalCode.$touched || forms.general.$submitted) && forms.general.postalCode.$invalid}">\n							<label class="control-label">{{\'APPLICATION_POSTALCODE\' | translate}}</label>\n							<input type="text" name="postalCode" placeholder="{{\'APPLICATION_POSTALCODE\' | translate}}" class="form-control" data-ng-model="company.postalCode"/>\n							<span data-ng-show="(forms.general.postalCode.$touched || forms.general.$submitted) && forms.general.postalCode.$error.required" class="help-block help-block-error">\n								<strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n							</span>\n						</div>\n						<!-- END POSTALCODE -->\n\n						<!-- START CITY -->\n						<div class="form-group" data-ng-class="{\'has-error\': (forms.general.city.$touched || forms.general.$submitted) && forms.general.city.$invalid}">\n							<label class="control-label">{{\'APPLICATION_CITY\' | translate}}</label>\n							<input type="text" name="city" placeholder="{{\'APPLICATION_CITY\' | translate}}" class="form-control" data-ng-model="company.city"/>\n							<span data-ng-show="(forms.general.city.$touched || forms.general.$submitted) && forms.general.city.$error.required" class="help-block help-block-error">\n								<strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n							</span>\n						</div>\n						<!-- END CITY -->\n						<!-- START COUNTRY -->\n						<div class="form-group" data-ng-class="{\'has-error\': (forms.general.country.$touched || forms.general.$submitted) && forms.general.country.$invalid}">\n							<label class="control-label">{{\'APPLICATION_COUNTRY\' | translate}}</label>\n							<input type="text" name="country" placeholder="{{\'APPLICATION_COUNTRY\' | translate}}" class="form-control" data-ng-model="company.country"/>\n							<span data-ng-show="(forms.general.country.$touched || forms.general.$submitted) && forms.general.country.$error.required" class="help-block help-block-error">\n								<strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n							</span>\n						</div>\n						<!-- END COUNTRY -->\n						<input class="btn green-haze" type="submit" value="{{\'APPLICATION_UPDATE\' | translate}}"/>\n					</div>\n					<div class="tab-pane" id="tab_1_3">\n						<!-- START STREET -->\n						<div class="form-group" data-ng-class="{\'has-error\': (forms.general.sStreet.$touched || forms.general.$submitted) && forms.general.sStreet.$invalid}">\n							<label class="control-label">{{\'APPLICATION_STREET\' | translate}}</label>\n							<input type="text" name="sStreet" placeholder="{{\'APPLICATION_STREET\' | translate}}" class="form-control" data-ng-model="company.sStreet"/>\n							<span data-ng-show="(forms.general.sStreet.$touched || forms.general.$submitted) && forms.general.sStreet.$error.required" class="help-block help-block-error">\n								<strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n							</span>\n						</div>\n						<!-- END STREET -->\n\n						<!-- START POSTALCODE -->\n						<div class="form-group" data-ng-class="{\'has-error\': (forms.general.sPostalCode.$touched || forms.general.$submitted) && forms.general.sPostalCode.$invalid}">\n							<label class="control-label">{{\'APPLICATION_POSTALCODE\' | translate}}</label>\n							<input type="text" name="sPostalCode" placeholder="{{\'APPLICATION_POSTALCODE\' | translate}}" class="form-control" data-ng-model="company.sPostalCode"/>\n							<span data-ng-show="(forms.general.sPostalCode.$touched || forms.general.$submitted) && forms.general.sPostalCode.$error.required" class="help-block help-block-error">\n								<strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n							</span>\n						</div>\n						<!-- END POSTALCODE -->\n\n						<!-- START CITY -->\n						<div class="form-group" data-ng-class="{\'has-error\': (forms.general.sCity.$touched || forms.general.$submitted) && forms.general.sCity.$invalid}">\n							<label class="control-label">{{\'APPLICATION_CITY\' | translate}}</label>\n							<input type="text" name="sCity" placeholder="{{\'APPLICATION_CITY\' | translate}}" class="form-control" data-ng-model="company.sCity"/>\n							<span data-ng-show="(forms.general.sCity.$touched || forms.general.$submitted) && forms.general.sCity.$error.required" class="help-block help-block-error">\n								<strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n							</span>\n						</div>\n						<!-- END CITY -->\n						<!-- START COUNTRY -->\n						<div class="form-group" data-ng-class="{\'has-error\': (forms.general.sCountry.$touched || forms.general.$submitted) && forms.general.sCountry.$invalid}">\n							<label class="control-label">{{\'APPLICATION_COUNTRY\' | translate}}</label>\n							<input type="text" name="sCountry" placeholder="{{\'APPLICATION_COUNTRY\' | translate}}" class="form-control" data-ng-model="company.sCountry"/>\n							<span data-ng-show="(forms.general.sCountry.$touched || forms.general.$submitted) && forms.general.sCountry.$error.required" class="help-block help-block-error">\n								<strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n							</span>\n						</div>\n						<!-- END COUNTRY -->\n						<input class="btn green-haze" type="submit" value="{{\'APPLICATION_UPDATE\' | translate}}"/>\n					</div>\n				</div>\n			</div>\n		</div>\n	</div>\n</div>\n'),
-a.put("app/contactmanager/contact/list/import.modal.html",'<div class="modal-header" data-ng-init="getCustomFields();">\n  <h3 class="modal-title">{{ \'APPLICATION_IMPORT_FROM_CSV\' | translate }}</h3>\n</div>\n<div class="modal-body">\n  <form name="forms.csv" novalidate>\n    <div class="row">\n      <div class="col-md-6">\n    <!-- START FULLNAME -->\n    <div class="form-group" data-ng-class="{\'has-error\': forms.csv.fullname.$invalid && forms.csv.$submitted}">\n      <label class="control-label">{{\'APPLICATION_FULLNAME\' | translate}}</label>\n      <ui-select data-ng-model="item.fullname" theme="bootstrap" name="fullname" data-ng-disabled="disabled" required>\n        <ui-select-match allow-clear placeholder="{{ \'APPLICATION_FULLNAME\' | translate }}">{{$select.selected}}</ui-select-match>\n        <ui-select-choices repeat="index in indexes | filter: $select.search">\n          <div ng-bind-html="index | highlight: $select.search"></div>\n        </ui-select-choices>\n      </ui-select>\n      <span data-ng-show="forms.csv.fullname.$invalid && forms.csv.$touched" 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 STREET -->\n    <div class="form-group" data-ng-class="{\'has-error\': forms.csv.street.$invalid && forms.csv.$submitted}">\n      <label class="control-label">{{\'APPLICATION_STREET\' | translate}}</label>\n      <ui-select data-ng-model="item.street" theme="bootstrap" name="street" data-ng-disabled="disabled">\n        <ui-select-match allow-clear placeholder="{{ \'APPLICATION_STREET\' | translate }}">{{$select.selected}}</ui-select-match>\n        <ui-select-choices repeat="index in indexes | filter: $select.search">\n          <div ng-bind-html="index | highlight: $select.search"></div>\n        </ui-select-choices>\n      </ui-select>\n      <span data-ng-show="forms.csv.street.$invalid && forms.csv.$touched" class="help-block help-block-error">\n        <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n      </span>\n    </div>\n    <!-- END STREET -->\n\n    <!-- START POSTALCODE -->\n    <div class="form-group" data-ng-class="{\'has-error\': forms.csv.postalCode.$invalid && forms.csv.$submitted}">\n      <label class="control-label">{{\'APPLICATION_POSTALCODE\' | translate}}</label>\n      <ui-select data-ng-model="item.postalCode" theme="bootstrap" name="postalCode" data-ng-disabled="disabled">\n        <ui-select-match allow-clear placeholder="{{ \'APPLICATION_POSTALCODE\' | translate }}">{{$select.selected}}</ui-select-match>\n        <ui-select-choices repeat="index in indexes | filter: $select.search">\n          <div ng-bind-html="index | highlight: $select.search"></div>\n        </ui-select-choices>\n      </ui-select>\n      <span data-ng-show="forms.csv.postalCode.$invalid && forms.csv.$touched" class="help-block help-block-error">\n        <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n      </span>\n    </div>\n    <!-- END POSTALCODE -->\n\n    <!-- START CITY -->\n    <div class="form-group" data-ng-class="{\'has-error\': forms.csv.city.$invalid && forms.csv.$submitted}">\n      <label class="control-label">{{\'APPLICATION_CITY\' | translate}}</label>\n      <ui-select data-ng-model="item.city" theme="bootstrap" name="city" data-ng-disabled="disabled">\n        <ui-select-match allow-clear placeholder="{{ \'APPLICATION_CITY\' | translate }}">{{$select.selected}}</ui-select-match>\n        <ui-select-choices repeat="index in indexes | filter: $select.search">\n          <div ng-bind-html="index | highlight: $select.search"></div>\n        </ui-select-choices>\n      </ui-select>\n      <span data-ng-show="forms.csv.city.$invalid && forms.csv.$touched" class="help-block help-block-error">\n        <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n      </span>\n    </div>\n    <!-- END CITY -->\n\n    <!-- START PHONES -->\n    <div class="form-group" data-ng-class="{\'has-error\': forms.csv.Phones.$invalid && forms.csv.$submitted}">\n      <label class="control-label">{{\'APPLICATION_PHONES\' | translate}}</label>\n      <ui-select multiple data-ng-model="item.Phones" theme="bootstrap" name="Phones" data-ng-disabled="disabled">\n        <ui-select-match allow-clear placeholder="{{ \'APPLICATION_PHONES\' | translate }}">{{$item}}</ui-select-match>\n        <ui-select-choices repeat="index in indexes | filter: $select.search">\n          <div ng-bind-html="index | highlight: $select.search"></div>\n        </ui-select-choices>\n      </ui-select>\n      <span data-ng-show="forms.csv.Phones.$invalid && forms.csv.$touched" class="help-block help-block-error">\n        <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n      </span>\n    </div>\n    <!-- END PHONES -->\n\n  </div>\n  <div class="col-md-6">\n\n    <!-- START COUNTRY -->\n    <div class="form-group" data-ng-class="{\'has-error\': forms.csv.country.$invalid && forms.csv.$submitted}">\n      <label class="control-label">{{\'APPLICATION_COUNTRY\' | translate}}</label>\n      <ui-select data-ng-model="item.country" theme="bootstrap" name="country" data-ng-disabled="disabled">\n        <ui-select-match allow-clear placeholder="{{ \'APPLICATION_COUNTRY\' | translate }}">{{$select.selected}}</ui-select-match>\n        <ui-select-choices repeat="index in indexes | filter: $select.search">\n          <div ng-bind-html="index | highlight: $select.search"></div>\n        </ui-select-choices>\n      </ui-select>\n      <span data-ng-show="forms.csv.country.$invalid && forms.csv.$touched" class="help-block help-block-error">\n        <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n      </span>\n    </div>\n    <!-- END COUNTRY -->\n\n    <!-- START DATEOFBIRTH -->\n    <div class="form-group" data-ng-class="{\'has-error\': forms.csv.dateOfBirth.$invalid && forms.csv.$submitted}">\n      <label class="control-label">{{\'APPLICATION_DATEOFBIRTH\' | translate}}</label>\n      <ui-select data-ng-model="item.dateOfBirth" theme="bootstrap" name="dateOfBirth" data-ng-disabled="disabled">\n        <ui-select-match allow-clear placeholder="{{ \'APPLICATION_DATEOFBIRTH\' | translate }}">{{$select.selected}}</ui-select-match>\n        <ui-select-choices repeat="index in indexes | filter: $select.search">\n          <div ng-bind-html="index | highlight: $select.search"></div>\n        </ui-select-choices>\n      </ui-select>\n      <span data-ng-show="forms.csv.dateOfBirth.$invalid && forms.csv.$touched" class="help-block help-block-error">\n        <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n      </span>\n    </div>\n    <!-- END DATEOFBIRTH -->\n\n    <!-- START TAGS -->\n    <div class="form-group" data-ng-class="{\'has-error\': forms.csv.tags.$invalid && forms.csv.$submitted}">\n      <label class="control-label">{{\'APPLICATION_TAGS\' | translate}}</label>\n      <ui-select multiple data-ng-model="item.tags" theme="bootstrap" name="tags" data-ng-disabled="disabled">\n        <ui-select-match allow-clear placeholder="{{ \'APPLICATION_TAGS\' | translate }}">{{$item}}</ui-select-match>\n        <ui-select-choices repeat="index in indexes | filter: $select.search">\n          <div ng-bind-html="index | highlight: $select.search"></div>\n        </ui-select-choices>\n      </ui-select>\n      <span data-ng-show="forms.csv.tags.$invalid && forms.csv.$touched" class="help-block help-block-error">\n        <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n      </span>\n    </div>\n    <!-- END TAGS -->\n\n    <!-- START DESCRIPTION -->\n    <div class="form-group" data-ng-class="{\'has-error\': forms.csv.description.$invalid && forms.csv.$submitted}">\n      <label class="control-label">{{\'APPLICATION_DESCRIPTION\' | translate}}</label>\n      <ui-select data-ng-model="item.description" theme="bootstrap" name="description" data-ng-disabled="disabled">\n        <ui-select-match allow-clear placeholder="{{ \'APPLICATION_DESCRIPTION\' | translate }}">{{$select.selected}}</ui-select-match>\n        <ui-select-choices repeat="index in indexes | filter: $select.search">\n          <div ng-bind-html="index | highlight: $select.search"></div>\n        </ui-select-choices>\n      </ui-select>\n      <span data-ng-show="forms.csv.description.$invalid && forms.csv.$touched" 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    <!-- START EMAILS -->\n    <div class="form-group" data-ng-class="{\'has-error\': forms.csv.Emails.$invalid && forms.csv.$submitted}">\n      <label class="control-label">{{\'APPLICATION_EMAILS\' | translate}}</label>\n      <ui-select multiple data-ng-model="item.Emails" theme="bootstrap" name="Emails" data-ng-disabled="disabled">\n        <ui-select-match allow-clear placeholder="{{ \'APPLICATION_EMAILS\' | translate }}">{{$item}}</ui-select-match>\n        <ui-select-choices repeat="index in indexes | filter: $select.search">\n          <div ng-bind-html="index | highlight: $select.search"></div>\n        </ui-select-choices>\n      </ui-select>\n      <span data-ng-show="forms.csv.Emails.$invalid && forms.csv.$touched" class="help-block help-block-error">\n        <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n      </span>\n    </div>\n    <!-- END EMAILS -->\n\n  </div>\n  </div>\n\n  <!-- START CUSTOMFIELDS -->\n  <div data-ng-repeat="customField in customFields">\n    <div class="form-group" data-ng-class="{\'has-error\': forms.csv[customField.name].$invalid && forms.csv.$submitted}">\n      <label class="control-label">{{customField.name}}</label>\n      <ui-select data-ng-if="!joinPrompt" data-ng-model="item.customFields[customField.id]" theme="bootstrap" name="{{customField.name}}" data-ng-disabled="disabled">\n        <ui-select-match allow-clear placeholder="{{customField.name}}">{{$select.selected}}</ui-select-match>\n        <ui-select-choices repeat="index in indexes | filter: $select.search">\n          <div ng-bind-html="index | highlight: $select.search"></div>\n        </ui-select-choices>\n      </ui-select>\n      <span data-ng-show="forms.csv[customField.name].$invalid && forms.csv.$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 CUSTOMFIELDS -->\n\n  <div>\n    <p>{{\'APPLICATION_IMPORT_SUCCEEDED\' | translate}}: {{import.succeeded}}/{{csvLength}}</p>\n    <div class="progress progress-sm" style="">\n      <div class="progress-bar progress-bar-info" role="progressbar" ng-style="{ \'width\': import.success + \'%\' }"></div>\n    </div>\n  </div>\n  <div>\n    <p>{{\'APPLICATION_IMPORT_FAILED\' | translate}}: {{import.failed}}/{{csvLength}}</p>\n    <div class="progress progress-sm" style="">\n      <div class="progress-bar progress-bar-info" role="progressbar" ng-style="{ \'width\': import.fail + \'%\' }"></div>\n    </div>\n  </div>\n\n  </form>\n</div>\n<div class="modal-footer">\n  <button class="btn btn-success" type="button" ng-click="start()" ng-disabled="forms.csv.$invalid || !forms.csv.fullname || submitted">{{ \'APPLICATION_SUBMIT\' | translate }}</button>\n  <button class="btn default" type="button" ng-click="close()" data-ng-if="!importing">{{ \'APPLICATION_CLOSE\' | translate }}</button>\n  <button class="btn default" type="button" ng-click="stop()" data-ng-if="importing">{{ \'APPLICATION_STOP\' | translate }}</button>\n</div>\n'),a.put("app/contactmanager/contact/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-users"></i>\n					<a href="/contactmanager/contacts/list">{{ \'APPLICATION_CONTACT_MANAGER\' | translate }}</a>\n				</li>\n			</ul>\n		</div>\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="fa fa-users font-green-sharp"></i>\n					<span class="caption-subject">{{ \'APPLICATION_CONTACTS\' | translate }}</a> </span>\n				</div>\n				<div class="actions">\n					<div class="btn-group" data-ng-show="contacts.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" data-ng-click="newContact();">\n							<i class="icon-plus"></i> {{ \'APPLICATION_NEW_CONTACT\' | translate }}\n						</button>\n						<span class="btn default btn-file">\n						<span class="fileinput-new">\n						<i class="icon-cloud-upload"></i> {{\'APPLICATION_IMPORT_FROM_CSV\' | translate}}</span>\n						<input type="file" nv-file-select="" uploader="uploader"/>\n						</span>\n					</div>\n					<a class="btn btn-icon-only btn-default" href="#" ng-csv="getContacts([\'mailbox\', \'fullname\', \'email\'])" csv-header="[\'name\', \'surname\', \'description\']" field-separator=";" filename="contacts.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="displayedContacts" 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.contactsByPage" theme="bootstrap" ng-disabled="disabled">\n												<ui-select-match placeholder="{{\'APPLICATION_SEARCH\' | translate}}">{{$select.selected.name}}</ui-select-match>\n												<ui-select-choices repeat="contactByPage in contactsByPage | filter: $select.search">\n													<div ng-bind-html="contactByPage.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(contact, checked)" checklist-model checklist-value="id"></th>\n						    <th st-sort="fullname">{{ \'APPLICATION_FULLNAME\' | 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="contact in displayedContacts" class="animate-repeat">\n								<td style="text-align: center; vertical-align: middle"><input type="checkbox" checklist-model="contacts.checked" checklist-value="contact.id"></td>\n								<td>{{contact.fullname}} {{}}</td>\n					      <td>{{contact.description}}</td>\n					      <td>\n					        <button class="btn default btn-xs blue-stripe" data-ng-click="openContactTab(contact)">\n										{{ \'APPLICATION_SETTINGS\' | translate}}\n					        </button>\n					        <a class="btn default btn-xs red-stripe" data-ng-click="deleteItem(contact.fullname,contact.id)">\n										{{ \'APPLICATION_DELETE\' | translate }}\n					        </a>\n					      </td>\n					    </tr>\n							<tr data-ng-hide="displayedContacts.length">\n								<td colspan="4" style="text-align:center;">\n									<i>{{ \'MESSAGE_NO_CONTACTS_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="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="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="4" class="text-center">\n					        <div st-pagination class="pagination" st-items-by-page="conf.contactsByPage.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-->\n	</div>\n</div>\n<!-- END PAGE CONTENT-->\n'),a.put("app/contactmanager/customfield/list/create.modal.html",'<div class="modal-header">\n  <h3 class="modal-title">{{ \'APPLICATION_NEW_CUSTOM_FIELD\' | translate }}</h3>\n</div>\n<div class="modal-body">\n  <form name="forms.customField" novalidate>\n\n    <!-- START NAME -->\n    <div class="form-group" data-ng-class="{\'has-error\': (forms.customField.name.$touched || forms.customField.$submitted) && forms.customField.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.customField.name.$touched || forms.customField.$submitted) && forms.customField.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 TYPE -->\n    <div class="form-group"  data-ng-class="{\'has-error\': (forms.customField.type.$touched || forms.customField.$submitted) && forms.customField.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_TYPE\' | translate }}">{{$translate.instant($select.selected.name)}}</ui-select-match>\n        <ui-select-choices repeat="type.value as type in types| filter: $select.search">\n          {{$translate.instant(type.name)}}\n        </ui-select-choices>\n      </ui-select>\n      <span data-ng-show="(forms.customField.type.$touched || forms.customField.$submitted) && forms.customField.type.$invalid && forms.customField.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    <div ng-slide-down="item.type == \'select\'" lazy-render duration="1">\n      <div>\n        <label class="control-label">{{\'APPLICATION_CHOICES\' | translate}}</label>\n      </div>\n      <div class="padding-bottom" ng-repeat="choice in choices">\n        <div class="form-group">\n          <div class="input-group">\n            <input type="text" class="form-control" ng-model="choice.value" required>\n            <span class="input-group-btn">\n            <button class="btn red" type="button"data-ng-click="removeField($index)" data-ng-disabled="choices.length<=1"><i class="fa fa-times"></i></button>\n            </span>\n          </div>\n        </div>\n      </div>\n      <button type="button" class="btn btn-sm green padding-bottom" ng-click="addField()">\n        <i class="fa fa-plus"></i> {{\'APPLICATION_ADD_CHOICE\' | translate}}\n      </button>\n\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="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.customField.$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/contactmanager/customfield/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-pencil"></i>\n					<a href="/contactmanager/customfields/list">{{ \'APPLICATION_CUSTOM_FIELDS\' | 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-pencil font-green-sharp"></i>\n					<span class="caption-subject">{{ \'APPLICATION_CUSTOM_FIELDS\' | translate }}</a> </span>\n				</div>\n				<div class="actions">\n					<div class="btn-group" data-ng-show="CustomFields.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_CUSTOM_FIELD\' | translate }}\n						</button>\n					</div>\n					<a class="btn btn-icon-only btn-default" href="#" ng-csv="getCs([\'name\', \'description\'])" csv-header="[\'Name\', \'Description\']" field-separator=";" filename="customFields.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="displayedCustomFields" 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.customFieldsByPage" theme="bootstrap" ng-disabled="disabled">\n												<ui-select-match placeholder="{{\'APPLICATION_SEARCH\' | translate}}">{{$select.selected.name}}</ui-select-match>\n												<ui-select-choices repeat="customFieldByPage in customFieldsByPage | filter: $select.search">\n													<div ng-bind-html="customFieldByPage.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(customField, checked)" checklist-model checklist-value="id"></th>\n						    <th st-sort="name">{{ \'APPLICATION_NAME\' | translate }}</th>\n								<th st-sort="type">{{ \'APPLICATION_TYPE\' | 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="customField in displayedCustomFields" class="animate-repeat">\n								<td style="text-align: center; vertical-align: middle"><input type="checkbox" checklist-model="customFields.checked" checklist-value="customField.id"></td>\n								<td>{{customField.name}}</td>\n								<td>{{customField.type}}</td>\n					      <td>{{customField.description}}</td>\n					      <td>\n					        <a class="btn default btn-xs blue-stripe" data-ng-href="/contactmanager/customfields/view/{{customField.id}}/settings">\n										{{ \'APPLICATION_SETTINGS\' | translate}}\n					        </a>\n					        <a class="btn default btn-xs red-stripe" data-ng-click="deleteItem(customField.name,customField.id)">\n										{{ \'APPLICATION_DELETE\' | translate }}\n					        </a>\n					      </td>\n					    </tr>\n							<tr data-ng-hide="displayedCustomFields.length">\n								<td colspan="5" style="text-align:center;">\n									<i>{{ \'MESSAGE_NO_CUSTOM_FIELDS_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="name" placeholder="{{ \'APPLICATION_SEARCH\' | translate }} {{ \'APPLICATION_BY\' | translate | lowercase }} {{ \'APPLICATION_TYPE\' | 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.customFieldsByPage.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/contactmanager/customfield/view/view.html",'<!-- BEGIN PAGE CONTENT-->\n<div class="row" data-ng-init="getCustomField()">\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-pencil"></i>\n					<a href="/contactmanager/customfields/list">{{ \'APPLICATION_CUSTOM_FIELDS\' | translate }}</a>\n					<i data-ng-show="customField" class="fa fa-angle-right"></i>\n				</li>\n				<li data-ng-show="customField">\n					<a href="#">{{customField.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/customfield.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						{{customField.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.contactmanager.customfields.view.settings\')}">\n							<a data-ng-href="/contactmanager/customfields/view/{{customField.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/contactmanager/customfield/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_CUSTOM_FIELD\' | 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 && updateCustomField()" 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="customField.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							<div ng-slide-down="customField.type == \'select\'" lazy-render duration="1" class="mbottom20">\n								<div>\n									<label class="control-label">{{\'APPLICATION_CHOICES\' | translate}}</label>\n								</div>\n								<div class="padding-bottom" ng-repeat="choice in choices">\n									<div class="form-group">\n										<div class="input-group">\n											<input type="text" class="form-control" ng-model="choice.value" required>\n											<span class="input-group-btn">\n											<button class="btn red" type="button"data-ng-click="removeField($index)" data-ng-disabled="choices.length<=1"><i class="fa fa-times"></i></button>\n											</span>\n										</div>\n									</div>\n								</div>\n								<button type="button" class="btn btn-sm green padding-bottom" ng-click="addField()">\n									<i class="fa fa-plus"></i> {{\'APPLICATION_ADD_CHOICE\' | translate}}\n								</button>\n\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="customField.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/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/desk/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="/desk/list">{{ \'APPLICATION_DESK_COM\' | 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_DESK_COM\' | 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="/desk/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\',\'consumerKey\',\'consumerSecret\',\'token\',\'tokenSecret\',\'password\'])" csv-header="[\'Name\', \'Username\', \'Remote Address\', \'Authentication Type\', \'Consumer Key\', \'Consumer Secret\', \'Token\', \'Token Secret\', \'Password\']" field-separator=";" filename="desk_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="displayedDeskAccounts" 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 displayedDeskAccounts" 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="/desk/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="displayedDeskAccounts.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/desk/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              <!-- 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							<!-- 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_USERNAME\' | 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 [\'basic\', \'oauth\'] | 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 == \'basic\'" 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_PASSWORD\' | 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 CONSUMER KEY -->\n							<div class="form-group" data-ng-class="{\'has-error\': forms.formSetting.$submitted && forms.formSetting.consumerKey.$invalid}" ng-slide-down="account.authType == \'oauth\'" lazy-render duration="1">\n								<label class="control-label">{{\'APPLICATION_CONSUMER_KEY\' | translate}} <span class="required" aria-required="true">*</span></label>\n								<input type="text" name="consumerKey" placeholder="{{\'APPLICATION_CONSUMER_KEY\' | translate}}" class="form-control" data-ng-model="account.consumerKey" required/>\n								<span data-ng-show="forms.formSetting.consumerKey.$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 CONSUMER KEY -->\n\n              <!-- START CONSUMER SECRET -->\n							<div class="form-group" data-ng-class="{\'has-error\': forms.formSetting.$submitted && forms.formSetting.consumerSecret.$invalid}" ng-slide-down="account.authType == \'oauth\'" lazy-render duration="1">\n								<label class="control-label">{{\'APPLICATION_CONSUMER_SECRET\' | translate}} <span class="required" aria-required="true">*</span></label>\n								<input type="text" name="consumerSecret" placeholder="{{\'APPLICATION_CONSUMER_SECRET\' | translate}}" class="form-control" data-ng-model="account.consumerSecret" required/>\n								<span data-ng-show="forms.formSetting.consumerSecret.$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 CONSUMER SECRET -->\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 == \'oauth\'" 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_TOKEN\' | 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              <!-- START TOKEN SECRET-->\n							<div class="form-group" data-ng-class="{\'has-error\': forms.formSetting.$submitted && forms.formSetting.tokenSecret.$invalid}" ng-slide-down="account.authType == \'oauth\'" lazy-render duration="1">\n								<label class="control-label">{{\'APPLICATION_TOKEN_SECRET\' | translate}} <span class="required" aria-required="true">*</span></label>\n								<input type="text" name="tokenSecret" placeholder="{{\'APPLICATION_TOKEN_SECRET\' | translate}}" class="form-control" data-ng-model="account.tokenSecret" required/>\n								<span data-ng-show="forms.formSetting.tokenSecret.$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 SECRET-->\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/desk/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								<!-- 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/desk/view/view.configurationSettings.html",'<div class="row" data-ng-init="getConfiguration();getVariables();getFields();">\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}}: {{configurationName}}</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 ui-padding active" id="tab_1_1">\n            <div class="row">\n              <div class="col-md-11">\n                <span class="caption-subject">All following fields will be join by blank space:</span>\n              </div>\n              <div class="col-md-1 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 ng-scrollbars ng-scrollbars-config="config"> -->\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-8" 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="updateField(subjectItem)">\n	                </div>\n	              </div>\n	              <div class="col-md-8" 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="updateField(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-1">\n	                <div class="form-group">\n	                  <button class="btn btn-icon-only red" data-ng-click="removeItem(subjectItem)"><i class="fa fa-times"></i></button>\n	                </div>\n	              </div>\n	            </div>\n						<!-- </div> -->\n					</div>\n					<!-- END SUBJECT TAB -->\n          <!-- DESCRIPTION TAB -->\n					<div class="tab-pane ui-padding" id="tab_1_2">\n						<div class="row">\n              <div class="col-md-11">\n                <span class="caption-subject">All following fields will be join by new line:</span>\n              </div>\n              <div class="col-md-1 pull-rigth">\n                <button class="btn btn-icon-only green" data-ng-click="addItemDescription()"><i class="fa fa-plus"></i></button>\n              </div>\n            </div>\n            <hr>\n						<!-- <div ng-scrollbars ng-scrollbars-config="config"> -->\n							<div class="row" data-ng-repeat="descriptionItem in descriptionConfig">\n								<!-- <pre>\n									{{descriptionItem|json}}\n								</pre> -->\n	              <div class="col-md-2">\n	                <ui-select ng-model="descriptionItem.type" theme="bootstrap" ng-disabled="disabled" data-ng-change="changeDescType(descriptionItem)">\n	                  <ui-select-match placeholder="{{\'APPLICATION_SEARCH\' | translate}}">{{$select.selected | ucfirst}}</ui-select-match>\n	                  <ui-select-choices repeat="item in descFieldType | filter: $select.search">\n	                    <div ng-bind-html="item | highlight: $select.search | ucfirst"></div>\n	                  </ui-select-choices>\n	                </ui-select>\n	              </div>\n	              <div class="col-md-9" data-ng-if="descriptionItem.type==\'string\'">\n	                <div class="form-group">\n	                  <input type="text" class="form-control" data-ng-model="descriptionItem.content" data-ng-change="updateField(descriptionItem)">\n	                </div>\n	              </div>\n								<div class="col-md-3" data-ng-if="descriptionItem.type==\'key_value\'">\n									<input type="text" class="form-control" placeholder="Key" data-ng-model="descriptionItem.key" data-ng-change="updateField(descriptionItem)">\n								</div>\n								<div class="col-md-3" data-ng-if="descriptionItem.type==\'key_value\'">\n									<ui-select ng-model="descriptionItem.keyType" theme="bootstrap" ng-disabled="disabled" data-ng-change="changeDescType(descriptionItem)">\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-3" data-ng-if="descriptionItem.type==\'key_value\' && descriptionItem.keyType==\'string\'">\n									<input type="text" class="form-control" placeholder="Value" data-ng-model="descriptionItem.keyContent" data-ng-change="updateField(descriptionItem)">\n								</div>\n	              <div class="col-md-3" data-ng-if="descriptionItem.type==\'key_value\' && descriptionItem.keyType==\'variable\'">\n	                <div class="form-group">\n	                  <ui-select theme="bootstrap" ng-disabled="disabled" data-ng-model="descriptionItem.VariableId" data-ng-change="updateField(descriptionItem)">\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-1">\n	                <div class="form-group">\n	                  <button class="btn btn-icon-only red" data-ng-click="removeItem(descriptionItem)"><i class="fa fa-times"></i></button>\n	                </div>\n	              </div>\n	            </div>\n						<!-- </div> -->\n					</div>\n					<!-- END DESCRIPTION TAB -->\n          <!-- FIELDS TAB -->\n					<div class="tab-pane ui-padding" id="tab_1_3">\n						<div class="row">\n              <div class="col-md-11">\n                <span class="caption-subject">Add how to fill the fields present in your account:</span>\n              </div>\n              <div class="col-md-1 pull-rigth">\n                <button class="btn btn-icon-only green" data-ng-click="addItemField()"><i class="fa fa-plus"></i></button>\n              </div>\n            </div>\n            <hr>\n						<!-- <div ng-scrollbars ng-scrollbars-config="config"> -->\n	            <div class="row" data-ng-repeat="fieldItem in fieldConfig">\n	              <div class="col-md-3">\n	                <ui-select ng-model="fieldItem.idField" theme="bootstrap" ng-disabled="disabled" data-ng-change="changeFieldType(fieldItem)">\n	                  <ui-select-match placeholder="{{\'APPLICATION_SEARCH\' | translate}}">{{$select.selected.label}}</ui-select-match>\n	                  <ui-select-choices repeat="item.id as item in accountFields | filter: $select.search">\n	                    <div ng-bind-html="item.label | highlight: $select.search"></div>\n	                  </ui-select-choices>\n	                </ui-select>\n	              </div>\n	              <div class="col-md-8" data-ng-if="getSystemFieldOptions(fieldItem.idField)">\n	                <div class="form-group">\n										<ui-select ng-model="fieldItem.content" theme="bootstrap" ng-disabled="disabled" data-ng-change="updateField(fieldItem)">\n		                  <ui-select-match placeholder="{{\'APPLICATION_SEARCH\' | translate}}">{{$select.selected}}</ui-select-match>\n		                  <ui-select-choices repeat="item in getSystemFieldOptions(fieldItem.idField) | filter: $select.search">\n		                    <div ng-bind-html="item | highlight: $select.search"></div>\n		                  </ui-select-choices>\n		                </ui-select>\n	                </div>\n	              </div>\n								<div class="col-md-4" data-ng-if="!getSystemFieldOptions(fieldItem.idField)">\n									<div class="form-group">\n										<ui-select ng-model="fieldItem.type" theme="bootstrap" ng-disabled="disabled" data-ng-change="changeType(fieldItem)">\n		                  <ui-select-match placeholder="{{\'APPLICATION_SEARCH\' | translate}}">{{$select.selected | ucfirst}}</ui-select-match>\n		                  <ui-select-choices repeat="item in fieldType | filter: $select.search">\n		                    <div ng-bind-html="item | highlight: $select.search | ucfirst"></div>\n		                  </ui-select-choices>\n		                </ui-select>\n									</div>\n								</div>\n								<div class="col-md-4" data-ng-if="!getSystemFieldOptions(fieldItem.idField) && fieldItem.type === \'string\'">\n	                <div class="form-group">\n										<input type="text" class="form-control" data-ng-model="fieldItem.content" data-ng-change="updateField(fieldItem)">\n	                </div>\n	              </div>\n								<div class="col-md-4" data-ng-if="!getSystemFieldOptions(fieldItem.idField) && fieldItem.type === \'variable\'">\n	                <div class="form-group">\n										<ui-select theme="bootstrap" ng-disabled="disabled" data-ng-model="fieldItem.VariableId" data-ng-change="updateField(fieldItem)">\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-1">\n	                <div class="form-group">\n	                  <button class="btn btn-icon-only red" data-ng-click="removeItem(fieldItem)"><i class="fa fa-times"></i></button>\n	                </div>\n	              </div>\n	            </div>\n						<!-- </div> -->\n					</div>\n					<!-- END FIELDS TAB -->\n				</div>\n			</div>\n		</div>\n	</div>\n</div>\n'),
-a.put("app/desk/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="/desk/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="/desk/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/desk/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="/desk/list">{{ \'APPLICATION_DESK_COM\' | 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/desk.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.desk.view.account\')}">\n							<a ng-href="/desk/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.desk.view.configurations\') || $state.is(\'main.desk.view.configuration\')}">\n							<a ng-href="/desk/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/desk/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="/desk/list">{{ \'APPLICATION_DESK_COM\' | 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/desk/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\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/desk/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 [\'basic\', \'oauth\'] | 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 == \'basic\'" 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 CONSUMER KEY -->\n							<div class="form-group" data-ng-class="{\'has-error\': forms.formSetting.$submitted && forms.formSetting.consumerKey.$invalid}" ng-slide-down="item.authType == \'oauth\'" lazy-render duration="1">\n								<label class="control-label">{{\'APPLICATION_CONSUMER_KEY\' | translate}} <span class="required" aria-required="true">*</span></label>\n								<input type="text" name="consumerKey" placeholder="{{\'APPLICATION_CONSUMER_KEY\' | translate}}" class="form-control" data-ng-model="item.consumerKey" required/>\n								<span data-ng-show="forms.formSetting.consumerKey.$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 CONSUMER KEY -->\n\n              <!-- START CONSUMER SECRET -->\n							<div class="form-group" data-ng-class="{\'has-error\': forms.formSetting.$submitted && forms.formSetting.consumerSecret.$invalid}" ng-slide-down="item.authType == \'oauth\'" lazy-render duration="1">\n								<label class="control-label">{{\'APPLICATION_CONSUMER_SECRET\' | translate}} <span class="required" aria-required="true">*</span></label>\n								<input type="text" name="consumerSecret" placeholder="{{\'APPLICATION_CONSUMER_SECRET\' | translate}}" class="form-control" data-ng-model="item.consumerSecret" required/>\n								<span data-ng-show="forms.formSetting.consumerSecret.$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 CONSUMER SECRET -->\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 == \'oauth\'" 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_TOKEN\' | 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              <!-- START TOKEN SECRET-->\n							<div class="form-group" data-ng-class="{\'has-error\': forms.formSetting.$submitted && forms.formSetting.tokenSecret.$invalid}" ng-slide-down="item.authType == \'oauth\'" lazy-render duration="1">\n								<label class="control-label">{{\'APPLICATION_TOKEN_SECRET\' | translate}} <span class="required" aria-required="true">*</span></label>\n								<input type="text" name="tokenSecret" placeholder="{{\'APPLICATION_TOKEN_SECRET\' | translate}}" class="form-control" data-ng-model="item.tokenSecret" required/>\n								<span data-ng-show="forms.formSetting.tokenSecret.$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 SECRET-->\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/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/freshdesk/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="/freshdesk/list">{{ \'APPLICATION_FRESHDESK\' | 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_FRESHDESK\' | 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="/freshdesk/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\',\'apiKey\'])" csv-header="[\'Name\', \'Username\', \'Remote Address\', \'Api Key\']" field-separator=";" filename="freshdesk_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="displayedFreshdeskAccounts" 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 displayedFreshdeskAccounts" 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="/freshdesk/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="displayedFreshdeskAccounts.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/freshdesk/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              <!-- 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							<!-- 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_USERNAME\' | 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 API KEY -->\n							<div class="form-group" data-ng-class="{\'has-error\': forms.formSetting.$submitted && forms.formSetting.apiKey.$invalid}">\n								<label class="control-label">{{\'APPLICATION_API_KEY\' | translate}} <span class="required" aria-required="true">*</span></label>\n								<input type="text" name="apiKey" placeholder="{{\'APPLICATION_API_KEY\' | translate}}" class="form-control" data-ng-model="account.apiKey" required/>\n								<span data-ng-show="forms.formSetting.apiKey.$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 API KEY -->\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/freshdesk/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								<!-- 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/freshdesk/view/view.configurationSettings.html",'<div class="row" data-ng-init="getConfiguration();getVariables();getFields();">\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}}: {{configurationName}}</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 ui-padding active" id="tab_1_1">\n            <div class="row">\n              <div class="col-md-11">\n                <span class="caption-subject">All following fields will be join by blank space:</span>\n              </div>\n              <div class="col-md-1 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 ng-scrollbars ng-scrollbars-config="config"> -->\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-8" 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="updateField(subjectItem)">\n	                </div>\n	              </div>\n	              <div class="col-md-8" 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="updateField(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-1">\n	                <div class="form-group">\n	                  <button class="btn btn-icon-only red" data-ng-click="removeItem(subjectItem)"><i class="fa fa-times"></i></button>\n	                </div>\n	              </div>\n	            </div>\n						<!-- </div> -->\n					</div>\n					<!-- END SUBJECT TAB -->\n          <!-- DESCRIPTION TAB -->\n					<div class="tab-pane ui-padding" id="tab_1_2">\n						<div class="row">\n              <div class="col-md-11">\n                <span class="caption-subject">All following fields will be join by new line:</span>\n              </div>\n              <div class="col-md-1 pull-rigth">\n                <button class="btn btn-icon-only green" data-ng-click="addItemDescription()"><i class="fa fa-plus"></i></button>\n              </div>\n            </div>\n            <hr>\n						<!-- <div ng-scrollbars ng-scrollbars-config="config"> -->\n							<div class="row" data-ng-repeat="descriptionItem in descriptionConfig">\n								<!-- <pre>\n									{{descriptionItem|json}}\n								</pre> -->\n	              <div class="col-md-2">\n	                <ui-select ng-model="descriptionItem.type" theme="bootstrap" ng-disabled="disabled" data-ng-change="changeDescType(descriptionItem)">\n	                  <ui-select-match placeholder="{{\'APPLICATION_SEARCH\' | translate}}">{{$select.selected | ucfirst}}</ui-select-match>\n	                  <ui-select-choices repeat="item in descFieldType | filter: $select.search">\n	                    <div ng-bind-html="item | highlight: $select.search | ucfirst"></div>\n	                  </ui-select-choices>\n	                </ui-select>\n	              </div>\n	              <div class="col-md-9" data-ng-if="descriptionItem.type==\'string\'">\n	                <div class="form-group">\n	                  <input type="text" class="form-control" data-ng-model="descriptionItem.content" data-ng-change="updateField(descriptionItem)">\n	                </div>\n	              </div>\n								<div class="col-md-3" data-ng-if="descriptionItem.type==\'key_value\'">\n									<input type="text" class="form-control" placeholder="Key" data-ng-model="descriptionItem.key" data-ng-change="updateField(descriptionItem)">\n								</div>\n								<div class="col-md-3" data-ng-if="descriptionItem.type==\'key_value\'">\n									<ui-select ng-model="descriptionItem.keyType" theme="bootstrap" ng-disabled="disabled" data-ng-change="changeDescType(descriptionItem)">\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-3" data-ng-if="descriptionItem.type==\'key_value\' && descriptionItem.keyType==\'string\'">\n									<input type="text" class="form-control" placeholder="Value" data-ng-model="descriptionItem.keyContent" data-ng-change="updateField(descriptionItem)">\n								</div>\n	              <div class="col-md-3" data-ng-if="descriptionItem.type==\'key_value\' && descriptionItem.keyType==\'variable\'">\n	                <div class="form-group">\n	                  <ui-select theme="bootstrap" ng-disabled="disabled" data-ng-model="descriptionItem.VariableId" data-ng-change="updateField(descriptionItem)">\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-1">\n	                <div class="form-group">\n	                  <button class="btn btn-icon-only red" data-ng-click="removeItem(descriptionItem)"><i class="fa fa-times"></i></button>\n	                </div>\n	              </div>\n	            </div>\n						<!-- </div> -->\n					</div>\n					<!-- END DESCRIPTION TAB -->\n          <!-- FIELDS TAB -->\n					<div class="tab-pane ui-padding" id="tab_1_3">\n						<div class="row">\n              <div class="col-md-11">\n                <span class="caption-subject">Add how to fill the fields present in your account:</span>\n              </div>\n              <div class="col-md-1 pull-rigth">\n                <button class="btn btn-icon-only green" data-ng-click="addItemField()"><i class="fa fa-plus"></i></button>\n              </div>\n            </div>\n            <hr>\n						<!-- <div ng-scrollbars ng-scrollbars-config="config"> -->\n	            <div class="row" data-ng-repeat="fieldItem in fieldConfig">\n	              <div class="col-md-3">\n	                <ui-select ng-model="fieldItem.idField" theme="bootstrap" ng-disabled="disabled" data-ng-change="changeFieldType(fieldItem)">\n	                  <ui-select-match placeholder="{{\'APPLICATION_SEARCH\' | translate}}">{{$select.selected.label}}</ui-select-match>\n	                  <ui-select-choices repeat="item.name as item in accountFields | filter: $select.search">\n	                    <div ng-bind-html="item.label | highlight: $select.search"></div>\n	                  </ui-select-choices>\n	                </ui-select>\n	              </div>\n	              <div class="col-md-8" data-ng-if="getSystemFieldOptions(fieldItem.idField)">\n	                <div class="form-group">\n										<ui-select ng-model="fieldItem.content" theme="bootstrap" ng-disabled="disabled" data-ng-change="updateField(fieldItem)">\n		                  <ui-select-match placeholder="{{\'APPLICATION_SEARCH\' | translate}}">{{$select.selected[0]}}</ui-select-match>\n		                  <ui-select-choices repeat="item[0] as item in getSystemFieldOptions(fieldItem.idField) | filter: $select.search">\n		                    <div ng-bind-html="item[0] | highlight: $select.search"></div>\n		                  </ui-select-choices>\n		                </ui-select>\n	                </div>\n	              </div>\n								<div class="col-md-4" data-ng-if="!getSystemFieldOptions(fieldItem.idField)">\n									<div class="form-group">\n										<ui-select ng-model="fieldItem.type" theme="bootstrap" ng-disabled="disabled" data-ng-change="changeType(fieldItem)">\n		                  <ui-select-match placeholder="{{\'APPLICATION_SEARCH\' | translate}}">{{$select.selected | ucfirst}}</ui-select-match>\n		                  <ui-select-choices repeat="item in fieldType | filter: $select.search">\n		                    <div ng-bind-html="item | highlight: $select.search | ucfirst"></div>\n		                  </ui-select-choices>\n		                </ui-select>\n									</div>\n								</div>\n								<div class="col-md-4" data-ng-if="!getSystemFieldOptions(fieldItem.idField) && fieldItem.type === \'string\'">\n	                <div class="form-group">\n										<input type="text" class="form-control" data-ng-model="fieldItem.content" data-ng-change="updateField(fieldItem)">\n	                </div>\n	              </div>\n								<div class="col-md-4" data-ng-if="!getSystemFieldOptions(fieldItem.idField) && fieldItem.type === \'variable\'">\n	                <div class="form-group">\n										<ui-select theme="bootstrap" ng-disabled="disabled" data-ng-model="fieldItem.VariableId" data-ng-change="updateField(fieldItem)">\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-1">\n	                <div class="form-group">\n	                  <button class="btn btn-icon-only red" data-ng-click="removeItem(fieldItem)"><i class="fa fa-times"></i></button>\n	                </div>\n	              </div>\n	            </div>\n						<!-- </div> -->\n					</div>\n					<!-- END FIELDS TAB -->\n				</div>\n			</div>\n		</div>\n	</div>\n</div>\n'),a.put("app/freshdesk/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="/freshdesk/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="/freshdesk/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/freshdesk/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="/freshdesk/list">{{ \'APPLICATION_FRESHDESK\' | 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/freshdesk.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.freshdesk.view.account\')}">\n							<a ng-href="/freshdesk/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.freshdesk.view.configurations\') || $state.is(\'main.freshdesk.view.configuration\')}">\n							<a ng-href="/freshdesk/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/freshdesk/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="/freshdesk/list">{{ \'APPLICATION_FRESHDESK\' | 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_USERNAME\' | translate}}" class="form-control" data-ng-model="item.username" required ng-remote-validate="/api/freshdesk/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\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/freshdesk/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 API KEY -->\n							<div class="form-group" data-ng-class="{\'has-error\': forms.formSetting.$submitted && forms.formSetting.apiKey.$invalid}">\n								<label class="control-label">{{\'APPLICATION_API_KEY\' | translate}} <span class="required" aria-required="true">*</span></label>\n								<input type="text" name="apiKey" placeholder="{{\'APPLICATION_API_KEY\' | translate}}" class="form-control" data-ng-model="item.apiKey" required/>\n								<span data-ng-show="forms.formSetting.apiKey.$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 API KEY -->\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/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="7">\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>IMAP</th>\n							<th>SMTP</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 data-ng-switch="mailAccount.MailServerIn.state">\n								<span class="label label-sm label-success" ng-switch-when="CONNECTED">\n									{{ mailAccount.MailServerIn.state}}\n								</span>\n								<span class="label label-sm label-warning" ng-switch-when="DISCONNECTED">\n									{{ mailAccount.MailServerIn.state}}\n								</span>\n								<span class="label label-sm label-danger" ng-switch-when="ERROR">\n									{{ mailAccount.MailServerIn.state}}\n								</span>\n								<span class="label label-sm label-default" ng-switch-default>\n									{{ mailAccount.MailServerIn.state}}\n								</span>\n							</td>\n							<td data-ng-switch="mailAccount.MailServerOut.state">\n								<span class="label label-sm label-success" ng-switch-when="CONNECTED">\n									{{ mailAccount.MailServerOut.state}}\n								</span>\n								<span class="label label-sm label-warning" ng-switch-when="DISCONNECTED">\n									{{ mailAccount.MailServerOut.state}}\n								</span>\n								<span class="label label-sm label-danger" ng-switch-when="ERROR">\n									{{ mailAccount.MailServerOut.state}}\n								</span>\n								<span class="label label-sm label-default" ng-switch-default>\n									{{ mailAccount.MailServerOut.state}}\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="7" 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 colspan="4"/>\n					  </tr>\n						<tr>\n							<td colspan="7" 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 align="center">\n									{{application.User ? \'agent\' : \'queue\' | uppercase}} [{{application.User ? application.User.fullname : application.MailQueue.name}}]\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		<div ui-view class="profile-content"></div>\n		<!-- END PROFILE CONTENT -->\n	</div>\n<!-- END PAGE CONTENT-->\n</div>\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							<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" 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							</div>\n							<!-- START SEARCH FILTER -->\n\n							<!-- START DELETE -->\n							<div class="form-group row">\n								<label class="col-md-3">\n									{{\'APPLICATION_DELETE_MAIL_FROM_SERVER\' | translate}}\n								</label>\n								<label class="col-md-9">\n									<input type="checkbox" ng-model="account.MailServerIn.delete">\n								</label>\n							</div>\n							<!-- END DELETE -->\n\n							<!-- START SSL -->\n							<div class="form-group row">\n								<label class="col-md-3">\n									SSL\n								</label>\n								<label class="col-md-9">\n										<input type="checkbox" data-ng-model="account.MailServerIn.ssl">\n								</label>\n							</div>\n							<!-- END SSL -->\n\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 row">\n								<label class="col-md-3">\n									SSL\n								</label>\n								<label class="col-md-9">\n										<input type="checkbox" data-ng-model="account.MailServerOut.ssl">\n								</label>\n							</div>\n							<!-- END SSL -->\n							<input class="btn green-haze" type="submit" value="{{\'APPLICATION_UPDATE\' | translate}}"/>\n							<input class="btn blue-madison" type="button" value="Test" data-ng-click="test()"/>\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								<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 row">\n									<label class="col-md-3">\n										{{\'APPLICATION_DELETE_MAIL_FROM_SERVER\' | translate}}\n									</label>\n									<label class="col-md-9">\n											<input type="checkbox" data-ng-model="in.delete">\n									</label>\n								</div>\n								<!-- END DELETE -->\n\n								<!-- START SSL -->\n								<div class="form-group row">\n									<label class="col-md-3">\n										SSL\n									</label>\n									<label class="col-md-9">\n											<input type="checkbox" data-ng-model="in.ssl">\n									</label>\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 row">\n									<label class="col-md-3">\n										SSL\n									</label>\n									<label class="col-md-9">\n											<input type="checkbox" data-ng-model="out.ssl">\n									</label>\n								</div>\n								<!-- END DELETE -->\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/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		<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-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" data-ng-click="updateStatus(\'CLOSED\')">\n					{{ \'APPLICATION_STORE\' | translate }}\n					</a>\n				</div>\n			</div>\n		</div>\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: 725px; 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"></span> -->\n									<span class="bold">From: </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-if="mailMessage.cc" class="bold">Cc: </span>\n									<span data-ng-if="mailMessage.cc">{{mailMessage.cc}} </span>\n									<br>\n									<span class="todo-tasklist-date">\n										<span class="pull-right">\n											<a data-ng-click="(mailMessage.status == \'SENDING\' || mailMessage.status == \'FAILED\') && retry(mailMessage.id)" href="#" class="btn default btn-xs" data-ng-class="{\'green-stripe\': mailMessage.status == \'SENT\' || mailMessage.status == \'RECEIVED\', \'blue-stripe\': mailMessage.status == \'SENDING\', \'red-stripe\': mailMessage.status == \'FAILED\'}"> {{mailMessage.status | uppercase}}\n												<i data-ng-class="{\'fa fa-check\': mailMessage.status == \'SENT\' || mailMessage.status == \'RECEIVED\', \'fa fa-warning\': mailMessage.status == \'SENDING\', \'fa fa-times\': mailMessage.status == \'FAILED\'}"></i>\n											</a>\n										</span>\n										<i class="fa fa-calendar"></i><time is="relative-time" datetime="{{mailMessage.updatedAt}}">April 1, 2014</time>\n									</span>\n									<hr>\n									<span class="body text-left" data-ng-bind-html="mailMessage.html || mailMessage.text" style="white-space: pre-wrap;"></span>\n									<!-- <br> -->\n									<hr data-ng-if="mailMessage.MailAttachments.length">\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							<!-- 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>\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.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							<!-- MAIL 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 data-ng-model="form.sto" theme="bootstrap" name="to">\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						</div>\n					</form>\n				</div>\n			</div>\n		</div>\n	</div>\n</div>\n<!-- END TODO CONTENT -->\n'),a.put("app/mail/inbox/room/room.retry.modal.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" class="modal-title">{{modal.title | translate}}</h4>\n</div>\n<div class="modal-body">\n  <p ng-if="modal.text">{{modal.text | translate}}</p>\n</div>\n<div class="modal-footer">\n  <button ng-repeat="button in modal.buttons" ng-class="button.classes" ng-click="button.click($event)" class="btn">{{button.text | translate}}</button>\n</div>\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.queues.html",'<!-- BEGIN PAGE CONTENT-->\n<div class="row" data-ng-init="initAgents()">\n	<div class="col-md-12">\n		<!-- START TABLE -->\n		<div id="grid1" ui-grid="gridOptions" ui-grid-tree-view class="grid"></div>\n		<!-- END TABLE -->\n	</div>\n</div>\n<!-- END PAGE CONTENT-->\n'),a.put("app/mail/realtime/view/agent/agent.timeline.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/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/chooseContact.modal.html",'<div class="modal-header">\n  <h3 class="modal-title">{{ \'APPLICATION_CHOOSE_CONTACT\' | translate }}</h3>\n</div>\n<div class="modal-body">\n  <form name="forms.choose" novalidate>\n    <div class="form-group" data-ng-class="{\'has-error\': forms.choose.contactId.$invalid && forms.choose.$submitted}">\n      <label class="control-label">{{\'APPLICATION_CONTACT\' | translate}}</label>\n      <ui-select data-ng-model="item.contactId" theme="bootstrap" name="contactId" ng-disabled="disabled">\n        <ui-select-match allow-clear placeholder="{{ \'APPLICATION_CONTACT\' | translate }}">{{$select.selected.name}}</ui-select-match>\n        <ui-select-choices repeat="contact.id as contact in contacts | filter: $select.search">\n          <div ng-bind-html="contact.name | highlight: $select.search"></div>\n        </ui-select-choices>\n      </ui-select>\n      <span data-ng-show="forms.choose.CompanyId.$invalid && forms.choose.$submitted" class="help-block help-block-error">\n        <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n      </span>\n    </div>\n  </form>\n</div>\n<div class="modal-footer">\n  <button class="btn btn-success" type="button" ng-click="ok()" ng-disabled="forms.tag.$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/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      <uib-tabset>\n        <uib-tab select="addWorkspace()" active="mainTab.active">\n          <uib-tab-heading>\n            Motion <i class="icon-rocket"></i>\n          </uib-tab-heading>\n          <div ui-view class=""></div>\n        </uib-tab>\n        <uib-tab data-ng-repeat="workspace in workspaces" active="workspace.active" data-ng-switch="workspace.type">\n          <uib-tab-heading>\n            {{workspace.name}} <i class="icon-close pointer-cursor" data-ng-click="closeTab($index)"></i>\n          </uib-tab-heading>\n          <div class="" data-ng-switch="workspace.type">\n            <new-contact data-ng-switch-when="newContact" workspace="workspace" index="$index" on-submit="createContact(index,item)"></new-contact>\n            <contact data-ng-switch-when="contact" workspace="workspace" index="$index" on-submit="updateContact(index,item)"></contact>\n          </div>\n        </uib-tab>\n        <!-- <uib-tab select="addWorkspace()">\n          <uib-tab-heading>\n            <i class="icon-plus"></i>\n          </uib-tab-heading>\n        </uib-tab> -->\n      </uib-tabset>\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.contactTab.html",'<div class="row margin-top-20 contact-tab-container" >\n  <!-- <pre>\n    {{workspaces}}\n  </pre> -->\n  <!-- <pre>\n    {{contact | json}}\n  </pre> -->\n  <div class="col-md-12 contact-tab">\n    <form name="forms.general" data-ng-submit="submit({index:index,item:contact})" novalidate>\n    <!-- BEGIN PROFILE SIDEBAR -->\n    <div class="profile-sidebar">\n      <!-- PORTLET MAIN -->\n      <div class="portlet light pbottom20">\n        <!-- SIDEBAR USERPIC -->\n        <div class="profile-userpic">\n          <img src="assets/images/media/contact.png" class="img-responsive" alt="">\n        </div>\n        <!-- END SIDEBAR USERPIC -->\n        <!-- SIDEBAR USER TITLE -->\n        <div class="profile-usertitle">\n          <div class="profile-usertitle-name">\n            {{contact.fullname}}\n          </div>\n          <div class="profile-usertitle-job">\n          </div>\n        </div>\n        <!-- END SIDEBAR USER TITLE -->\n        <!-- SIDEBAR BUTTONS -->\n        <div class="profile-userbuttons">\n          <button type="submit" class="btn btn-circle green-haze btn-sm" data-ng-disabled="!contact.fullname">{{\'APPLICATION_UPDATE\' | translate}}</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 class="active">\n              <a href="extra_profile.html">\n              <i class="icon-home"></i>\n              Overview </a>\n            </li>\n            <li>\n              <a href="extra_profile_account.html">\n              <i class="icon-settings"></i>\n              Account Settings </a>\n            </li>\n            <li>\n              <a href="page_todo.html" target="_blank">\n              <i class="icon-check"></i>\n              Tasks </a>\n            </li>\n            <li>\n              <a href="extra_profile_help.html">\n              <i class="icon-info"></i>\n              Help </a>\n            </li>\n          </ul>\n        </div> -->\n        <!-- END MENU -->\n      </div>\n      <!-- END PORTLET MAIN -->\n      <!-- PORTLET MAIN -->\n      <div class="portlet light">\n        <!-- STAT -->\n        <div class="row list-separated profile-stat">\n          <div class="col-md-4 col-sm-4 col-xs-6">\n            <div class="uppercase profile-stat-title">\n               37\n            </div>\n            <div class="uppercase profile-stat-text">\n               Projects\n            </div>\n          </div>\n          <div class="col-md-4 col-sm-4 col-xs-6">\n            <div class="uppercase profile-stat-title">\n               51\n            </div>\n            <div class="uppercase profile-stat-text">\n               Tasks\n            </div>\n          </div>\n          <div class="col-md-4 col-sm-4 col-xs-6">\n            <div class="uppercase profile-stat-title">\n               61\n            </div>\n            <div class="uppercase profile-stat-text">\n               Uploads\n            </div>\n          </div>\n        </div>\n        <!-- END STAT -->\n        <div>\n          <h4 class="profile-desc-title">{{\'APPLICATION_ABOUT\' | translate}} {{contact.fullname}}</h4>\n          <span class="profile-desc-text break-overflow">{{contact.description}}</span>\n          <div class="margin-top-20 profile-desc-link">\n            <i class="fa fa-globe"></i>\n            <a href="http://www.keenthemes.com">www.keenthemes.com</a>\n          </div>\n          <div class="margin-top-20 profile-desc-link">\n            <i class="fa fa-twitter"></i>\n            <a href="http://www.twitter.com/keenthemes/">@keenthemes</a>\n          </div>\n          <div class="margin-top-20 profile-desc-link">\n            <i class="fa fa-facebook"></i>\n            <a href="http://www.facebook.com/keenthemes/">keenthemes</a>\n          </div>\n        </div>\n      </div>\n      <!-- END PORTLET MAIN -->\n    </div>\n    <!-- END BEGIN PROFILE SIDEBAR -->\n    <!-- BEGIN PROFILE CONTENT -->\n    <div class="profile-content">\n      <div class="row">\n        <div class="col-md-6">\n          <!-- BEGIN PORTLET -->\n          <div class="portlet light ">\n            <div class="portlet-title">\n              <div class="caption caption-md">\n                <i class="icon-bar-chart theme-font hide"></i>\n                <span class="caption-subject font-blue-madison bold uppercase">{{\'APPLICATION_DETAIL\' | translate}}</span>\n              </div>\n              <div class="actions">\n                <div class="btn-group btn-group-devided" data-toggle="buttons">\n                  <label class="btn btn-transparent grey-salsa btn-circle btn-sm active" data-ng-click="detail.tab=\'main\'">\n                  <input type="radio" class="toggle">{{\'APPLICATION_MAIN\' | translate}}</label>\n                  <label class="btn btn-transparent grey-salsa btn-circle btn-sm" data-ng-click="detail.tab=\'address\'">\n                  <input type="radio" class="toggle">{{\'APPLICATION_ADDRESS\' | translate}}</label>\n                  <label class="btn btn-transparent grey-salsa btn-circle btn-sm" data-ng-click="detail.tab=\'other\'">\n                  <input type="radio" class="toggle">{{\'APPLICATION_OTHER\' | translate}}</label>\n                  <label class="btn btn-transparent grey-salsa btn-circle btn-sm" data-ng-click="detail.tab=\'customFields\'">\n                  <input type="radio" class="toggle">{{\'APPLICATION_CUSTOM_FIELDS\' | translate}}</label>\n                </div>\n              </div>\n            </div>\n            <div class="portlet-body">\n              <div data-ng-class="{\'hidden\':detail.tab != \'main\'}" class="portlet-body contact-portlet">\n              <!-- START FULLNAME -->\n              <div class="form-group" data-ng-class="{\'has-error\': (forms.general.fullname.$touched || 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="contact.fullname" required/>\n                <span data-ng-show="(forms.general.fullname.$touched || forms.general.$submitted) && forms.general.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 FULLNAME -->\n\n              <!-- START COMPANY -->\n              <div class="form-group" data-ng-class="{\'has-error\': forms.general.CompanyId.$invalid && forms.general.$submitted}">\n                <label class="control-label">{{\'APPLICATION_COMPANY\' | translate}}</label>\n                <ui-select data-ng-model="contact.CompanyId" theme="bootstrap" name="CompanyId" ng-disabled="disabled">\n                  <ui-select-match allow-clear placeholder="{{ \'APPLICATION_COMPANY\' | translate }}">{{$select.selected.name}}</ui-select-match>\n                  <ui-select-choices repeat="company.id as company in companies | filter: $select.search">\n                    <div ng-bind-html="company.name | highlight: $select.search"></div>\n                  </ui-select-choices>\n                </ui-select>\n                <span data-ng-show="forms.general.CompanyId.$invalid && forms.general.$submitted" class="help-block help-block-error">\n                  <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n                </span>\n              </div>\n              <!-- END COMPANY -->\n\n              <!-- START TAGS -->\n              <div class="form-group" data-ng-class="{\'has-error\': forms.general.tags.$invalid && forms.general.$submitted}">\n                <label class="control-label">{{\'APPLICATION_TAGS\' | translate}}</label>\n                <ui-select tagging tagging-label="" multiple=\'true\' data-ng-model="contact.tags" theme="bootstrap" name="tags" ng-disabled="disabled">\n                  <ui-select-match placeholder="{{ \'APPLICATION_TAGS\' | translate }}">{{$item}}</ui-select-match>\n                  <ui-select-choices repeat="tag in tags | filter: $select.search">\n                    {{tag}}\n                  </ui-select-choices>\n                </ui-select>\n                <span data-ng-show="forms.general.tags.$invalid && forms.general.$submitted" class="help-block help-block-error">\n                  <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n                </span>\n              </div>\n              <!-- END TAGS -->\n\n            </div>\n            <div data-ng-class="{\'hidden\':detail.tab != \'address\'}" class="portlet-body contact-portlet">\n              <!-- START STREET -->\n              <div class="form-group" data-ng-class="{\'has-error\': (forms.general.street.$touched || forms.general.$submitted) && forms.general.street.$invalid}">\n                <label class="control-label">{{\'APPLICATION_STREET\' | translate}}</label>\n                <input type="text" name="street" placeholder="{{\'APPLICATION_STREET\' | translate}}" class="form-control" data-ng-model="contact.street"/>\n                <span data-ng-show="(forms.general.street.$touched || forms.general.$submitted) && forms.general.street.$error.required" class="help-block help-block-error">\n                  <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n                </span>\n              </div>\n              <!-- END STREET -->\n\n              <!-- START POSTALCODE -->\n              <div class="form-group" data-ng-class="{\'has-error\': (forms.general.postalCode.$touched || forms.general.$submitted) && forms.general.postalCode.$invalid}">\n                <label class="control-label">{{\'APPLICATION_POSTALCODE\' | translate}}</label>\n                <input type="text" name="postalCode" placeholder="{{\'APPLICATION_POSTALCODE\' | translate}}" class="form-control" data-ng-model="contact.postalCode"/>\n                <span data-ng-show="(forms.general.postalCode.$touched || forms.general.$submitted) && forms.general.postalCode.$error.required" class="help-block help-block-error">\n                  <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n                </span>\n              </div>\n              <!-- END POSTALCODE -->\n\n              <!-- START CITY -->\n              <div class="form-group" data-ng-class="{\'has-error\': (forms.general.city.$touched || forms.general.$submitted) && forms.general.city.$invalid}">\n                <label class="control-label">{{\'APPLICATION_CITY\' | translate}}</label>\n                <input type="text" name="city" placeholder="{{\'APPLICATION_CITY\' | translate}}" class="form-control" data-ng-model="contact.city"/>\n                <span data-ng-show="(forms.general.city.$touched || forms.general.$submitted) && forms.general.city.$error.required" class="help-block help-block-error">\n                  <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n                </span>\n              </div>\n              <!-- END CITY -->\n\n              <!-- START COUNTRY -->\n              <div class="form-group" data-ng-class="{\'has-error\': (forms.general.country.$touched || forms.general.$submitted) && forms.general.country.$invalid}">\n                <label class="control-label">{{\'APPLICATION_COUNTRY\' | translate}}</label>\n                <input type="text" name="country" placeholder="{{\'APPLICATION_COUNTRY\' | translate}}" class="form-control" data-ng-model="contact.country"/>\n                <span data-ng-show="(forms.general.country.$touched || forms.general.$submitted) && forms.general.country.$error.required" class="help-block help-block-error">\n                  <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n                </span>\n              </div>\n              <!-- END COUNTRY -->\n            </div>\n            <div data-ng-class="{\'hidden\':detail.tab != \'other\'}" class="portlet-body contact-portlet">\n              <!-- START DATEOFBIRTH -->\n              <div class="form-group" data-ng-class="{\'has-error\': (forms.general.dateOfBirth.$touched || forms.general.$submitted) && forms.general.dateOfBirth.$invalid}">\n                <label class="control-label">{{\'APPLICATION_DATEOFBIRTH\' | translate}}</label>\n                <input name="dateOfBirth" type="date" placeholder="{{\'APPLICATION_DATEOFBIRTH\' | translate}}" class="form-control date-picker" data-ng-model="contact.dateOfBirth"/>\n                <span data-ng-show="(forms.general.dateOfBirth.$touched || forms.general.$submitted) && forms.general.dateOfBirth.$error.required" class="help-block help-block-error">\n                  <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n                </span>\n              </div>\n              <!-- END DATEOFBIRTH -->\n\n              <!-- START DESCRIPTION -->\n              <div class="form-group">\n                <label class="control-label">{{\'APPLICATION_DESCRIPTION\' | translate}}</label>\n                <textarea style="resize: vertical;" type="text" name="description" placeholder="{{\'APPLICATION_DESCRIPTION\' | translate}}" class="form-control" data-ng-model="contact.description"></textarea>\n              </div>\n              <!-- END DESCRIPTION -->\n              <!-- START CREATED_BY -->\n              <div class="form-group">\n                <label class="control-label">{{\'APPLICATION_CREATED_BY\' | translate}}</label>\n                <input type="text" name="createdBy" placeholder="{{\'APPLICATION_CREATED_BY\' | translate}}" class="form-control" data-ng-model="contact.User.name" disabled/>\n              </div>\n              <!-- END CREATED_BY -->\n            </div>\n            <div data-ng-class="{\'hidden\':detail.tab != \'customFields\'}" class="portlet-body contact-portlet">\n              <div data-ng-repeat="customField in customFields">\n                <div data-ng-if="customField.active || _.find(contact.CustomFields,{id:customField.id})">\n                <div data-ng-if="customField.type==\'text\'" class="form-group" data-ng-class="{\'has-error\': (forms.general[customField.name].$touched || forms.general.$submitted) && forms.general[customField.name].$invalid}">\n                  <label class="control-label">{{customField.name}}</label>\n                  <input data-ng-if="!joinPrompt" type="text" name="{{customField.name}}" placeholder="{{customField.name}}" class="form-control" data-ng-model="contact.customFields[customField.id]"/>\n                  <span data-ng-show="(forms.general[customField.name].$touched || forms.general.$submitted) && forms.general[customField.name].$error.required" class="help-block help-block-error">\n                    <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n                  </span>\n                </div>\n                <div data-ng-if="customField.type==\'select\'" class="form-group" data-ng-class="{\'has-error\': forms.general[customField.name].$invalid && forms.general.$submitted}">\n                  <label class="control-label">{{customField.name}}</label>\n                  <ui-select data-ng-if="!joinPrompt" data-ng-model="contact.customFields[customField.id]" theme="bootstrap" name="{{customField.name}}" data-ng-disabled="disabled">\n                    <ui-select-match allow-clear placeholder="{{customField.name}}">{{$select.selected.value}}</ui-select-match>\n                    <ui-select-choices repeat="choice.value as choice in customField.values | filter: $select.search">\n                      <div ng-bind-html="choice.value | highlight: $select.search"></div>\n                    </ui-select-choices>\n                  </ui-select>\n                  <span data-ng-show="forms.general[customField.name].$invalid && forms.general.$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            </div>\n          </div>\n          <!-- END PORTLET -->\n        </div>\n        <div class="col-md-6">\n          <!-- BEGIN PORTLET -->\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_CONTACTS\' | 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_PHONES\' | translate}}</a>\n                </li>\n                <li>\n                  <a href="#" data-target="#tab_1_2" data-toggle="tab">{{ \'APPLICATION_EMAILS\' | translate}}</a>\n                </li>\n              </ul>\n            </div>\n            <div class="portlet-body">\n              <!--BEGIN TABS-->\n              <div class="tab-content">\n                <div class="tab-pane active" id="tab_1_1">\n                  <div class="contact-portlet">\n                    <!-- START PHONES -->\n                    <div class="padding-bottom mbottom20">\n                    <div data-ng-if="contact.Phones.length>0">\n                      <label class="control-label">{{\'APPLICATION_PHONES\' | translate}}</label>\n                    </div>\n                    <div class="padding-bottom" ng-repeat="phone in contact.Phones">\n                      <div class="form-group">\n                        <div class="input-group">\n                          <input type="text" class="form-control" ng-model="phone.phone" required>\n                          <span class="input-group-btn">\n                          <button class="btn red" type="button"data-ng-click="removeField(\'Phones\',$index)"><i class="fa fa-times"></i></button>\n                          </span>\n                        </div>\n                      </div>\n                    </div>\n                    <button type="button" class="btn btn-sm green padding-bottom" ng-click="addField(\'Phones\')">\n                      <i class="fa fa-plus"></i> {{\'APPLICATION_ADD_PHONE\' | translate}}\n                    </button>\n                  </div>\n                  <!-- END PHONES -->\n                </div>\n              </div>\n                <div class="tab-pane" id="tab_1_2">\n                  <div class="contact-portlet">\n                    <!-- START EMAILS -->\n                      <div class="padding-bottom mbottom20">\n                      <div data-ng-if="contact.Emails.length>0">\n                        <label class="control-label">{{\'APPLICATION_EMAILS\' | translate}}</label>\n                      </div>\n                      <div class="padding-bottom" ng-repeat="email in contact.Emails">\n                        <div class="form-group">\n                          <div class="input-group">\n                            <input type="email" class="form-control" ng-model="email.email" required>\n                            <span class="input-group-btn">\n                            <button class="btn btn-danger" type="button" data-ng-click="removeField(\'Emails\',$index)"><i class="fa fa-times"></i></button>\n                            </span>\n                          </div>\n                        </div>\n                      </div>\n                      <button type="button" class="btn btn-sm green padding-bottom" ng-click="addField(\'Emails\')">\n                        <i class="fa fa-plus"></i> {{\'APPLICATION_ADD_EMAIL\' | translate}}\n                      </button>\n                    </div>\n                    <!-- END EMAILS -->\n                  </div>\n                </div>\n              </div>\n              <!--END TABS-->\n            </div>\n          </div>\n          <!-- END PORTLET -->\n        </div>\n      </div>\n      <div class="row">\n        <div class="col-md-6">\n          <!-- BEGIN PORTLET -->\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_LOG\' | translate}}</span>\n              </div>\n              <ul class="nav nav-tabs">\n                <li class="active">\n                  <a href="#" data-target="#tab_2_1" data-toggle="tab">{{ \'APPLICATION_JOURNAL\' | translate}}</a>\n                </li>\n                <li>\n                  <a href="#" data-target="#tab_2_2" data-toggle="tab">{{ \'APPLICATION_HISTORY\' | translate}}</a>\n                </li>\n              </ul>\n            </div>\n            <div class="portlet-body">\n              <!--BEGIN TABS-->\n              <div class="tab-content">\n                <div class="tab-pane active" id="tab_2_1">\n                  <div class="contact-portlet">\n                    <div class="actions">\n                      <div class="btn-group btn-group-devided" data-toggle="buttons">\n                        <label class="btn btn-transparent grey-salsa btn-circle btn-sm active" data-ng-click="log.journal.show=\'Phones\';getRows(\'journal\');">\n                        <input type="radio" class="toggle">{{\'APPLICATION_PHONES\' | translate}}</label>\n                        <label class="btn btn-transparent grey-salsa btn-circle btn-sm" data-ng-click="log.journal.show=\'Emails\';log.journal.detail=\'general\';getRows(\'journal\');">\n                        <input type="radio" class="toggle">{{\'APPLICATION_EMAILS\' | translate}}</label>\n                      </div> |\n                      <div class="btn-group btn-group-devided" data-toggle="buttons">\n                        <label class="btn btn-transparent grey-salsa btn-circle btn-sm active" data-ng-click="log.journal.type=\'Inbounds\';getRows(\'journal\');">\n                        <input type="radio" class="toggle">{{\'APPLICATION_INBOUND\' | translate}}</label>\n                        <label class="btn btn-transparent grey-salsa btn-circle btn-sm" data-ng-click="log.journal.type=\'Outbounds\';getRows(\'journal\');">\n                        <input type="radio" class="toggle">{{\'APPLICATION_OUTBOUND\' | translate}}</label>\n                      </div> |\n                      <div class="btn-group btn-group-devided" data-toggle="buttons" data-ng-if="log.journal.show==\'Phones\'">\n                        <label class="btn btn-transparent grey-salsa btn-circle btn-sm active" data-ng-click="log.journal.detail=\'general\';getRows(\'journal\');">\n                        <input type="radio" class="toggle">{{\'APPLICATION_GENERAL\' | translate}}</label>\n                        <label class="btn btn-transparent grey-salsa btn-circle btn-sm" data-ng-click="log.journal.detail=\'QueueCalls\';getRows(\'journal\');">\n                        <input type="radio" class="toggle">{{\'APPLICATION_QUEUES\' | translate}}</label>\n                        <label class="btn btn-transparent grey-salsa btn-circle btn-sm" data-ng-click="log.journal.detail=\'ReportAgents\';getRows(\'journal\');">\n                        <input type="radio" class="toggle">{{\'APPLICATION_AGENTS\' | translate}}</label>\n                      </div>\n                    </div>\n                    <table st-table="journal" class="table table-striped">\n                  		<thead>\n                  		<tr>\n                  			<th data-ng-repeat="column in columns[log.journal.show][log.journal.detail].header">{{column | translate}}</th>\n                  		</tr>\n                  		</thead>\n                  		<tbody>\n                  		<tr data-ng-repeat="row in rows[\'journal\']">\n                  			<td data-ng-repeat="col in columns[log.journal.show][log.journal.detail].indexes">{{col == \'createdAt\' ? moment(row[col]).format(\'DD/MM/YYYY HH:mm:ss\') : row[col]}}</td>\n                  		</tr>\n                      <tr data-ng-hide="rows[\'journal\'].length">\n                        <td colspan="{{columns[log.journal.show][log.journal.detail].header.length}}" class="text-center">\n                          {{\'MESSAGE_NO_RESULTS_AVAILABLE\' | translate}}\n                        </td>\n                      </tr>\n                  		</tbody>\n                  		<tfoot>\n                  			<tr>\n                  				<td colspan="{{columns[log.journal.show][log.journal.detail].header.length}}" class="text-center">\n                  					<div st-pagination="" st-items-by-page="itemsByPage" st-displayed-pages="7"></div>\n                  				</td>\n                  			</tr>\n                  		</tfoot>\n                  	</table>\n\n                  </div>\n              </div>\n                <div class="tab-pane" id="tab_2_2">\n                  <div class="contact-portlet">\n                    <div class="actions">\n                      <div class="btn-group btn-group-devided" data-toggle="buttons">\n                        <label class="btn btn-transparent grey-salsa btn-circle btn-sm active" data-ng-click="log.history.show=\'Phones\';getRows(\'history\');">\n                        <input type="radio" class="toggle">{{\'APPLICATION_PHONES\' | translate}}</label>\n                        <label class="btn btn-transparent grey-salsa btn-circle btn-sm" data-ng-click="log.history.show=\'Emails\';log.history.detail=\'general\';getRows(\'history\');">\n                        <input type="radio" class="toggle">{{\'APPLICATION_EMAILS\' | translate}}</label>\n                      </div> |\n                      <div class="btn-group btn-group-devided" data-toggle="buttons">\n                        <label class="btn btn-transparent grey-salsa btn-circle btn-sm active" data-ng-click="log.history.type=\'HistoryInbounds\';getRows(\'history\');">\n                        <input type="radio" class="toggle">{{\'APPLICATION_INBOUND\' | translate}}</label>\n                        <label class="btn btn-transparent grey-salsa btn-circle btn-sm" data-ng-click="log.history.type=\'HistoryOutbounds\';getRows(\'history\');">\n                        <input type="radio" class="toggle">{{\'APPLICATION_OUTBOUND\' | translate}}</label>\n                      </div> |\n                      <div class="btn-group btn-group-devided" data-toggle="buttons" data-ng-if="log.history.show==\'Phones\'">\n                        <label class="btn btn-transparent grey-salsa btn-circle btn-sm active" data-ng-click="log.history.detail=\'general\';getRows(\'history\');">\n                        <input type="radio" class="toggle">{{\'APPLICATION_GENERAL\' | translate}}</label>\n                        <label class="btn btn-transparent grey-salsa btn-circle btn-sm" data-ng-click="log.history.detail=\'HistoryQueueCalls\';getRows(\'history\');">\n                        <input type="radio" class="toggle">{{\'APPLICATION_QUEUES\' | translate}}</label>\n                        <label class="btn btn-transparent grey-salsa btn-circle btn-sm" data-ng-click="log.history.detail=\'HistoryReportAgents\';getRows(\'history\');">\n                        <input type="radio" class="toggle">{{\'APPLICATION_AGENTS\' | translate}}</label>\n                      </div>\n                    </div>\n                    <table st-table="history" class="table table-striped">\n                      <thead>\n                      <tr>\n                        <th data-ng-repeat="column in columns[log.history.show][log.history.detail].header">{{column | translate}}</th>\n                      </tr>\n                      </thead>\n                      <tbody>\n                      <tr data-ng-repeat="row in rows[\'history\']">\n                        <td data-ng-repeat="col in columns[log.history.show][log.history.detail].indexes">{{col == \'createdAt\' ? moment(row[col]).format(\'DD/MM/YYYY HH:mm:ss\') : row[col]}}</td>\n                      </tr>\n                      <tr data-ng-hide="rows[\'history\'].length">\n                        <td colspan="{{columns[log.history.show][log.history.detail].header.length}}" class="text-center">\n                          {{\'MESSAGE_NO_RESULTS_AVAILABLE\' | translate}}\n                        </td>\n                      </tr>\n                      </tbody>\n                      <tfoot>\n                        <tr>\n                          <td colspan="{{columns[log.history.show][log.history.detail].header.length}}" class="text-center">\n                            <div st-pagination="" st-items-by-page="itemsByPage" st-displayed-pages="7"></div>\n                          </td>\n                        </tr>\n                      </tfoot>\n                    </table>\n\n                  </div>\n                </div>\n              </div>\n              <!--END TABS-->\n            </div>\n          </div>\n          <!-- END PORTLET -->\n        </div>\n        <div class="col-md-6">\n          <!-- BEGIN PORTLET -->\n          <div class="portlet light tasks-widget">\n            <div class="portlet-title">\n              <div class="caption caption-md">\n                <i class="icon-bar-chart theme-font hide"></i>\n                <span class="caption-subject font-blue-madison bold uppercase">Tasks</span>\n                <span class="caption-helper">16 pending</span>\n              </div>\n              <div class="inputs">\n                <div class="portlet-input input-small input-inline">\n                  <div class="input-icon right">\n                    <i class="icon-magnifier"></i>\n                    <input type="text" class="form-control form-control-solid" placeholder="search...">\n                  </div>\n                </div>\n              </div>\n            </div>\n            <div class="portlet-body">\n              <div class="task-content">\n                <div class="contact-portlet">\n                  <!-- START TASK LIST -->\n                  <ul class="task-list">\n                    <li>\n                      <div class="task-checkbox">\n                        <input type="hidden" value="1" name="test"/>\n                        <input type="checkbox" class="liChild" value="2" name="test"/>\n                      </div>\n                      <div class="task-title">\n                        <span class="task-title-sp">\n                        Present 2013 Year IPO Statistics at Board Meeting </span>\n                        <span class="label label-sm label-success">Company</span>\n                        <span class="task-bell">\n                        <i class="fa fa-bell-o"></i>\n                        </span>\n                      </div>\n                      <div class="task-config">\n                        <div class="task-config-btn btn-group">\n                          <a class="btn btn-xs default" href="#" data-toggle="dropdown" data-hover="dropdown" data-close-others="true">\n                          <i class="fa fa-cog"></i><i class="fa fa-angle-down"></i>\n                          </a>\n                          <ul class="dropdown-menu pull-right">\n                            <li>\n                              <a href="#">\n                              <i class="fa fa-check"></i> Complete </a>\n                            </li>\n                            <li>\n                              <a href="#">\n                              <i class="fa fa-pencil"></i> Edit </a>\n                            </li>\n                            <li>\n                              <a href="#">\n                              <i class="fa fa-trash-o"></i> Cancel </a>\n                            </li>\n                          </ul>\n                        </div>\n                      </div>\n                    </li>\n                    <li>\n                      <div class="task-checkbox">\n                        <input type="checkbox" class="liChild" value=""/>\n                      </div>\n                      <div class="task-title">\n                        <span class="task-title-sp">\n                        Hold An Interview for Marketing Manager Position </span>\n                        <span class="label label-sm label-danger">Marketing</span>\n                      </div>\n                      <div class="task-config">\n                        <div class="task-config-btn btn-group">\n                          <a class="btn btn-xs default" href="#" data-toggle="dropdown" data-hover="dropdown" data-close-others="true">\n                          <i class="fa fa-cog"></i><i class="fa fa-angle-down"></i>\n                          </a>\n                          <ul class="dropdown-menu pull-right">\n                            <li>\n                              <a href="#">\n                              <i class="fa fa-check"></i> Complete </a>\n                            </li>\n                            <li>\n                              <a href="#">\n                              <i class="fa fa-pencil"></i> Edit </a>\n                            </li>\n                            <li>\n                              <a href="#">\n                              <i class="fa fa-trash-o"></i> Cancel </a>\n                            </li>\n                          </ul>\n                        </div>\n                      </div>\n                    </li>\n                    <li>\n                      <div class="task-checkbox">\n                        <input type="checkbox" class="liChild" value=""/>\n                      </div>\n                      <div class="task-title">\n                        <span class="task-title-sp">\n                        AirAsia Intranet System Project Internal Meeting </span>\n                        <span class="label label-sm label-success">AirAsia</span>\n                        <span class="task-bell">\n                        <i class="fa fa-bell-o"></i>\n                        </span>\n                      </div>\n                      <div class="task-config">\n                        <div class="task-config-btn btn-group">\n                          <a class="btn btn-xs default" href="#" data-toggle="dropdown" data-hover="dropdown" data-close-others="true">\n                          <i class="fa fa-cog"></i><i class="fa fa-angle-down"></i>\n                          </a>\n                          <ul class="dropdown-menu pull-right">\n                            <li>\n                              <a href="#">\n                              <i class="fa fa-check"></i> Complete </a>\n                            </li>\n                            <li>\n                              <a href="#">\n                              <i class="fa fa-pencil"></i> Edit </a>\n                            </li>\n                            <li>\n                              <a href="#">\n                              <i class="fa fa-trash-o"></i> Cancel </a>\n                            </li>\n                          </ul>\n                        </div>\n                      </div>\n                    </li>\n                    <li>\n                      <div class="task-checkbox">\n                        <input type="checkbox" class="liChild" value=""/>\n                      </div>\n                      <div class="task-title">\n                        <span class="task-title-sp">\n                        Technical Management Meeting </span>\n                        <span class="label label-sm label-warning">Company</span>\n                      </div>\n                      <div class="task-config">\n                        <div class="task-config-btn btn-group">\n                          <a class="btn btn-xs default" href="#" data-toggle="dropdown" data-hover="dropdown" data-close-others="true">\n                          <i class="fa fa-cog"></i><i class="fa fa-angle-down"></i>\n                          </a>\n                          <ul class="dropdown-menu pull-right">\n                            <li>\n                              <a href="#">\n                              <i class="fa fa-check"></i> Complete </a>\n                            </li>\n                            <li>\n                              <a href="#">\n                              <i class="fa fa-pencil"></i> Edit </a>\n                            </li>\n                            <li>\n                              <a href="#">\n                              <i class="fa fa-trash-o"></i> Cancel </a>\n                            </li>\n                          </ul>\n                        </div>\n                      </div>\n                    </li>\n                    <li>\n                      <div class="task-checkbox">\n                        <input type="checkbox" class="liChild" value=""/>\n                      </div>\n                      <div class="task-title">\n                        <span class="task-title-sp">\n                        Kick-off Company CRM Mobile App Development </span>\n                        <span class="label label-sm label-info">Internal Products</span>\n                      </div>\n                      <div class="task-config">\n                        <div class="task-config-btn btn-group">\n                          <a class="btn btn-xs default" href="#" data-toggle="dropdown" data-hover="dropdown" data-close-others="true">\n                          <i class="fa fa-cog"></i><i class="fa fa-angle-down"></i>\n                          </a>\n                          <ul class="dropdown-menu pull-right">\n                            <li>\n                              <a href="#">\n                              <i class="fa fa-check"></i> Complete </a>\n                            </li>\n                            <li>\n                              <a href="#">\n                              <i class="fa fa-pencil"></i> Edit </a>\n                            </li>\n                            <li>\n                              <a href="#">\n                              <i class="fa fa-trash-o"></i> Cancel </a>\n                            </li>\n                          </ul>\n                        </div>\n                      </div>\n                    </li>\n                    <li>\n                      <div class="task-checkbox">\n                        <input type="checkbox" class="liChild" value=""/>\n                      </div>\n                      <div class="task-title">\n                        <span class="task-title-sp">\n                        Prepare Commercial Offer For SmartVision Website Rewamp </span>\n                        <span class="label label-sm label-danger">SmartVision</span>\n                      </div>\n                      <div class="task-config">\n                        <div class="task-config-btn btn-group">\n                          <a class="btn btn-xs default" href="#" data-toggle="dropdown" data-hover="dropdown" data-close-others="true">\n                          <i class="fa fa-cog"></i><i class="fa fa-angle-down"></i>\n                          </a>\n                          <ul class="dropdown-menu pull-right">\n                            <li>\n                              <a href="#">\n                              <i class="fa fa-check"></i> Complete </a>\n                            </li>\n                            <li>\n                              <a href="#">\n                              <i class="fa fa-pencil"></i> Edit </a>\n                            </li>\n                            <li>\n                              <a href="#">\n                              <i class="fa fa-trash-o"></i> Cancel </a>\n                            </li>\n                          </ul>\n                        </div>\n                      </div>\n                    </li>\n                    <li>\n                      <div class="task-checkbox">\n                        <input type="checkbox" class="liChild" value=""/>\n                      </div>\n                      <div class="task-title">\n                        <span class="task-title-sp">\n                        Sign-Off The Comercial Agreement With AutoSmart </span>\n                        <span class="label label-sm label-default">AutoSmart</span>\n                        <span class="task-bell">\n                        <i class="fa fa-bell-o"></i>\n                        </span>\n                      </div>\n                      <div class="task-config">\n                        <div class="task-config-btn btn-group">\n                          <a class="btn btn-xs default" href="#" data-toggle="dropdown" data-hover="dropdown" data-close-others="true">\n                          <i class="fa fa-cog"></i><i class="fa fa-angle-down"></i>\n                          </a>\n                          <ul class="dropdown-menu pull-right">\n                            <li>\n                              <a href="#">\n                              <i class="fa fa-check"></i> Complete </a>\n                            </li>\n                            <li>\n                              <a href="#">\n                              <i class="fa fa-pencil"></i> Edit </a>\n                            </li>\n                            <li>\n                              <a href="#">\n                              <i class="fa fa-trash-o"></i> Cancel </a>\n                            </li>\n                          </ul>\n                        </div>\n                      </div>\n                    </li>\n                    <li>\n                      <div class="task-checkbox">\n                        <input type="checkbox" class="liChild" value=""/>\n                      </div>\n                      <div class="task-title">\n                        <span class="task-title-sp">\n                        Company Staff Meeting </span>\n                        <span class="label label-sm label-success">Cruise</span>\n                        <span class="task-bell">\n                        <i class="fa fa-bell-o"></i>\n                        </span>\n                      </div>\n                      <div class="task-config">\n                        <div class="task-config-btn btn-group">\n                          <a class="btn btn-xs default" href="#" data-toggle="dropdown" data-hover="dropdown" data-close-others="true">\n                          <i class="fa fa-cog"></i><i class="fa fa-angle-down"></i>\n                          </a>\n                          <ul class="dropdown-menu pull-right">\n                            <li>\n                              <a href="#">\n                              <i class="fa fa-check"></i> Complete </a>\n                            </li>\n                            <li>\n                              <a href="#">\n                              <i class="fa fa-pencil"></i> Edit </a>\n                            </li>\n                            <li>\n                              <a href="#">\n                              <i class="fa fa-trash-o"></i> Cancel </a>\n                            </li>\n                          </ul>\n                        </div>\n                      </div>\n                    </li>\n                    <li class="last-line">\n                      <div class="task-checkbox">\n                        <input type="checkbox" class="liChild" value=""/>\n                      </div>\n                      <div class="task-title">\n                        <span class="task-title-sp">\n                        KeenThemes Investment Discussion </span>\n                        <span class="label label-sm label-warning">KeenThemes </span>\n                      </div>\n                      <div class="task-config">\n                        <div class="task-config-btn btn-group">\n                          <a class="btn btn-xs default" href="#" data-toggle="dropdown" data-hover="dropdown" data-close-others="true">\n                          <i class="fa fa-cog"></i><i class="fa fa-angle-down"></i>\n                          </a>\n                          <ul class="dropdown-menu pull-right">\n                            <li>\n                              <a href="#">\n                              <i class="fa fa-check"></i> Complete </a>\n                            </li>\n                            <li>\n                              <a href="#">\n                              <i class="fa fa-pencil"></i> Edit </a>\n                            </li>\n                            <li>\n                              <a href="#">\n                              <i class="fa fa-trash-o"></i> Cancel </a>\n                            </li>\n                          </ul>\n                        </div>\n                      </div>\n                    </li>\n                  </ul>\n                  <!-- END START TASK LIST -->\n                </div>\n              </div>\n            </div>\n          </div>\n          <!-- END PORTLET -->\n        </div>\n      </div>\n    </div>\n    <!-- END PROFILE CONTENT -->\n  </form>\n  </div>\n</div>\n'),
-a.put("app/main/template.newContactTab.html",'<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_NEW_CONTACT\' | translate }}</a> </span>\n    </div>\n  </div>\n  <div class="portlet-body">\n    <!-- <pre>\n      {{forms.general | json}}\n    </pre> -->\n    <!-- <pre>\n      {{item | json}}\n    </pre>\n    <pre>\n      {{index}}\n    </pre> -->\n        <form name="forms.general" data-ng-submit="submit({index: index,item: item})" novalidate>\n          <!-- <pre>\n            {{checkboxes | json}}\n          </pre>\n          <pre>\n            {{item | json}}\n          </pre> -->\n          <!-- BEGIN PORTLET -->\n          <div class="portlet light">\n            <div class="portlet-title">\n              <div class="caption caption-md">\n                <i class="icon-bar-chart theme-font hide"></i>\n                <span class="caption-subject font-blue-madison bold uppercase">{{\'APPLICATION_DETAILS\' | translate}}</span>\n              </div>\n              <div class="inputs">\n                <div class="portlet-input input-inline input-small ">\n                </div>\n              </div>\n            </div>\n            <div class="portlet-body">\n          <div class="row">\n            <div class="col-md-6">\n          <!-- START FULLNAME -->\n          <div class="form-group" data-ng-class="{\'has-error\': (forms.general.fullname.$touched || forms.general.$submitted) && forms.general.fullname.$invalid}">\n            <label class="control-label">{{\'APPLICATION_FULLNAME\' | translate}}<span class="required" aria-required="true">*</span></label>\n            <!-- <div class="input-group" data-ng-if="joinPrompt">\n              <input type="text" name="fullname" placeholder="{{\'APPLICATION_FULLNAME\' | translate}}" class="form-control" data-ng-model="item.fullname" data-ng-disabled="checkboxes.fullname ? !checkboxes.fullname : true" required/>\n              <span class="input-group-addon">\n              <input type="checkbox" data-ng-model="checkboxes.fullname">\n              </span>\n            </div> -->\n            <input data-ng-if="!joinPrompt" type="text" name="fullname" placeholder="{{\'APPLICATION_FULLNAME\' | translate}}" class="form-control" data-ng-model="item.fullname" required/>\n            <span data-ng-show="(forms.general.fullname.$touched || forms.general.$submitted) && forms.general.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 FULLNAME -->\n\n          <!-- START COMPANY -->\n          <div class="form-group" data-ng-class="{\'has-error\': forms.general.CompanyId.$invalid && forms.general.$submitted}">\n            <label class="control-label">{{\'APPLICATION_COMPANY\' | translate}}</label>\n            <!-- <div class="input-group" data-ng-if="joinPrompt">\n              <ui-select data-ng-model="item.CompanyId" theme="bootstrap" name="CompanyId" data-ng-disabled="checkboxes.CompanyId ? !checkboxes.CompanyId : true">\n                <ui-select-match allow-clear placeholder="{{ \'APPLICATION_COMPANY\' | translate }}">{{$select.selected.name}}</ui-select-match>\n                <ui-select-choices repeat="company.id as company in companies | filter: $select.search">\n                  <div ng-bind-html="company.name | highlight: $select.search"></div>\n                </ui-select-choices>\n              </ui-select>\n              <span class="input-group-addon">\n              <input type="checkbox" data-ng-model="checkboxes.CompanyId">\n              </span>\n            </div> -->\n            <ui-select data-ng-if="!joinPrompt" data-ng-model="item.CompanyId" theme="bootstrap" name="CompanyId" data-ng-disabled="disabled">\n              <ui-select-match allow-clear placeholder="{{ \'APPLICATION_COMPANY\' | translate }}">{{$select.selected.name}}</ui-select-match>\n              <ui-select-choices repeat="company.id as company in companies | filter: $select.search">\n                <div ng-bind-html="company.name | highlight: $select.search"></div>\n              </ui-select-choices>\n            </ui-select>\n            <span data-ng-show="forms.general.CompanyId.$invalid && forms.general.$submitted" class="help-block help-block-error">\n              <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n            </span>\n          </div>\n          <!-- END COMPANY -->\n\n          <!-- START STREET -->\n          <div class="form-group" data-ng-class="{\'has-error\': (forms.general.street.$touched || forms.general.$submitted) && forms.general.street.$invalid}">\n            <label class="control-label">{{\'APPLICATION_STREET\' | translate}}</label>\n            <!-- <div class="input-group" data-ng-if="joinPrompt">\n              <input type="text" name="street" placeholder="{{\'APPLICATION_STREET\' | translate}}" class="form-control" data-ng-model="item.street" data-ng-disabled="checkboxes.street ? !checkboxes.street : true"/>\n              <span class="input-group-addon">\n              <input type="checkbox" data-ng-model="checkboxes.street">\n              </span>\n            </div> -->\n            <input data-ng-if="!joinPrompt" type="text" name="street" placeholder="{{\'APPLICATION_STREET\' | translate}}" class="form-control" data-ng-model="item.street"/>\n            <span data-ng-show="(forms.general.street.$touched || forms.general.$submitted) && forms.general.street.$error.required" class="help-block help-block-error">\n              <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n            </span>\n          </div>\n          <!-- END STREET -->\n\n          <!-- START POSTALCODE -->\n          <div class="form-group" data-ng-class="{\'has-error\': (forms.general.postalCode.$touched || forms.general.$submitted) && forms.general.postalCode.$invalid}">\n            <label class="control-label">{{\'APPLICATION_POSTALCODE\' | translate}}</label>\n            <!-- <div class="input-group" data-ng-if="joinPrompt">\n              <input type="text" name="postalCode" placeholder="{{\'APPLICATION_POSTALCODE\' | translate}}" class="form-control" data-ng-model="item.postalCode" data-ng-disabled="checkboxes.postalCode ? !checkboxes.postalCode : true"/>\n              <span class="input-group-addon">\n              <input type="checkbox" data-ng-model="checkboxes.postalCode">\n              </span>\n            </div> -->\n            <input data-ng-if="!joinPrompt" type="text" name="postalCode" placeholder="{{\'APPLICATION_POSTALCODE\' | translate}}" class="form-control" data-ng-model="item.postalCode"/>\n            <span data-ng-show="(forms.general.postalCode.$touched || forms.general.$submitted) && forms.general.postalCode.$error.required" class="help-block help-block-error">\n              <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n            </span>\n          </div>\n          <!-- END POSTALCODE -->\n\n          <!-- START CITY -->\n          <div class="form-group" data-ng-class="{\'has-error\': (forms.general.city.$touched || forms.general.$submitted) && forms.general.city.$invalid}">\n            <label class="control-label">{{\'APPLICATION_CITY\' | translate}}</label>\n            <!-- <div class="input-group" data-ng-if="joinPrompt">\n              <input type="text" name="city" placeholder="{{\'APPLICATION_CITY\' | translate}}" class="form-control" data-ng-model="item.city" data-ng-disabled="checkboxes.city ? !checkboxes.city : true"/>\n              <span class="input-group-addon">\n              <input type="checkbox" data-ng-model="checkboxes.city">\n              </span>\n            </div> -->\n            <input data-ng-if="!joinPrompt" type="text" name="city" placeholder="{{\'APPLICATION_CITY\' | translate}}" class="form-control" data-ng-model="item.city"/>\n            <span data-ng-show="(forms.general.city.$touched || forms.general.$submitted) && forms.general.city.$error.required" class="help-block help-block-error">\n              <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n            </span>\n          </div>\n          <!-- END CITY -->\n        </div>\n        <div class="col-md-6">\n          <!-- START COUNTRY -->\n          <div class="form-group" data-ng-class="{\'has-error\': (forms.general.country.$touched || forms.general.$submitted) && forms.general.country.$invalid}">\n            <label class="control-label">{{\'APPLICATION_COUNTRY\' | translate}}</label>\n            <!-- <div class="input-group" data-ng-if="joinPrompt">\n              <input type="text" name="country" placeholder="{{\'APPLICATION_COUNTRY\' | translate}}" class="form-control" data-ng-model="item.country" data-ng-disabled="checkboxes.country ? !checkboxes.country : true"/>\n              <span class="input-group-addon">\n              <input type="checkbox" data-ng-model="checkboxes.country">\n              </span>\n            </div> -->\n            <input data-ng-if="!joinPrompt" type="text" name="country" placeholder="{{\'APPLICATION_COUNTRY\' | translate}}" class="form-control" data-ng-model="item.country"/>\n            <span data-ng-show="(forms.general.country.$touched || forms.general.$submitted) && forms.general.country.$error.required" class="help-block help-block-error">\n              <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n            </span>\n          </div>\n          <!-- END COUNTRY -->\n\n          <!-- START DATEOFBIRTH -->\n          <div class="form-group" data-ng-class="{\'has-error\': (forms.general.dateOfBirth.$touched || forms.general.$submitted) && forms.general.dateOfBirth.$invalid}">\n            <label class="control-label">{{\'APPLICATION_DATEOFBIRTH\' | translate}}</label>\n            <!-- <div class="input-group" data-ng-if="joinPrompt">\n              <input type="date" name="dateOfBirth" placeholder="{{\'APPLICATION_DATEOFBIRTH\' | translate}}" class="form-control" data-ng-model="item.dateOfBirth" data-ng-disabled="checkboxes.dateOfBirth ? !checkboxes.dateOfBirth : true"/>\n              <span class="input-group-addon">\n              <input type="checkbox" data-ng-model="checkboxes.dateOfBirth">\n              </span>\n            </div> -->\n            <input data-ng-if="!joinPrompt" type="date" name="dateOfBirth" placeholder="{{\'APPLICATION_DATEOFBIRTH\' | translate}}" class="form-control" data-ng-model="item.dateOfBirth"/>\n            <span data-ng-show="(forms.general.dateOfBirth.$touched || forms.general.$submitted) && forms.general.dateOfBirth.$error.required" class="help-block help-block-error">\n              <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n            </span>\n          </div>\n          <!-- END DATEOFBIRTH -->\n\n          <!-- START TAGS -->\n          <div class="form-group" data-ng-class="{\'has-error\': forms.general.tags.$invalid && forms.general.$submitted}">\n            <label class="control-label">{{\'APPLICATION_TAGS\' | translate}}</label>\n            <!-- <div class="input-group" data-ng-if="joinPrompt">\n              <ui-select tagging tagging-label="" multiple=\'true\' data-ng-model="item.tags" theme="bootstrap" name="tags" data-ng-readonly="checkboxes.tags ? !checkboxes.tags : true">\n                <ui-select-match placeholder="{{ \'APPLICATION_TAGS\' | translate }}">{{$item}}</ui-select-match>\n                <ui-select-choices repeat="tag in tags | filter: $select.search">\n                  {{tag}}\n                </ui-select-choices>\n              </ui-select>\n              <span class="input-group-addon">\n              <input type="checkbox" data-ng-model="checkboxes.tags">\n              </span>\n            </div> -->\n            <ui-select data-ng-if="!joinPrompt" tagging tagging-label="" multiple=\'true\' data-ng-model="item.tags" theme="bootstrap" name="tags" ng-disabled="disabled">\n              <ui-select-match placeholder="{{ \'APPLICATION_TAGS\' | translate }}">{{$item}}</ui-select-match>\n              <ui-select-choices repeat="tag in tags | filter: $select.search">\n                {{tag}}\n              </ui-select-choices>\n            </ui-select>\n            <span data-ng-show="forms.general.tags.$invalid && forms.general.$submitted" class="help-block help-block-error">\n              <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n            </span>\n          </div>\n          <!-- END TAGS -->\n\n          <!-- START DESCRIPTION -->\n          <div class="form-group">\n            <label class="control-label">{{\'APPLICATION_DESCRIPTION\' | translate}}</label>\n            <!-- <div class="input-group" data-ng-if="joinPrompt">\n              <textarea style="resize: vertical;" name="description" placeholder="{{\'APPLICATION_DESCRIPTION\' | translate}}" class="form-control" data-ng-model="item.description" data-ng-disabled="checkboxes.description ? !checkboxes.description : true"></textarea>\n              <span class="input-group-addon">\n              <input type="checkbox" data-ng-model="checkboxes.description">\n              </span>\n            </div> -->\n            <textarea data-ng-if="!joinPrompt" style="resize: vertical;" name="description" placeholder="{{\'APPLICATION_DESCRIPTION\' | translate}}" class="form-control" data-ng-model="item.description"></textarea>\n          </div>\n          <!-- END DESCRIPTION -->\n        </div>\n      </div>\n    </div>\n  </div>\n  <!-- END PORTLET -->\n  <!-- START PORTLET -->\n  <div class="portlet light">\n    <div class="portlet-title">\n      <div class="caption caption-md">\n        <i class="icon-bar-chart theme-font hide"></i>\n        <span class="caption-subject font-blue-madison bold uppercase">{{\'APPLICATION_CUSTOM_FIELDS\' | translate}}</span>\n      </div>\n      <div class="inputs">\n        <div class="portlet-input input-inline input-small ">\n        </div>\n      </div>\n    </div>\n    <div class="portlet-body">\n      <div data-ng-repeat="customField in customFields">\n        <div data-ng-if="customField.type==\'text\'" class="form-group" data-ng-class="{\'has-error\': (forms.general[customField.name].$touched || forms.general.$submitted) && forms.general[customField.name].$invalid}">\n          <label class="control-label">{{customField.name}}</label>\n          <input data-ng-if="!joinPrompt" type="text" name="{{customField.name}}" placeholder="{{customField.name}}" class="form-control" data-ng-model="item.customFields[customField.id]"/>\n          <span data-ng-show="(forms.general[customField.name].$touched || forms.general.$submitted) && forms.general[customField.name].$error.required" class="help-block help-block-error">\n            <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n          </span>\n        </div>\n        <div data-ng-if="customField.type==\'select\'" class="form-group" data-ng-class="{\'has-error\': forms.general[customField.name].$invalid && forms.general.$submitted}">\n          <label class="control-label">{{customField.name}}</label>\n          <ui-select data-ng-if="!joinPrompt" data-ng-model="item.customFields[customField.id]" theme="bootstrap" name="{{customField.name}}" data-ng-disabled="disabled">\n            <ui-select-match allow-clear placeholder="{{customField.name}}">{{$select.selected.value}}</ui-select-match>\n            <ui-select-choices repeat="choice.value as choice in customField.values | filter: $select.search">\n              <div ng-bind-html="choice.value | highlight: $select.search"></div>\n            </ui-select-choices>\n          </ui-select>\n          <span data-ng-show="forms.general[customField.name].$invalid && forms.general.$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 PORTLET -->\n  <div class="row">\n    <div class="col-md-6">\n  <!-- START PORTLET -->\n  <div class="portlet light">\n    <div class="portlet-title">\n      <div class="caption caption-md">\n        <i class="icon-bar-chart theme-font hide"></i>\n        <span class="caption-subject font-blue-madison bold uppercase">{{\'APPLICATION_PHONES\' | translate}}</span>\n      </div>\n      <div class="inputs">\n        <div class="portlet-input input-inline input-small ">\n        </div>\n      </div>\n    </div>\n    <div class="portlet-body">\n          <!-- START PHONES -->\n          <div class="">\n          <div data-ng-if="item.Phones.length>0">\n            <!-- <label class="control-label">{{\'APPLICATION_PHONES\' | translate}}</label> -->\n          </div>\n          <div class="padding-bottom" ng-repeat="phone in item.Phones">\n            <div class="form-group">\n              <div class="input-group">\n                <input type="text" class="form-control" ng-model="phone.phone" required>\n                <span class="input-group-btn">\n                <button class="btn red" type="button"data-ng-click="removeField(\'Phones\',$index)"><i class="fa fa-times"></i></button>\n                </span>\n              </div>\n            </div>\n          </div>\n          <button type="button" class="btn btn-sm green padding-bottom" ng-click="addField(\'Phones\')">\n            <i class="fa fa-plus"></i> {{\'APPLICATION_ADD_PHONE\' | translate}}\n          </button>\n        </div>\n        <!-- END PHONES -->\n      </div>\n    </div>\n    <!-- END PORTLET -->\n  </div>\n  <div class="col-md-6">\n    <!-- START PORTLET -->\n    <div class="portlet light">\n      <div class="portlet-title">\n        <div class="caption caption-md">\n          <i class="icon-bar-chart theme-font hide"></i>\n          <span class="caption-subject font-blue-madison bold uppercase">{{\'APPLICATION_EMAILS\' | translate}}</span>\n        </div>\n        <div class="inputs">\n          <div class="portlet-input input-inline input-small ">\n          </div>\n        </div>\n      </div>\n      <div class="portlet-body">\n        <!-- START EMAILS -->\n          <div class="">\n          <div data-ng-if="item.Emails.length>0">\n            <!-- <label class="control-label">{{\'APPLICATION_EMAILS\' | translate}}</label> -->\n          </div>\n          <div class="padding-bottom" ng-repeat="email in item.Emails">\n            <div class="form-group">\n              <div class="input-group">\n                <input type="email" class="form-control" ng-model="email.email" required>\n                <span class="input-group-btn">\n                <button class="btn btn-danger" type="button" data-ng-click="removeField(\'Emails\',$index)"><i class="fa fa-times"></i></button>\n                </span>\n              </div>\n            </div>\n          </div>\n          <button type="button" class="btn btn-sm green padding-bottom" ng-click="addField(\'Emails\')">\n            <i class="fa fa-plus"></i> {{\'APPLICATION_ADD_EMAIL\' | translate}}\n          </button>\n        </div>\n        <!-- END EMAILS -->\n      </div>\n    </div>\n    <!-- END PORTLET -->\n  </div>\n</div>\n    <!-- START PORTLET -->\n    <div class="portlet light">\n      <div class="portlet-title">\n        <div class="caption caption-md">\n          <i class="icon-bar-chart theme-font hide"></i>\n          <!-- <span class="caption-subject font-blue-madison bold uppercase">{{\'APPLICATION_PHONES\' | translate}}</span> -->\n        </div>\n        <div class="inputs">\n          <div class="portlet-input input-inline input-small ">\n          </div>\n        </div>\n      </div>\n      <div class="portlet-body">\n          <div class="mbottom20">\n          <input class="btn green-haze" type="submit" value="{{\'APPLICATION_CONFIRM\' | translate}}" data-ng-disabled="!item.fullname"/>\n        </div>\n        <!-- <div data-ng-if="joinPrompt">\n          <p>{{\'APPLICATION_OR\' | translate}}</p>\n          <input class="btn green-haze mbottom20" type="button" value="{{\'APPLICATION_JOIN_WITH\' | translate}}" data-ng-disabled="!item.id" data-ng-click="joinContact(index)"/>\n\n          <div class="form-group" data-ng-class="{\'has-error\': forms.general.id.$invalid && forms.general.$submitted}">\n            <ui-select  data-ng-model="item.id" theme="bootstrap" name="id" data-ng-disabled="disabled">\n              <ui-select-match placeholder="{{ \'APPLICATION_EXISTING_CONTACT\' | translate }}">{{$select.selected.fullname}}</ui-select-match>\n              <ui-select-choices repeat="contact.id as contact in contacts | filter: $select.search">\n                <div ng-bind-html="contact.fullname | highlight: $select.search"></div>\n              </ui-select-choices>\n            </ui-select>\n            <span data-ng-show="forms.general.id.$invalid && forms.general.$submitted" class="help-block help-block-error">\n'+"              <strong>{{'APPLICATION_WARNING' | translate}}!</strong> {{'MESSAGE_REQUIRED_FIELD' | translate}}.\n            </span>\n          </div>\n\n        </div> -->\n      </div>\n    </div>\n    <!-- END PORTLET -->\n\n        </form>\n  </div>\n</div>\n<pre>\n  {{item | json}}\n</pre>\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" data-ng-init="initChoices(rule,rule.field.subField.api,rule.data,$index,0,\'data2\');initChoices(rule,rule.field.subField.subField.api,rule.data,$index,1,\'data3\',rule.data2);">\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\n															<ui-select data-ng-model="rule.field" theme="bootstrap" class="col-md-2" data-ng-change="clearData(rule,[\'operator\',\'data\',\'data2\',\'data3\']);">\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\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\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" data-ng-change="clearData(rule,[\'data2\',\'data3\']);getResults(rule.field.subField.api,rule.data,$index,0)">\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\n															<div class="col-md-2 left-margin" ng-if="rule.data && rule.field && rule.field.subField && rule.field.subField.propertyField==\'input\'">\n																<input type="text" ng-model="rule.data2" class="form-control"/>\n															</div>\n															<div class="col-md-2 left-margin" ng-if=" rule.data && rule.field && rule.field.subField && rule.field.subField.propertyField==\'number\'">\n																<input type="number" ng-model="rule.data2" class="form-control"/>\n															</div>\n															<ui-select ng-if="rule.data && rule.field && rule.field.subField && rule.field.subField.propertyField==\'select\'" data-ng-model="rule.data2" class="col-md-2 left-margin" theme="bootstrap" data-ng-change="clearData(rule,[\'data3\']);getResults(rule.field.subField.subField.api,rule.data,$index,1,rule.data2)">\n																<ui-select-match placeholder="">{{$select.selected.name | translate}}</ui-select-match>\n																<ui-select-choices repeat="property.value as property in (rule.field.subField.api ? choices[$index][0] : properties[rule.field.subField.value])| filter: $select.search">\n																	<div ng-bind-html="property.name | translate | highlight: $select.search"></div>\n																</ui-select-choices>\n															</ui-select>\n\n															<div class="col-md-2 left-margin" ng-if="rule.data && rule.data2 && rule.field && rule.field.subField && rule.field.subField.subField && rule.field.subField.subField.propertyField==\'input\'">\n																<input type="text" ng-model="rule.data3" class="form-control"/>\n															</div>\n															<div class="col-md-2 left-margin" ng-if="rule.data && rule.data2 && rule.field && rule.field.subField && rule.field.subField.subField && rule.field.subField.subField.propertyField==\'number\'">\n																<input type="number" ng-model="rule.data3" class="form-control"/>\n															</div>\n															<ui-select ng-if="rule.data && rule.data2 && rule.field && rule.field.subField && rule.field.subField.subField && rule.field.subField.subField.propertyField==\'select\'" data-ng-model="rule.data3" 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 (rule.field.subField.subField.api ? choices[$index][1] : properties[rule.field.subField.subField.value])| filter: $select.search">\n																	<div ng-bind-html="property.name | translate | highlight: $select.search"></div>\n																</ui-select-choices>\n															</ui-select>\n\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/main/template.reportBuilderView.html",'<div class="alert alert-warning alert-group">\n        <div class="form-inline" data-ng-class="{\'has-error\': forms.report.$submitted && !group.rules.length}">\n            <select ng-options="o.name as o.name for o in operators" ng-model="group.operator" class="form-control input-sm"></select>\n            <button style="margin-left: 5px" type="button" ng-click="addCondition()" class="btn btn-sm btn-success"><span class="glyphicon glyphicon-plus-sign"></span> {{\'APPLICATION_ADD_CONDITION\' | translate}}</button>\n            <button style="margin-left: 5px" type="button" ng-click="addGroup()" class="btn btn-sm btn-success"><span class="glyphicon glyphicon-plus-sign"></span> {{\'APPLICATION_ADD_GROUP\' | translate}}</button>\n            <button style="margin-left: 5px" type="button" ng-click="removeGroup()" class="btn btn-sm btn-danger"><span class="glyphicon glyphicon-minus-sign"></span> {{\'APPLICATION_REMOVE_GROUP\' | translate}}</button>\n        </div>\n        <div class="group-conditions">\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                        <report-builder group="rule.group" fields="fields" forms="forms"></report-builder>\n                    </div>\n                    <div ng-switch-default="ng-switch-default">\n                        <div class="row">\n                          <div class="col-md-2" data-ng-class="{\'has-error\': forms.report.$submitted && !rule.field}">\n                          <ui-select data-ng-model="rule.field" theme="bootstrap" dynamic-name="randomName()" required>\n                            <ui-select-match placeholder="">{{$select.selected.field | translate}}</ui-select-match>\n                            <ui-select-choices repeat="field.field as field in fields | filter: $select.search">\n                              <div ng-bind-html="field.field | highlight: $select.search"></div>\n                            </ui-select-choices>\n                          </ui-select>\n                          <span data-ng-show="forms.report.$submitted && !rule.field" class="help-block help-block-error">\n                            <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n                          </span>\n                        </div>\n                          <ui-select data-ng-model="rule.condition" theme="bootstrap" class="col-md-1" dynamic-name="randomName()">\n                            <ui-select-match placeholder="">{{$select.selected.name}}</ui-select-match>\n                            <ui-select-choices repeat="condition.name as condition in conditions | filter: $select.search">\n                              <div ng-bind-html="condition.name | highlight: $select.search"></div>\n                            </ui-select-choices>\n                          </ui-select>\n                          <div class="col-md-2 left-margin" data-ng-class="{\'has-error\': forms.report.$submitted && !rule.value}">\n                            <input type="text" ng-model="rule.value" class="form-control" dynamic-name="randomName()" required/>\n                            <span data-ng-show="forms.report.$submitted && !rule.value" class="help-block help-block-error">\n															<strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n														</span>\n                          </div>\n                            <button style="margin-left: 5px" ng-click="removeCondition($index)" class="btn btn-sm btn-danger" type="button"><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">\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" data-ng-init="initView()">\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" data-ng-repeat="group in groupedIntegration">\n      <div class="col-md-3" data-ng-repeat="integration in group">\n        <div class="our-integrations">\n          <h3> {{integration.name}} <small> {{integration.author}}</small></h3>\n          <img data-ng-src="{{integration.logo}}" alt="{{integration.name}}" class="img-responsive"/>\n          <div class="integration-info" data-ng-if="!integration.downloading">\n            <p>\n              {{integration.description}}\n            </p>\n            <div class="pull-right">\n	            <a data-ng-disabled="isProgressing" data-ng-if="!integration.active" data-ng-click="installIntegration(integration)" href="#" class="btn btn-xs green-meadow">Install <i class="fa fa-download"></i></a>\n							<a data-ng-disabled="isProgressing" data-ng-if="integration.active" data-ng-click="uninstallIntegration(integration)" href="#" class="btn btn-xs red-sunglo">Uninstall <i class="fa fa-trash"></i></a>\n	            <a href="https://wiki.xcallymotion.com/" class="btn btn-xs grey-cascade" target="_blank">More <i class="fa fa-link"></i></a>\n            </div>\n          </div>\n					<div class="integration-info" data-ng-if="integration.downloading">\n						<div>\n							<uib-progressbar class="progress-striped active" value="percentage" type="success"><i style="color:black;">{{status}}</i></uib-progressbar>\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" style="margin-top: -92px;"></div>\n'),a.put("app/salesforce/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="/salesforce/list">{{ \'APPLICATION_SALESFORCE\' | 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_SALESFORCE\' | 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="/salesforce/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\',\'password\',\'clientId\',\'clientSecret\',\'securityToken\'])" csv-header="[\'Name\', \'Username\', \'Remote Address\', \'Password\', \'Client Id\', \'Client Secret\', \'Security token\']" field-separator=";" filename="salesforce_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="displayedSalesforceAccounts" 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 displayedSalesforceAccounts" 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="/salesforce/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="displayedSalesforceAccounts.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/salesforce/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              <!-- 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							<!-- 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_USERNAME\' | 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 PASSWORD -->\n							<div class="form-group" data-ng-class="{\'has-error\': forms.formSetting.$submitted && forms.formSetting.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.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 CLIENT ID -->\n							<div class="form-group" data-ng-class="{\'has-error\': forms.formSetting.$submitted && forms.formSetting.clientId.$invalid}">\n								<label class="control-label">{{\'APPLICATION_CLIENT_ID\' | translate}} <span class="required" aria-required="true">*</span></label>\n								<input type="text" name="clientId" placeholder="{{\'APPLICATION_CLIENT_ID\' | translate}}" class="form-control" data-ng-model="account.clientId" required/>\n								<span data-ng-show="forms.formSetting.clientId.$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 CLIENT ID -->\n\n              <!-- START CLIENT SECRET -->\n							<div class="form-group" data-ng-class="{\'has-error\': forms.formSetting.$submitted && forms.formSetting.clientSecret.$invalid}">\n								<label class="control-label">{{\'APPLICATION_CLIENT_SECRET\' | translate}} <span class="required" aria-required="true">*</span></label>\n								<input type="text" name="clientSecret" placeholder="{{\'APPLICATION_CLIENT_SECRET\' | translate}}" class="form-control" data-ng-model="account.clientSecret" required/>\n								<span data-ng-show="forms.formSetting.clientSecret.$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 CLIENT SECRET -->\n\n              <!-- START SECURITY TOKEN -->\n							<div class="form-group" data-ng-class="{\'has-error\': forms.formSetting.$submitted && forms.formSetting.securityToken.$invalid}">\n								<label class="control-label">{{\'APPLICATION_SECURITY_TOKEN\' | translate}} <span class="required" aria-required="true">*</span></label>\n								<input type="text" name="securityToken" placeholder="{{\'APPLICATION_SECURITY_TOKEN\' | translate}}" class="form-control" data-ng-model="account.securityToken" required/>\n								<span data-ng-show="forms.formSetting.securityToken.$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 SECURITY 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/salesforce/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								<!-- 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/salesforce/view/view.configurationSettings.html",'<div class="row" data-ng-init="getConfiguration();getVariables();getFields();">\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}}: {{configurationName}}</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 ui-padding active" id="tab_1_1">\n            <div class="row">\n              <div class="col-md-11">\n                <span class="caption-subject">All following fields will be join by blank space:</span>\n              </div>\n              <div class="col-md-1 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 ng-scrollbars ng-scrollbars-config="config"> -->\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-8" 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="updateField(subjectItem)">\n	                </div>\n	              </div>\n	              <div class="col-md-8" 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="updateField(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-1">\n	                <div class="form-group">\n	                  <button class="btn btn-icon-only red" data-ng-click="removeItem(subjectItem)"><i class="fa fa-times"></i></button>\n	                </div>\n	              </div>\n	            </div>\n						<!-- </div> -->\n					</div>\n					<!-- END SUBJECT TAB -->\n          <!-- DESCRIPTION TAB -->\n					<div class="tab-pane ui-padding" id="tab_1_2">\n						<div class="row">\n              <div class="col-md-11">\n                <span class="caption-subject">All following fields will be join by new line:</span>\n              </div>\n              <div class="col-md-1 pull-rigth">\n                <button class="btn btn-icon-only green" data-ng-click="addItemDescription()"><i class="fa fa-plus"></i></button>\n              </div>\n            </div>\n            <hr>\n						<!-- <div ng-scrollbars ng-scrollbars-config="config"> -->\n							<div class="row" data-ng-repeat="descriptionItem in descriptionConfig">\n								<!-- <pre>\n									{{descriptionItem|json}}\n								</pre> -->\n	              <div class="col-md-2">\n	                <ui-select ng-model="descriptionItem.type" theme="bootstrap" ng-disabled="disabled" data-ng-change="changeDescType(descriptionItem)">\n	                  <ui-select-match placeholder="{{\'APPLICATION_SEARCH\' | translate}}">{{$select.selected | ucfirst}}</ui-select-match>\n	                  <ui-select-choices repeat="item in descFieldType | filter: $select.search">\n	                    <div ng-bind-html="item | highlight: $select.search | ucfirst"></div>\n	                  </ui-select-choices>\n	                </ui-select>\n	              </div>\n	              <div class="col-md-9" data-ng-if="descriptionItem.type==\'string\'">\n	                <div class="form-group">\n	                  <input type="text" class="form-control" data-ng-model="descriptionItem.content" data-ng-change="updateField(descriptionItem)">\n	                </div>\n	              </div>\n								<div class="col-md-3" data-ng-if="descriptionItem.type==\'key_value\'">\n									<input type="text" class="form-control" placeholder="Key" data-ng-model="descriptionItem.key" data-ng-change="updateField(descriptionItem)">\n								</div>\n								<div class="col-md-3" data-ng-if="descriptionItem.type==\'key_value\'">\n									<ui-select ng-model="descriptionItem.keyType" theme="bootstrap" ng-disabled="disabled" data-ng-change="changeDescType(descriptionItem)">\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-3" data-ng-if="descriptionItem.type==\'key_value\' && descriptionItem.keyType==\'string\'">\n									<input type="text" class="form-control" placeholder="Value" data-ng-model="descriptionItem.keyContent" data-ng-change="updateField(descriptionItem)">\n								</div>\n	              <div class="col-md-3" data-ng-if="descriptionItem.type==\'key_value\' && descriptionItem.keyType==\'variable\'">\n	                <div class="form-group">\n	                  <ui-select theme="bootstrap" ng-disabled="disabled" data-ng-model="descriptionItem.VariableId" data-ng-change="updateField(descriptionItem)">\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-1">\n	                <div class="form-group">\n	                  <button class="btn btn-icon-only red" data-ng-click="removeItem(descriptionItem)"><i class="fa fa-times"></i></button>\n	                </div>\n	              </div>\n	            </div>\n						<!-- </div> -->\n					</div>\n					<!-- END DESCRIPTION TAB -->\n          <!-- FIELDS TAB -->\n					<div class="tab-pane ui-padding" id="tab_1_3">\n						<div class="row">\n              <div class="col-md-11">\n                <span class="caption-subject">Add how to fill the fields present in your account:</span>\n              </div>\n              <div class="col-md-1 pull-rigth">\n                <button class="btn btn-icon-only green" data-ng-click="addItemField()"><i class="fa fa-plus"></i></button>\n              </div>\n            </div>\n            <hr>\n						<!-- <div ng-scrollbars ng-scrollbars-config="config"> -->\n	            <div class="row" data-ng-repeat="fieldItem in fieldConfig">\n	              <div class="col-md-3">\n	                <ui-select ng-model="fieldItem.idField" theme="bootstrap" ng-disabled="disabled" data-ng-change="changeFieldType(fieldItem)">\n	                  <ui-select-match placeholder="{{\'APPLICATION_SEARCH\' | translate}}">{{$select.selected.label}}</ui-select-match>\n	                  <ui-select-choices repeat="item.name as item in accountFields | filter: $select.search">\n	                    <div ng-bind-html="item.label | highlight: $select.search"></div>\n	                  </ui-select-choices>\n	                </ui-select>\n	              </div>\n	              <div class="col-md-8" data-ng-if="getSystemFieldOptions(fieldItem.idField)">\n	                <div class="form-group">\n										<ui-select ng-model="fieldItem.content" theme="bootstrap" ng-disabled="disabled" data-ng-change="updateField(fieldItem)">\n		                  <ui-select-match placeholder="{{\'APPLICATION_SEARCH\' | translate}}">{{$select.selected.label}}</ui-select-match>\n		                  <ui-select-choices repeat="item.value as item in getSystemFieldOptions(fieldItem.idField) | filter: $select.search">\n		                    <div ng-bind-html="item.value | highlight: $select.search"></div>\n		                  </ui-select-choices>\n		                </ui-select>\n	                </div>\n	              </div>\n								<div class="col-md-4" data-ng-if="!getSystemFieldOptions(fieldItem.idField)">\n									<div class="form-group">\n										<ui-select ng-model="fieldItem.type" theme="bootstrap" ng-disabled="disabled" data-ng-change="changeType(fieldItem)">\n		                  <ui-select-match placeholder="{{\'APPLICATION_SEARCH\' | translate}}">{{$select.selected | ucfirst}}</ui-select-match>\n		                  <ui-select-choices repeat="item in fieldType | filter: $select.search">\n		                    <div ng-bind-html="item | highlight: $select.search | ucfirst"></div>\n		                  </ui-select-choices>\n		                </ui-select>\n									</div>\n								</div>\n								<div class="col-md-4" data-ng-if="!getSystemFieldOptions(fieldItem.idField) && fieldItem.type === \'string\'">\n	                <div class="form-group">\n										<input type="text" class="form-control" data-ng-model="fieldItem.content" data-ng-change="updateField(fieldItem)">\n	                </div>\n	              </div>\n								<div class="col-md-4" data-ng-if="!getSystemFieldOptions(fieldItem.idField) && fieldItem.type === \'variable\'">\n	                <div class="form-group">\n										<ui-select theme="bootstrap" ng-disabled="disabled" data-ng-model="fieldItem.VariableId" data-ng-change="updateField(fieldItem)">\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-1">\n	                <div class="form-group">\n	                  <button class="btn btn-icon-only red" data-ng-click="removeItem(fieldItem)"><i class="fa fa-times"></i></button>\n	                </div>\n	              </div>\n	            </div>\n						<!-- </div> -->\n					</div>\n					<!-- END FIELDS TAB -->\n				</div>\n			</div>\n		</div>\n	</div>\n</div>\n'),a.put("app/salesforce/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="/salesforce/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="/salesforce/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/salesforce/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="/salesforce/list">{{ \'APPLICATION_SALESFORCE\' | 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/salesforce.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.salesforce.view.account\')}">\n							<a ng-href="/salesforce/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.salesforce.view.configurations\') || $state.is(\'main.salesforce.view.configuration\')}">\n							<a ng-href="/salesforce/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/salesforce/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="/salesforce/list">{{ \'APPLICATION_SALESFORCE\' | 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_USERNAME\' | translate}}" class="form-control" data-ng-model="item.username" required ng-remote-validate="/api/salesforce/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\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/>\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 PASSWORD -->\n							<div class="form-group" data-ng-class="{\'has-error\': forms.formSetting.$submitted && forms.formSetting.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.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 CLIENT ID -->\n							<div class="form-group" data-ng-class="{\'has-error\': forms.formSetting.$submitted && forms.formSetting.clientId.$invalid}">\n								<label class="control-label">{{\'APPLICATION_CLIENT_ID\' | translate}} <span class="required" aria-required="true">*</span></label>\n								<input type="text" name="clientId" placeholder="{{\'APPLICATION_CLIENT_ID\' | translate}}" class="form-control" data-ng-model="item.clientId" required/>\n								<span data-ng-show="forms.formSetting.clientId.$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 CLIENT ID -->\n\n              <!-- START CLIENT SECRET -->\n							<div class="form-group" data-ng-class="{\'has-error\': forms.formSetting.$submitted && forms.formSetting.clientSecret.$invalid}">\n								<label class="control-label">{{\'APPLICATION_CLIENT_SECRET\' | translate}} <span class="required" aria-required="true">*</span></label>\n								<input type="text" name="clientSecret" placeholder="{{\'APPLICATION_CLIENT_SECRET\' | translate}}" class="form-control" data-ng-model="item.clientSecret" required/>\n								<span data-ng-show="forms.formSetting.clientSecret.$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 CLIENT SECRET -->\n\n              <!-- START SECURITY TOKEN -->\n							<div class="form-group" data-ng-class="{\'has-error\': forms.formSetting.$submitted && forms.formSetting.securityToken.$invalid}">\n								<label class="control-label">{{\'APPLICATION_SECURITY_TOKEN\' | translate}} <span class="required" aria-required="true">*</span></label>\n								<input type="text" name="securityToken" placeholder="{{\'APPLICATION_SECURITY_TOKEN\' | translate}}" class="form-control" data-ng-model="item.securityToken" required/>\n								<span data-ng-show="forms.formSetting.securityToken.$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 SECURITY 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("app/setting/license/view/view.html",'<!-- BEGIN PAGE CONTENT-->\n<div\n 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="#">{{ \'APPLICATION_SETTINGS\' | translate }}</a>\n				</li>\n			</ul>\n		</div>\n\n		<!-- BEGIN PROFILE CONTENT -->\n		<div class="profile-content">\n			<div class="row">\n				<div class="col-md-6">\n					<div class="pricing hover-effect">\n						<div class="pricing-head" data-ng-switch="license.months">\n							<h3 ng-switch-when="1">{{\'APPLICATION_MONTH_TO_MONTH\' | translate}}<span>Official xCALLY Motion License </span></h3>\n							<h3 ng-switch-when="12">{{\'APPLICATION_YEARLY\' | translate}}<span>Official xCALLY Motion License </span></h3>\n							<h3 ng-switch-when="36">{{\'APPLICATION_PERPETUAL\' | translate}}<span>Official xCALLY Motion License </span></h3>\n							<h3 ng-switch-default>{{\'APPLICATION_UNKNOWN\' | translate}}<span>Official xCALLY Motion License </span></h3>\n							<h4><i>{{license.expiration | date:\'medium\'}}</i>\n							<span>\n							Expiration Date </span>\n							</h4>\n						</div>\n						<ul class="pricing-content list-unstyled">\n							<li class="row">\n								<div class="col-md-9">\n									<i class="icon-eye"></i> {{\'APPLICATION_USERS\' | translate}}:\n								</div>\n								<div class="col-md-3 text-center">\n									{{(license.users || license.users >= 0) ? license.users : \'unknown\'}}\n								</div>\n							</li>\n							<li class="row">\n								<div class="col-md-9">\n									<i class="icon-people"></i> {{\'APPLICATION_AGENTS\' | translate}} ({{\'APPLICATION_CONCURRENTS\' | translate}}):\n								</div>\n								<div class="col-md-3 text-center">\n									{{(license.agents || license.agents >= 0)  ? license.agents : \'unknown\'}}\n								</div>\n							</li>\n							<li class="row">\n								<div class="col-md-9">\n									<i class="icon-phone"></i> {{\'APPLICATION_TELEPHONES\' | translate}}:\n								</div>\n								<div class="col-md-3 text-center">\n									{{(license.telephones || license.telephones >= 0) ? license.telephones : \'unknown\'}}\n								</div>\n							</li>\n							<li class="row">\n								<div class="col-md-9">\n									<i class="icon-bubble"></i> {{\'APPLICATION_CHAT\' | translate}}:\n								</div>\n								<div class="col-md-3 text-center">\n									<span class="label label-sm" data-ng-class="license.chat ? \'label-success\' : \'label-danger\'">{{license.chat ? \'APPLICATION_ENABLED\' : \'APPLICATION_DISABLED\' | translate}}</span>\n								</div>\n							</li>\n							<li class="row">\n								<div class="col-md-9">\n									<i class="icon-envelope"></i> {{\'APPLICATION_MAIL\' | translate}}:\n								</div>\n								<div class="col-md-3 text-center">\n								 <span class="label label-sm" data-ng-class="license.mail ? \'label-success\' : \'label-danger\'">{{license.mail ? \'APPLICATION_ENABLED\' : \'APPLICATION_DISABLED\' | translate}}</span>\n								</div>\n							</li>\n							<li class="row">\n								<div class="col-md-9">\n									<i class="icon-paper-plane"></i> {{\'APPLICATION_FAX\' | translate}}:\n								</div>\n								<div class="col-md-3 text-center">\n									 <span class="label label-sm" data-ng-class="license.fax ? \'label-success\' : \'label-danger\'">{{license.fax ? \'APPLICATION_ENABLED\' : \'APPLICATION_DISABLED\' | translate}}</span>\n								</div>\n							</li>\n						</ul>\n						<div class="pricing-footer">\n							<p>\n								 {{license.description}}\n							</p>\n							<a href="#" class="btn yellow-crusta">\n							{{\'APPLICATION_PRICES\' | translate}} <i class="m-icon-swapright m-icon-white"></i>\n							</a>\n						</div>\n					</div>\n				</div>\n				<div class="col-md-6">\n					<div class="portlet light bordered">\n						<div class="portlet-title">\n							<div class="caption font-green-sharp">\n								<i class="icon-info font-green-sharp"></i>\n								<span class="caption-subject">FORM {{ \'APPLICATION_LICENSE\' | translate }}</a> </span>\n							</div>\n						</div>\n						<div class="portlet-body">\n							<form name="form" novalidate data-ng-submit="submitRequest()">\n\n								<!-- START USERS -->\n								<div class="form-group" data-ng-class="{\'has-error\': (form.users.$touched || form.$submitted) && form.users.$invalid}">\n									<label class="control-label">{{\'APPLICATION_USERS\' | translate}}</label>\n									<div class="input-icon">\n										<i class="icon-eye"></i>\n										<input type="number" name="users" placeholder="{{\'APPLICATION_USERS\' | translate}}" class="form-control" data-ng-model="item.users" min="0" required>\n									</div>\n									<span data-ng-show="(form.users.$touched || forms.$submitted) && form.users.$error.required" class="help-block help-block-error">\n										<strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n									</span>\n								</div>\n								<!-- END USERS -->\n\n								<!-- START AGENTS -->\n								<div class="form-group" data-ng-class="{\'has-error\': (form.agents.$touched || form.$submitted) && form.agents.$invalid}">\n									<label class="control-label">{{\'APPLICATION_AGENTS\' | translate}} ({{\'APPLICATION_CONCURRENTS\' | translate}})</label>\n									<div class="input-icon">\n										<i class="icon-people"></i>\n										<input type="number" name="agents" placeholder="{{\'APPLICATION_AGENTS\' | translate}} ({{\'APPLICATION_CONCURRENTS\' | translate}})" class="form-control" data-ng-model="item.agents" min="0" required>\n									</div>\n									<span data-ng-show="(form.users.$touched || forms.$submitted) && form.users.$error.required" class="help-block help-block-error">\n										<strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n									</span>\n								</div>\n								<!-- END AGENTS -->\n\n								<!-- START TELEPHONES -->\n								<div class="form-group" data-ng-class="{\'has-error\': (form.telephones.$touched || form.$submitted) && form.telephones.$invalid}">\n									<label class="control-label">{{\'APPLICATION_TELEPHONES\' | translate}}</label>\n									<div class="input-icon">\n										<i class="icon-phone"></i>\n										<input type="number" name="telephones" placeholder="{{\'APPLICATION_TELEPHONES\' | translate}}" class="form-control" data-ng-model="item.telephones" min="0" required>\n									</div>\n									<span data-ng-show="(form.telephones.$touched || forms.$submitted) && form.telephones.$error.required" class="help-block help-block-error">\n										<strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n									</span>\n								</div>\n								<!-- END TELEPHONES -->\n\n								<!-- START CHAT -->\n								<div class="form-group" data-ng-class="{\'has-error\': (form.chat.$touched || form.$submitted) && form.chat.$invalid}">\n									<label class="control-label">{{\'APPLICATION_CHAT\' | translate}}</label>\n									<div class="input-group input-icon">\n										<i class="icon-bubble"></i>\n										<input type="text" placeholder="{{\'APPLICATION_CHAT\' | translate}}" class="form-control" readonly>\n										<span class="input-group-addon">\n											<input type="checkbox" name="chat" data-ng-model="item.chat" required>\n										</span>\n									</div>\n									<span data-ng-show="(form.chat.$touched || forms.$submitted) && form.chat.$error.required" class="help-block help-block-error">\n										<strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n									</span>\n								</div>\n								<!-- END CHAT -->\n\n								<!-- START MAIL -->\n								<div class="form-group" data-ng-class="{\'has-error\': (form.mail.$touched || form.$submitted) && form.mail.$invalid}">\n									<label class="control-label">{{\'APPLICATION_MAIL\' | translate}}</label>\n									<div class="input-group input-icon">\n										<i class="icon-envelope"></i>\n										<input type="text" placeholder="{{\'APPLICATION_MAIL\' | translate}}" class="form-control" readonly>\n										<span class="input-group-addon">\n											<input type="checkbox" name="mail" data-ng-model="item.mail" required>\n										</span>\n									</div>\n									<span data-ng-show="(form.mail.$touched || forms.$submitted) && form.mail.$error.required" class="help-block help-block-error">\n										<strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n									</span>\n								</div>\n								<!-- END MAIL -->\n\n								<!-- START FAX -->\n								<div class="form-group" data-ng-class="{\'has-error\': (form.fax.$touched || form.$submitted) && form.fax.$invalid}">\n									<label class="control-label">{{\'APPLICATION_FAX\' | translate}}</label>\n									<div class="input-group input-icon">\n										<i class="icon-paper-plane"></i>\n										<input type="text" placeholder="{{\'APPLICATION_FAX\' | translate}}" class="form-control" readonly>\n										<span class="input-group-addon">\n											<input type="checkbox" name="fax" data-ng-model="item.fax" required>\n										</span>\n									</div>\n									<span data-ng-show="(form.fax.$touched || forms.$submitted) && form.fax.$error.required" class="help-block help-block-error">\n										<strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n									</span>\n								</div>\n								<!-- END FAX -->\n\n								<input class="btn green-haze" type="submit" value="{{\'APPLICATION_SUBMIT\' | translate}} {{\'APPLICATION_REQUEST\' | translate}}"/>\n							</form>\n						</div>\n					</div>\n				</div>\n			</div>\n		</div>\n		<!-- END PROFILE CONTENT -->\n	</div>\n</div>\n<!-- END PAGE CONTENT-->\n'),a.put("app/setting/smtp/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-settings"></i>\n					<a href="#">{{ \'APPLICATION_SETTINGS\' | translate }}</a>\n				</li>\n			</ul>\n		</div>\n\n		<!-- BEGIN PROFILE CONTENT -->\n		<div class="profile-content">\n			<!-- START SMTP TAB -->\n			<form name="form" data-ng-submit="form.$valid && updateItem()" novalidate>\n\n				<!-- START HOST -->\n				<div class="form-group" data-ng-class="{\'has-error\': (form.host.$touched || form.$submitted) && form.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 data-ng-show="(form.host.$touched || form.$submitted) && form.host.$invalid && form.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\': (form.username.$touched || form.$submitted) && form.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="item.username" required/>\n					<span data-ng-show="(form.username.$touched || form.$submitted) && form.username.$invalid && form.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\': (form.password.$touched || form.$submitted) && form.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="(form.password.$touched || form.$submitted) && form.password.$invalid && form.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\': (form.port.$touched || form.$submitted) && form.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="item.port" required/>\n					<span data-ng-show="(form.form.$touched || form.$submitted) && form.port.$invalid && form.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="(form.form.$touched || form.$submitted) && form.port.$invalid && form.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 row">\n					<label class="col-md-3">\n						SSL\n					</label>\n					<label class="col-md-9">\n							<input type="checkbox" data-ng-model="item.ssl">\n					</label>\n				</div>\n				<!-- END SSL -->\n				<input class="btn green-haze" type="submit" value="{{\'APPLICATION_UPDATE\' | translate}}"/>\n				<input class="btn blue-madison" type="button" value="Test" data-ng-click="test()"/>\n			</form>\n			<!-- END SMTP TAB -->\n		</div>\n		<!-- END PROFILE CONTENT -->\n	</div>\n</div>\n<!-- END PAGE CONTENT-->\n'),a.put("app/setting/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-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="Templates.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="/setting/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="getTemplates([\'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="displayedTemplates" 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>{{ \'APPLICATION_ACTIONS\' | translate }}</th>\n						  </tr>\n					  </thead>\n					  <tbody>\n					    <tr data-ng-repeat="template in displayedTemplates">\n								<td style="text-align: center; vertical-align: middle"><input type="checkbox" checklist-model="Templates.checked" checklist-value="template.id"></td>\n					      <td>{{template.name}}</td>\n								<td>{{template.description}}</td>\n					      <td>\n					        <a class="btn default btn-xs blue-stripe" data-ng-href="/setting/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="displayedTemplates.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						  </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/setting/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-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>\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.setting.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/setting/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\n				<form name="form" data-ng-submit="form.$valid && updateItem()" class="form-horizontal" novalidate>\n					<!-- START NAME -->\n					<div class="form-group" data-ng-class="{\'has-error\': form.name.$invalid && form.$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}}..." data-ng-model="item.name" required>\n									<span data-ng-show="form.name.$invalid && form.$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\': form.description.$invalid && form.$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="description" class="form-control todo-taskbody-taskdesc" placeholder="{{\'APPLICATION_DESCRIPTION\' | translate}}..." rows="8" data-ng-model="item.description">\n									<span data-ng-show="form.description.$invalid && form.$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					<hr>\n\n					<!-- START SUBJECT -->\n					<div class="form-group row" data-ng-class="{\'has-error\': form.subject.$invalid && form.$submitted}">\n						<div class="col-md-12">\n							<div class="row">\n								<div class="col-md-4">\n									<label class="control-label pull-right">{{\'APPLICATION_SUBJECT\' | translate}}:</label>\n								</div>\n								<div class="col-md-8">\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="form.subject.$invalid && form.$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 row" data-ng-class="{\'has-error\': form.text.$invalid && form.$submitted}">\n\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-pencil"></i>{{\'APPLICATION_VARIABLES\' | translate}}\n									</div>\n								</div>\n								<div class="portlet-body">\n									<uib-accordion>\n								    <uib-accordion-group heading="{{group.title | translate}}" data-ng-repeat="group in groups">\n								      {{group.content | translate}}\n											<ol>\n												<li data-ng-repeat="variable in group.variables">\n													 {{variable}}\n												</li>\n											</ol>\n								    </uib-accordion-group>\n								  </uib-accordion>\n								</div>\n							</div>\n						</div>\n						<div class="col-md-8">\n							<div class="inbox-editor inbox-wysihtml5" text-angular data-ng-model="item.html" name="html"></div>\n								<span data-ng-show="form.text.$invalid && form.$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/setting/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\n      <li>\n				<i class="icon-settings"></i>\n				<a href="#">{{ \'APPLICATION_SETTINGS\' | 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="initWizard()">\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 }} FORM</a> </span>\n  		</div>\n  	</div>\n  	<div class="portlet-body">\n			<form name="form" data-ng-submit="form.$valid && createItem()" class="form-horizontal" novalidate>\n				<!-- START HEAD -->\n				<div class="form">\n					<!-- START NAME -->\n					<div class="form-group" data-ng-class="{\'has-error\': form.name.$invalid && form.$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}}..." data-ng-model="item.name" required>\n									<span data-ng-show="form.name.$invalid && form.$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\': form.description.$invalid && form.$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="description" class="form-control todo-taskbody-taskdesc" placeholder="{{\'APPLICATION_DESCRIPTION\' | translate}}..." rows="8" data-ng-model="item.description">\n									<span data-ng-show="form.description.$invalid && form.$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 SUBJECT -->\n					<div class="form-group" data-ng-class="{\'has-error\': form.subject.$invalid && form.$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}}:</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="form.subject.$invalid && form.$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 row" data-ng-class="{\'has-error\': form.text.$invalid && form.$submitted}">\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-pencil"></i>{{\'APPLICATION_VARIABLES\' | translate}}\n									</div>\n								</div>\n								<div class="portlet-body">\n									<uib-accordion>\n								    <uib-accordion-group heading="{{group.title | translate}}" data-ng-repeat="group in groups">\n								      {{group.content | translate}}\n											<ol>\n												<li data-ng-repeat="variable in group.variables">\n													 {{variable}}\n												</li>\n											</ol>\n								    </uib-accordion-group>\n								  </uib-accordion>\n								</div>\n							</div>\n						</div>\n						<div class="col-md-8">\n							<div class="inbox-editor inbox-wysihtml5" text-angular data-ng-model="item.html" name="html"></div>\n								<span data-ng-show="form.text.$invalid && form.$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				</div>\n				<input class="btn green-haze" type="submit" value="{{\'APPLICATION_CONTINUE\' | translate}}" data-ng-click="goNext()"/>\n			</form>\n  	</div>\n  </div>\n  <!-- END PORTLET-->\n</div>\n'),a.put("app/setting/update/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-settings"></i>\n					<a href="#">{{ \'APPLICATION_SETTINGS\' | 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-cloud-download font-green-sharp"></i>\n					<span class="caption-subject">{{ \'APPLICATION_UPDATES\' | translate }}</a> </span>\n				</div>\n				<div class="actions">\n					<a class="btn btn-default" href="#" data-ng-click="pull()">\n						<i class="icon-cloud-download"></i> {{ \'APPLICATION_UPDATE\' | translate }}\n					</a>\n				</div>\n			</div>\n			<div class="portlet-body" data-ng-init="initList()">\n				<!-- BEGIN TABLE -->\n					<table st-table="displayedUpdates" st-safe-src="updates" 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-12">\n												<ui-select class="input-xsmall" ng-model="conf.updatesByPage" theme="bootstrap" ng-disabled="disabled">\n													<ui-select-match placeholder="{{\'APPLICATION_SEARCH\' | translate}}">{{$select.selected.name}}</ui-select-match>\n													<ui-select-choices repeat="updateByPage in updatesByPage | filter: $select.search">\n														<div ng-bind-html="updateByPage.name | highlight: $select.search"></div>\n													</ui-select-choices>\n												</ui-select>\n											</div>\n										</div>\n									</th>\n								</tr>\n								<tr>\n									<th st-sort="message">{{ \'APPLICATION_MESSAGE\' | translate }}</th>\n									<th st-sort="version">{{ \'APPLICATION_VERSION\' | translate }}</th>\n									<th>{{ \'APPLICATION_DATE\' | translate }}</th>\n									<!-- <th class="small-cells"></th> -->\n							  </tr>\n						  </thead>\n							<tbody>\n						    <tr data-ng-repeat="update in displayedUpdates">\n									<td>\n										{{update.message}}\n									</td>\n									<td>\n										{{update.version}}\n									</td>\n									<td>\n										{{update.date}}\n									</td>\n						    </tr>\n								<tr data-ng-hide="displayedUpdates.length">\n									<td colspan="9" style="text-align:center;">\n										<i>{{\'MESSAGE_NO_AVAILABLE_UPDATES\' | translate}}</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="message" placeholder="{{ \'APPLICATION_MESSAGE\' | 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.updatesByPage.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/setting/update/list/list.pull.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("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/sugarcrm/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="/sugarcrm/list">{{ \'APPLICATION_SUGARCRM\' | 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_SUGARCRM\' | 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="/sugarcrm/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\',\'password\'])" csv-header="[\'Name\', \'Username\', \'Remote Address\', \'Password\']" field-separator=";" filename="sugarcrm_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="displayedSugarcrmAccounts" 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 displayedSugarcrmAccounts" 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="/sugarcrm/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="displayedSugarcrmAccounts.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/sugarcrm/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              <!-- 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							<!-- 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_USERNAME\' | 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 PASSWORD -->\n							<div class="form-group" data-ng-class="{\'has-error\': forms.formSetting.$submitted && forms.formSetting.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.password" required/>\n								<span data-ng-show="forms.formSetting.apiKey.$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 API KEY -->\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/sugarcrm/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								<!-- 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/sugarcrm/view/view.configurationSettings.html",'<div class="row" data-ng-init="getConfiguration();getVariables();getFields();">\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}}: {{configurationName}}</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 ui-padding active" id="tab_1_1">\n            <div class="row">\n              <div class="col-md-11">\n                <span class="caption-subject">All following fields will be join by blank space:</span>\n              </div>\n              <div class="col-md-1 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 ng-scrollbars ng-scrollbars-config="config"> -->\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-8" 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="updateField(subjectItem)">\n	                </div>\n	              </div>\n	              <div class="col-md-8" 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="updateField(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-1">\n	                <div class="form-group">\n	                  <button class="btn btn-icon-only red" data-ng-click="removeItem(subjectItem)"><i class="fa fa-times"></i></button>\n	                </div>\n	              </div>\n	            </div>\n						<!-- </div> -->\n					</div>\n					<!-- END SUBJECT TAB -->\n          <!-- DESCRIPTION TAB -->\n					<div class="tab-pane ui-padding" id="tab_1_2">\n						<div class="row">\n              <div class="col-md-11">\n                <span class="caption-subject">All following fields will be join by new line:</span>\n              </div>\n              <div class="col-md-1 pull-rigth">\n                <button class="btn btn-icon-only green" data-ng-click="addItemDescription()"><i class="fa fa-plus"></i></button>\n              </div>\n            </div>\n            <hr>\n						<!-- <div ng-scrollbars ng-scrollbars-config="config"> -->\n							<div class="row" data-ng-repeat="descriptionItem in descriptionConfig">\n								<!-- <pre>\n									{{descriptionItem|json}}\n								</pre> -->\n	              <div class="col-md-2">\n	                <ui-select ng-model="descriptionItem.type" theme="bootstrap" ng-disabled="disabled" data-ng-change="changeDescType(descriptionItem)">\n	                  <ui-select-match placeholder="{{\'APPLICATION_SEARCH\' | translate}}">{{$select.selected | ucfirst}}</ui-select-match>\n	                  <ui-select-choices repeat="item in descFieldType | filter: $select.search">\n	                    <div ng-bind-html="item | highlight: $select.search | ucfirst"></div>\n	                  </ui-select-choices>\n	                </ui-select>\n	              </div>\n	              <div class="col-md-9" data-ng-if="descriptionItem.type==\'string\'">\n	                <div class="form-group">\n	                  <input type="text" class="form-control" data-ng-model="descriptionItem.content" data-ng-change="updateField(descriptionItem)">\n	                </div>\n	              </div>\n								<div class="col-md-3" data-ng-if="descriptionItem.type==\'key_value\'">\n									<input type="text" class="form-control" placeholder="Key" data-ng-model="descriptionItem.key" data-ng-change="updateField(descriptionItem)">\n								</div>\n								<div class="col-md-3" data-ng-if="descriptionItem.type==\'key_value\'">\n									<ui-select ng-model="descriptionItem.keyType" theme="bootstrap" ng-disabled="disabled" data-ng-change="changeDescType(descriptionItem)">\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-3" data-ng-if="descriptionItem.type==\'key_value\' && descriptionItem.keyType==\'string\'">\n									<input type="text" class="form-control" placeholder="Value" data-ng-model="descriptionItem.keyContent" data-ng-change="updateField(descriptionItem)">\n								</div>\n	              <div class="col-md-3" data-ng-if="descriptionItem.type==\'key_value\' && descriptionItem.keyType==\'variable\'">\n	                <div class="form-group">\n	                  <ui-select theme="bootstrap" ng-disabled="disabled" data-ng-model="descriptionItem.VariableId" data-ng-change="updateField(descriptionItem)">\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-1">\n	                <div class="form-group">\n	                  <button class="btn btn-icon-only red" data-ng-click="removeItem(descriptionItem)"><i class="fa fa-times"></i></button>\n	                </div>\n	              </div>\n	            </div>\n						<!-- </div> -->\n					</div>\n					<!-- END DESCRIPTION TAB -->\n          <!-- FIELDS TAB -->\n					<div class="tab-pane ui-padding" id="tab_1_3">\n						<div class="row">\n              <div class="col-md-11">\n                <span class="caption-subject">Add how to fill the fields present in your account:</span>\n              </div>\n              <div class="col-md-1 pull-rigth">\n                <button class="btn btn-icon-only green" data-ng-click="addItemField()"><i class="fa fa-plus"></i></button>\n              </div>\n            </div>\n            <hr>\n						<!-- <div ng-scrollbars ng-scrollbars-config="config"> -->\n	            <div class="row" data-ng-repeat="fieldItem in fieldConfig">\n	              <div class="col-md-3">\n	                <ui-select ng-model="fieldItem.idField" theme="bootstrap" ng-disabled="disabled" data-ng-change="changeFieldType(fieldItem)">\n	                  <ui-select-match placeholder="{{\'APPLICATION_SEARCH\' | translate}}">{{$select.selected.label}}</ui-select-match>\n	                  <ui-select-choices repeat="item.name as item in accountFields | filter: $select.search">\n	                    <div ng-bind-html="item.label | highlight: $select.search"></div>\n	                  </ui-select-choices>\n	                </ui-select>\n	              </div>\n	              <div class="col-md-8" data-ng-if="getSystemFieldOptions(fieldItem.idField)">\n	                <div class="form-group">\n										<ui-select ng-model="fieldItem.content" theme="bootstrap" ng-disabled="disabled" data-ng-change="updateField(fieldItem)">\n		                  <ui-select-match placeholder="{{\'APPLICATION_SEARCH\' | translate}}">{{$select.selected.name}}</ui-select-match>\n		                  <ui-select-choices repeat="item.value as item in getSystemFieldOptions(fieldItem.idField) | filter: $select.search">\n		                    <div ng-bind-html="item.name | highlight: $select.search"></div>\n		                  </ui-select-choices>\n		                </ui-select>\n	                </div>\n	              </div>\n								<div class="col-md-4" data-ng-if="!getSystemFieldOptions(fieldItem.idField)">\n									<div class="form-group">\n										<ui-select ng-model="fieldItem.type" theme="bootstrap" ng-disabled="disabled" data-ng-change="changeType(fieldItem)">\n		                  <ui-select-match placeholder="{{\'APPLICATION_SEARCH\' | translate}}">{{$select.selected | ucfirst}}</ui-select-match>\n		                  <ui-select-choices repeat="item in fieldType | filter: $select.search">\n		                    <div ng-bind-html="item | highlight: $select.search | ucfirst"></div>\n		                  </ui-select-choices>\n		                </ui-select>\n									</div>\n								</div>\n								<div class="col-md-4" data-ng-if="!getSystemFieldOptions(fieldItem.idField) && fieldItem.type === \'string\'">\n	                <div class="form-group">\n										<input type="text" class="form-control" data-ng-model="fieldItem.content" data-ng-change="updateField(fieldItem)">\n	                </div>\n	              </div>\n								<div class="col-md-4" data-ng-if="!getSystemFieldOptions(fieldItem.idField) && fieldItem.type === \'variable\'">\n	                <div class="form-group">\n										<ui-select theme="bootstrap" ng-disabled="disabled" data-ng-model="fieldItem.VariableId" data-ng-change="updateField(fieldItem)">\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-1">\n	                <div class="form-group">\n	                  <button class="btn btn-icon-only red" data-ng-click="removeItem(fieldItem)"><i class="fa fa-times"></i></button>\n	                </div>\n	              </div>\n	            </div>\n						<!-- </div> -->\n					</div>\n					<!-- END FIELDS TAB -->\n				</div>\n			</div>\n		</div>\n	</div>\n</div>\n'),
-a.put("app/sugarcrm/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="/sugarcrm/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="/sugarcrm/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/sugarcrm/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="/sugarcrm/list">{{ \'APPLICATION_SUGARCRM\' | 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/sugarcrm.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.sugarcrm.view.account\')}">\n							<a ng-href="/sugarcrm/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.sugarcrm.view.configurations\') || $state.is(\'main.sugarcrm.view.configuration\')}">\n							<a ng-href="/sugarcrm/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/sugarcrm/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="/sugarcrm/list">{{ \'APPLICATION_SUGARCRM\' | 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_USERNAME\' | translate}}" class="form-control" data-ng-model="item.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\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/sugarcrm/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 PASSWORD -->\n							<div class="form-group" data-ng-class="{\'has-error\': forms.formSetting.$submitted && forms.formSetting.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.formSetting.apiKey.$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							<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/tag/list/create.modal.html",'<div class="modal-header">\n  <h3 class="modal-title">{{ \'APPLICATION_NEW_TAG\' | translate }}</h3>\n</div>\n<div class="modal-body">\n  <form name="forms.tag" novalidate>\n\n    <!-- START NAME -->\n    <div class="form-group" data-ng-class="{\'has-error\': (forms.tag.name.$touched || forms.tag.$submitted) && forms.tag.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.tag.name.$touched || forms.tag.$submitted) && forms.tag.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.tag.$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/tag/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-tag"></i>\n					<a href="/tags/list">{{ \'APPLICATION_TAGS\' | 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_TAGS\' | translate }}</a> </span>\n				</div>\n				<div class="actions">\n					<div class="btn-group" data-ng-show="Tags.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_TAG\' | translate }}\n						</button>\n					</div>\n					<a class="btn btn-icon-only btn-default" href="#" ng-csv="getTags([\'name\', \'description\'])" csv-header="[\'Name\', \'Description\']" field-separator=";" filename="tags.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="displayedTags" 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.tagsByPage" theme="bootstrap" ng-disabled="disabled">\n												<ui-select-match placeholder="{{\'APPLICATION_SEARCH\' | translate}}">{{$select.selected.name}}</ui-select-match>\n												<ui-select-choices repeat="tagByPage in tagsByPage | filter: $select.search">\n													<div ng-bind-html="tagByPage.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(tag, 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="tag in displayedTags" class="animate-repeat">\n								<td style="text-align: center; vertical-align: middle"><input data-ng-hide="tag.defaultEntry" type="checkbox" checklist-model="Tags.checked" checklist-value="tag.id"></td>\n								<td>{{tag.name}}</td>\n					      <td>{{tag.description}}</td>\n					      <td>\n					        <a class="btn default btn-xs blue-stripe" data-ng-href="/tags/view/{{tag.id}}/settings" data-ng-class="{\'disabled\': tag.defaultEntry}">\n										{{ \'APPLICATION_SETTINGS\' | translate}}\n					        </a>\n					        <a class="btn default btn-xs red-stripe" data-ng-click="deleteItem(tag.name,tag.id)" data-ng-class="{\'disabled\': tag.defaultEntry}">\n										{{ \'APPLICATION_DELETE\' | translate }}\n					        </a>\n					      </td>\n					    </tr>\n							<tr data-ng-hide="displayedTags.length">\n								<td colspan="4" style="text-align:center;">\n									<i>{{ \'MESSAGE_NO_TAGS_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.tagsByPage.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/tag/view/view.html",'<!-- BEGIN PAGE CONTENT-->\n<div class="row" data-ng-init="getTag()">\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-tag"></i>\n					<a href="/tags/list">{{ \'APPLICATION_TAGS\' | translate }}</a>\n					<i data-ng-show="tag" class="fa fa-angle-right"></i>\n				</li>\n				<li data-ng-show="tag">\n					<a href="#">{{tag.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/tag.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						{{tag.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.tags.view.settings\')}">\n							<a data-ng-href="/tags/view/{{tag.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/tag/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_TAG\' | 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 && updateTag()" 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="tag.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="tag.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/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					<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="$triggers.operators" properties="properties[trigger.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[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" 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-->\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-eye"></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-eye"></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              <!-- 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							<!-- 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								<!-- 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();getFields();">\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}}: {{configurationName}}</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 ui-padding active" id="tab_1_1">\n            <div class="row">\n              <div class="col-md-11">\n                <span class="caption-subject">All following fields will be join by blank space:</span>\n              </div>\n              <div class="col-md-1 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 ng-scrollbars ng-scrollbars-config="config"> -->\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-8" 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="updateField(subjectItem)">\n	                </div>\n	              </div>\n	              <div class="col-md-8" 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="updateField(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-1">\n	                <div class="form-group">\n	                  <button class="btn btn-icon-only red" data-ng-click="removeItem(subjectItem)"><i class="fa fa-times"></i></button>\n	                </div>\n	              </div>\n	            </div>\n						<!-- </div> -->\n					</div>\n					<!-- END SUBJECT TAB -->\n          <!-- DESCRIPTION TAB -->\n					<div class="tab-pane ui-padding" id="tab_1_2">\n						<div class="row">\n              <div class="col-md-11">\n                <span class="caption-subject">All following fields will be join by new line:</span>\n              </div>\n              <div class="col-md-1 pull-rigth">\n                <button class="btn btn-icon-only green" data-ng-click="addItemDescription()"><i class="fa fa-plus"></i></button>\n              </div>\n            </div>\n            <hr>\n						<!-- <div ng-scrollbars ng-scrollbars-config="config"> -->\n							<div class="row" data-ng-repeat="descriptionItem in descriptionConfig">\n								<!-- <pre>\n									{{descriptionItem|json}}\n								</pre> -->\n	              <div class="col-md-2">\n	                <ui-select ng-model="descriptionItem.type" theme="bootstrap" ng-disabled="disabled" data-ng-change="changeDescType(descriptionItem)">\n	                  <ui-select-match placeholder="{{\'APPLICATION_SEARCH\' | translate}}">{{$select.selected | ucfirst}}</ui-select-match>\n	                  <ui-select-choices repeat="item in descFieldType | filter: $select.search">\n	                    <div ng-bind-html="item | highlight: $select.search | ucfirst"></div>\n	                  </ui-select-choices>\n	                </ui-select>\n	              </div>\n	              <div class="col-md-9" data-ng-if="descriptionItem.type==\'string\'">\n	                <div class="form-group">\n	                  <input type="text" class="form-control" data-ng-model="descriptionItem.content" data-ng-change="updateField(descriptionItem)">\n	                </div>\n	              </div>\n								<div class="col-md-3" data-ng-if="descriptionItem.type==\'key_value\'">\n									<input type="text" class="form-control" placeholder="Key" data-ng-model="descriptionItem.key" data-ng-change="updateField(descriptionItem)">\n								</div>\n								<div class="col-md-3" data-ng-if="descriptionItem.type==\'key_value\'">\n									<ui-select ng-model="descriptionItem.keyType" theme="bootstrap" ng-disabled="disabled" data-ng-change="changeDescType(descriptionItem)">\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-3" data-ng-if="descriptionItem.type==\'key_value\' && descriptionItem.keyType==\'string\'">\n									<input type="text" class="form-control" placeholder="Value" data-ng-model="descriptionItem.keyContent" data-ng-change="updateField(descriptionItem)">\n								</div>\n	              <div class="col-md-3" data-ng-if="descriptionItem.type==\'key_value\' && descriptionItem.keyType==\'variable\'">\n	                <div class="form-group">\n	                  <ui-select theme="bootstrap" ng-disabled="disabled" data-ng-model="descriptionItem.VariableId" data-ng-change="updateField(descriptionItem)">\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-1">\n	                <div class="form-group">\n	                  <button class="btn btn-icon-only red" data-ng-click="removeItem(descriptionItem)"><i class="fa fa-times"></i></button>\n	                </div>\n	              </div>\n	            </div>\n						<!-- </div> -->\n					</div>\n					<!-- END DESCRIPTION TAB -->\n          <!-- FIELDS TAB -->\n					<div class="tab-pane ui-padding" id="tab_1_3">\n						<div class="row">\n              <div class="col-md-11">\n                <span class="caption-subject">Add how to fill the fields present in your account:</span>\n              </div>\n              <div class="col-md-1 pull-rigth">\n                <button class="btn btn-icon-only green" data-ng-click="addItemField()"><i class="fa fa-plus"></i></button>\n              </div>\n            </div>\n            <hr>\n						<!-- <div ng-scrollbars ng-scrollbars-config="config"> -->\n	            <div class="row" data-ng-repeat="fieldItem in fieldConfig">\n	              <div class="col-md-3">\n	                <ui-select ng-model="fieldItem.idField" theme="bootstrap" ng-disabled="disabled" data-ng-change="changeFieldType(fieldItem)">\n	                  <ui-select-match placeholder="{{\'APPLICATION_SEARCH\' | translate}}">{{$select.selected.title}}</ui-select-match>\n	                  <ui-select-choices repeat="item.id as item in accountFields | filter: $select.search">\n	                    <div ng-bind-html="item.title | highlight: $select.search"></div>\n	                  </ui-select-choices>\n	                </ui-select>\n	              </div>\n	              <div class="col-md-8" data-ng-if="getSystemFieldOptions(fieldItem.idField)">\n	                <div class="form-group">\n										<ui-select ng-model="fieldItem.content" theme="bootstrap" ng-disabled="disabled" data-ng-change="updateField(fieldItem)">\n		                  <ui-select-match placeholder="{{\'APPLICATION_SEARCH\' | translate}}">{{$select.selected.name}}</ui-select-match>\n		                  <ui-select-choices repeat="item.value as item in getSystemFieldOptions(fieldItem.idField) | filter: $select.search">\n		                    <div ng-bind-html="item.name | highlight: $select.search"></div>\n		                  </ui-select-choices>\n		                </ui-select>\n	                </div>\n	              </div>\n								<div class="col-md-4" data-ng-if="!getSystemFieldOptions(fieldItem.idField)">\n									<div class="form-group">\n										<ui-select ng-model="fieldItem.type" theme="bootstrap" ng-disabled="disabled" data-ng-change="changeType(fieldItem)">\n		                  <ui-select-match placeholder="{{\'APPLICATION_SEARCH\' | translate}}">{{$select.selected | ucfirst}}</ui-select-match>\n		                  <ui-select-choices repeat="item in fieldType | filter: $select.search">\n		                    <div ng-bind-html="item | highlight: $select.search | ucfirst"></div>\n		                  </ui-select-choices>\n		                </ui-select>\n									</div>\n								</div>\n								<div class="col-md-4" data-ng-if="!getSystemFieldOptions(fieldItem.idField) && fieldItem.type === \'string\'">\n	                <div class="form-group">\n										<input type="text" class="form-control" data-ng-model="fieldItem.content" data-ng-change="updateField(fieldItem)">\n	                </div>\n	              </div>\n								<div class="col-md-4" data-ng-if="!getSystemFieldOptions(fieldItem.idField) && fieldItem.type === \'variable\'">\n	                <div class="form-group">\n										<ui-select theme="bootstrap" ng-disabled="disabled" data-ng-model="fieldItem.VariableId" data-ng-change="updateField(fieldItem)">\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-1">\n	                <div class="form-group">\n	                  <button class="btn btn-icon-only red" data-ng-click="removeItem(fieldItem)"><i class="fa fa-times"></i></button>\n	                </div>\n	              </div>\n	            </div>\n						<!-- </div> -->\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.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.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" data-ng-init="initFooter()">\n  <div class="page-footer-inner">\n     {{info.name}} v. {{info.version}} | 2015-2016 &copy; Powered by Xenialab\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>\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>\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>\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>\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              <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              <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}}..." data-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 | QuickSidebarFilterUsersLowerThan:2 | filter:{type:\'external\'} | filter:searchChatRoomsExternals as resultsChatRoomsExternals">\n              <div class="media-status">\n                <i class="icon icon-close" data-ng-show="chatRoom.status === \'close\'"></i>\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.fullname}}</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}}..." data-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 | QuickSidebarFilterUsersGreaterThan:2 | filter:searchChatRoomsGroups as resultsChatRoomsGroups">\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.fullname}}</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" 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-repeat" 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>\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 data-ng-click="mainTab.active=true" 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}" data-ng-init="getSidebarIntegrations()">\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.includes(\'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 CONTACT_MANAGER SEPARATOR -->\n    <li class="heading" data-ng-show="Auth.isAdmin()">\n      <h3 class="uppercase"> <span >{{\'APPLICATION_CONTACT_MANAGER\' | translate}}  </span> </h3>\n    </li>\n    <!-- END CONTACT_MANAGER SEPARATOR -->\n\n    <!-- START CONTACTS CASE -->\n    <li data-ng-show="Auth.isAdmin()" data-ng-class="{active: $state.includes(\'main.contactmanager.contacts\')}">\n      <a href="/contactmanager/contacts/list">\n        <i class=" fa fa-users"></i>\n        <span class="title" >{{\'APPLICATION_CONTACTS\' | translate}}</span>\n        <span data-ng-show="$state.includes(\'main.contactmanager.contacts\')" class="selected"></span>\n      </a>\n    </li>\n    <!-- END CONTACTS CASE -->\n    <!-- START COMPANIES CASE -->\n    <li data-ng-show="Auth.isAdmin()" data-ng-class="{active: $state.includes(\'main.contactmanager.companies\')}">\n      <a href="/contactmanager/companies/list">\n        <i class="icon-briefcase"></i>\n        <span class="title" >{{\'APPLICATION_COMPANIES\' | translate}}</span>\n        <span data-ng-show="$state.includes(\'main.contactmanager.companies\')" class="selected"></span>\n      </a>\n    </li>\n    <!-- END COMPANIES CASE -->\n    <!-- START CUSTOMFIELDS CASE -->\n    <li data-ng-show="Auth.isAdmin()" data-ng-class="{active: $state.includes(\'main.contactmanager.customfields\')}">\n      <a href="/contactmanager/customfields/list">\n        <i class="icon-pencil"></i>\n        <span class="title" >{{\'APPLICATION_CUSTOM_FIELDS\' | translate}}</span>\n        <span data-ng-show="$state.includes(\'main.contactmanager.customfields\')" class="selected"></span>\n      </a>\n    </li>\n    <!-- END CUSTOMFIELDS CASE -->\n    <!-- END CONTACT_MANAGER 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-class="{active: $state.includes(\'main.chat\')}" data-ng-if="license.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/agent/queues">\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\')}" data-ng-if="license.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        <!-- 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/queues">\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\')}" data-ng-if="license.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 ANALYTICS SEPARATOR -->\n    <li class="heading">\n      <h3 class="uppercase"> <span >{{\'APPLICATION_ANALYTICS\' | translate}}  </span> </h3>\n    </li>\n    <li data-ng-show="Auth.isAdmin()" data-ng-class="{active: $state.includes(\'main.analytics.reports\')}">\n      <a href="/analytics/reports/list">\n        <i class="icon-book-open"></i>\n        <span class="title" >{{\'APPLICATION_REPORTS\' | translate}}</span>\n        <span data-ng-show="$state.includes(\'main.analytics.reports\')" class="selected"></span>\n      </a>\n    </li>\n    <li data-ng-show="Auth.isAdmin()" data-ng-class="{active: $state.includes(\'main.analytics.metrics\')}">\n      <a href="/analytics/metrics/list">\n        <i class="icon-calculator"></i>\n        <span class="title" >{{\'APPLICATION_METRICS\' | translate}}</span>\n        <span data-ng-show="$state.includes(\'main.metrics.reports\')" class="selected"></span>\n      </a>\n    </li>\n    <!-- END ANALYTICS 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\n    <!-- START INTEGRATION CASE -->\n    <li data-ng-repeat="integration in integrations" data-ng-if="integration.active" data-ng-show="Auth.isAdmin()" data-ng-class="{active: $state.includes(\'main.{{integration.state}}\')}">\n      <a href="/{{integration.state}}/list">\n        <i class="icon-handbag"></i>\n        <span class="title" >{{integration.name}}</span>\n        <span data-ng-show="$state.includes(\'main.{{integration.state}}\')" class="selected"></span>\n      </a>\n    </li>\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    <!-- 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    <li data-ng-show="Auth.isAdmin()" data-ng-class="{active: $state.includes(\'main.tags\')}">\n      <a href="/tags/list">\n      <i class="icon-tag"></i>\n      <span class="title" >{{\'APPLICATION_TAGS\' | translate}}  </span>\n      </a>\n    </li>\n    <!-- START CALLYSQUARE CASE -->\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\n    <li data-ng-show="Auth.isAdmin()" data-ng-class="{active: $state.includes(\'main.jscripty\')}">\n      <a href="javascript:;">\n        <i class="fa fa-edit"></i>\n        <span class="title" >{{\'APPLICATION_JSCRIPTY\' | translate}}</span>\n        <span class="arrow"></span>\n      </a>\n      <ul class="sub-menu">\n        <li data-ng-class="{active: $state.includes(\'main.jscripty.projects\')}">\n          <a href="/jscripty/projects/list">\n          <i class="fa fa-slack"></i>\n          <span class="title" >{{\'APPLICATION_PROJECTS\' | 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\n    <!-- START SETTINGS SEPARATOR -->\n    <li data-ng-show="Auth.isAdmin()" class="heading">\n      <h3 class="uppercase"> <span >{{\'APPLICATION_SETTINGS\' | translate}}  </span> </h3>\n    </li>\n    <!-- END SETTINGS SEPARATOR -->\n\n    <li data-ng-show="Auth.isAdmin()" data-ng-class="{active: $state.includes(\'main.setting\')}">\n      <a href="javascript:;">\n        <i class="icon-settings"></i>\n        <span class="title" >{{\'APPLICATION_SETTINGS\' | translate}}</span>\n        <span class="arrow"></span>\n      </a>\n      <ul class="sub-menu">\n        <!-- START UPDATES CASE -->\n        <li data-ng-show="Auth.isAdmin()" data-ng-class="{active: $state.includes(\'main.setting.updates\')}">\n          <a href="/setting/updates/list">\n            <i class="icon-cloud-download"></i>\n            <span class="title" >{{\'APPLICATION_UPDATES\' | translate}}</span>\n            <!-- <span data-ng-show="$state.includes(\'main.updates\')" class="selected"></span> -->\n          </a>\n        </li>\n        <!-- END UPDATES CASE -->\n\n        <!-- START SMTP CASE -->\n        <li data-ng-show="Auth.isAdmin()" data-ng-class="{active: $state.includes(\'main.setting.smtp\')}">\n          <a href="/setting/smtp/view">\n            <i class="icon-envelope"></i>\n            <span class="title">SMTP</span>\n            <!-- <span data-ng-show="$state.includes(\'main.smtp\')" class="selected"></span> -->\n          </a>\n        </li>\n        <!-- END SMTP CASE -->\n\n        <!-- START TEMPLATE CASE -->\n        <li data-ng-show="Auth.isAdmin()" data-ng-class="{active: $state.includes(\'main.setting.templates\')}">\n          <a href="/setting/templates/list">\n          <i class="icon-docs"></i>\n          <span class="title"> {{\'APPLICATION_TEMPLATES\' | translate}} </span>\n          </a>\n        </li>\n        <!-- END TEMPLATE CASE -->\n\n        <!-- START LICENSE CASE -->\n        <li data-ng-show="Auth.isAdmin()" data-ng-class="{active: $state.includes(\'main.setting.license\')}">\n          <a href="/setting/license/view">\n          <i class="icon-info"></i>\n          <span class="title"> {{\'APPLICATION_LICENSE\' | translate}} </span>\n          </a>\n        </li>\n        <!-- END LICENSE CASE -->\n       </ul>\n    </li>\n\n  </ul>\n  <!-- END SIDEBAR MENU -->\n</div>\n');
-}]);
\ No newline at end of file
diff --git a/public/app/bff60da8.vendor.js b/public/app/bff60da8.vendor.js
deleted file mode 100644
index e234220..0000000
--- a/public/app/bff60da8.vendor.js
+++ /dev/null
@@ -1,99 +0,0 @@
-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),
-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();
-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,
-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={
-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",
-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","\\|","%"];
-invalidCsv:"Tiedostoa ei voitu käsitellä, oliko se CSV-muodossa?",invalidJson:"Tiedostoa ei voitu käsitellä, oliko se JSON-muodossa?",jsonNotArray:"Tiedosto ei sisältänyt taulukkoa, lopetetaan."}}),a}])}])}(),function(){angular.module("ui.grid").config(["$provide",function(a){a.decorator("i18nService",["$delegate",function(a){return a.add("fr",{aggregate:{label:"éléments"},groupPanel:{description:"Faites glisser une en-tête de colonne ici pour créer un groupe de colonnes."},search:{placeholder:"Recherche...",showingItems:"Affichage des éléments :",selectedItems:"Éléments sélectionnés :",totalItems:"Nombre total d'éléments:",size:"Taille de page:",first:"Première page",next:"Page Suivante",previous:"Page précédente",last:"Dernière page"},menu:{text:"Choisir des colonnes :"},sort:{ascending:"Trier par ordre croissant",descending:"Trier par ordre décroissant",remove:"Enlever le tri"},column:{hide:"Cacher la colonne"},aggregation:{count:"lignes totales: ",sum:"total: ",avg:"moy: ",min:"min: ",max:"max: "},pinning:{pinLeft:"Épingler à gauche",pinRight:"Épingler à droite",unpin:"Détacher"},gridMenu:{columns:"Colonnes:",importerTitle:"Importer un fichier",exporterAllAsCsv:"Exporter toutes les données en CSV",exporterVisibleAsCsv:"Exporter les données visibles en CSV",exporterSelectedAsCsv:"Exporter les données sélectionnées en CSV",exporterAllAsPdf:"Exporter toutes les données en PDF",exporterVisibleAsPdf:"Exporter les données visibles en PDF",exporterSelectedAsPdf:"Exporter les données sélectionnées en PDF",clearAllFilters:"Nettoyez tous les filtres"},importer:{noHeaders:"Impossible de déterminer le nom des colonnes, le fichier possède-t-il une en-tête ?",noObjects:"Aucun objet trouvé, le fichier possède-t-il des données autres que l'en-tête ?",invalidCsv:"Le fichier n'a pas pu être traité, le CSV est-il valide ?",invalidJson:"Le fichier n'a pas pu être traité, le JSON est-il valide ?",jsonNotArray:"Le fichier JSON importé doit contenir un tableau, abandon."},pagination:{sizes:"éléments par page",totalItems:"éléments",of:"sur"},grouping:{group:"Grouper",ungroup:"Dégrouper",aggregate_count:"Agg: Compte",aggregate_sum:"Agg: Somme",aggregate_max:"Agg: Max",aggregate_min:"Agg: Min",aggregate_avg:"Agg: Moy",aggregate_remove:"Agg: Retirer"}}),a}])}])}(),function(){angular.module("ui.grid").config(["$provide",function(a){a.decorator("i18nService",["$delegate",function(a){return a.add("he",{aggregate:{label:"items"},groupPanel:{description:"גרור עמודה לכאן ושחרר בכדי לקבץ עמודה זו."},search:{placeholder:"חפש...",showingItems:"מציג:",selectedItems:'סה"כ נבחרו:',totalItems:'סה"כ רשומות:',size:"תוצאות בדף:",first:"דף ראשון",next:"דף הבא",previous:"דף קודם",last:"דף אחרון"},menu:{text:"בחר עמודות:"},sort:{ascending:"סדר עולה",descending:"סדר יורד",remove:"בטל"},column:{hide:"טור הסתר"},aggregation:{count:"total rows: ",sum:"total: ",avg:"avg: ",min:"min: ",max:"max: "},gridMenu:{columns:"Columns:",importerTitle:"Import file",exporterAllAsCsv:"Export all data as csv",exporterVisibleAsCsv:"Export visible data as csv",exporterSelectedAsCsv:"Export selected data as csv",exporterAllAsPdf:"Export all data as pdf",exporterVisibleAsPdf:"Export visible data as pdf",exporterSelectedAsPdf:"Export selected data as pdf",clearAllFilters:"Clean all filters"},importer:{noHeaders:"Column names were unable to be derived, does the file have a header?",noObjects:"Objects were not able to be derived, was there data in the file other than headers?",invalidCsv:"File was unable to be processed, is it valid CSV?",invalidJson:"File was unable to be processed, is it valid Json?",jsonNotArray:"Imported json file must contain an array, aborting."}}),a}])}])}(),function(){angular.module("ui.grid").config(["$provide",function(a){a.decorator("i18nService",["$delegate",function(a){return a.add("hy",{aggregate:{label:"տվյալներ"},groupPanel:{description:"Ըստ սյան խմբավորելու համար քաշեք և գցեք վերնագիրն այստեղ։"},search:{placeholder:"Փնտրում...",showingItems:"Ցուցադրված տվյալներ՝",selectedItems:"Ընտրված:",totalItems:"Ընդամենը՝",size:"Տողերի քանակը էջում՝",first:"Առաջին էջ",next:"Հաջորդ էջ",previous:"Նախորդ էջ",last:"Վերջին էջ"},menu:{text:"Ընտրել սյուները:"},sort:{ascending:"Աճման կարգով",descending:"Նվազման կարգով",remove:"Հանել "},column:{hide:"Թաքցնել սյունը"},aggregation:{count:"ընդամենը տող՝ ",sum:"ընդամենը՝ ",avg:"միջին՝ ",min:"մին՝ ",max:"մաքս՝ "},pinning:{pinLeft:"Կպցնել ձախ կողմում",pinRight:"Կպցնել աջ կողմում",unpin:"Արձակել"},gridMenu:{columns:"Սյուներ:",importerTitle:"Ներմուծել ֆայլ",exporterAllAsCsv:"Արտահանել ամբողջը CSV",exporterVisibleAsCsv:"Արտահանել երևացող տվյալները CSV",exporterSelectedAsCsv:"Արտահանել ընտրված տվյալները CSV",exporterAllAsPdf:"Արտահանել PDF",exporterVisibleAsPdf:"Արտահանել երևացող տվյալները PDF",exporterSelectedAsPdf:"Արտահանել ընտրված տվյալները PDF",clearAllFilters:"Մաքրել բոլոր ֆիլտրերը"},importer:{noHeaders:"Հնարավոր չեղավ որոշել սյան վերնագրերը։ Արդյո՞ք ֆայլը ունի վերնագրեր։",noObjects:"Հնարավոր չեղավ կարդալ տվյալները։ Արդյո՞ք ֆայլում կան տվյալներ։",invalidCsv:"Հնարավոր չեղավ մշակել ֆայլը։ Արդյո՞ք այն վավեր CSV է։",invalidJson:"Հնարավոր չեղավ մշակել ֆայլը։ Արդյո՞ք այն վավեր Json է։",jsonNotArray:"Ներմուծված json ֆայլը պետք է պարունակի զանգված, կասեցվում է։"}}),a}])}])}(),function(){angular.module("ui.grid").config(["$provide",function(a){a.decorator("i18nService",["$delegate",function(a){return a.add("it",{aggregate:{label:"elementi"},groupPanel:{description:"Trascina un'intestazione all'interno del gruppo della colonna."},search:{placeholder:"Ricerca...",showingItems:"Mostra:",selectedItems:"Selezionati:",totalItems:"Totali:",size:"Tot Pagine:",first:"Prima",next:"Prossima",previous:"Precedente",last:"Ultima"},menu:{text:"Scegli le colonne:"},sort:{ascending:"Asc.",descending:"Desc.",remove:"Annulla ordinamento"},column:{hide:"Nascondi"},aggregation:{count:"righe totali: ",sum:"tot: ",avg:"media: ",min:"minimo: ",max:"massimo: "},pinning:{pinLeft:"Blocca a sx",pinRight:"Blocca a dx",unpin:"Blocca in alto"},gridMenu:{columns:"Colonne:",importerTitle:"Importa",exporterAllAsCsv:"Esporta tutti i dati in CSV",exporterVisibleAsCsv:"Esporta i dati visibili in CSV",exporterSelectedAsCsv:"Esporta i dati selezionati in CSV",exporterAllAsPdf:"Esporta tutti i dati in PDF",exporterVisibleAsPdf:"Esporta i dati visibili in PDF",exporterSelectedAsPdf:"Esporta i dati selezionati in PDF",clearAllFilters:"Pulire tutti i filtri"},importer:{noHeaders:"Impossibile reperire i nomi delle colonne, sicuro che siano indicati all'interno del file?",noObjects:"Impossibile reperire gli oggetti, sicuro che siano indicati all'interno del file?",invalidCsv:"Impossibile elaborare il file, sicuro che sia un CSV?",invalidJson:"Impossibile elaborare il file, sicuro che sia un JSON valido?",jsonNotArray:"Errore! Il file JSON da importare deve contenere un array."},grouping:{group:"Raggruppa",ungroup:"Separa",aggregate_count:"Agg: N. Elem.",aggregate_sum:"Agg: Somma",aggregate_max:"Agg: Massimo",aggregate_min:"Agg: Minimo",aggregate_avg:"Agg: Media",aggregate_remove:"Agg: Rimuovi"}}),a}])}])}(),function(){angular.module("ui.grid").config(["$provide",function(a){a.decorator("i18nService",["$delegate",function(a){return a.add("ja",{aggregate:{label:"項目"},groupPanel:{description:"ここに列ヘッダをドラッグアンドドロップして、その列でグループ化します。"},search:{placeholder:"検索...",showingItems:"表示中の項目:",selectedItems:"選択した項目:",totalItems:"項目の総数:",size:"ページサイズ:",first:"最初のページ",next:"次のページ",previous:"前のページ",last:"前のページ"},menu:{text:"列の選択:"},sort:{ascending:"昇順に並べ替え",descending:"降順に並べ替え",remove:"並べ替えの解除"},column:{hide:"列の非表示"},aggregation:{count:"合計行数: ",sum:"合計: ",avg:"平均: ",min:"最小: ",max:"最大: "},pinning:{pinLeft:"左に固定",pinRight:"右に固定",unpin:"固定解除"},gridMenu:{columns:"列:",importerTitle:"ファイルのインポート",exporterAllAsCsv:"すべてのデータをCSV形式でエクスポート",exporterVisibleAsCsv:"表示中のデータをCSV形式でエクスポート",exporterSelectedAsCsv:"選択したデータをCSV形式でエクスポート",exporterAllAsPdf:"すべてのデータをPDF形式でエクスポート",exporterVisibleAsPdf:"表示中のデータをPDF形式でエクスポート",exporterSelectedAsPdf:"選択したデータをPDF形式でエクスポート",clearAllFilters:"すべてのフィルタを清掃してください"},importer:{noHeaders:"列名を取得できません。ファイルにヘッダが含まれていることを確認してください。",noObjects:"オブジェクトを取得できません。ファイルにヘッダ以外のデータが含まれていることを確認してください。",invalidCsv:"ファイルを処理できません。ファイルが有効なCSV形式であることを確認してください。",invalidJson:"ファイルを処理できません。ファイルが有効なJSON形式であることを確認してください。",jsonNotArray:"インポートしたJSONファイルには配列が含まれている必要があります。処理を中止します。"},pagination:{sizes:"項目/ページ",totalItems:"項目"}}),a}])}])}(),function(){angular.module("ui.grid").config(["$provide",function(a){a.decorator("i18nService",["$delegate",function(a){return a.add("ko",{aggregate:{label:"아이템"},groupPanel:{description:"컬럼으로 그룹핑하기 위해서는 컬럼 헤더를 끌어 떨어뜨려 주세요."},search:{placeholder:"검색...",showingItems:"항목 보여주기:",selectedItems:"선택 항목:",totalItems:"전체 항목:",size:"페이지 크기:",first:"첫번째 페이지",next:"다음 페이지",previous:"이전 페이지",last:"마지막 페이지"},menu:{text:"컬럼을 선택하세요:"},sort:{ascending:"오름차순 정렬",descending:"내림차순 정렬",remove:"소팅 제거"},column:{hide:"컬럼 제거"},aggregation:{count:"전체 갯수: ",sum:"전체: ",avg:"평균: ",min:"최소: ",max:"최대: "},pinning:{pinLeft:"왼쪽 핀",pinRight:"오른쪽 핀",unpin:"핀 제거"},gridMenu:{columns:"컬럼:",importerTitle:"파일 가져오기",exporterAllAsCsv:"csv로 모든 데이터 내보내기",exporterVisibleAsCsv:"csv로 보이는 데이터 내보내기",exporterSelectedAsCsv:"csv로 선택된 데이터 내보내기",exporterAllAsPdf:"pdf로 모든 데이터 내보내기",exporterVisibleAsPdf:"pdf로 보이는 데이터 내보내기",exporterSelectedAsPdf:"pdf로 선택 데이터 내보내기",clearAllFilters:"모든 필터를 청소"},importer:{noHeaders:"컬럼명이 지정되어 있지 않습니다. 파일에 헤더가 명시되어 있는지 확인해 주세요.",noObjects:"데이터가 지정되어 있지 않습니다. 데이터가 파일에 있는지 확인해 주세요.",invalidCsv:"파일을 처리할 수 없습니다. 올바른 csv인지 확인해 주세요.",invalidJson:"파일을 처리할 수 없습니다. 올바른 json인지 확인해 주세요.",jsonNotArray:"json 파일은 배열을 포함해야 합니다."},pagination:{sizes:"페이지당 항목",totalItems:"전체 항목"}}),a}])}])}(),function(){angular.module("ui.grid").config(["$provide",function(a){a.decorator("i18nService",["$delegate",function(a){return a.add("nl",{aggregate:{label:"items"},groupPanel:{description:"Sleep hier een kolomnaam heen om op te groeperen."},search:{placeholder:"Zoeken...",showingItems:"Getoonde items:",selectedItems:"Geselecteerde items:",totalItems:"Totaal aantal items:",size:"Items per pagina:",first:"Eerste pagina",next:"Volgende pagina",previous:"Vorige pagina",last:"Laatste pagina"},menu:{text:"Kies kolommen:"},sort:{ascending:"Sorteer oplopend",descending:"Sorteer aflopend",remove:"Verwijder sortering"},column:{hide:"Verberg kolom"},aggregation:{count:"Aantal rijen: ",sum:"Som: ",avg:"Gemiddelde: ",min:"Min: ",max:"Max: "},pinning:{pinLeft:"Zet links vast",pinRight:"Zet rechts vast",unpin:"Maak los"},gridMenu:{columns:"Kolommen:",importerTitle:"Importeer bestand",exporterAllAsCsv:"Exporteer alle data als csv",exporterVisibleAsCsv:"Exporteer zichtbare data als csv",exporterSelectedAsCsv:"Exporteer geselecteerde data als csv",exporterAllAsPdf:"Exporteer alle data als pdf",exporterVisibleAsPdf:"Exporteer zichtbare data als pdf",exporterSelectedAsPdf:"Exporteer geselecteerde data als pdf",clearAllFilters:"Reinig alle filters"},importer:{noHeaders:"Kolomnamen kunnen niet worden afgeleid. Heeft het bestand een header?",noObjects:"Objecten kunnen niet worden afgeleid. Bevat het bestand data naast de headers?",invalidCsv:"Het bestand kan niet verwerkt worden. Is het een valide csv bestand?",invalidJson:"Het bestand kan niet verwerkt worden. Is het valide json?",jsonNotArray:"Het json bestand moet een array bevatten. De actie wordt geannuleerd."},pagination:{sizes:"items per pagina",totalItems:"items",of:"van de"},grouping:{group:"Groepeer",ungroup:"Groepering opheffen",aggregate_count:"Agg: Aantal",aggregate_sum:"Agg: Som",aggregate_max:"Agg: Max",aggregate_min:"Agg: Min",aggregate_avg:"Agg: Gem",aggregate_remove:"Agg: Verwijder"}}),a}])}])}(),function(){angular.module("ui.grid").config(["$provide",function(a){a.decorator("i18nService",["$delegate",function(a){return a.add("pt-br",{aggregate:{label:"itens"},groupPanel:{description:"Arraste e solte uma coluna aqui para agrupar por essa coluna"},search:{placeholder:"Procurar...",showingItems:"Mostrando os Itens:",selectedItems:"Items Selecionados:",totalItems:"Total de Itens:",size:"Tamanho da Página:",first:"Primeira Página",next:"Próxima Página",previous:"Página Anterior",last:"Última Página"},menu:{text:"Selecione as colunas:"},sort:{ascending:"Ordenar Ascendente",descending:"Ordenar Descendente",remove:"Remover Ordenação"},column:{hide:"Esconder coluna"},aggregation:{count:"total de linhas: ",sum:"total: ",avg:"med: ",min:"min: ",max:"max: "},pinning:{pinLeft:"Fixar Esquerda",pinRight:"Fixar Direita",unpin:"Desprender"},gridMenu:{columns:"Colunas:",importerTitle:"Importar arquivo",exporterAllAsCsv:"Exportar todos os dados como csv",exporterVisibleAsCsv:"Exportar dados visíveis como csv",exporterSelectedAsCsv:"Exportar dados selecionados como csv",exporterAllAsPdf:"Exportar todos os dados como pdf",exporterVisibleAsPdf:"Exportar dados visíveis como pdf",exporterSelectedAsPdf:"Exportar dados selecionados como pdf",clearAllFilters:"Limpar todos os filtros"},importer:{noHeaders:"Nomes de colunas não puderam ser derivados. O arquivo tem um cabeçalho?",noObjects:"Objetos não puderam ser derivados. Havia dados no arquivo, além dos cabeçalhos?",invalidCsv:"Arquivo não pode ser processado. É um CSV válido?",invalidJson:"Arquivo não pode ser processado. É um Json válido?",jsonNotArray:"Arquivo json importado tem que conter um array. Abortando."},pagination:{sizes:"itens por página",totalItems:"itens"},grouping:{group:"Agrupar",ungroup:"Desagrupar",aggregate_count:"Agr: Contar",aggregate_sum:"Agr: Soma",aggregate_max:"Agr: Max",aggregate_min:"Agr: Min",aggregate_avg:"Agr: Med",aggregate_remove:"Agr: Remover"}}),a}])}])}(),function(){angular.module("ui.grid").config(["$provide",function(a){a.decorator("i18nService",["$delegate",function(a){return a.add("pt",{aggregate:{label:"itens"},groupPanel:{description:"Arraste e solte uma coluna aqui para agrupar por essa coluna"},search:{placeholder:"Procurar...",showingItems:"Mostrando os Itens:",selectedItems:"Itens Selecionados:",totalItems:"Total de Itens:",size:"Tamanho da Página:",first:"Primeira Página",next:"Próxima Página",previous:"Página Anterior",last:"Última Página"},menu:{text:"Selecione as colunas:"},sort:{ascending:"Ordenar Ascendente",descending:"Ordenar Descendente",remove:"Remover Ordenação"},column:{hide:"Esconder coluna"},aggregation:{count:"total de linhas: ",sum:"total: ",avg:"med: ",min:"min: ",max:"max: "},pinning:{pinLeft:"Fixar Esquerda",pinRight:"Fixar Direita",unpin:"Desprender"},gridMenu:{columns:"Colunas:",importerTitle:"Importar ficheiro",exporterAllAsCsv:"Exportar todos os dados como csv",exporterVisibleAsCsv:"Exportar dados visíveis como csv",exporterSelectedAsCsv:"Exportar dados selecionados como csv",exporterAllAsPdf:"Exportar todos os dados como pdf",exporterVisibleAsPdf:"Exportar dados visíveis como pdf",exporterSelectedAsPdf:"Exportar dados selecionados como pdf",clearAllFilters:"Limpar todos os filtros"},importer:{noHeaders:"Nomes de colunas não puderam ser derivados. O ficheiro tem um cabeçalho?",noObjects:"Objetos não puderam ser derivados. Havia dados no ficheiro, além dos cabeçalhos?",invalidCsv:"Ficheiro não pode ser processado. É um CSV válido?",invalidJson:"Ficheiro não pode ser processado. É um Json válido?",jsonNotArray:"Ficheiro json importado tem que conter um array. Interrompendo."},pagination:{sizes:"itens por página",totalItems:"itens",of:"de"},grouping:{group:"Agrupar",ungroup:"Desagrupar",aggregate_count:"Agr: Contar",aggregate_sum:"Agr: Soma",aggregate_max:"Agr: Max",aggregate_min:"Agr: Min",aggregate_avg:"Agr: Med",aggregate_remove:"Agr: Remover"}}),a}])}])}(),function(){angular.module("ui.grid").config(["$provide",function(a){a.decorator("i18nService",["$delegate",function(a){return a.add("ru",{aggregate:{label:"элементы"},groupPanel:{description:"Для группировки по столбцу перетащите сюда его название."},search:{placeholder:"Поиск...",showingItems:"Показать элементы:",selectedItems:"Выбранные элементы:",totalItems:"Всего элементов:",size:"Размер страницы:",first:"Первая страница",next:"Следующая страница",previous:"Предыдущая страница",last:"Последняя страница"},menu:{text:"Выбрать столбцы:"},sort:{ascending:"По возрастанию",descending:"По убыванию",remove:"Убрать сортировку"},column:{hide:"Спрятать столбец"},aggregation:{count:"всего строк: ",sum:"итого: ",avg:"среднее: ",min:"мин: ",max:"макс: "},pinning:{pinLeft:"Закрепить слева",pinRight:"Закрепить справа",unpin:"Открепить"},gridMenu:{columns:"Столбцы:",importerTitle:"Import file",exporterAllAsCsv:"Экспортировать всё в CSV",exporterVisibleAsCsv:"Экспортировать видимые данные в CSV",exporterSelectedAsCsv:"Экспортировать выбранные данные в CSV",exporterAllAsPdf:"Экспортировать всё в PDF",exporterVisibleAsPdf:"Экспортировать видимые данные в PDF",exporterSelectedAsPdf:"Экспортировать выбранные данные в PDF",clearAllFilters:"Очистите все фильтры"},importer:{noHeaders:"Column names were unable to be derived, does the file have a header?",noObjects:"Objects were not able to be derived, was there data in the file other than headers?",invalidCsv:"File was unable to be processed, is it valid CSV?",invalidJson:"File was unable to be processed, is it valid Json?",jsonNotArray:"Imported json file must contain an array, aborting."}}),a}])}])}(),function(){angular.module("ui.grid").config(["$provide",function(a){a.decorator("i18nService",["$delegate",function(a){return a.add("sk",{aggregate:{label:"items"},groupPanel:{description:"Pretiahni sem názov stĺpca pre zoskupenie podľa toho stĺpca."},search:{placeholder:"Hľadaj...",showingItems:"Zobrazujem položky:",selectedItems:"Vybraté položky:",totalItems:"Počet položiek:",size:"Počet:",first:"Prvá strana",next:"Ďalšia strana",previous:"Predchádzajúca strana",last:"Posledná strana"},menu:{text:"Vyberte stĺpce:"},sort:{ascending:"Zotriediť vzostupne",descending:"Zotriediť zostupne",remove:"Vymazať triedenie"},aggregation:{count:"total rows: ",sum:"total: ",avg:"avg: ",min:"min: ",max:"max: "},gridMenu:{columns:"Columns:",importerTitle:"Import file",exporterAllAsCsv:"Export all data as csv",exporterVisibleAsCsv:"Export visible data as csv",exporterSelectedAsCsv:"Export selected data as csv",exporterAllAsPdf:"Export all data as pdf",exporterVisibleAsPdf:"Export visible data as pdf",exporterSelectedAsPdf:"Export selected data as pdf",clearAllFilters:"Clear all filters"},importer:{noHeaders:"Column names were unable to be derived, does the file have a header?",noObjects:"Objects were not able to be derived, was there data in the file other than headers?",invalidCsv:"File was unable to be processed, is it valid CSV?",invalidJson:"File was unable to be processed, is it valid Json?",jsonNotArray:"Imported json file must contain an array, aborting."}}),a}])}])}(),function(){angular.module("ui.grid").config(["$provide",function(a){a.decorator("i18nService",["$delegate",function(a){return a.add("sv",{aggregate:{label:"Artiklar"},groupPanel:{description:"Dra en kolumnrubrik hit och släpp den för att gruppera efter den kolumnen."},search:{placeholder:"Sök...",showingItems:"Visar artiklar:",selectedItems:"Valda artiklar:",totalItems:"Antal artiklar:",size:"Sidstorlek:",first:"Första sidan",next:"Nästa sida",previous:"Föregående sida",last:"Sista sidan"},menu:{text:"Välj kolumner:"},sort:{ascending:"Sortera stigande",descending:"Sortera fallande",remove:"Inaktivera sortering"},column:{hide:"Göm kolumn"},aggregation:{count:"Antal rader: ",sum:"Summa: ",avg:"Genomsnitt: ",min:"Min: ",max:"Max: "},pinning:{pinLeft:"Fäst vänster",pinRight:"Fäst höger",unpin:"Lösgör"},gridMenu:{columns:"Kolumner:",importerTitle:"Importera fil",exporterAllAsCsv:"Exportera all data som CSV",exporterVisibleAsCsv:"Exportera synlig data som CSV",exporterSelectedAsCsv:"Exportera markerad data som CSV",exporterAllAsPdf:"Exportera all data som PDF",exporterVisibleAsPdf:"Exportera synlig data som PDF",exporterSelectedAsPdf:"Exportera markerad data som PDF",clearAllFilters:"Rengör alla filter"},importer:{noHeaders:"Kolumnnamn kunde inte härledas. Har filen ett sidhuvud?",noObjects:"Objekt kunde inte härledas. Har filen data undantaget sidhuvud?",invalidCsv:"Filen kunde inte behandlas, är den en giltig CSV?",invalidJson:"Filen kunde inte behandlas, är den en giltig JSON?",jsonNotArray:"Importerad JSON-fil måste innehålla ett fält. Import avbruten."},pagination:{sizes:"Artiklar per sida",totalItems:"Artiklar"}}),a}])}])}(),function(){angular.module("ui.grid").config(["$provide",function(a){a.decorator("i18nService",["$delegate",function(a){return a.add("ta",{aggregate:{label:"உருப்படிகள்"},groupPanel:{description:"ஒரு பத்தியை குழுவாக அமைக்க அப்பத்தியின் தலைப்பை இங்கே  இழுத்து வரவும் "},search:{placeholder:"தேடல் ...",showingItems:"உருப்படிகளை காண்பித்தல்:",selectedItems:"தேர்ந்தெடுக்கப்பட்ட  உருப்படிகள்:",totalItems:"மொத்த உருப்படிகள்:",size:"பக்க அளவு: ",first:"முதல் பக்கம்",next:"அடுத்த பக்கம்",previous:"முந்தைய பக்கம் ",last:"இறுதி பக்கம்"},menu:{text:"பத்திகளை தேர்ந்தெடு:"},sort:{ascending:"மேலிருந்து கீழாக",descending:"கீழிருந்து மேலாக",remove:"வரிசையை நீக்கு"},column:{hide:"பத்தியை மறைத்து வை "},aggregation:{count:"மொத்த வரிகள்:",sum:"மொத்தம்: ",avg:"சராசரி: ",min:"குறைந்தபட்ச: ",max:"அதிகபட்ச: "},pinning:{pinLeft:"இடதுபுறமாக தைக்க ",pinRight:"வலதுபுறமாக தைக்க",unpin:"பிரி"},gridMenu:{columns:"பத்திகள்:",importerTitle:"கோப்பு : படித்தல்",exporterAllAsCsv:"எல்லா தரவுகளையும் கோப்பாக்கு: csv",exporterVisibleAsCsv:"இருக்கும் தரவுகளை கோப்பாக்கு: csv",exporterSelectedAsCsv:"தேர்ந்தெடுத்த தரவுகளை கோப்பாக்கு: csv",exporterAllAsPdf:"எல்லா தரவுகளையும் கோப்பாக்கு: pdf",exporterVisibleAsPdf:"இருக்கும் தரவுகளை கோப்பாக்கு: pdf",exporterSelectedAsPdf:"தேர்ந்தெடுத்த தரவுகளை கோப்பாக்கு: pdf",clearAllFilters:"Clear all filters"},importer:{noHeaders:"பத்தியின் தலைப்புகளை பெற இயலவில்லை, கோப்பிற்கு தலைப்பு உள்ளதா?",noObjects:"இலக்குகளை உருவாக்க முடியவில்லை, கோப்பில் தலைப்புகளை தவிர தரவு ஏதேனும் உள்ளதா? ",invalidCsv:"சரிவர நடைமுறை படுத்த இயலவில்லை, கோப்பு சரிதானா? - csv",invalidJson:"சரிவர நடைமுறை படுத்த இயலவில்லை, கோப்பு சரிதானா? - json",jsonNotArray:"படித்த கோப்பில் வரிசைகள் உள்ளது, நடைமுறை ரத்து செய் : json"},pagination:{sizes:"உருப்படிகள் / பக்கம்",totalItems:"உருப்படிகள் "},grouping:{group:"குழு",ungroup:"பிரி",aggregate_count:"மதிப்பீட்டு : எண்ணு",aggregate_sum:"மதிப்பீட்டு : கூட்டல்",aggregate_max:"மதிப்பீட்டு : அதிகபட்சம்",aggregate_min:"மதிப்பீட்டு : குறைந்தபட்சம்",aggregate_avg:"மதிப்பீட்டு : சராசரி",aggregate_remove:"மதிப்பீட்டு : நீக்கு"}}),a}])}])}(),function(){var a=["uiT","uiTranslate"],b=["t","uiTranslate"],c=angular.module("ui.grid.i18n");c.constant("i18nConstants",{MISSING:"[MISSING]",UPDATE_EVENT:"$uiI18n",LOCALE_DIRECTIVE_ALIAS:"uiI18n",DEFAULT_LANG:"en"}),c.service("i18nService",["$log","i18nConstants","$rootScope",function(a,b,c){var d={_langs:{},current:null,get:function(a){return this._langs[a.toLowerCase()]},add:function(a,b){var c=a.toLowerCase();this._langs[c]||(this._langs[c]={}),angular.extend(this._langs[c],b)},getAllLangs:function(){var a=[];if(!this._langs)return a;for(var b in this._langs)a.push(b);return a},setCurrent:function(a){this.current=a.toLowerCase()},getCurrentLang:function(){return this.current}},e={add:function(a,b){"object"==typeof a?angular.forEach(a,function(a){a&&d.add(a,b)}):d.add(a,b)},getAllLangs:function(){return d.getAllLangs()},get:function(a){var b=a?a:e.getCurrentLang();return d.get(b)},getSafeText:function(a,c){var f=c?c:e.getCurrentLang(),g=d.get(f);if(!g)return b.MISSING;for(var h=a.split("."),i=g,j=0;j<h.length;++j){if(void 0===i[h[j]]||null===i[h[j]])return b.MISSING;i=i[h[j]]}return i},setCurrentLang:function(a){a&&(d.setCurrent(a),c.$broadcast(b.UPDATE_EVENT))},getCurrentLang:function(){var a=d.getCurrentLang();return a||(a=b.DEFAULT_LANG,d.setCurrent(a)),a}};return e}]);var d=function(a,b){return{compile:function(){return{pre:function(c,d,e){var f=b.LOCALE_DIRECTIVE_ALIAS,g=c.$eval(e[f]);g?c.$watch(e[f],function(){a.setCurrentLang(g)}):e.$$observers&&e.$observe(f,function(){a.setCurrentLang(e[f]||b.DEFAULT_LANG)})}}}}};c.directive("uiI18n",["i18nService","i18nConstants",d]);var e=function(b,c,d){return{restrict:"EA",compile:function(){return{pre:function(e,f,g){var h,i=a[0],j=a[1],k=g[i]||g[j]||f.html(),l=d.MISSING+k;if(g.$$observers){var m=g[i]?i:j;h=g.$observe(m,function(a){a&&f.html(b(a)(c.getCurrentLang())||l)})}var n=b(k),o=e.$on(d.UPDATE_EVENT,function(a){h?h(g[i]||g[j]):f.html(n(c.get())||l)});e.$on("$destroy",o),f.html(n(c.get())||l)}}}}};angular.forEach(a,function(a){c.directive(a,["$parse","i18nService","i18nConstants",e])});var f=function(a,b,c){return function(d){var e=a(d);return e(b.get())||c.MISSING+d}};angular.forEach(b,function(a){c.filter(a,["$parse","i18nService","i18nConstants",f])})}(),function(){angular.module("ui.grid").config(["$provide",function(a){a.decorator("i18nService",["$delegate",function(a){return a.add("zh-cn",{headerCell:{aria:{defaultFilterLabel:"列过滤器",removeFilter:"移除过滤器",columnMenuButtonLabel:"列菜单"},priority:"优先级:",filterLabel:"列过滤器: "},aggregate:{label:"行"},groupPanel:{description:"拖曳表头到此处进行分组"},search:{placeholder:"查找",showingItems:"已显示行数：",selectedItems:"已选择行数：",totalItems:"总行数：",size:"每页显示行数：",first:"首页",next:"下一页",previous:"上一页",last:"末页"},menu:{text:"选择列："},sort:{ascending:"升序",descending:"降序",none:"无序",remove:"取消排序"},column:{hide:"隐藏列"},aggregation:{count:"计数：",sum:"求和：",avg:"均值：",min:"最小值：",max:"最大值："},pinning:{pinLeft:"左侧固定",pinRight:"右侧固定",unpin:"取消固定"},columnMenu:{close:"关闭"},gridMenu:{aria:{buttonLabel:"表格菜单"},columns:"列：",importerTitle:"导入文件",exporterAllAsCsv:"导出全部数据到CSV",exporterVisibleAsCsv:"导出可见数据到CSV",exporterSelectedAsCsv:"导出已选数据到CSV",exporterAllAsPdf:"导出全部数据到PDF",exporterVisibleAsPdf:"导出可见数据到PDF",exporterSelectedAsPdf:"导出已选数据到PDF",clearAllFilters:"清除所有过滤器"},importer:{noHeaders:"无法获取列名，确定文件包含表头？",noObjects:"无法获取数据，确定文件包含数据？",invalidCsv:"无法处理文件，确定是合法的CSV文件？",invalidJson:"无法处理文件，确定是合法的JSON文件？",jsonNotArray:"导入的文件不是JSON数组！"},pagination:{aria:{pageToFirst:"第一页",pageBack:"上一页",pageSelected:"当前页",pageForward:"下一页",pageToLast:"最后一页"},sizes:"行每页",totalItems:"行",through:"至",of:"共"},grouping:{group:"分组",ungroup:"取消分组",aggregate_count:"合计: 计数",aggregate_sum:"合计: 求和",aggregate_max:"合计: 最大",aggregate_min:"合计: 最小",aggregate_avg:"合计: 平均",aggregate_remove:"合计: 移除"}}),a}])}])}(),function(){angular.module("ui.grid").config(["$provide",function(a){a.decorator("i18nService",["$delegate",function(a){return a.add("zh-tw",{aggregate:{label:"行"},groupPanel:{description:"拖曳表頭到此處進行分組"},search:{placeholder:"查找",showingItems:"已顯示行數：",selectedItems:"已選擇行數：",totalItems:"總行數：",size:"每頁顯示行數：",first:"首頁",next:"下壹頁",previous:"上壹頁",last:"末頁"},menu:{text:"選擇列："},sort:{ascending:"升序",descending:"降序",remove:"取消排序"},column:{hide:"隱藏列"},aggregation:{count:"計數：",sum:"求和：",avg:"均值：",min:"最小值：",max:"最大值："},pinning:{pinLeft:"左側固定",pinRight:"右側固定",unpin:"取消固定"},gridMenu:{columns:"列：",importerTitle:"導入文件",exporterAllAsCsv:"導出全部數據到CSV",exporterVisibleAsCsv:"導出可見數據到CSV",exporterSelectedAsCsv:"導出已選數據到CSV",exporterAllAsPdf:"導出全部數據到PDF",exporterVisibleAsPdf:"導出可見數據到PDF",exporterSelectedAsPdf:"導出已選數據到PDF",clearAllFilters:"清除所有过滤器"},importer:{noHeaders:"無法獲取列名，確定文件包含表頭？",noObjects:"無法獲取數據，確定文件包含數據？",invalidCsv:"無法處理文件，確定是合法的CSV文件？",invalidJson:"無法處理文件，確定是合法的JSON文件？",jsonNotArray:"導入的文件不是JSON數組！"},pagination:{sizes:"行每頁",totalItems:"行"}}),a}])}])}(),function(){"use strict";var a=angular.module("ui.grid.autoResize",["ui.grid"]);a.directive("uiGridAutoResize",["$timeout","gridUtil",function(a,b){return{require:"uiGrid",scope:!1,link:function(a,c,d,e){function f(){i=b.elementHeight(c),h=b.elementWidth(c)}function g(){clearTimeout(j),j=setTimeout(function(){var d=b.elementHeight(c),j=b.elementWidth(c);d!==i||j!==h?(e.grid.gridHeight=d,e.grid.gridWidth=j,a.$apply(function(){e.grid.refresh().then(function(){f(),g()})})):g()},250)}var h,i;f();var j;g(),a.$on("$destroy",function(){clearTimeout(j)})}}}])}(),function(){"use strict";var a=angular.module("ui.grid.cellNav",["ui.grid"]);a.constant("uiGridCellNavConstants",{FEATURE_NAME:"gridCellNav",CELL_NAV_EVENT:"cellNav",direction:{LEFT:0,RIGHT:1,UP:2,DOWN:3,PG_UP:4,PG_DOWN:5},EVENT_TYPE:{KEYDOWN:0,CLICK:1,CLEAR:2}}),a.factory("uiGridCellNavFactory",["gridUtil","uiGridConstants","uiGridCellNavConstants","GridRowColumn","$q",function(a,b,c,d,e){var f=function(a,b,c,d){this.rows=a.visibleRowCache,this.columns=b.visibleColumnCache,this.leftColumns=c?c.visibleColumnCache:[],this.rightColumns=d?d.visibleColumnCache:[],this.bodyContainer=a};return f.prototype.getFocusableCols=function(){var a=this.leftColumns.concat(this.columns,this.rightColumns);return a.filter(function(a){return a.colDef.allowCellFocus})},f.prototype.getFocusableRows=function(){return this.rows.filter(function(a){return a.allowCellFocus!==!1})},f.prototype.getNextRowCol=function(a,b,d){switch(a){case c.direction.LEFT:return this.getRowColLeft(b,d);case c.direction.RIGHT:return this.getRowColRight(b,d);case c.direction.UP:return this.getRowColUp(b,d);case c.direction.DOWN:return this.getRowColDown(b,d);case c.direction.PG_UP:return this.getRowColPageUp(b,d);case c.direction.PG_DOWN:return this.getRowColPageDown(b,d)}},f.prototype.initializeSelection=function(){var a=this.getFocusableCols(),b=this.getFocusableRows();if(0===a.length||0===b.length)return null;return new d(b[0],a[0])},f.prototype.getRowColLeft=function(a,b){var c=this.getFocusableCols(),e=this.getFocusableRows(),f=c.indexOf(b),g=e.indexOf(a);-1===f&&(f=1);var h=0===f?c.length-1:f-1;return h>f?0===g?new d(a,c[h]):new d(e[g-1],c[h]):new d(a,c[h])},f.prototype.getRowColRight=function(a,b){var c=this.getFocusableCols(),e=this.getFocusableRows(),f=c.indexOf(b),g=e.indexOf(a);-1===f&&(f=0);var h=f===c.length-1?0:f+1;return f>h?g===e.length-1?new d(a,c[h]):new d(e[g+1],c[h]):new d(a,c[h])},f.prototype.getRowColDown=function(a,b){var c=this.getFocusableCols(),e=this.getFocusableRows(),f=c.indexOf(b),g=e.indexOf(a);return-1===f&&(f=0),g===e.length-1?new d(a,c[f]):new d(e[g+1],c[f])},f.prototype.getRowColPageDown=function(a,b){var c=this.getFocusableCols(),e=this.getFocusableRows(),f=c.indexOf(b),g=e.indexOf(a);-1===f&&(f=0);var h=this.bodyContainer.minRowsToRender();return g>=e.length-h?new d(e[e.length-1],c[f]):new d(e[g+h],c[f])},f.prototype.getRowColUp=function(a,b){var c=this.getFocusableCols(),e=this.getFocusableRows(),f=c.indexOf(b),g=e.indexOf(a);return-1===f&&(f=0),0===g?new d(a,c[f]):new d(e[g-1],c[f])},f.prototype.getRowColPageUp=function(a,b){var c=this.getFocusableCols(),e=this.getFocusableRows(),f=c.indexOf(b),g=e.indexOf(a);-1===f&&(f=0);var h=this.bodyContainer.minRowsToRender();return 0>g-h?new d(e[0],c[f]):new d(e[g-h],c[f])},f}]),a.service("uiGridCellNavService",["gridUtil","uiGridConstants","uiGridCellNavConstants","$q","uiGridCellNavFactory","GridRowColumn","ScrollEvent",function(a,b,c,d,e,f,g){var h={initializeGrid:function(a){a.registerColumnBuilder(h.cellNavColumnBuilder),a.cellNav={},a.cellNav.lastRowCol=null,a.cellNav.focusedCells=[],h.defaultGridOptions(a.options);var b={events:{cellNav:{navigate:function(a,b){},viewPortKeyDown:function(a,b){},viewPortKeyPress:function(a,b){}}},methods:{cellNav:{scrollToFocus:function(b,c){return h.scrollToFocus(a,b,c)},getFocusedCell:function(){return a.cellNav.lastRowCol},getCurrentSelection:function(){return a.cellNav.focusedCells},rowColSelectIndex:function(b){for(var c=-1,d=0;d<a.cellNav.focusedCells.length;d++)if(a.cellNav.focusedCells[d].col.uid===b.col.uid&&a.cellNav.focusedCells[d].row.uid===b.row.uid){c=d;break}return c}}}};a.api.registerEventsFromObject(b.events),a.api.registerMethodsFromObject(b.methods)},defaultGridOptions:function(a){a.modifierKeysToMultiSelectCells=a.modifierKeysToMultiSelectCells===!0},decorateRenderContainers:function(a){var b=a.hasRightContainer()?a.renderContainers.right:null,c=a.hasLeftContainer()?a.renderContainers.left:null;null!==c&&(a.renderContainers.left.cellNav=new e(a.renderContainers.body,c,b,a.renderContainers.body)),null!==b&&(a.renderContainers.right.cellNav=new e(a.renderContainers.body,b,a.renderContainers.body,c)),
\ No newline at end of file
diff --git a/public/app/ec36ec5b.app.css b/public/app/ec36ec5b.app.css
new file mode 100644
index 0000000..6c03a00
--- /dev/null
+++ b/public/app/ec36ec5b.app.css
@@ -0,0 +1 @@
\ No newline at end of file
diff --git a/public/app/f3572dd3.vendor.css b/public/app/f3572dd3.vendor.css
deleted file mode 100644
index 3567778..0000000
--- a/public/app/f3572dd3.vendor.css
+++ /dev/null
@@ -1,38 +0,0 @@
-@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)
-angular-xeditable - 0.1.9
-Edit-in-place for angular.js
-Build date: 2015-03-26 
-Animate.css - http://daneden.me/animate
-Licensed under the MIT license - http://opensource.org/licenses/MIT
-
-Copyright (c) 2015 Daniel Eden
- * 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)
- *  Font Awesome 4.4.0 by @davegandy - http://fontawesome.io - @fontawesome
- *  License - http://fontawesome.io/license (Font: SIL OFL 1.1, CSS: MIT License)
- * ui-select
- * http://github.com/angular-ui/ui-select
- * Version: 0.13.2 - 2015-10-09T15:34:24.045Z
- * License: MIT
- * ui-grid - v3.0.7 - 2015-10-06
- * Copyright (c) 2015 ; License: MIT 
- * Stylesheet for the Date Range Picker, for use with Bootstrap 3.x
- *
- * Copyright 2013 Dan Grossman ( http://www.dangrossman.info )
- * Licensed under the Apache License v2.0
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Built for http://www.improvely.com
- */.daterangepicker.dropdown-menu{max-width:none;z-index:3000}.daterangepicker.opensleft .calendar,.daterangepicker.opensleft .ranges{float:left;margin:4px}.daterangepicker.openscenter .calendar,.daterangepicker.openscenter .ranges,.daterangepicker.opensright .calendar,.daterangepicker.opensright .ranges{float:right;margin:4px}.daterangepicker.single .calendar,.daterangepicker.single .ranges{float:none}.daterangepicker .ranges .range_inputs>div,.daterangepicker_start_input{float:left}.daterangepicker .ranges{width:160px;text-align:left}.daterangepicker .ranges .range_inputs>div:nth-child(2){padding-left:11px}.daterangepicker .calendar{display:none;max-width:270px}.daterangepicker.show-calendar .calendar{display:block}.daterangepicker .calendar.single .calendar-date{border:none}.daterangepicker .calendar td,.daterangepicker .calendar th{font-family:'Helvetica Neue',Helvetica,Arial,sans-serif;white-space:nowrap;text-align:center;min-width:32px}.daterangepicker .daterangepicker_end_input label,.daterangepicker .daterangepicker_start_input label{color:#333;display:block;font-size:11px;font-weight:400;height:20px;line-height:20px;margin-bottom:2px;text-shadow:#fff 1px 1px 0;text-transform:uppercase;width:74px}.daterangepicker .ranges input{font-size:11px}.daterangepicker .ranges .input-mini{border:1px solid #ccc;border-radius:4px;color:#555;display:block;font-size:11px;height:30px;line-height:30px;vertical-align:middle;margin:0 0 10px;padding:0 6px;width:74px}.daterangepicker .ranges ul{list-style:none;margin:0;padding:0}.daterangepicker .ranges li{font-size:13px;background:#f5f5f5;border:1px solid #f5f5f5;color:#08c;padding:3px 12px;margin-bottom:8px;-webkit-border-radius:5px;-moz-border-radius:5px;border-radius:5px;cursor:pointer}.daterangepicker .ranges li.active,.daterangepicker .ranges li:hover{background:#08c;border:1px solid #08c;color:#fff}.daterangepicker .calendar-date{border:1px solid #ddd;padding:4px;border-radius:4px;background:#fff}.daterangepicker .calendar-time{text-align:center;margin:8px auto 0;line-height:30px}.daterangepicker{position:absolute;background:#fff;top:100px;left:20px;padding:4px;margin-top:1px;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px}.daterangepicker.opensleft:before{position:absolute;top:-7px;right: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,.2);content:''}.daterangepicker.opensleft:after{position:absolute;top:-6px;right:10px;display:inline-block;border-right:6px solid transparent;border-bottom:6px solid #fff;border-left:6px solid transparent;content:''}.daterangepicker.openscenter:after,.daterangepicker.openscenter:before{left:0;right:0;width:0;margin-left:auto;margin-right:auto;position:absolute;display:inline-block;content:''}.daterangepicker.openscenter:before{top:-7px;border-right:7px solid transparent;border-bottom:7px solid #ccc;border-left:7px solid transparent;border-bottom-color:rgba(0,0,0,.2)}.daterangepicker.openscenter:after{top:-6px;border-right:6px solid transparent;border-bottom:6px solid #fff;border-left:6px solid transparent}.daterangepicker.opensright: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,.2);content:''}.daterangepicker.opensright: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:''}.daterangepicker table{width:100%;margin:0}.daterangepicker td,.daterangepicker th{text-align:center;width:20px;height:20px;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;cursor:pointer;white-space:nowrap}.daterangepicker option.disabled,.daterangepicker td.disabled,.daterangepicker td.off{color:#999}.daterangepicker td.available:hover,.daterangepicker th.available:hover{background:#eee}.daterangepicker td.in-range{background:#ebf4f8;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.daterangepicker td.start-date{-webkit-border-radius:4px 0 0 4px;-moz-border-radius:4px 0 0 4px;border-radius:4px 0 0 4px}.daterangepicker td.end-date{-webkit-border-radius:0 4px 4px 0;-moz-border-radius:0 4px 4px 0;border-radius:0 4px 4px 0}.daterangepicker td.start-date.end-date{-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px}.daterangepicker td.active,.daterangepicker td.active:hover{background-color:#357ebd;border-color:#3071a9;color:#fff}.daterangepicker td.week,.daterangepicker th.week{font-size:80%;color:#ccc}.daterangepicker select.monthselect,.daterangepicker select.yearselect{font-size:12px;padding:1px;height:auto;margin:0;cursor:default}.daterangepicker select.monthselect{margin-right:2%;width:56%}.daterangepicker select.yearselect{width:40%}.daterangepicker select.ampmselect,.daterangepicker select.hourselect,.daterangepicker select.minuteselect,.daterangepicker select.secondselect{width:50px;margin-bottom:0}.daterangepicker_end_input{float:left;padding-left:11px}.daterangepicker th.month{width:auto}
\ No newline at end of file
diff --git a/public/assets/css/global/custom.css b/public/assets/css/global/custom.css
index 654c465..29171d5 100644
--- a/public/assets/css/global/custom.css
+++ b/public/assets/css/global/custom.css
@@ -67,6 +67,9 @@ Change Quick Sidebar Width
   margin-left: -370px;
 }
 */
+.demo {
+  background-image:url('../../images/demo.png');
+}
 
 .float-right{
   float: right;
@@ -396,3 +399,11 @@ width: auto !important;
   position: absolute;
   right: 10px;
 }
+
+.extract-grid{
+  min-height: 600px;
+}
+
+body > [uib-modal-window]:not([modal-render]) {
+    display: none;
+}
diff --git a/public/assets/css/jstree-metronic/32px.png b/public/assets/css/jstree-metronic/32px.png
new file mode 100644
index 0000000000000000000000000000000000000000..41f28eff78015a4f6d94564280fd897ba33110d9
GIT binary patch
literal 2574
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
B#6JK4

literal 0
HcmV?d00001

diff --git a/public/assets/css/jstree-metronic/32px_line.png b/public/assets/css/jstree-metronic/32px_line.png
new file mode 100644
index 0000000000000000000000000000000000000000..4bc79e6a93ab6b733a3a29967d4a42973a83432d
GIT binary patch
literal 2387
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

literal 0
HcmV?d00001

diff --git a/public/assets/css/jstree-metronic/32px_original.png b/public/assets/css/jstree-metronic/32px_original.png
new file mode 100644
index 0000000000000000000000000000000000000000..15327152481789306eadef88393cd1c748dc31a7
GIT binary patch
literal 3121
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

literal 0
HcmV?d00001

diff --git a/public/assets/css/jstree-metronic/40px.png b/public/assets/css/jstree-metronic/40px.png
new file mode 100644
index 0000000000000000000000000000000000000000..56110bf531a0c5c410709974ff302882475f5de8
GIT binary patch
literal 1413
zcmeAS@N?(olHy`uVBq!ia0vp^9~c-ICvY$WS<5+O{eYBNfKP}kkT%8umo8nx5JM3-
z%&oc<s8g^c$S;`T9~%eLUq1OiF_E&0B3!Wnb>(sQ85mgJdb&7<RNQ)dH@5h;f<SBH
zB(tUWU;g`Ve|z<gtZYjTzNGNqMb8x%Ka@Nzq~q?TDV`ZN$@D-2BQqP1gh2w35ib>!
ztyf^Wdgg(vK5E-E;-=m>RN<P`{rGB!?u2lqZ60y05e#OpU%&pqbwusMyVY`EODm5b
zUH0MKN+7Fhdh`8bg<JBcmW%vJS2_M`S|$6z+Z$zGMn9Kj{%<?$+rHL&iXZkr&U_pF
zQkL<*{i1FAmd5GcklH0yy>$7P-lsQK@5#8EFmLan+n0Ku-C8}n!X~S4&!&~BBI~n0
z3LMjpk~_6W@PO+}-U6@v%HNDT!>(<a68C)j(()to#17qBwe-^Kimab~H^L3QdGx&2
zUw-<qv8X|LW5ILBmtP|v1x|naNBrZrqg{(DbuPc_G<E+R(Xn4YO!n;Ku+z31-(_62
z-!bD$$JO7Oy7^bXyJl~*aD1W|zd|)WM>F0)H~x!3{0@`&ng~lnCTK9h!wa3^y!Kkm
z1FgDwr>u8)%|C3A`>Bd4LRx3j%%t2YyZt_N9bNV%>(GRE2N(TVE}O-Da8^V9*5<YA
zn7WnjBpz5bp)O^^d&!R5>L>o3+tSqe*UtEPh2C0$<2!Xbk8C`^RA}&FhlNx{gbbgJ
zRv){Z2s=xEr*c#K5ygYbNeAX!irKP5*YIOP*2zbWPZe1iylfUJ#VKr9mLXY@zcSz8
z<+i9BKFPbUymo#4N&3;E6V6vU-E}1oblnI#bJSTk^1$PZhdWpsLLOeK`S{R)7n~H(
zy@r%ZnA!e3Ft}8&xXyl_*qS=W3oYS%ng@9o8}o)cZ8P5Ee$4Xi-XNud+1qR92;X0#
z%DBBM`ncuSyNOH%ySL}gnS6hm8IRqgT*>EOz8_wBz?bFV$FSz}-@J}6Z8&wisPZ$f
z-LKW3`SSiAmHl$-#r-u*^7~e?v6SEMZ)(~uZ}o20!vnYdZ8x`MJa~J2U1XrahiNy=
zxp}zX&Hd_TyL5N@Pe=WzzpH1>*uJ!JQP_#j<M$T*SQUJFp;Fw5onPWEKHk;c-nc0B
z!qrQE?|+>-z5TB1tqrdqR$qV1!^&{r;lWRfqJOM<8hUWkp`E{-_S9q_`5o3>^ZE4O
zv{^OPmw%V7tYg0YyKRTvq6fC07Vs~u;NSWp+3jAkx2wELv7FCs*~QBrpFCJ71<FQv
z!;VLyAnwB+fiCwCS7uDK|L{a%ruBz6D;Ai4_+qfa_`{za>-9fyHs*ytFjo4lcX03D
ziwBn5lsy)(`JrxjuzLR;??&?tceAJNFP1{Y(gU4@(%!~=XclIkv#w+MHlNwc1?K0i
zR=uAVwd?Jr8tF$rmH2-;>HbXeR*f}SYcne<PE2MwBP`z|IansQ0mTC~r#>!omt|mP
z+ryOe^1wG;$sZ@}o-*y9;UUAZM$nzf`^drr-xQ^9%-h`fHr?#QhxZoeYJaS)^*6fw
z=~Moj^HDZ6HQDFwBXk-0`2PJ$y&YE{E4SwFvB!<`H#OP=ZM87HasKy~bBxn-?j!sI
s3&IV~AH2;z9F6-du@2Lv_iyE|jw@E}D0)2=SSm7jy85}Sb4q9e06vn3&j0`b

literal 0
HcmV?d00001

diff --git a/public/assets/css/jstree-metronic/style.css b/public/assets/css/jstree-metronic/style.css
new file mode 100644
index 0000000..018b57c
--- /dev/null
+++ b/public/assets/css/jstree-metronic/style.css
@@ -0,0 +1,952 @@
+/* jsTree default theme */
+.jstree-node,
+.jstree-children,
+.jstree-container-ul {
+  display: block;
+  margin: 0;
+  padding: 0;
+  list-style-type: none;
+  list-style-image: none;
+}
+.jstree-node {
+  white-space: nowrap;
+}
+.jstree-anchor {
+  display: inline-block;
+  color: black;
+  white-space: nowrap;
+  padding: 0 4px 0 1px;
+  margin: 0;
+  vertical-align: top;
+}
+.jstree-anchor:focus {
+  outline: 0;
+}
+.jstree-anchor,
+.jstree-anchor:link,
+.jstree-anchor:visited,
+.jstree-anchor:hover,
+.jstree-anchor:active {
+  text-decoration: none;
+  color: inherit;
+}
+.jstree-icon {
+  display: inline-block;
+  text-decoration: none;
+  margin: 0;
+  padding: 0;
+  vertical-align: top;
+  text-align: center;
+}
+.jstree-icon:empty {
+  display: inline-block;
+  text-decoration: none;
+  margin: 0;
+  padding: 0;
+  vertical-align: top;
+  text-align: center;
+}
+.jstree-ocl {
+  cursor: pointer;
+}
+.jstree-leaf > .jstree-ocl {
+  cursor: default;
+}
+.jstree .jstree-open > .jstree-children {
+  display: block;
+}
+.jstree .jstree-closed > .jstree-children,
+.jstree .jstree-leaf > .jstree-children {
+  display: none;
+}
+.jstree-anchor > .jstree-themeicon {
+  margin-right: 2px;
+}
+.jstree-no-icons .jstree-themeicon,
+.jstree-anchor > .jstree-themeicon-hidden {
+  display: none;
+}
+.jstree-rtl .jstree-anchor {
+  padding: 0 1px 0 4px;
+}
+.jstree-rtl .jstree-anchor > .jstree-themeicon {
+  margin-left: 2px;
+  margin-right: 0;
+}
+.jstree-rtl .jstree-node {
+  margin-left: 0;
+}
+.jstree-rtl .jstree-container-ul > .jstree-node {
+  margin-right: 0;
+}
+.jstree-wholerow-ul {
+  position: relative;
+  display: inline-block;
+  min-width: 100%;
+}
+.jstree-wholerow-ul .jstree-leaf > .jstree-ocl {
+  cursor: pointer;
+}
+.jstree-wholerow-ul .jstree-anchor,
+.jstree-wholerow-ul .jstree-icon {
+  position: relative;
+}
+.jstree-wholerow-ul .jstree-wholerow {
+  width: 100%;
+  cursor: pointer;
+  position: absolute;
+  left: 0;
+  -webkit-user-select: none;
+  -moz-user-select: none;
+  -ms-user-select: none;
+  user-select: none;
+}
+.vakata-context {
+  display: none;
+}
+.vakata-context,
+.vakata-context ul {
+  margin: 0;
+  padding: 2px;
+  position: absolute;
+  background: #f5f5f5;
+  border: 1px solid #979797;
+  -moz-box-shadow: 5px 5px 4px -4px #666666;
+  -webkit-box-shadow: 2px 2px 2px #999999;
+  box-shadow: 2px 2px 2px #999999;
+}
+.vakata-context ul {
+  list-style: none;
+  left: 100%;
+  margin-top: -2.7em;
+  margin-left: -4px;
+}
+.vakata-context .vakata-context-right ul {
+  left: auto;
+  right: 100%;
+  margin-left: auto;
+  margin-right: -4px;
+}
+.vakata-context li {
+  list-style: none;
+  display: inline;
+}
+.vakata-context li > a {
+  display: block;
+  padding: 0 2em 0 2em;
+  text-decoration: none;
+  width: auto;
+  color: black;
+  white-space: nowrap;
+  line-height: 2.4em;
+  -moz-text-shadow: 1px 1px 0 white;
+  -webkit-text-shadow: 1px 1px 0 white;
+  text-shadow: 1px 1px 0 white;
+  -moz-border-radius: 1px;
+  -webkit-border-radius: 1px;
+  border-radius: 1px;
+}
+.vakata-context li > a:hover {
+  position: relative;
+  background-color: #e8eff7;
+  -moz-box-shadow: 0 0 2px #0a6aa1;
+  -webkit-box-shadow: 0 0 2px #0a6aa1;
+  box-shadow: 0 0 2px #0a6aa1;
+}
+.vakata-context li > a.vakata-context-parent {
+  background-image: url("data:image/gif;base64,R0lGODlhCwAHAIAAACgoKP///yH5BAEAAAEALAAAAAALAAcAAAIORI4JlrqN1oMSnmmZDQUAOw==");
+  background-position: right center;
+  background-repeat: no-repeat;
+}
+.vakata-context li > a:focus {
+  outline: 0;
+}
+.vakata-context .vakata-context-hover > a {
+  position: relative;
+  background-color: #e8eff7;
+  -moz-box-shadow: 0 0 2px #0a6aa1;
+  -webkit-box-shadow: 0 0 2px #0a6aa1;
+  box-shadow: 0 0 2px #0a6aa1;
+}
+.vakata-context .vakata-context-separator a,
+.vakata-context .vakata-context-separator a:hover {
+  background: white;
+  border: 0;
+  border-top: 1px solid #e2e3e3;
+  height: 1px;
+  min-height: 1px;
+  max-height: 1px;
+  padding: 0;
+  margin: 0 0 0 2.4em;
+  border-left: 1px solid #e0e0e0;
+  -moz-text-shadow: 0 0 0 transparent;
+  -webkit-text-shadow: 0 0 0 transparent;
+  text-shadow: 0 0 0 transparent;
+  -moz-box-shadow: 0 0 0 transparent;
+  -webkit-box-shadow: 0 0 0 transparent;
+  box-shadow: 0 0 0 transparent;
+  -moz-border-radius: 0;
+  -webkit-border-radius: 0;
+  border-radius: 0;
+}
+.vakata-context .vakata-contextmenu-disabled a,
+.vakata-context .vakata-contextmenu-disabled a:hover {
+  color: silver;
+  background-color: transparent;
+  border: 0;
+  box-shadow: 0 0 0;
+}
+.vakata-context li > a > i {
+  text-decoration: none;
+  display: inline-block;
+  width: 2.4em;
+  height: 2.4em;
+  background: transparent;
+  margin: 0 0 0 -2em;
+  vertical-align: top;
+  text-align: center;
+  line-height: 2.4em;
+}
+.vakata-context li > a > i:empty {
+  width: 2.4em;
+  line-height: 2.4em;
+}
+.vakata-context li > a .vakata-contextmenu-sep {
+  display: inline-block;
+  width: 1px;
+  height: 2.4em;
+  background: white;
+  margin: 0 0.5em 0 0;
+  border-left: 1px solid #e2e3e3;
+}
+.vakata-context .vakata-contextmenu-shortcut {
+  font-size: 0.8em;
+  color: silver;
+  opacity: 0.5;
+  display: none;
+}
+.vakata-context-rtl ul {
+  left: auto;
+  right: 100%;
+  margin-left: auto;
+  margin-right: -4px;
+}
+.vakata-context-rtl li > a.vakata-context-parent {
+  background-image: url("data:image/gif;base64,R0lGODlhCwAHAIAAACgoKP///yH5BAEAAAEALAAAAAALAAcAAAINjI+AC7rWHIsPtmoxLAA7");
+  background-position: left center;
+  background-repeat: no-repeat;
+}
+.vakata-context-rtl .vakata-context-separator > a {
+  margin: 0 2.4em 0 0;
+  border-left: 0;
+  border-right: 1px solid #e2e3e3;
+}
+.vakata-context-rtl .vakata-context-left ul {
+  right: auto;
+  left: 100%;
+  margin-left: -4px;
+  margin-right: auto;
+}
+.vakata-context-rtl li > a > i {
+  margin: 0 -2em 0 0;
+}
+.vakata-context-rtl li > a .vakata-contextmenu-sep {
+  margin: 0 0 0 0.5em;
+  border-left-color: white;
+  background: #e2e3e3;
+}
+#jstree-marker {
+  position: absolute;
+  top: 0;
+  left: 0;
+  margin: 0;
+  padding: 0;
+  border-right: 0;
+  border-top: 5px solid transparent;
+  border-bottom: 5px solid transparent;
+  border-left: 5px solid;
+  width: 0;
+  height: 0;
+  font-size: 0;
+  line-height: 0;
+}
+#jstree-dnd {
+  line-height: 16px;
+  margin: 0;
+  padding: 4px;
+}
+#jstree-dnd .jstree-icon,
+#jstree-dnd .jstree-copy {
+  display: inline-block;
+  text-decoration: none;
+  margin: 0 2px 0 0;
+  padding: 0;
+  width: 16px;
+  height: 16px;
+}
+#jstree-dnd .jstree-ok {
+  background: green;
+}
+#jstree-dnd .jstree-er {
+  background: red;
+}
+#jstree-dnd .jstree-copy {
+  margin: 0 2px 0 2px;
+}
+.jstree-default .jstree-node,
+.jstree-default .jstree-icon {
+  background-repeat: no-repeat;
+  background-color: transparent;
+}
+.jstree-default .jstree-anchor,
+.jstree-default .jstree-wholerow {
+  transition: background-color 0.15s, box-shadow 0.15s;
+}
+.jstree-default .jstree-hovered {
+  background: #eee;
+  border-radius: 2px;
+  box-shadow: inset 0 0 1px #ccc;
+}
+.jstree-default .jstree-clicked {
+  background: #e1e1e1;
+  border-radius: 2px;
+  box-shadow: inset 0 0 1px #999;
+}
+.jstree-default .jstree-no-icons .jstree-anchor > .jstree-themeicon {
+  display: none;
+}
+.jstree-default .jstree-disabled {
+  background: transparent;
+  color: #666;
+}
+.jstree-default .jstree-disabled.jstree-hovered {
+  background: transparent;
+  box-shadow: none;
+}
+.jstree-default .jstree-disabled.jstree-clicked {
+  background: #efefef;
+}
+.jstree-default .jstree-disabled > .jstree-icon {
+  opacity: 0.8;
+  filter: url("data:image/svg+xml;utf8,<svg xmlns=\'http://www.w3.org/2000/svg\'><filter id=\'jstree-grayscale\'><feColorMatrix type=\'matrix\' values=\'0.3333 0.3333 0.3333 0 0 0.3333 0.3333 0.3333 0 0 0.3333 0.3333 0.3333 0 0 0 0 0 1 0\'/></filter></svg>#jstree-grayscale");
+  /* Firefox 10+ */
+  filter: gray;
+  /* IE6-9 */
+  -webkit-filter: grayscale(100%);
+  /* Chrome 19+ & Safari 6+ */
+}
+.jstree-default .jstree-search {
+  font-style: italic;
+  color: #8b0000;
+  font-weight: bold;
+}
+.jstree-default .jstree-no-checkboxes .jstree-checkbox {
+  display: none !important;
+}
+.jstree-default.jstree-checkbox-no-clicked .jstree-clicked {
+  background: transparent;
+  box-shadow: none;
+}
+.jstree-default.jstree-checkbox-no-clicked .jstree-clicked.jstree-hovered {
+  background: #e7f4f9;
+}
+.jstree-default.jstree-checkbox-no-clicked > .jstree-wholerow-ul .jstree-wholerow-clicked {
+  background: transparent;
+}
+.jstree-default.jstree-checkbox-no-clicked > .jstree-wholerow-ul .jstree-wholerow-clicked.jstree-wholerow-hovered {
+  background: #e7f4f9;
+}
+#jstree-dnd.jstree-default .jstree-ok,
+#jstree-dnd.jstree-default .jstree-er {
+  background-image: url("32px.png");
+  background-repeat: no-repeat;
+  background-color: transparent;
+}
+#jstree-dnd.jstree-default i {
+  background: transparent;
+  width: 16px;
+  height: 16px;
+}
+#jstree-dnd.jstree-default .jstree-ok {
+  background-position: -9px -71px;
+}
+#jstree-dnd.jstree-default .jstree-er {
+  background-position: -39px -71px;
+}
+.jstree-default > .jstree-striped {
+  background: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAAkCAMAAAB/qqA+AAAABlBMVEUAAAAAAAClZ7nPAAAAAnRSTlMNAMM9s3UAAAAXSURBVHjajcEBAQAAAIKg/H/aCQZ70AUBjAATb6YPDgAAAABJRU5ErkJggg==") left top repeat;
+}
+.jstree-default > .jstree-wholerow-ul .jstree-hovered,
+.jstree-default > .jstree-wholerow-ul .jstree-clicked {
+  background: transparent;
+  box-shadow: none;
+  border-radius: 0;
+}
+.jstree-default .jstree-wholerow {
+  -moz-box-sizing: border-box;
+  -webkit-box-sizing: border-box;
+  box-sizing: border-box;
+}
+.jstree-default .jstree-wholerow-hovered {
+  background: #e7f4f9;
+}
+.jstree-default .jstree-wholerow-clicked {
+  background: #beebff;
+  background: -moz-linear-gradient(top, #beebff 0%, #a8e4ff 100%);
+  background: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #beebff), color-stop(100%, #a8e4ff));
+  background: -webkit-linear-gradient(top, #beebff 0%, #a8e4ff 100%);
+  background: -o-linear-gradient(top, #beebff 0%, #a8e4ff 100%);
+  background: -ms-linear-gradient(top, #beebff 0%, #a8e4ff 100%);
+  background: linear-gradient(to bottom, #beebff 0%, #a8e4ff 100%);
+  /*filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='@color1', endColorstr='@color2',GradientType=0 );*/
+}
+.jstree-default .jstree-node {
+  min-height: 24px;
+  line-height: 24px;
+  margin-left: 24px;
+  min-width: 24px;
+}
+.jstree-default .jstree-anchor {
+  line-height: 24px;
+  height: 24px;
+}
+.jstree-default .jstree-icon {
+  width: 24px;
+  height: 24px;
+  line-height: 24px;
+}
+.jstree-default .jstree-icon:empty {
+  width: 24px;
+  height: 24px;
+  line-height: 24px;
+}
+.jstree-default.jstree-rtl .jstree-node {
+  margin-right: 24px;
+}
+.jstree-default .jstree-wholerow {
+  height: 24px;
+}
+.jstree-default .jstree-node,
+.jstree-default .jstree-icon {
+  background-image: url("32px.png");
+}
+.jstree-default .jstree-node {
+  background-position: -292px -4px;
+  background-repeat: repeat-y;
+}
+.jstree-default .jstree-last {
+  background: transparent;
+}
+.jstree-default .jstree-open > .jstree-ocl {
+  background-position: -132px -4px;
+}
+.jstree-default .jstree-closed > .jstree-ocl {
+  background-position: -100px -4px;
+}
+.jstree-default .jstree-leaf > .jstree-ocl {
+  background-position: -68px -4px;
+}
+.jstree-default .jstree-themeicon {
+  background-position: -260px -4px;
+}
+.jstree-default > .jstree-no-dots .jstree-node,
+.jstree-default > .jstree-no-dots .jstree-leaf > .jstree-ocl {
+  background: transparent;
+}
+.jstree-default > .jstree-no-dots .jstree-open > .jstree-ocl {
+  background-position: -36px -4px;
+}
+.jstree-default > .jstree-no-dots .jstree-closed > .jstree-ocl {
+  background-position: -4px -4px;
+}
+.jstree-default .jstree-disabled {
+  background: transparent;
+}
+.jstree-default .jstree-disabled.jstree-hovered {
+  background: transparent;
+}
+.jstree-default .jstree-disabled.jstree-clicked {
+  background: #efefef;
+}
+.jstree-default .jstree-checkbox {
+  background-position: -164px -4px;
+}
+.jstree-default .jstree-checkbox:hover {
+  background-position: -164px -36px;
+}
+.jstree-default .jstree-clicked > .jstree-checkbox {
+  background-position: -228px -4px;
+}
+.jstree-default .jstree-clicked > .jstree-checkbox:hover {
+  background-position: -228px -36px;
+}
+.jstree-default .jstree-anchor > .jstree-undetermined {
+  background-position: -196px -4px;
+}
+.jstree-default .jstree-anchor > .jstree-undetermined:hover {
+  background-position: -196px -36px;
+}
+.jstree-default > .jstree-striped {
+  background-size: auto 48px;
+}
+.jstree-default.jstree-rtl .jstree-node {
+  background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAACAQMAAAB49I5GAAAABlBMVEUAAAAdHRvEkCwcAAAAAXRSTlMAQObYZgAAAAxJREFUCNdjAAMOBgAAGAAJMwQHdQAAAABJRU5ErkJggg==");
+  background-position: 100% 1px;
+  background-repeat: repeat-y;
+}
+.jstree-default.jstree-rtl .jstree-last {
+  background: transparent;
+}
+.jstree-default.jstree-rtl .jstree-open > .jstree-ocl {
+  background-position: -132px -36px;
+}
+.jstree-default.jstree-rtl .jstree-closed > .jstree-ocl {
+  background-position: -100px -36px;
+}
+.jstree-default.jstree-rtl .jstree-leaf > .jstree-ocl {
+  background-position: -68px -36px;
+}
+.jstree-default.jstree-rtl > .jstree-no-dots .jstree-node,
+.jstree-default.jstree-rtl > .jstree-no-dots .jstree-leaf > .jstree-ocl {
+  background: transparent;
+}
+.jstree-default.jstree-rtl > .jstree-no-dots .jstree-open > .jstree-ocl {
+  background-position: -36px -36px;
+}
+.jstree-default.jstree-rtl > .jstree-no-dots .jstree-closed > .jstree-ocl {
+  background-position: -4px -36px;
+}
+.jstree-default .jstree-themeicon-custom {
+  background-color: transparent;
+  background-image: none;
+  background-position: 0 0;
+}
+.jstree-default > .jstree-container-ul .jstree-loading > .jstree-ocl {
+  background: url("throbber.gif") center center no-repeat;
+}
+.jstree-default .jstree-file {
+  background: url("32px.png") -100px -68px no-repeat;
+}
+.jstree-default .jstree-folder {
+  background: url("32px.png") -260px -4px no-repeat;
+}
+.jstree-default.jstree-rtl .jstree-node {
+  background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAACAQMAAAB49I5GAAAABlBMVEUAAAAdHRvEkCwcAAAAAXRSTlMAQObYZgAAAAxJREFUCNdjAAMOBgAAGAAJMwQHdQAAAABJRU5ErkJggg==");
+}
+.jstree-default.jstree-rtl .jstree-last {
+  background: transparent;
+}
+.jstree-default-small .jstree-node {
+  min-height: 18px;
+  line-height: 18px;
+  margin-left: 18px;
+  min-width: 18px;
+}
+.jstree-default-small .jstree-anchor {
+  line-height: 18px;
+  height: 18px;
+}
+.jstree-default-small .jstree-icon {
+  width: 18px;
+  height: 18px;
+  line-height: 18px;
+}
+.jstree-default-small .jstree-icon:empty {
+  width: 18px;
+  height: 18px;
+  line-height: 18px;
+}
+.jstree-default-small.jstree-rtl .jstree-node {
+  margin-right: 18px;
+}
+.jstree-default-small .jstree-wholerow {
+  height: 18px;
+}
+.jstree-default-small .jstree-node,
+.jstree-default-small .jstree-icon {
+  background-image: url("32px.png");
+}
+.jstree-default-small .jstree-node {
+  background-position: -295px -7px;
+  background-repeat: repeat-y;
+}
+.jstree-default-small .jstree-last {
+  background: transparent;
+}
+.jstree-default-small .jstree-open > .jstree-ocl {
+  background-position: -135px -7px;
+}
+.jstree-default-small .jstree-closed > .jstree-ocl {
+  background-position: -103px -7px;
+}
+.jstree-default-small .jstree-leaf > .jstree-ocl {
+  background-position: -71px -7px;
+}
+.jstree-default-small .jstree-themeicon {
+  background-position: -263px -7px;
+}
+.jstree-default-small > .jstree-no-dots .jstree-node,
+.jstree-default-small > .jstree-no-dots .jstree-leaf > .jstree-ocl {
+  background: transparent;
+}
+.jstree-default-small > .jstree-no-dots .jstree-open > .jstree-ocl {
+  background-position: -39px -7px;
+}
+.jstree-default-small > .jstree-no-dots .jstree-closed > .jstree-ocl {
+  background-position: -7px -7px;
+}
+.jstree-default-small .jstree-disabled {
+  background: transparent;
+}
+.jstree-default-small .jstree-disabled.jstree-hovered {
+  background: transparent;
+}
+.jstree-default-small .jstree-disabled.jstree-clicked {
+  background: #efefef;
+}
+.jstree-default-small .jstree-checkbox {
+  background-position: -167px -7px;
+}
+.jstree-default-small .jstree-checkbox:hover {
+  background-position: -167px -39px;
+}
+.jstree-default-small .jstree-clicked > .jstree-checkbox {
+  background-position: -231px -7px;
+}
+.jstree-default-small .jstree-clicked > .jstree-checkbox:hover {
+  background-position: -231px -39px;
+}
+.jstree-default-small .jstree-anchor > .jstree-undetermined {
+  background-position: -199px -7px;
+}
+.jstree-default-small .jstree-anchor > .jstree-undetermined:hover {
+  background-position: -199px -39px;
+}
+.jstree-default-small > .jstree-striped {
+  background-size: auto 36px;
+}
+.jstree-default-small.jstree-rtl .jstree-node {
+  background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAACAQMAAAB49I5GAAAABlBMVEUAAAAdHRvEkCwcAAAAAXRSTlMAQObYZgAAAAxJREFUCNdjAAMOBgAAGAAJMwQHdQAAAABJRU5ErkJggg==");
+  background-position: 100% 1px;
+  background-repeat: repeat-y;
+}
+.jstree-default-small.jstree-rtl .jstree-last {
+  background: transparent;
+}
+.jstree-default-small.jstree-rtl .jstree-open > .jstree-ocl {
+  background-position: -135px -39px;
+}
+.jstree-default-small.jstree-rtl .jstree-closed > .jstree-ocl {
+  background-position: -103px -39px;
+}
+.jstree-default-small.jstree-rtl .jstree-leaf > .jstree-ocl {
+  background-position: -71px -39px;
+}
+.jstree-default-small.jstree-rtl > .jstree-no-dots .jstree-node,
+.jstree-default-small.jstree-rtl > .jstree-no-dots .jstree-leaf > .jstree-ocl {
+  background: transparent;
+}
+.jstree-default-small.jstree-rtl > .jstree-no-dots .jstree-open > .jstree-ocl {
+  background-position: -39px -39px;
+}
+.jstree-default-small.jstree-rtl > .jstree-no-dots .jstree-closed > .jstree-ocl {
+  background-position: -7px -39px;
+}
+.jstree-default-small .jstree-themeicon-custom {
+  background-color: transparent;
+  background-image: none;
+  background-position: 0 0;
+}
+.jstree-default-small > .jstree-container-ul .jstree-loading > .jstree-ocl {
+  background: url("throbber.gif") center center no-repeat;
+}
+.jstree-default-small .jstree-file {
+  background: url("32px.png") -103px -71px no-repeat;
+}
+.jstree-default-small .jstree-folder {
+  background: url("32px.png") -263px -7px no-repeat;
+}
+.jstree-default-small.jstree-rtl .jstree-node {
+  background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABIAAAACAQMAAABv1h6PAAAABlBMVEUAAAAdHRvEkCwcAAAAAXRSTlMAQObYZgAAAAxJREFUCNdjAAMHBgAAiABBI4gz9AAAAABJRU5ErkJggg==");
+}
+.jstree-default-small.jstree-rtl .jstree-last {
+  background: transparent;
+}
+.jstree-default-large .jstree-node {
+  min-height: 32px;
+  line-height: 32px;
+  margin-left: 32px;
+  min-width: 32px;
+}
+.jstree-default-large .jstree-anchor {
+  line-height: 32px;
+  height: 32px;
+}
+.jstree-default-large .jstree-icon {
+  width: 32px;
+  height: 32px;
+  line-height: 32px;
+}
+.jstree-default-large .jstree-icon:empty {
+  width: 32px;
+  height: 32px;
+  line-height: 32px;
+}
+.jstree-default-large.jstree-rtl .jstree-node {
+  margin-right: 32px;
+}
+.jstree-default-large .jstree-wholerow {
+  height: 32px;
+}
+.jstree-default-large .jstree-node,
+.jstree-default-large .jstree-icon {
+  background-image: url("32px.png");
+}
+.jstree-default-large .jstree-node {
+  background-position: -288px 0px;
+  background-repeat: repeat-y;
+}
+.jstree-default-large .jstree-last {
+  background: transparent;
+}
+.jstree-default-large .jstree-open > .jstree-ocl {
+  background-position: -128px 0px;
+}
+.jstree-default-large .jstree-closed > .jstree-ocl {
+  background-position: -96px 0px;
+}
+.jstree-default-large .jstree-leaf > .jstree-ocl {
+  background-position: -64px 0px;
+}
+.jstree-default-large .jstree-themeicon {
+  background-position: -256px 0px;
+}
+.jstree-default-large > .jstree-no-dots .jstree-node,
+.jstree-default-large > .jstree-no-dots .jstree-leaf > .jstree-ocl {
+  background: transparent;
+}
+.jstree-default-large > .jstree-no-dots .jstree-open > .jstree-ocl {
+  background-position: -32px 0px;
+}
+.jstree-default-large > .jstree-no-dots .jstree-closed > .jstree-ocl {
+  background-position: 0px 0px;
+}
+.jstree-default-large .jstree-disabled {
+  background: transparent;
+}
+.jstree-default-large .jstree-disabled.jstree-hovered {
+  background: transparent;
+}
+.jstree-default-large .jstree-disabled.jstree-clicked {
+  background: #efefef;
+}
+.jstree-default-large .jstree-checkbox {
+  background-position: -160px 0px;
+}
+.jstree-default-large .jstree-checkbox:hover {
+  background-position: -160px -32px;
+}
+.jstree-default-large .jstree-clicked > .jstree-checkbox {
+  background-position: -224px 0px;
+}
+.jstree-default-large .jstree-clicked > .jstree-checkbox:hover {
+  background-position: -224px -32px;
+}
+.jstree-default-large .jstree-anchor > .jstree-undetermined {
+  background-position: -192px 0px;
+}
+.jstree-default-large .jstree-anchor > .jstree-undetermined:hover {
+  background-position: -192px -32px;
+}
+.jstree-default-large > .jstree-striped {
+  background-size: auto 64px;
+}
+.jstree-default-large.jstree-rtl .jstree-node {
+  background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAACAQMAAAB49I5GAAAABlBMVEUAAAAdHRvEkCwcAAAAAXRSTlMAQObYZgAAAAxJREFUCNdjAAMOBgAAGAAJMwQHdQAAAABJRU5ErkJggg==");
+  background-position: 100% 1px;
+  background-repeat: repeat-y;
+}
+.jstree-default-large.jstree-rtl .jstree-last {
+  background: transparent;
+}
+.jstree-default-large.jstree-rtl .jstree-open > .jstree-ocl {
+  background-position: -128px -32px;
+}
+.jstree-default-large.jstree-rtl .jstree-closed > .jstree-ocl {
+  background-position: -96px -32px;
+}
+.jstree-default-large.jstree-rtl .jstree-leaf > .jstree-ocl {
+  background-position: -64px -32px;
+}
+.jstree-default-large.jstree-rtl > .jstree-no-dots .jstree-node,
+.jstree-default-large.jstree-rtl > .jstree-no-dots .jstree-leaf > .jstree-ocl {
+  background: transparent;
+}
+.jstree-default-large.jstree-rtl > .jstree-no-dots .jstree-open > .jstree-ocl {
+  background-position: -32px -32px;
+}
+.jstree-default-large.jstree-rtl > .jstree-no-dots .jstree-closed > .jstree-ocl {
+  background-position: 0px -32px;
+}
+.jstree-default-large .jstree-themeicon-custom {
+  background-color: transparent;
+  background-image: none;
+  background-position: 0 0;
+}
+.jstree-default-large > .jstree-container-ul .jstree-loading > .jstree-ocl {
+  background: url("throbber.gif") center center no-repeat;
+}
+.jstree-default-large .jstree-file {
+  background: url("32px.png") -96px -64px no-repeat;
+}
+.jstree-default-large .jstree-folder {
+  background: url("32px.png") -256px 0px no-repeat;
+}
+.jstree-default-large.jstree-rtl .jstree-node {
+  background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAACAQMAAAAD0EyKAAAABlBMVEUAAAAdHRvEkCwcAAAAAXRSTlMAQObYZgAAAAxJREFUCNdjgIIGBgABCgCBvVLXcAAAAABJRU5ErkJggg==");
+}
+.jstree-default-large.jstree-rtl .jstree-last {
+  background: transparent;
+}
+@media (max-width: 768px) {
+  .jstree-default-responsive {
+    /*
+		.jstree-open > .jstree-ocl,
+		.jstree-closed > .jstree-ocl { border-radius:20px; background-color:white; }
+		*/
+  }
+  .jstree-default-responsive .jstree-icon {
+    background-image: url("40px.png");
+  }
+  .jstree-default-responsive .jstree-node,
+  .jstree-default-responsive .jstree-leaf > .jstree-ocl {
+    background: transparent;
+  }
+  .jstree-default-responsive .jstree-node {
+    min-height: 40px;
+    line-height: 40px;
+    margin-left: 40px;
+    min-width: 40px;
+    white-space: nowrap;
+  }
+  .jstree-default-responsive .jstree-anchor {
+    line-height: 40px;
+    height: 40px;
+  }
+  .jstree-default-responsive .jstree-icon,
+  .jstree-default-responsive .jstree-icon:empty {
+    width: 40px;
+    height: 40px;
+    line-height: 40px;
+  }
+  .jstree-default-responsive > .jstree-container-ul > .jstree-node {
+    margin-left: 0;
+  }
+  .jstree-default-responsive.jstree-rtl .jstree-node {
+    margin-left: 0;
+    margin-right: 40px;
+  }
+  .jstree-default-responsive.jstree-rtl .jstree-container-ul > .jstree-node {
+    margin-right: 0;
+  }
+  .jstree-default-responsive .jstree-ocl,
+  .jstree-default-responsive .jstree-themeicon,
+  .jstree-default-responsive .jstree-checkbox {
+    background-size: 120px 200px;
+  }
+  .jstree-default-responsive .jstree-leaf > .jstree-ocl {
+    background: transparent;
+  }
+  .jstree-default-responsive .jstree-open > .jstree-ocl {
+    background-position: 0 0px !important;
+  }
+  .jstree-default-responsive .jstree-closed > .jstree-ocl {
+    background-position: 0 -40px !important;
+  }
+  .jstree-default-responsive.jstree-rtl .jstree-closed > .jstree-ocl {
+    background-position: -40px 0px !important;
+  }
+  .jstree-default-responsive .jstree-themeicon {
+    background-position: -40px -40px;
+  }
+  .jstree-default-responsive .jstree-checkbox,
+  .jstree-default-responsive .jstree-checkbox:hover {
+    background-position: -40px -80px;
+  }
+  .jstree-default-responsive .jstree-clicked > .jstree-checkbox,
+  .jstree-default-responsive .jstree-clicked > .jstree-checkbox:hover {
+    background-position: 0 -80px;
+  }
+  .jstree-default-responsive .jstree-anchor > .jstree-undetermined,
+  .jstree-default-responsive .jstree-anchor > .jstree-undetermined:hover {
+    background-position: 0 -120px;
+  }
+  .jstree-default-responsive .jstree-anchor {
+    font-weight: bold;
+    font-size: 1.1em;
+    text-shadow: 1px 1px white;
+  }
+  .jstree-default-responsive > .jstree-striped {
+    background: transparent;
+  }
+  .jstree-default-responsive .jstree-wholerow {
+    border-top: 1px solid rgba(255, 255, 255, 0.7);
+    border-bottom: 1px solid rgba(64, 64, 64, 0.2);
+    background: #ebebeb;
+    height: 40px;
+  }
+  .jstree-default-responsive .jstree-wholerow-hovered {
+    background: #e7f4f9;
+  }
+  .jstree-default-responsive .jstree-wholerow-clicked {
+    background: #beebff;
+  }
+  .jstree-default-responsive .jstree-children .jstree-last > .jstree-wholerow {
+    box-shadow: inset 0 -6px 3px -5px #666666;
+  }
+  .jstree-default-responsive .jstree-children .jstree-open > .jstree-wholerow {
+    box-shadow: inset 0 6px 3px -5px #666666;
+    border-top: 0;
+  }
+  .jstree-default-responsive .jstree-children .jstree-open + .jstree-open {
+    box-shadow: none;
+  }
+  .jstree-default-responsive .jstree-node,
+  .jstree-default-responsive .jstree-icon,
+  .jstree-default-responsive .jstree-node > .jstree-ocl,
+  .jstree-default-responsive .jstree-themeicon,
+  .jstree-default-responsive .jstree-checkbox {
+    background-image: url("40px.png");
+    background-size: 120px 200px;
+  }
+  .jstree-default-responsive .jstree-node {
+    background-position: -80px 0;
+    background-repeat: repeat-y;
+  }
+  .jstree-default-responsive .jstree-last {
+    background: transparent;
+  }
+  .jstree-default-responsive .jstree-leaf > .jstree-ocl {
+    background-position: -40px -120px;
+  }
+  .jstree-default-responsive .jstree-last > .jstree-ocl {
+    background-position: -40px -160px;
+  }
+  .jstree-default-responsive .jstree-themeicon-custom {
+    background-color: transparent;
+    background-image: none;
+    background-position: 0 0;
+  }
+  .jstree-default-responsive .jstree-file {
+    background: url("40px.png") 0 -160px no-repeat;
+    background-size: 120px 200px;
+  }
+  .jstree-default-responsive .jstree-folder {
+    background: url("40px.png") -40px -40px no-repeat;
+    background-size: 120px 200px;
+  }
+}
+.jstree-default > .jstree-container-ul > .jstree-node {
+  margin-left: 0;
+  margin-right: 0;
+}
diff --git a/public/assets/css/jstree-metronic/style.min.css b/public/assets/css/jstree-metronic/style.min.css
new file mode 100644
index 0000000..c39e284
--- /dev/null
+++ b/public/assets/css/jstree-metronic/style.min.css
@@ -0,0 +1 @@
\ No newline at end of file
diff --git a/public/assets/css/jstree-metronic/throbber.gif b/public/assets/css/jstree-metronic/throbber.gif
new file mode 100644
index 0000000000000000000000000000000000000000..1b5b2fde42f8ea14e6981339196a9d62b681d79e
GIT binary patch
literal 1720
zcmZ|OYfMvT7zgm4p2O+ea@rnBg#)OxTPX)YQxLES+gfgxVz~&+f}$;m6s%Hi3W%nq
zP@z^qrV}=TNF%FL8K5q@MN>cp#S0pVI*qHSli{|&j8i`-D~lhy5AU}p`Tz2N-e*-(
zqBu&8Q*g>F3T19?Zf0i2Y&JU_j>N>onwlC4g`!j{1p>jzlP51;yvXHpJ32ZL1c{7{
z)MzyPIro%=%#1i`T0+<|5ezw}`5%1a$_msK1)F#~iYhcbb+NiiTcX~ytZ3Wj5(@tv
zLT5OqLY&VTiBl*@DK5jOqAQC<<G>V}_H8&J8*d!6F|8^P+>r!@8gG==_FR|TOFO5N
ztmi!uPli+Ln$x?H-gK%V=cf&)%tK3Ubl`;)j){YK#AZm_($yDbHN+iIVb4-MA(|Tn
z%Y=0Su-m75IE?%N1|!SEl|tuKXsXZNj2Z=vp;+=jlJSZD2EODW0H`s<BGnEWXznAI
zRihe|b_nZwTPrk3hRW~AIL)!p_U?GtGW>M#)b0zgDU0)5!G<?Df;@1J<B}}$iz_rX
z%&1amW8ARS!n!TmVl%lfFgegAqRfdPJ)MZh0O24h14(h^`bjnUkS0px2vG>rr5zO1
zNgN^!L7)EBFUC+Zhm%Mr7yC91@!CieHdPd#!o7Jn^!!TMrU0vgH)|h-!|2wozJKmj
z`G&1Z^{+00Fi|SEx@=o?UTI)xo@>T@7i7MZAqTYCMc0JP{oZJEdWye2L~bM45otrq
zk@}$q6%b*2<$<rGgK+flGwX~NJ-1OZC=+b&8OgiN%OxC&;OQ;|WiSgRw=ksb#&<za
zK1};>_YGZVC^6PBqU&pG6rtOM!WN;+E;i3EB*=+K0j60WC&J{7x}V=Ak(w<1X>er-
zV`_bHI~Y%5hQkS?_Lf?1C-Yh<h7tEWuJ%96W&EPplGML=g?##fc|vxO|L1G5ZD_RM
z(Tj4^#p&uVw|Ul8n}qd7PnXeE&S=}3vp0R#fY{ju!$P-)K)_p5HZg;}>;suT<W)-8
z;kx`iyiHuHMJN&z3xBv}KTXF8|KII}R1u3-r}}w9OMpw0QuXdgm}Y&{liY*C{OPgX
zUZ?_f_wm`a2&GYCveuUXl#!dgl>(z!ZdS6NOH8>FGetNtnE-ngIxI9OKM9M!nq|ao
z@ByV)WU%+EiuxlBZ=#rs_ZnY%+O^bXr2P8_g2l~7Z822<SgQ<oLQ+s#(QNr~78f;+
zhb@i4QQP2wt12&)isqN3uGGU-%TiY}QE%po+(23_*R|unGo5$n(&V^cSh$OL`&qzR
zCSM%GI8-@V8IZ68tZ44Z&~bCRp9y&&;D}J)Em6co_+5TFbGrKL@Pc0BLLPSEs}U6r
z0O&F3U@#64D^tG})xz%X5DQ)EM@RX_MIa(Q09x<kS~1^-=3K?}&XIHSW9b_m?G{qq
z^NwyTC_U5K7F&F1@^XyjKDL~W6rJ%<@idQHty1+jeI#yXT22cHY;Z!~hi6im#(b4T
z#9`NY%-Tc)RHOZgOn*3*qXkecL}MB}=}iz|36X4hVMd|v|88a8G4{^p`?}Idl`BOX
zuBoz5ykT1C<(d}o<FU?zUN8E|&tvt{yyH5e6A|ni%((5<o22iTb2=}K4G-E7+%(eO
z$6ZJ@#~p3e(J>1w?Uyx%!zc@?f!tWxz6{`xAWPUyeq1Vbvuj7m$3Dh(PTY04bw^_A
zwRr|LuoC34N#A1;<G*GRP5b`%TSEBr>?zXdaId|wW$kzq2e~Uqdrq=@A0^DlGO4UM
zzC<kYY0fsJAB70}P`(4Su69S93@ke%8)DNw&*2qf6+W)d<>O9@&t7@ohLX-t)ftJ|
z)q;&?w?;l@^4Pc`;x3vPJ8(itFdKg3;$nap8V7O~;L775>pjUjnIyS=0%4f;&$i;^
q^<`2=x-x(uk2YUU2h;2jemsk<aD(WL8L(lGH>O_4rHker(f<M+QXWPC

literal 0
HcmV?d00001

diff --git a/public/assets/images/demo.png b/public/assets/images/demo.png
new file mode 100644
index 0000000000000000000000000000000000000000..2199b869fb780762864869c3b5f7f4d125290107
GIT binary patch
literal 4245
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
FzW~odLS6s>

literal 0
HcmV?d00001

diff --git a/public/assets/languages/locale-en_EN.json b/public/assets/languages/locale-en_EN.json
index dc9285e..c024b9d 100644
--- a/public/assets/languages/locale-en_EN.json
+++ b/public/assets/languages/locale-en_EN.json
@@ -6,13 +6,19 @@
   "APPLICATION_TABLE": "Table",
   "APPLICATION_ALIAS": "Alias",
   "APPLICATION_COPY_REPORT": "Copy Report",
+  "MESSAGE_REPORT_EXTRACTING": "Your report is being elaborated, you will find it under the 'Extracted reports' section..",
   "APPLICATION_COPY_TO": "Copy To",
   "APPLICATION_DATE_RANGE": "Date Range",
   "APPLICATION_COPY": "Copy",
+  "APPLICATION_SAVE_TO_CSV": "To CSV",
+  "APPLICATION_SAVE_TO_PDF": "To PDF",
   "APPLICATION_EXTRACT": "Extract",
+  "APPLICATION_REPORT_PREVIEW": "Report Preview",
   "APPLICATION_EXTRACT_REPORT": "Extract Report",
   "APPLICATION_EXPORT": "Export",
   "APPLICATION_FUNCTION": "Function",
+  "APPLICATION_MANAGE": "Manage",
+  "APPLICATION_RUN": "Run",
   "MESSAGE_SELECT_A_FIELD": "Select at least one table field!",
   "APPLICATION_GROUP_BY": "Group By",
   "APPLICATION_BUILD": "Build",
@@ -347,6 +353,7 @@
   "APPLICATION_RANDOM_PERIODIC_ANNOUNCE": "Random periodic announcements",
   "MESSAGE_NO_AVAILABLE_MAILS": "No available mails",
   "APPLICATION_PREVIEW": "Preview",
+  "APPLICATION_TEST_PREVIEW": "Test Preview",
   "APPLICATION_WEIGHT": "Weight",
   "APPLICATION_WRAPUPTIME": "Wrapup Time",
   "APPLICATION_RETRY": "Retry",
diff --git a/public/assets/languages/locale-it.json b/public/assets/languages/locale-it.json
index 11e58ae..e963d5a 100644
--- a/public/assets/languages/locale-it.json
+++ b/public/assets/languages/locale-it.json
@@ -7,12 +7,16 @@
   "APPLICATION_ALIAS": "Alias",
   "APPLICATION_COPY_REPORT": "Copia Report",
   "APPLICATION_COPY_TO": "Copia In",
+  "MESSAGE_REPORT_EXTRACTING": "Il tuo report è in elaborazione, lo troverai nella sezione 'Report Estratti'",
   "APPLICATION_DATE_RANGE": "Intervallo Date",
   "APPLICATION_COPY": "Copia",
   "APPLICATION_EXPORT": "Esporta",
   "APPLICATION_EXTRACT": "Estrai",
+  "APPLICATION_REPORT_PREVIEW": "Anteprima Report",
   "APPLICATION_EXTRACT_REPORT": "Estrai Report",
   "APPLICATION_FUNCTION": "Funzione",
+  "APPLICATION_MANAGE": "Gestisci",
+  "APPLICATION_RUN": "Esegui",
   "MESSAGE_SELECT_A_FIELD": "Seleziona almeno un campo della tabella!",
   "APPLICATION_GROUP_BY": "Group By",
   "APPLICATION_ORDER_BY": "Order By",
@@ -363,6 +367,7 @@
   "APPLICATION_IDENTIFIER": "Identificatore",
   "APPLICATION_CHAT": "Chat",
   "APPLICATION_PREVIEW": "Anteprima",
+  "APPLICATION_TEST_PREVIEW": "Test Anteprima",
   "APPLICATION_WEIGHT": "Peso",
   "APPLICATION_WRAPUPTIME": "Wrapup Time",
   "APPLICATION_RETRY": "Tentativi",
diff --git a/public/assets/plugins/jscripty/js/Actions.js b/public/assets/plugins/jscripty/js/Actions.js
new file mode 100644
index 0000000..9f0b6c2
--- /dev/null
+++ b/public/assets/plugins/jscripty/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/jscripty/js/Dialogs.js b/public/assets/plugins/jscripty/js/Dialogs.js
new file mode 100644
index 0000000..1d20d50
--- /dev/null
+++ b/public/assets/plugins/jscripty/js/Dialogs.js
@@ -0,0 +1,1007 @@
+'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/jscripty/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('jscripty/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/jscripty/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 'Zendesk':
+				var input = document.createElement('select');
+				var option = document.createElement('option');
+				option.text = '-- None --';
+				option.value = '';
+				input.appendChild(option);
+				var selectValues = ['Yes', 'No'];
+				selectValues.forEach(function(elem) {
+					option = document.createElement('option');
+					console.log(elem);
+					option.text = elem;
+					option.value = elem;
+					option.selected = (elem == value);
+					input.appendChild(option);
+				})
+				input.className = 'form-control';
+				break;
+			case 'Summary':
+				var input = document.createElement('select');
+				var option = document.createElement('option');
+				option.text = '-- None --';
+				option.value = '';
+				input.appendChild(option);
+				var selectValues = ['Yes', 'No'];
+				selectValues.forEach(function(elem) {
+					option = document.createElement('option');
+					console.log(elem);
+					option.text = elem;
+					option.value = elem;
+					option.selected = (elem == value);
+					input.appendChild(option);
+				})
+				input.className = 'form-control';
+				break;
+			case 'Text':
+				input = document.createElement('textarea');
+				input.innerHTML = value;
+				input.className = 'form-control';
+				break;
+			case 'Body':
+				input = document.createElement('textarea');
+				input.innerHTML = value;
+				input.className = 'form-control';
+				break;
+			case 'question':
+				input = document.createElement('textarea');
+				input.innerHTML = value;
+				input.className = 'form-control';
+				break;
+			case 'other':
+				var input = document.createElement('input');
+				input.setAttribute('type', 'checkbox');
+				console.log('attr value', value);
+				if (value == 'true') {
+					input.setAttribute('checked', true);
+				} else {
+					input.removeAttribute("checked");
+
+				}
+				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;
+
+				if (name == 'other') {
+					cell.setAttribute(name, document.getElementById(id).checked);
+					console.log(name, document.getElementById(id).checked);
+				} else {
+					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/jscripty/js/Editor.js b/public/assets/plugins/jscripty/js/Editor.js
new file mode 100644
index 0000000..9858989
--- /dev/null
+++ b/public/assets/plugins/jscripty/js/Editor.js
@@ -0,0 +1,888 @@
+/**
+ * $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 = 1; 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/jscripty/js/EditorUi.js b/public/assets/plugins/jscripty/js/EditorUi.js
new file mode 100644
index 0000000..86e40c1
--- /dev/null
+++ b/public/assets/plugins/jscripty/js/EditorUi.js
@@ -0,0 +1,1308 @@
+/**
+ * $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', 'end', 'input',
+		'question', 'email'
+	], [
+		[1, 1],
+		[0, 0],
+		[1, 1],
+		[1, 'n'],
+		[1, 'n']
+	], [
+		[0, 0],
+		[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 = ['input', 'question'];
+		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('jscripty/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('draft=' + 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;
+	console.log(name);
+	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('jscripty/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 +
+						'&draft=' + 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.validate = function(a, b) {
+	var graph = this.editor.graph;
+	a = null != a ? a : graph.model.getRoot();
+	b = null != b ? b : {};
+	for (var c = !0, d = graph.model.getChildCount(a), e = 0; e < d; e++) {
+		var f = graph.model.getChildAt(a, e),
+			g = b;
+		graph.isValidRoot(f) && (g = {});
+		g = this.validate(f, g);
+		null != g ? graph.setCellWarning(f, g.replace(/\n/g, "\x3cbr\x3e")) : graph.setCellWarning(f, null);
+		c = c && null == g
+	}
+	d = "";
+	if (graph.model.isVertex(a)) {
+		switch (a.value.nodeName) {
+			case 'question':
+				d = (a.value.getAttribute('question') !== "") ? "" :
+					'Content is empty' + "\n";
+				break;
+			case 'form':
+				d = (a.value.getAttribute('question') !== "") ? "" :
+					'Content is empty' + "\n";
+				break;
+			case 'start':
+				d = this.validateBlock('start') ? '' : "Only one Start block is allowed" + "\n";
+				break;
+		}
+	}
+
+	if (graph.model.isEdge(a)) {
+		var z = graph.model.getCell(a.source.getId());
+		switch (z.value.nodeName) {
+			case 'question':
+				var patt = /^[a-zA-Z0-9][a-zA-Z0-9\s]*$/;
+				var str = String(a.getValue());
+				if ((str == 'undefined') || (str == 'null')) {
+					str = ' ';
+				}
+				var res = str.split(",");
+				res.forEach(function(entry) {
+					d = d + ((patt.test(entry.trim())) ? "" : 'Can not be empty' + "\n");
+				});
+				break;
+
+		}
+	}
+
+	graph.isCellCollapsed(a) && !c && (d += (mxResources.get(graph.containsValidationErrorsResource) || graph.containsValidationErrorsResource) + "\n");
+	d = graph.model.isEdge(a) ? d + (graph.getEdgeValidationError(a, graph.model.getTerminal(a, !0), graph.model.getTerminal(a, !1)) || "") : d + (graph.getCellValidationError(a) || "");
+	e = graph.validateCell(a, b);
+	null != e && (d += e);
+	null == graph.model.getParent(a) && graph.view.validate();
+	return 0 < d.length || !c ? d : null
+}
+
+EditorUi.prototype.validateBlock = function(blockName) {
+	var graph = this.editor.graph;
+	var parent = graph.getDefaultParent();
+	var count = 0;
+	// var model = graph.getModel();
+	//We can also use model.getChildren(parent)
+	parent.children.forEach(function(n) {
+		if (graph.model.isVertex(n) && n.value.nodeName == blockName) {
+			count++;
+		}
+	});
+	return count > 1 ? false : true;
+}
+
+EditorUi.prototype.publish = function(name) {
+
+	var editor = this.editor;
+
+	if (name != null) {
+
+		var response = this.validate();
+		if (response === 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('draft=' + 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 {
+			editor.setStatus('Error publishing project: ');
+		}
+	} 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] + ' outgoing 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/jscripty/js/Graph.js b/public/assets/plugins/jscripty/js/Graph.js
new file mode 100644
index 0000000..46f34e4
--- /dev/null
+++ b/public/assets/plugins/jscripty/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/jscripty/js/Menus.js b/public/assets/plugins/jscripty/js/Menus.js
new file mode 100644
index 0000000..bc0cc25
--- /dev/null
+++ b/public/assets/plugins/jscripty/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/jscripty/js/Shapes.js b/public/assets/plugins/jscripty/js/Shapes.js
new file mode 100644
index 0000000..42e13ca
--- /dev/null
+++ b/public/assets/plugins/jscripty/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/jscripty/js/Sidebar.js b/public/assets/plugins/jscripty/js/Sidebar.js
new file mode 100644
index 0000000..e744c4c
--- /dev/null
+++ b/public/assets/plugins/jscripty/js/Sidebar.js
@@ -0,0 +1,787 @@
+'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('application'), dir + '/',
+		'_128x128.png', ['start', 'question', 'input', 'end', 'email'], [mxResources.get('start'),
+			mxResources.get('question'), mxResources.get('input'), mxResources.get('end'), mxResources.get('email')
+		]);
+
+	// this.addBpmnPalette(dir, false);
+
+};
+
+/**
+ * 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 'start':
+		// 	variables = ['Text'];
+		// 	values = [];
+		// 	break;
+		case 'question':
+			variables = ['question', 'other'];
+			values = ['', 'false'];
+			break;
+		case 'input':
+			variables = ['question', 'Type'];
+			values = [''];
+			break;
+			// case 'end':
+			// 	variables = ['Text', 'Zendesk', 'Summary'];
+			// 	values = [];
+			// 	break;
+		case 'email':
+			variables = ["Host", "Username", "Password", "To", "Subject", "Body"];
+			values = [''];
+			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
+	touchStyle = false;
+	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));
+		}
+	}));
+};
+// ***********modified***************
+// Sidebar.prototype.addBpmnPalette = function(dir, expand) {
+// 	//Abigael Dawit
+//
+// 	var fns = [
+// 		this.createVertexTemplate(
+// 			'text;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;overflow=hidden;',
+// 			40, 20, 'Text', 'Text', null),
+// 		//this.createVertexTemplate('shape=ext;rounded=1;whiteSpace=wrap;dashed=1;dashPattern=1 4;', 120, 80, 'Event\nSub-Process', 'Event Sub-Process', null),
+// 		this.createVertexTemplate('shape=swimlane;whiteSpace=wrap;startSize=60;',
+// 			120, 160, 'Container', 'Container', null),
+// 		//	this.createVertexTemplate('shape=ellipse;', 120, 160, 'Ellips', 'Ellipse', null)
+// 		this.createVertexTemplate(
+// 			'shape=swimlane;html=1;horizontal=0;swimlaneFillColor=white;swimlaneLine=0;fillColor=none;rounded=1;verticalAlign=middle',
+// 			300, 120, 'Lane', 'Lane', null)
+//
+// 	]
+//
+// 	this.addPalette('utility', 'Utility ', false, mxUtils.bind(this, function(
+// 		content) {
+// 		//var showTitles = titles != null;
+// 		for (var i = 0; i < fns.length; i++) {
+// 			content.appendChild(fns[i]);
+// 		}
+// 	}));
+//
+// };
diff --git a/public/assets/plugins/jscripty/js/Toolbar.js b/public/assets/plugins/jscripty/js/Toolbar.js
new file mode 100644
index 0000000..7eab562
--- /dev/null
+++ b/public/assets/plugins/jscripty/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/jscripty/js/custom.js b/public/assets/plugins/jscripty/js/custom.js
new file mode 100644
index 0000000..a53e30b
--- /dev/null
+++ b/public/assets/plugins/jscripty/js/custom.js
@@ -0,0 +1,283 @@
+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/jscripty/projects/';
+var VARIABLE_URL = 'api/square/variables/';
+
+// Paths and files
+var STENCIL_PATH = '/assets/plugins/jscripty/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/jscripty/projects/open';
+var TEMPLATE_PATH = '/assets/plugins/jscripty/templates';
+
+// Directory for i18 files and basename for main i18n file
+var RESOURCES_PATH = '/assets/plugins/jscripty/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 = '';
+console.log('custom', localStorage.getItem("NG_TRANSLATE_LANG_KEY"));
+switch (localStorage.getItem("NG_TRANSLATE_LANG_KEY")) {
+	case 'en_EN':
+		mxLanguage = 'en';
+		break;
+	case 'it':
+		mxLanguage = 'it';
+		break;
+	default:
+		mxLanguage = 'it';
+}
+console.log('mxLanguage', mxLanguage);
+
+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/jscripty/resources/dia.txt b/public/assets/plugins/jscripty/resources/dia.txt
new file mode 100644
index 0000000..430072c
--- /dev/null
+++ b/public/assets/plugins/jscripty/resources/dia.txt
@@ -0,0 +1,280 @@
+# *DO NOT DIRECTLY EDIT THIS FILE, IT IS AUTOMATICALLY GENERATED AND IT IS BASED ON:*
+# https://docs.google.com/spreadsheet/ccc?key=0AmQEO36liL4FdDJLWVNMaVV2UmRKSnpXU09MYkdGbEE
+#Applications
+application=Applications
+start=Start
+end=End
+input=Input
+question=Question
+email=Email
+Type=Type
+Host=Host
+Username=Username
+Password=Password
+To=To
+Subject=Subject
+Body=Body
+Zendesk=Zendesk
+Summary=Summary
+text=Text
+Text=Text
+label=Label
+saveAs=save As
+publish=Publish
+variable=Variable
+name=Name
+other=Other
+#
+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/jscripty/resources/dia_am.txt b/public/assets/plugins/jscripty/resources/dia_am.txt
new file mode 100644
index 0000000..1a9df74
--- /dev/null
+++ b/public/assets/plugins/jscripty/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/jscripty/resources/dia_ar.txt b/public/assets/plugins/jscripty/resources/dia_ar.txt
new file mode 100644
index 0000000..9e46f2b
--- /dev/null
+++ b/public/assets/plugins/jscripty/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/jscripty/resources/dia_bg.txt b/public/assets/plugins/jscripty/resources/dia_bg.txt
new file mode 100644
index 0000000..1a9df74
--- /dev/null
+++ b/public/assets/plugins/jscripty/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/jscripty/resources/dia_bn.txt b/public/assets/plugins/jscripty/resources/dia_bn.txt
new file mode 100644
index 0000000..1a9df74
--- /dev/null
+++ b/public/assets/plugins/jscripty/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/jscripty/resources/dia_bs.txt b/public/assets/plugins/jscripty/resources/dia_bs.txt
new file mode 100644
index 0000000..f44bba0
--- /dev/null
+++ b/public/assets/plugins/jscripty/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/jscripty/resources/dia_ca.txt b/public/assets/plugins/jscripty/resources/dia_ca.txt
new file mode 100644
index 0000000..cc01565
--- /dev/null
+++ b/public/assets/plugins/jscripty/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/jscripty/resources/dia_cs.txt b/public/assets/plugins/jscripty/resources/dia_cs.txt
new file mode 100644
index 0000000..5da8f9e
--- /dev/null
+++ b/public/assets/plugins/jscripty/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/jscripty/resources/dia_da.txt b/public/assets/plugins/jscripty/resources/dia_da.txt
new file mode 100644
index 0000000..abb59a8
--- /dev/null
+++ b/public/assets/plugins/jscripty/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/jscripty/resources/dia_de.txt b/public/assets/plugins/jscripty/resources/dia_de.txt
new file mode 100644
index 0000000..335335d
--- /dev/null
+++ b/public/assets/plugins/jscripty/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/jscripty/resources/dia_el.txt b/public/assets/plugins/jscripty/resources/dia_el.txt
new file mode 100644
index 0000000..c2d41fb
--- /dev/null
+++ b/public/assets/plugins/jscripty/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/jscripty/resources/dia_es-AR.txt b/public/assets/plugins/jscripty/resources/dia_es-AR.txt
new file mode 100644
index 0000000..747b9a9
--- /dev/null
+++ b/public/assets/plugins/jscripty/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/jscripty/resources/dia_es.txt b/public/assets/plugins/jscripty/resources/dia_es.txt
new file mode 100644
index 0000000..0029331
--- /dev/null
+++ b/public/assets/plugins/jscripty/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/jscripty/resources/dia_et.txt b/public/assets/plugins/jscripty/resources/dia_et.txt
new file mode 100644
index 0000000..1a9df74
--- /dev/null
+++ b/public/assets/plugins/jscripty/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/jscripty/resources/dia_fa.txt b/public/assets/plugins/jscripty/resources/dia_fa.txt
new file mode 100644
index 0000000..1a9df74
--- /dev/null
+++ b/public/assets/plugins/jscripty/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/jscripty/resources/dia_fi.txt b/public/assets/plugins/jscripty/resources/dia_fi.txt
new file mode 100644
index 0000000..693f99b
--- /dev/null
+++ b/public/assets/plugins/jscripty/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/jscripty/resources/dia_fil.txt b/public/assets/plugins/jscripty/resources/dia_fil.txt
new file mode 100644
index 0000000..1a9df74
--- /dev/null
+++ b/public/assets/plugins/jscripty/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/jscripty/resources/dia_fr.txt b/public/assets/plugins/jscripty/resources/dia_fr.txt
new file mode 100644
index 0000000..704f1d8
--- /dev/null
+++ b/public/assets/plugins/jscripty/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/jscripty/resources/dia_gu.txt b/public/assets/plugins/jscripty/resources/dia_gu.txt
new file mode 100644
index 0000000..1a9df74
--- /dev/null
+++ b/public/assets/plugins/jscripty/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/jscripty/resources/dia_he.txt b/public/assets/plugins/jscripty/resources/dia_he.txt
new file mode 100644
index 0000000..1a9df74
--- /dev/null
+++ b/public/assets/plugins/jscripty/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/jscripty/resources/dia_hi.txt b/public/assets/plugins/jscripty/resources/dia_hi.txt
new file mode 100644
index 0000000..1a9df74
--- /dev/null
+++ b/public/assets/plugins/jscripty/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/jscripty/resources/dia_hr.txt b/public/assets/plugins/jscripty/resources/dia_hr.txt
new file mode 100644
index 0000000..1a9df74
--- /dev/null
+++ b/public/assets/plugins/jscripty/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/jscripty/resources/dia_hu.txt b/public/assets/plugins/jscripty/resources/dia_hu.txt
new file mode 100644
index 0000000..40fb543
--- /dev/null
+++ b/public/assets/plugins/jscripty/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/jscripty/resources/dia_id.txt b/public/assets/plugins/jscripty/resources/dia_id.txt
new file mode 100644
index 0000000..9366284
--- /dev/null
+++ b/public/assets/plugins/jscripty/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/jscripty/resources/dia_it.txt b/public/assets/plugins/jscripty/resources/dia_it.txt
new file mode 100644
index 0000000..70ec2e1
--- /dev/null
+++ b/public/assets/plugins/jscripty/resources/dia_it.txt
@@ -0,0 +1,404 @@
+# *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
+#Applications
+application=Applications
+start=Start
+end=End
+input=Input
+question=Question
+email=Email
+Type=Type
+Host=Host
+Username=Username
+Password=Password
+To=To
+Subject=Subject
+Body=Body
+Zendesk=Zendesk
+Summary=Summary
+Text=Text
+other=Other
+
+#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/jscripty/resources/dia_ja.txt b/public/assets/plugins/jscripty/resources/dia_ja.txt
new file mode 100644
index 0000000..2ec7078
--- /dev/null
+++ b/public/assets/plugins/jscripty/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/jscripty/resources/dia_kn.txt b/public/assets/plugins/jscripty/resources/dia_kn.txt
new file mode 100644
index 0000000..1a9df74
--- /dev/null
+++ b/public/assets/plugins/jscripty/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/jscripty/resources/dia_ko.txt b/public/assets/plugins/jscripty/resources/dia_ko.txt
new file mode 100644
index 0000000..d68dde6
--- /dev/null
+++ b/public/assets/plugins/jscripty/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/jscripty/resources/dia_lt.txt b/public/assets/plugins/jscripty/resources/dia_lt.txt
new file mode 100644
index 0000000..cea8074
--- /dev/null
+++ b/public/assets/plugins/jscripty/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/jscripty/resources/dia_lv.txt b/public/assets/plugins/jscripty/resources/dia_lv.txt
new file mode 100644
index 0000000..1a9df74
--- /dev/null
+++ b/public/assets/plugins/jscripty/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/jscripty/resources/dia_ml.txt b/public/assets/plugins/jscripty/resources/dia_ml.txt
new file mode 100644
index 0000000..1a9df74
--- /dev/null
+++ b/public/assets/plugins/jscripty/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/jscripty/resources/dia_mr.txt b/public/assets/plugins/jscripty/resources/dia_mr.txt
new file mode 100644
index 0000000..1a9df74
--- /dev/null
+++ b/public/assets/plugins/jscripty/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/jscripty/resources/dia_ms.txt b/public/assets/plugins/jscripty/resources/dia_ms.txt
new file mode 100644
index 0000000..1a9df74
--- /dev/null
+++ b/public/assets/plugins/jscripty/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/jscripty/resources/dia_nl.txt b/public/assets/plugins/jscripty/resources/dia_nl.txt
new file mode 100644
index 0000000..0d64cf2
--- /dev/null
+++ b/public/assets/plugins/jscripty/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/jscripty/resources/dia_no.txt b/public/assets/plugins/jscripty/resources/dia_no.txt
new file mode 100644
index 0000000..d9be511
--- /dev/null
+++ b/public/assets/plugins/jscripty/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/jscripty/resources/dia_pl.txt b/public/assets/plugins/jscripty/resources/dia_pl.txt
new file mode 100644
index 0000000..e87be75
--- /dev/null
+++ b/public/assets/plugins/jscripty/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/jscripty/resources/dia_pt-br.txt b/public/assets/plugins/jscripty/resources/dia_pt-br.txt
new file mode 100644
index 0000000..4e739c0
--- /dev/null
+++ b/public/assets/plugins/jscripty/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/jscripty/resources/dia_pt.txt b/public/assets/plugins/jscripty/resources/dia_pt.txt
new file mode 100644
index 0000000..4e69edc
--- /dev/null
+++ b/public/assets/plugins/jscripty/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/jscripty/resources/dia_ro.txt b/public/assets/plugins/jscripty/resources/dia_ro.txt
new file mode 100644
index 0000000..d5da7d1
--- /dev/null
+++ b/public/assets/plugins/jscripty/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/jscripty/resources/dia_ru.txt b/public/assets/plugins/jscripty/resources/dia_ru.txt
new file mode 100644
index 0000000..ff1334e
--- /dev/null
+++ b/public/assets/plugins/jscripty/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/jscripty/resources/dia_sk.txt b/public/assets/plugins/jscripty/resources/dia_sk.txt
new file mode 100644
index 0000000..1a9df74
--- /dev/null
+++ b/public/assets/plugins/jscripty/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/jscripty/resources/dia_sl.txt b/public/assets/plugins/jscripty/resources/dia_sl.txt
new file mode 100644
index 0000000..1a9df74
--- /dev/null
+++ b/public/assets/plugins/jscripty/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/jscripty/resources/dia_sr.txt b/public/assets/plugins/jscripty/resources/dia_sr.txt
new file mode 100644
index 0000000..4c14276
--- /dev/null
+++ b/public/assets/plugins/jscripty/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/jscripty/resources/dia_sv.txt b/public/assets/plugins/jscripty/resources/dia_sv.txt
new file mode 100644
index 0000000..489cb16
--- /dev/null
+++ b/public/assets/plugins/jscripty/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/jscripty/resources/dia_sw.txt b/public/assets/plugins/jscripty/resources/dia_sw.txt
new file mode 100644
index 0000000..1a9df74
--- /dev/null
+++ b/public/assets/plugins/jscripty/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/jscripty/resources/dia_ta.txt b/public/assets/plugins/jscripty/resources/dia_ta.txt
new file mode 100644
index 0000000..1a9df74
--- /dev/null
+++ b/public/assets/plugins/jscripty/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/jscripty/resources/dia_te.txt b/public/assets/plugins/jscripty/resources/dia_te.txt
new file mode 100644
index 0000000..1a9df74
--- /dev/null
+++ b/public/assets/plugins/jscripty/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/jscripty/resources/dia_th.txt b/public/assets/plugins/jscripty/resources/dia_th.txt
new file mode 100644
index 0000000..1edf3cc
--- /dev/null
+++ b/public/assets/plugins/jscripty/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/jscripty/resources/dia_tr.txt b/public/assets/plugins/jscripty/resources/dia_tr.txt
new file mode 100644
index 0000000..10ec67e
--- /dev/null
+++ b/public/assets/plugins/jscripty/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/jscripty/resources/dia_uk.txt b/public/assets/plugins/jscripty/resources/dia_uk.txt
new file mode 100644
index 0000000..5e827ff
--- /dev/null
+++ b/public/assets/plugins/jscripty/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/jscripty/resources/dia_zh.txt b/public/assets/plugins/jscripty/resources/dia_zh.txt
new file mode 100644
index 0000000..1f6add8
--- /dev/null
+++ b/public/assets/plugins/jscripty/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/jscripty/resources/help_it.html b/public/assets/plugins/jscripty/resources/help_it.html
new file mode 100644
index 0000000..c87692f
--- /dev/null
+++ b/public/assets/plugins/jscripty/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/jscripty/stencils/email_128x128.png b/public/assets/plugins/jscripty/stencils/email_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/jscripty/stencils/end_128x128.png b/public/assets/plugins/jscripty/stencils/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/jscripty/stencils/general.xml b/public/assets/plugins/jscripty/stencils/general.xml
new file mode 100644
index 0000000..137e5f5
--- /dev/null
+++ b/public/assets/plugins/jscripty/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/jscripty/stencils/input_128x128.png b/public/assets/plugins/jscripty/stencils/input_128x128.png
new file mode 100644
index 0000000000000000000000000000000000000000..37e779efdda69de04f797da53ad602e5ff376233
GIT binary patch
literal 1003
zcmeAS@N?(olHy`uVBq!ia0vp^4Is?H1|$#LC7uRSEX7WqAsj$Z!;#Vf<Z~8yL>4nJ
za0`PlBg3pY5)2H?y`C<PAr*7p-u3quNn|+w@x4#%FX#G{-6<|1?W&?*BC-@kG6E`j
zn*8=Q@WoaO$G*P6J>iD8{({ugR<0TvF0S>Qrkgo7>Xk~I&P~0ZyXpDNZ{L3(Xx{Po
zjLoL_vaI7bJu}V=K42=4vfy~b{%zaNb*&qj&M<Fw5M9A=xqkOW#RY6N-+$;IS25W3
zE;83yykI%Q{)Xevdbk1>`KCU|WK?^*apz;x3+~NJ9{x7EdHUGAWAa=2Hn7ZLSypEk
zAnzdlfx|+oB1r67^aA+^29MWbcMkdQYs!0&_PE*kh`n27i|pbJWgIIQn`cb&eBi<)
z!#2-#UeD2svzZ=mOi#SnvpgmL{j6mVr@Yx)dpX3f!L=sI{c4fZw|FMusd;~tubq@>
zuwYj>$JkNK@CZ9|o7;_a)*aK6_cA^xnw+ZNAiXm^L`M0*&kNSPf3L3yFFyA<sXO;t
zQQqc^b%H;Beo%Cn!z}Qe;fN(eAs<$z;W;+G33G4!3_c#Mqy6+w+Ql#J_ZI5&i9UBG
z<dUR0yni@q&TYKMH|ze-SK1%!zV~z`iwoLqyMCQbtbIN2mJQf_fFzm}BmIN($E4)F
zxenozQ|~wYyko4@H}}B13D#eZE__tOf!F1H4lzC5&iTyc#cRwxKELKlZ+u;;9-{C(
zqptW&y^<S)e?zCt>#eh1x6iq)Gs}5l`3oX^#3OZb=lwAA&^Kzor=0zNcjX1^FIyW4
zI|LZU)0wn4swZC5SzdB1{Y{izvF6RCSC?g)v91C|dx-D?@flsV!rhM|xO|xTlg}S%
z+Rc9^C-Uzz*#gZ+DLQ+!4}AW`uEnyie6RbKkFOt>2wj`faQpz{n#p^a*cx1a{GEG%
z^?}X?k;EXeV@d|wer;W8_kj0f{4yJ}@;xk78Nr<YXD^t1jOFb69oH^td{_WX(C+&J
zna{1M4tuS#R_xkK#$%0%3wYizZ`%&a4LoNi?%f)%TFpBDX2w$aNA*Q6=QH<Q0p?Z)
MPgg&ebxsLQ02WQJ_W%F@

literal 0
HcmV?d00001

diff --git a/public/assets/plugins/jscripty/stencils/question_128x128.png b/public/assets/plugins/jscripty/stencils/question_128x128.png
new file mode 100644
index 0000000000000000000000000000000000000000..0ee212ccd2f43b2839d9782116e0155ff620fbfb
GIT binary patch
literal 2404
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
RSc<<10d^!O>qbi&{l66=D}4X}

literal 0
HcmV?d00001

diff --git a/public/assets/plugins/jscripty/stencils/start_128x128.png b/public/assets/plugins/jscripty/stencils/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/jscripty/templates/images/aws1.png b/public/assets/plugins/jscripty/templates/images/aws1.png
new file mode 100644
index 0000000000000000000000000000000000000000..3c6243f40d5fd94d5914bb4a4af344440e755b75
GIT binary patch
literal 14950
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
Tx1S4590kZqDM?m|8wLFb256pf

literal 0
HcmV?d00001

diff --git a/public/assets/plugins/jscripty/templates/images/bpmn1.png b/public/assets/plugins/jscripty/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/jscripty/templates/images/compare1.png b/public/assets/plugins/jscripty/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/jscripty/templates/images/flowchart1.png b/public/assets/plugins/jscripty/templates/images/flowchart1.png
new file mode 100644
index 0000000000000000000000000000000000000000..7cfa3c7c42c316da901b5c374ef51c30a650df64
GIT binary patch
literal 13007
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
RS0n%c002ovPDHLkV1g*}R`37-

literal 0
HcmV?d00001

diff --git a/public/assets/plugins/jscripty/templates/images/flowchart2.png b/public/assets/plugins/jscripty/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/jscripty/templates/images/gantt1.png b/public/assets/plugins/jscripty/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/jscripty/templates/images/lean1.png b/public/assets/plugins/jscripty/templates/images/lean1.png
new file mode 100644
index 0000000000000000000000000000000000000000..63a6ac3c7385d2c1e18a609c19d279a1c109ce31
GIT binary patch
literal 17148
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

literal 0
HcmV?d00001

diff --git a/public/assets/plugins/jscripty/templates/images/mindmap1.png b/public/assets/plugins/jscripty/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/jscripty/templates/images/orgchart1.png b/public/assets/plugins/jscripty/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/jscripty/templates/images/orgchart2.png b/public/assets/plugins/jscripty/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/jscripty/templates/images/package1.png b/public/assets/plugins/jscripty/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/jscripty/templates/images/pid1.png b/public/assets/plugins/jscripty/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/jscripty/templates/images/plcladder1.png b/public/assets/plugins/jscripty/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/jscripty/templates/images/seqdiag1.png b/public/assets/plugins/jscripty/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/jscripty/templates/images/sitemap1.png b/public/assets/plugins/jscripty/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/jscripty/templates/images/socnet1.png b/public/assets/plugins/jscripty/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/jscripty/templates/images/stardelta.png b/public/assets/plugins/jscripty/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/jscripty/templates/images/statemachine1.png b/public/assets/plugins/jscripty/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/jscripty/templates/images/uml1.png b/public/assets/plugins/jscripty/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/jscripty/templates/images/usecase1.png b/public/assets/plugins/jscripty/templates/images/usecase1.png
new file mode 100644
index 0000000000000000000000000000000000000000..1bbc1858b215a8a067fbabf58a1cbb960cb21159
GIT binary patch
literal 25313
zcmV*)KsCRKP)<h;3K|Lk000e1NJLTq0077U004mq0ssI23T<L-00009a7bBm000XT
z000XT0n*)m`~UzT07*naRCt`^y?2~k)tx8$JLlX~xw^Wmb8dC3rB*^&2uTDHg#lv>
zHZ~ZC8Jmf3!mj7D<M(D}ci-&nte@AOnP-m~JPg4En=zPVG8lo7P()HIbW7@-s=9Kx
z>4g2`R#lf;tpF&!eLwUOt?Ih>o^$W_{?0Fa&+mtX5b*y6;hYO02*Cj86CEf7=UiZn
z5&C2YUQiK22*EKX0ASjDU|@LQc<=PYF*6sDAgfB2rU;)$)l?ZFFie`u8@dHHlWpNf
zawt&Q(%8D7vul3PrvZQvTnNAzU+QVi2)fLHC4}Idm+(XxM5hyz6Jzn|@mwZu8fj+h
zAgB-w0Lh9fgoGu{<*D!o!<FH>y4w0+z*Rie<#P8q=LjK$(9p=_zFqHTA_qdAOhZ_z
ztM*m|JhDp#Nd}BT2ymVbLVyqm0gQ6f%4G7B(d@{i9!;yr-O;^x<Dx}95}7&erJf(a
zWe%*;oyzO>p+krI4}WB5hdfHA!ow?ra?r1NT#BYjl0*<jAb@jjQ>GhsCTAwo=5&%J
z^NPVMDyrxAEM42))`Zcezx$jsjLGPD^qp6K?q&y<b$MD_s)*YI0)fpq<Bo0yak6T5
zo)SVBBSJ991PB7lj84Y(9Ze3#!b{fNwPy8l=j4}WVkgVx3oPdzB~$r#-g-GP_Cae{
z?`-ka*H#d>8wddozyxp(+?he?#sgps7y(9r1W-Gl$_|Ytjt(0!qi*5yEo;`S!XUU1
zmqc|5&Jo7%yz|b9-9Ni^V?|AKouG)B7Uu#0Fakgb0Lo@mE;Fx#5JCt*fFwmi8Zi>d
zSKk{<%NxJ+)dv+BKB={EA>=Xz7Uvve{Qd{q4}9>m^^0I}Pb1P?U<+nZ#yNmM2%P@_
z;MA8}06<}4NRkLvBp@OmPkgX@d?4Ae<qN;xP*>$#;^I&0wbx$D9{ceZKEH@t#5OF1
zVYd1dfF+C(fB-H8V1xm<5CFibn2i|$j0++W*{|-~erV_Dvfuf=zW~7jUE&r0as-wT
z93lMt^Uql$kA3mB1xRw)d6RSD+<%0T-~u5eK!5;@5kiP_F>4|Y*qmp^IR`*Qk|eJ@
zJu?2(YuOv``7d4bT7(c6ZB2BpH8v4@`LS>R?!7HWMj*sby}A$}OL!uhGfhS$BuUt^
zm|@a@UlT&qg*~>-=Nz(ab5FJR)mQf8#y`H{`pt|nLN4W+c<C+KS;84Z2=Cc@AUp80
zyYF6T>9&zh3T_}_5@Jg-rIt>JjgU#OEi07Tx}ML1Fo<LmiAuzl6pD$hsEiPsQ(bUF
zQ78tJ)0`fQS5;L!aGU!#zxZ3jIz?4n(0OqV07rUvU(w0HW`gO!Ey2uF{uoGDsZ{2}
zJwuUbs`tpmEARAAMN)5WJ+^hnAk6Xo!XF9SRy@6CNyW(i*TGp;FR4hE`1)lcI7g_k
zx*gd0;!RgpuvDH?TUE&M;Z!DPMPm8duxEH86Y#3Bq+S(tc|CGC<l4S(G8E8)epNRp
zA&4=dC^(idJDU9nA;Y3m(Y$G~>#l4f809jiufn^ap>O+#Td&@<;i4^w&Vxn>3uXd0
z1vgGv)e2(UR&AAZ<rN`}P;I4WeycmD)2^0k05FUkAxQAKFCi$%UUlk)UqAWZf4=#p
zUsbPOBN#)MNN-&hz$!ut0YZEJ>aQl=-e%oA&+R6*nFA1lV~N;_WG0n1G=(dKO+}NM
zDluxN(q?<3=5>MBCF04n&n=r4AD_xGE;tu$4XSCeM9Q>m>UGP48$uui0(24dqp?I3
zN|xA#7lbhYEL^<$R}Z1pOA{azMk$_4WikdH75QCq!E{7`ki<Cv0HqeEbDUfNP%8XY
z>ML&#gf@R|-u%I2Uw?SzD&)j0E`<wxiES*w7{VA3;*>_VZ_f@7CyyQT$ZG%6uEyMt
zmM`zhrt*Yfgb^1)*Qw8^a3&;zxBwvpMu<|5F>>aBF+xHJghnQ^O?6%nf-->+$OKa^
zI1>m7O2Jp9{OeOE7GC?qwX2t2OcUO@*6VM)HM0G?-~2)&16Mw8A%HorUwkenxhJP0
zL<ry<WSMAQ^ue~Fw~k%;XW#vA9*-K`y*svdZ|D8@6Gd@c(F-}VIph)nONhd35n{SN
zwS9Z4zu(`{QFG;$MAHz0be2B+g9q-rW-44$mr0u#34{^Gh%t^F@HnS&%%q}MD1<<O
z1PDbYw#`J*h!O%22rd92?5U97-+Fxe#7%$p-M>P!{mBb14z}KW`@Owy{LPkC>4jZk
z0g7RA%D4~$BPe;gXAmcDDgY6JRRv2DpN^(p-eyGbt>66ipN4`SX4^!TlSht>zw=J#
zSHCLzd>0>E7adqa6nrs+>~wnagAZ~eBf*}Y>eZ{UEIWV`0GN>B(dg6v@_$^{eRRdr
zdd6hkV4QP|&q=SBtA8PY3y=tLyRdEMUU)a!m%H)7Kl)zK@4lE`VM&Ss(%7$`eMn6I
zW?5UZyVVt{@L(b{hA9)22`+@-Fe{XW5W*N?jAR0Y00NrJ8G~cFJ;$Vx+|uP6?%#af
z28lQ-8#&fhc4TDeg%>*RzFP~2FEX|+BCs4tVGICfJU;Q>d&cy1)fHD%UU7wE3Y2~e
zMdv(~F@N>U!`ApyS1!nRwfR-e%@{Im!5A+M8<qc0l>Pz$gb|V?q{s*(no8&P9LaC*
zuWMX<|6O-|!KF%<1XYfdqW^=#(H$SYIoAKSMvpX9B<n&n93%m+q^go45nOtWgy2Fj
z#!QQ4^L9MNCgONB=8o!(-kLQFmtDJh<uZ?3cJ4`OQVx=g>FMLoJkxUPt=^WFi)qVW
z3}6W%pa`1$#Kh$L@7tM7_3G6Xix$oL?X07O5E$cQC&stF{j2oY>y5sldG)NJTJifd
zMV0|!0hn_q9Eu82Q{;rNxZu<<?O4(no}~Tb?ugZ0-G2Qw*WKLQP&MlTToNfyLQ@VS
zqtgQ?`o@P3C#H|n{5YZs%rg=;F=7A$A(;!=WEv+yqSd(kO;xp>&8_p>+L|karA(+e
zbxsbp>}<CGvB&B*ZK~+$xoFtBu)q?WL(w71j*Lug+r}-cX5Bjfym@eXNX;Bx#1;S~
z(&m8!2aX@!o|^g?TZ2A15pd}~x9wJiA|Zl>0Ay3JY@u5utt(00ld-FW)?QV=tZU)Q
zo}O;MM~0$Ne3@iwofJF92$coOxd77w!=#pFQc8sogb-PlWm$G<M3H8lfeQg=$bLH5
z;+A#vkw>bQFAuL;b#btDp@20LK>$eg^+k8?B&u4ycCDwe5l#l&*-usWasz<PATphf
zM5dClXgW1*=ov;0&TIgLB~6l4&F%9CszR0F>Tq>crB^E6L%}&*HpzcSIOhPOJZ)@K
zk<012o-+*Hwk^ge2#_R6k`-B2+-{G@>rv&I`{s~>&JtuVKH|Q|9`iOg*I#qZMZnhi
z2Uh9%2_X^(4ovUaqXdJs>(^`HFnrpl>%7?j&K;b6tj&Q@KnP@Mu86Y`j4?py(xy0O
z3FjOkCua_+jDF(y@yXF+$=Hx>Oe<JdC929ok&#3Y00=;oiM-BDDp8>c67U2Xs_Q#i
z+q&v%Lr&J3m%V#)NYR8n{>(G7$J2c4tryysKcB!VX(>+W^zPm90|(r7b+uPrr33=y
z&fq6I=gI0SmdFhc4NQ&?q!SaCkq|VCg+;JHhyx%lFyk1AMr6O{sR~v$)Hk*@H#fO8
z>C{tQLUDo)l!<-&_V*p!O0)g76;^A#r@GSP_q(yC0w%@iRxw@z03d)fu<U$JpN?lo
zCUQel%qEQu?Q2)BS?~90XJG_6As#}8UU-2SM*H1&m#-@4UFHUs5Q1|C02q_AYnSq%
zlxaq`Z%-aQ>ThqaS+`E|cs@0xpv-%U#xfu8`EYW0ugoT^{B~`XT2<lp`&^o)AV~sT
zJUJJ@IkWA&ZY9(CXiOiASP9*&_}V+V*DYSMSX0O)Ul1Ks?cH~9`#X=fRYq3yRE29R
zK~aDTpqx?0g(#TfWk(gGr3hg}oREWrK(Kr~b+9jTU_h>)zh(3FH_MU}YB}xfoJDZ_
z?YFbT!(CtdTH(_Ra5qj1EL0!{ozW*R0}ajPCf|QQJ3JhiKfij-8ltMDSLD-;%!&6*
zMiRe$^WS-TZ+8=PwO4v7{6J*j0E`P-<iwpcA%qda7=eU=U_b&)BQllfJ(e7r_Sbh_
zzwzqpG=*Gz&P-8+0QB^ekCMd8pS!lz6{-*hqqfb3m@~cOSQMpyl}EN5E}$$CtjS;-
z+jpMWGtzSR{okz$`Of^*9Bf5C`Y87C$MYX}zzH9ocWliDmNTaD=;#wK{fnxo_kHf$
zA%Eo@11%3qB@&Zcx9X8dXvvbQ<;$@o%?e6=3UO56n{U23y#I;Kt3A!_^?+n<*pxB=
z0SL+-gJXq=Qpj2qGJ;NoT401FMM5fJ`RvX;!@CATH{JOs^V*v(KDL}m{rvHt)uWfL
zxnY@|wivZBo-qp%!32RoAXtGT#JC_B0RX~?3xFbbh_RWc#<>7MYS2A;eDK+=zTf@h
z|HrLiA<pC*IoL|{_D*cw+I8Q3lE-u2O|H2$)))W$`nPtx$vND6%U6E<mrroPF`5Zo
zmSO~YBr^H_`&KFyUb!-~Xc0KC*Jp$jV?uB&$<O}cNmu&WEjRZFCRw@(0GJ?z5D0-V
z;!FSl#>jcuFh-0OC|QUg!9*d~BLHE<Ip-WO#<Ew<#-|^DF|zTt|J<{%(;<F+>Y;wJ
zc?p3K>N__4(Tjih)h~7DW2SU+-~eM3jq3;?r_)eS10ifC+-})2DF{erOhv|Cx5Bs(
zLInM)Lpm)9rQ99zZQs^Aj_<wm&bt|<7~`{ID>FDa{PN2k_uQjZRh?gKoisUT^3%!4
z;S;^};ToIT`;P81Z9|nc0Rp%HCq{r!Zgg~V+cs|7)vH$rIy(yo7cH$bU9dnTc4FiO
z4P0)434}0_Kiav6Pd&Ni?xjX7kC1STB5DbnbAnMmXIF+?LV%vPF+zsLY@2z#imVV2
zkWQLjw_@9j5F|@Dlc6qELI?x{Baw5v++V-F;$NQsyVkacJg$pp$aBsKA;SZQdge)x
z(=k|r&D<z1grZ9QCn6J(oRd?}WUYo;Zz5&Jl16KTFO@NaK2<jv=OXA=Hms~C1eNOq
zg1}597S6BS^USMb-f&>yJa1#u8Nxb<5W%^xwYB}OyN*BeOzRzYcp4hcV;JHjU?GHr
z;8nru8?U_e=~o{?2tRQ9gQ~1CMlmYDKYi?2WamySNj2-%d7GM`EGXrulap}coV46>
zM`+G8z2KbcIs)kZ$&af#dyY))y=hGaO=dwb0N`9`nsoTs^zMU^+A2>pp)c$R#Z$(3
zB)e%<V=`kNI6B=><Fy(0dz8`1?1GMvETd%F8kxvojBdHQl_2Dp!$!_@2V4spM?c#B
z{x#QZx@fx(oEfW{H$9aFY%|*+WafDz0L!o!w0U~wd2E~8wm=9xZYi6$IRl?pwr$S1
zuxzHOL{*4jrVyxHWeFi9LQGT7rQnS(e`&$DztQvU?|2#;5h15Db`i#cb5~7G=Y97b
zd*X?P&6@*VUFQp1vzNl0o}r8apdUZ;eUHog&CmaVO)XW?T&g>9=+N};-ICi~vwpq1
zwibloj3EF-$XQK4!8tQcrt37Hw{tm~%h7zE=JU)jm}zoK9ZSJgRdwLU|1VAC<6l^M
z=cXx{xBwM^DoJQ`A{S2@7UhYQ>GLX@LKqYCTKuNP#-?&UkCM&XZcQ>QR$Zy(@-&mP
z0YH&)XKSGJeseC|E@kI|u~GEE=RbevMWgUKt3fu;9{HbN{hcj3kpre_k(0x2j;_K8
zoL7_yK`=sqC>PEbF+yCFQq(7%oD1x&lpcMuuX^?0U(-@+t6H+R*N8>~^XFGxaYZ4)
zKbL#%e8>!=@6kuYt5#JlUw&S&H3KZ?0v{jUJve?M6sSBp*sID~b8Tzd%++zVawH*D
zRo1RwFMGYGIuU|%W*AJ@?R=i*ax|B-^LdufQ^Vkv#VK_T!IFe!nYdh%%O!a{vd826
zO<XQX)0}e}$)pwxKKHAq8|<H~UNt|H$Vn20A{m@Wh;yNvOjC(70!ldo<a~~CA-B(Y
zA#+9$Fd-N%y*z?a<g1b%dVFx%P5-cZ<>HIa$J)35$Zvo7;MccE{$OP;M+=k<XK+yZ
zpC}M$oSz+M1ZF-j-F+@V2;_1}l4L*o%E&nR@*n=upE|ZKLWt(`ksUiSgM;4Y=IYg}
zWuFfm9|BHhffbe+(f`<EzV`OIjT=8Zw&pP2o%!!RwB4<F7PK!00CRd82vI94j9AQw
zMrkfr&^m^}9epDN!Wc;s(KJcZB)3~Cf<|(?iOWS)_3VbB5QY1JAe&?V{QYm;bLBu&
zTXQyP0^+#L@x~ZArmKL0dw6Ql0ScRSoPQwzU|dL&<nrTJ-#C6K^Z7sh^S^*g#K-DA
zeB$M&{?D~-hu1C%DK3v`3d`m~2vo?UpJ_;rhvIlCvP4uBVPW+TCVst5u9)|Y`|tmn
zEMvhqD!yY*ygI&rfBe7!B@n1tyVg}(3#Vq)N}>6upH>2arkij6jM$nZ+`u@Kh_thJ
zn@e>snzsx9qI-4^J@>ri@hE|SR#l}|R%)S;5)3MSzwGs5MLFwb1m{q6V+uCbDQ5f3
z2mla56H|%De)1pJH168Cx(-P$LuZtgHh!HO9z-GN00=2EQB}yK($Bw}iIC5K=lB2A
z<5n*bAB$s*b2@$HrC*I7dU9Unz~XjNSM8BiO>kl}!5A<uxDZ9v1&)?-mPkSzK9=Cj
zP9*b3hs=Eg{=ByFnw!45Vp;c`i%EIXHnMXk0;pcS+Fx?H%GpYsBa8>1f1Xp?e%D=}
zB{Y9pjkT-yL$~Hx*s%lvq91)Uy>DN|!i5N9XPI*-#g3N3l0;Osu)w+9&L5&_L{ZLV
zOrk)DEbb)-aKaWCBi$6wJ^SQ%@4v0;h%V{$R0KT&$u<Q_MKQQAM}*n|EJlbBq)3QJ
zg4yOoB>T}}dN|s>c-_};xp{Mm5cer=*=LthqA-=Qc5L6)ci?r%?5)(s>ne=uAOwBH
z?UGbQBE+dTft*aUO_^cRbdF6Y#aN6?q(eIHs%pM!#p-JocDE9ICgMi9e#%cwOl{j{
zrczbQmQ^lYTCnbm>djG9qp!cNPfc~+cb{;`x~H6za|Q_E(+6u#3#{$?x4JdYlCI?d
zphqH8AAZOT!&6@$T(Cf^ssaFJnpP@Bb)6dq)%Ai=rR&_XxNXn4ijqVWrGUI5>?D`V
z0V0;=Gduuiwi8pS_ul!<c;Blo+S^v0ZK*|76^hrRD6)(QK?nn&0=}HksNkGY)1;}a
zH5I2PCh%~)lDV$vSajpYjT=Hi_hrJI;hbTN0gwQQ#&Sc01C!&&Q?Vg4H^GgFplKuw
z;3j|&NCl(<abu-Ya@Dwe4Wa7R#-`Th#(IytkOn=c89A|3i~+z(r6Sw6=f=kT9UbA-
zt0k8UiWC9h91$|LZCm2dq4{6`x`Vu#c#snvELb3?4Ft{wEWt6tkG}BF9+&s7>%Uqu
zZ|!V0(c7Eq>*JLA+uA})mZ+i7nPx$$W6@K?D7k?&mt%(E81;fNKnO_^k!7N3MAHg7
z&*O2BM_ewf$dal8AP#V1BH4dr|J3M#Z0sm9Mm3aBaZV$Kj44K3a3KWNZIm|^gLzF+
z32K9{s=Kbar)z#sTT89OpSes>1;w3)CD(y65uHwqjg3xCj>n>tsbtL1vy_^G3q@5`
z&7-KE%BtF$+WNZshWff%x2y0@7Ru=ma;{S<(@)H@ruXbg9zN`<si|JGMysp@0KvIn
z49jx-z=5f4+dA*NPjb7<!>5*Q9_Zg23RJZ<%sZW(IvZFHjJEE1%cZ(?Gq0(xRXtbE
zgcSh5LD-=~>0`$PW8UWGik==vhXDYm6dXl$Zmt%$ZDtr$*PTd2;g7B}!{AOlr?|&i
z))bH5ulWL8ahn2XESfego!Ta+3<SrBD2nQGtD4*8@do_CV8G>*%V#V&7c>7Xy@Dl(
zT|}sr2#i9&;K)Sp$2(#Zhh;JC(~L?#uBy=dKF#A+R7EC)AOwtYN?BgF(pe*sGN+SP
zA}1Lvs0CWPd)9P!&sP;vI_D=CM$v>4LL?6#j_uuxWjVZNjjyEz063*slF}zmjK2D6
z$CtjOhC+ffgb4tA=fB?j;=8}}xP1Tc7yowC`rGD=1)c;f2grlt$M+oGap!gS3c;U#
z_0elr-&9js=lp7xD`BP6iQeAKi4#Hye_LC{qD4v|P#QFp^RHoc)U^COXBJK=({-xr
zb}naUvsBLu!vNa?N`-9$=YsLVP6LS$MZt=KH5I8E(lo5OiQ6r^Ttw5bbWWQnospkp
z1)o>&3BeJ70KEO9UA?<r4yogvO-fr+g*WH}Sph)61aJXd2q$V%aCH!11Q-KBfB_h_
zv$@gnWdBfhG~uglzk1`<H+VhDr-+`ETj<%5k;wM#G@q|pzPzHR$N4-rHa7U&b8UCs
z<*Kbk0Q>v*Z2A55m4V7wYI?)+>z@3(m*>3bY>j1@`mf%4>b9%D=ym%5AexwZbNegz
z-1xOwN6tc+nMfphdou$ASeAY5?G+0aI3bf$zj?Zw4do$&PYyl+0NdjEyq(M0xty8F
zSecBK&ojdiHWi!~9CSi3A&z4~TrOwLEqNP~%XLl;wi6a9jka9#ojp)25JqDY(=R>y
z<7QvqhE)yTst|A_EJi7vff3BLOT@V`j*a6?MUg<pESLTG;MmT7ZTY5ety;0{(?#aW
zACno6Pi@<lpPUSKcZXN5B${R=ll@OT(QxC9!OqU{$mr&8FVEys>8$m8U;2ap_DBCn
z8I{QFmv#nNlu}8OUViUaoh{v6EelH)z}_P}<EiQE*4#Yjh-V`#9*_6-W`~BbB>6i!
zf(sVNUhkaW{6xYSLkLcy@Y*7q)${qRVVbsWalsLmR83Pf&E@g<+=_DYBj%iOn+nsU
zhB33|I-!5VV3s8)E!cb*V?`+-&*hR_E>iAusOl#GADpE51m{?i`i~92^7LPR`37%w
zOC!r!)TT}n9U;V6c|aWzQYdy(irW=UW&kLZMG;PN-J>!i`^*b{!TG;)%gr}4+s1@^
znp<5KeW1D?-LWIp-|w!kuidag_IQpz^;G@l>)f?<I}dLAACLac!uG}g;eo&QxV&@v
z*RwTNMo;-%0Vrc)altdWRKQztR+bNxm1EQ+k;K7++0jv=s)5eV;DQB?-%<D`Lg%^;
za)wahw9~Q7;NY>zu@mX|2s2|cHWkTMBq2+PVBi7}VAJBd1vXPS_Q+Z|6mF?+n%COa
z>T#bv*aiUHvZ&*5<Z`t5cgfo*q!0iKL6(xkQSNhS8qu`V%}zJPzx?3aU;iBT`Kt6>
zzLYNHTre(NZn=a*#<;Fi%_T_$TLx8J5(r>6;~XRjV~lK@mE9$QFj4*Fktcdr-u(T=
zi@MIDw@T@jvY$`-oO477!kAMU`}pJ7o;_MP9A3HVP~=#e>NTO-t$W_;Xq+DkR3<Zt
zo_R~_sv2g&134_sbUOXU8*i*wu|n64*47qEsVvKeVJM2Cs%kcqRa6B4BuSFb7$7K%
zo)@l>pPY;zJeVIFlicn=S66WUe4=Tk(ZlI=SjigA=B+)uJ{s!(5R9RwuxPAxheIBp
z&y7_D$f*=w0h|M+wr(cV`N?Q@Xu^nQT<*}qMawoVT+oS-;H<2EP`MR<E+&)^%(5Jt
zZ$|CuIyDUDfR8cYd`9!BDp6H66iN>cq_%w+-*gSm{p^}6+w&>iK@}ImrOCSvOhx1Q
zy09mwQ{A8#qs3j7z5OxHh0mjmO=bOFMN_4Q8joSpyurpJ*_tZ%%0)H0NlUp0MNuZA
zkyrP0-%zvA#=QBKElk&uEEo7Q7&}<`#F|V9Kqx;k5#6~H7S02&OO=$jcDy>TX?}BE
zt7#ck6*XSBZ<c#lSQ>R*@9*zVBodiSCKwDxA`wZFR;^m~{PWK*TefUsVxpp=V%xTD
zci(;YEw|iqro?UO@f2A!?%G;+Z7l%g#>Nr{561THmA&3TcXzO>s}!=IrR|_#ZwUeT
z_1E7RIPiQ=i*@_zu)nGqBpIjx${6K#-k6iZix40{L?YpEAY50m_zDn)F+O@|&-QH}
zzSFvX^H&$lZ$AsE;dC}1LI@!TD@rhUhQpa<G1GKlXJ;~qkW~M%k>9+U@o0-Ts3M<5
zKm~Vh6foNkc!bxb4UQ(gZrSg_dEKVAuF8xujsZZ}({ZD|+7s}4jtwRxf-KW?s~V#^
zl=-@rVfp+@Zs^c^|NW7gtJf)BpAnDGa8PGyrV{I<_ya-+aIp-WLqEhA%Q8_EqG@U<
zRME4@(@>8!4FNP%H#OI{ovf%%dMzc!m?TN*bUG9YdA;85?(PEz4m374dc9t+*PF}b
zIOhWc1C5Q1wY9Yi7cMM4__Ms<2o-FRBEmck4W5Pu5F$G=lIZQ7-nC2i`zsbK@Xwo9
z2$PoCC5VuCGXM0y{e4f(vETVZJJvkhu&rzkPPUI77C_<0(uV?sQ%915&;<v;2-P=M
zHnfM+Q`0ZK_LoNweesUZ-+3mMUn$*m200acWl5?6`27CT*ZuS6UGd%T9_bt0_sX}H
z%yZM6B}s+zTP8HuDi}jcy;|Zsa4rH~ACWK!(bMIX2;v+#qidH2ojuYv6_%+((XeNX
zdjsx69}l^@zxb7rC-YNN?wXo8ILAT=&I^AS6O1`Oa7qhlw^9gR2yR(4mopQI{N&{H
z-o5$p@dXb)=xpGlj5=2M>5x!>vu)b|Aj`54!nSRUu_P5Xp-)auzV_N{_rF5<;{X64
z07*naRNQlqrfHvv3ve<MP;j0d8cOu`8nKuf3RNsv;A?9`gg6(~4ffCv|Ll${lP&Yx
zt)$KcpJA8?z%oVv9D!g$!Uz!J%!zI|t5D%VpBza6E`%h@l9#;l;=X*~-n+hd&jqJ8
zl!Ff;!5JpfBM<+uTYGBV`mS8U5`veQ$%TN9ILRF>0YeB;DvnuVKa}5BpHEFDrhoLT
za^D~Pq`kGCI~0b(sZQ}&%M)m)jM+>kjp=D)dfG~*m|-A7WRFL!sL-mb-L<s>BaHAn
zJ71gM+EX8HJT0((_`@GAT)1%a=FPgU1Au9o!C)|#%gM5w&1MN9gb<I%lh5ZFV_vV9
zbKck2=lA=Ynwmakx@{K17|RR{Bn}@o<8g0OQ+_%cZf<=)H62Plv~I(qd@SqGW=c0i
zmhs?dS_qLhXl<1zlQS6;;gE|EOet3sQu3q}dG=x_gkT)GL-Nm_=)d;vAGfvCUDS-B
z5P-m<=wE;Gw{`rNTduApvPajM<MV#fQ8*C~gs`R&30nsaO+CB4?$&$%?^P=nowN_E
z6dak$VG@j4$)r9#ZA7DHJZ|T5z&UZblt4fWhh5>Y8VV6rEkA^DMlgB!SO2hP@rK2n
zSCrG%%LP66+;hofa$sN}m&+|#vgF8-Be&jq>l05r(bLmI2$`CivTeJvveGaNA%rZ;
zkw`?A<vZ@UWA*CQpY@GD8DY$_jA-<oZ+;`&H<W+yhP!Xd$w-BhXp+FWaB0$eJI4)^
zPDJz9tZ6tpkc`Ci>Ppvi!l<rv9Uo3t2Gw-d5(2(_Yv(NfE;z=rOWpbLa76jWmRmn}
z@oRMo!2#h{UU{`|$3LxV8(rGv^Z7lTOQtO-bv7LdfKwP8GbA8D2oa1G8A+0`E#t&s
zYTIB{Lb~?0Enk_}(deW}W)pXd*S0emJsQ=cQ8N~^Ga1epk!3j$&?+lk;jmU!C3!rj
z3|K&M&zw_jdhd~)W07H-+Sjk!;&u7voTfB9JiLDW`dlvOcDs)sKfYwilEJ}2S(byr
zU}tCN$jFG#=Zi!lnx=(9p<TOnEnmKzbKcR>0iQkNR<y&Mp%Yp5G&F4b=}&!C^^ZOA
zcY1bA@mF$2%kM7&FimSomk$8qDR(G<y4yUR&2EgLqfra^)cUYIoiIXv+|ld@VR1J5
znw$whD4WZ38N)?Q<P@iXFz0N`EjO)Mx8dElUfK25udC!EUG;iXtr7}oiY6mOguon-
z;3d+GV`K}A1PDec&1B7isM$Y?2D7b@USK}-@7Mpub@MtJ1>?BvJz<7n#A13RVnm~6
zGRbru5h8oNT2)n`vr`L)l|W#&8Y|auC8NIhm@vjuv5BLDy<fWNfn&o*Uf=f8o!5PN
zPNjwN`MjoSPQ>Bh!Gl*`d1c8oIW<3Bh-`5V02ks#cQS*RknKBmjehvYcYVGyJ8feu
zW<7p{5daW^DCH7C1=9opWkQj$X>p8^gu$|B7wcqP$g(Wq{NF!reB}=wX>JT(D)LMz
zK4)0G_fY@QgC9mmcY}W1BSnL*e85A!DpwWcWT7ZSwk>oEGCE1-)Px=|P@|`6aa;G=
zCCipKR{MAV`Jd%8nR)l!U%hf=c4#O&HfE>OG?xR6B~4Q*DzvI9XI(p$PEtrq%&Fl{
z5ysgsUw?e_+AUSVFaW&s(W{#3Ubl4Psn|lI<ck5IleR~eW%^EounQr=DdUdG<B$Hd
zBJ<N*uWz$0$uMjuS9a1j9m;O`&=3d#7|jrROTq*oKwgh*=;<H-GBtnW-)y;g^Tpi$
zb*cy<1n0Qe%|!@^rOc_xsp;rcGCq~f#BD3bEL{kJi7KfsmnRUYs;{i6uc@sI2UQgT
zP}`UoPmfQUsg#{cML+sTpPp{M`R2-H%ZRFK;jrX(&%S68MrV!N&3fe===|pW=j*GR
zmUgY+f;*@9<?D~HS$tJ<UEAycX*p;v-TvU&;ym(S{_+>mgFo7`mbEljaxNPtql`Q2
z!dXiyiXwd!AtXy!QxUU`T?gZ@?yFgQ<9Bboe#0ds`ppu~IS7GHE@m``2q97leR484
zHI<9S?7WVMB>Vj(^GFE<@)HxIZ@f{xc5Se$>!gI{oMhdzNeLUy-ZjHCjtm@J*1fV2
zXaGSliKU{`@yPtP9>%DngA2r@Q?=1$B2EnR=&_MEUihg?e`jfHwzI|M_qh?4DMOSB
zr!;bTa-zr{b%+i~mH=bUY%3biA3R}yJY22S-m>NPFSj;TUlyo3qrXN?!;Hs`NK~JW
zT8SjpbwEh+xYde~D;#!JSF05jv-ld0C&Vmk@VVy@Lale)fj>iK+k8H+D2lG@E|*J^
zB+If&K`1zfCF}A978Eon0ziGo$98=1YHawoKIp3pr0c6hRe*RslBy6wFoM!H7r}*~
zl$#b!WmzP_ha+S%6SkCv4f8gwS-YvNr5es9x_cqy6r=d0Uvh4xQbshYM<Qk{W@R#h
zF`{WoFzCQYtEwuc!pe`DeZpcEIktcQ)CV6l-F&mJwY5~5`W#2<c*=kBCx5bT-MSAy
z{P6z!@6TqlrfKH$dAHj=F)<Mg2E*a7EX$LVlhxJLj(f)#<D9p(we|P+S65eG*1!UX
z9$w5R8kRUQFnXfDcWV5okr_sGT86ZOO_@-P7zf0-Y%^>NH-!Mm)viEGZ9~_*&hFOc
zT174-)Zk*#M@5OtKUb?nJC`%3r}b#mh{f!5n%g!aMDh7lXI%@2Wv_S6pgF*4LJ8$x
zWDF5vXEKA&Kd*(uO*h>HMSXUTgEvj{d*AzBEEa2NX(5ChJb3V`tFFpsvx=fbB9ZH^
zyY2@+_`wY~++bN&MMXtlUtcsDz2b^10AOlrYSX4o4?XnI<qj-ID5VGqLS{UgyaD5r
z@$vETcs!QPrcKkt7`t2^ug@0>g&OMXYis=K%t9d;rGW4S3|XCVUE`Kz#^ZV<VoXn)
zsT9lS0b|+YQ9~gIMoJ(sn~ifu4R`k86zO}DTel_-9csJtPAwchch#lq`q0pj+wG>5
zPEJl@jQxJUBuO5RCmxT7LZN6h8Vm+0rJAM<3=F8MT2WEq^ZBNxrrd6KKA*qbfmL$L
z1;F@3>{x&A<j7GyGcKcyS7lx|a%)6Yh!Y64ZD!hBH+fb^c}w9q=&5LKZe7^fH9v5E
zJCU9_oLySiqERy*r@5TqoTzFcoLyagYB(D{q1%71gXA0$qEAi^KL32hqD8e=U3KoP
zxbj#*>62NixBQbcd4-pil+$K*@7zArx7Cd%nyXP`t+y)VQ#=|-a=|~GiAfg@bt>QG
zGWm%}dT3IgOeomXwRpvK3m0@@B%DsZpKK^l$f3;n#@m^UF+J^=M|LK|DaEqv_-k5q
zwX3pHDzY6<I;E4>JV(0Dr<KAAD8$eUFPMo$`xn0`c|7N`8P&-PLGeM9azw?P<_wI=
zcZJNr@$v+gliA<`|MuOt2M<2KsKxB*3VT8UKoZ!TQ&ueXUgV4v8N8+aod_f1Z0?j0
zSjN<NY|r83Xr^iXbzfcB-N6~dXSlOxR7g%Z+cC7QM1neLTCcYNqi|RW2ImN8pPPAf
zL8Pd<Qhj}+uf0}x%{8G#i!O9!!^;s^&fAbm>(4y?{rRCI8`rfX#m$OU*Kjdug$n63
z0jSu#5CCSvyr`&X1VTtsWUS(JB=+mKM}zJ6e(tv0h2X$NX}jhb(zIqGQCQa!37XG?
z5Jc0|V6c>?J#{bm`Cr#Qvp8Cc8ODicpOxJ1*4uA)Dj8j%61SHfumtA_gh}zk|M=Zo
zR!p^Zx6_=792g;lF%n!bCWwLs;|{187YLl@+z1iGY>o*60f-<W1aJWe2?2s}Ad=+8
zFTc2-hQD_E?Vq0`Anc@Rr>70aU&~|!V^~oXzhA4Wa#dHWm6auqb=g4|X<hq_QZlfj
zJ9kER?ri?t=e$i#pEMY8j&hj+O9;jpA<~P#{#D3)bp2I5c3M9+oD>4;sy&854U@WE
zvMl5MN2V9f3rP|-Oy=__f(yf>2tzb(v^4mJ$1@dvH5%7_9wp#Yaymr-ZkOb7$&4dc
zkUaeJ6F1!Z(_m~=X>R3)k)ND2V=*h0Vy5Y=YicOuM2{4||5LmDm!lMyMKc~h@$9qy
z_V$L&n@iEJ^LU-h1z677fe4x2w<p^_{O0jD?%ATtNYhljZO^1l`P6jYr4iF&vP611
zLm%y*%I0mS`DKM)&E#y$W*(Oe02^1=9~(+xj0Q*39+x~3%{A3|IftR~%ma6J%Mw-<
zvUec0^`DXz?|-oDzx-!^bBpZtx~i+Sxx(3SS*~lJQA)vx(br$k4iC3|;R|X-#rf?j
zaOr_H;{Xd`M5FKi-h=5QC-m=ZxpnnXuRACNql^=bVhPjll>vZrK_pBtN~SGUC1aC0
zRlz=wEJ@hmnFM@FB4wzmL@=^!Mk)7t6vJe>yj@%E=1h2e>U%qeBlefCYj0J%yWQb%
zIfb{Je)PWwjOLc2>dFoe55M$M^_n$RD^`4#Eqb%$QUa@d8mYd%scqYoK)}<|;`4g<
zq;nHnAN<0d3o_HDL;xWm1Q)j5709_jFcu&jqehgX>HxIZDHDntD;VcaX&l33k|ZmV
z@pq4Azx?};v^Cdo&QX!4`@cDo<`Tzv7mN+P@B*`});sPXs(M~5`bz_>a$h&m+Z)}r
zOZNHdHf+$sVTVnEF!|X-|4?f^vgL*j+a!iz0|<-}f|<J8ryKZeE)4(xa1MZw&m&t#
z=AV8MZ(I9+eg5{F8MO(K{{IH1*-|vH5{C|rzw=Jx4L1ZjJ3qTcf3bm8UWg*Te}8Q6
zUahLCX8n4#qGD#34mhMq{Pa^lj~)7_Th{XSmP!G#VG5@cDS|?D?sO9`ZDJ6BFhYt<
z6a{Qc-*YJO#{Rk$*Z%3vH(q^N5F9QWaSSY)%bj@kSv3@Dx%E~+=ya;fA)b`C13FbM
z9<XL0#n|-j-LV4)yp4@D#iFLCmhyIDn1}m@U;p(_mHfL)S~6YDS}5oylFS9644j=y
zylgWs0&tdAf)OD|A_4(3O>;7;_YTnB@j7qAmRoMSr{&TSN6##xC{BcKrr4+`{a0GC
z&wuc#WSLC9|9<@7!PYzOaM#wJS#_27ZI~q&r4eSSd6R8NcJ53bKJ060IhRg5CECof
zfr(w)-x)jpu8Z~6_~JDIt15^BUdg2rMIlb%18_E~Gj7^EuhV3PN0Km^bWLT#+}+dG
zef7%KSGF`(!lk0koJNEY&a3}PtAZEGV$DUJ_>7}Lgy@mT;PcN{EL=D%y;vY%zW(?l
zzy5JUb@N|;=YKTRG|zcIFC?(aK*J0px^ri$ug}-fQL}a}(X?}nos{RH7>BXR<j}ye
zv622n^n{t6;8q-XhJXcv0w5x(Hdi?ENv^QVS6>lsZD{IjX=$yk_B%xqE+%c}tm4$w
zF5$^A*~DZd8W~R|qPa}WG_!(QLf8O+kc5aV$!@nd=nsS|t7>cO>w`Y6>^$cqvtAll
zaRnTH<rQOky6w(8Wv^E-CJ@3H4^Iwk{+;EPZKbmL2X6o7|NIXRI~&4go#dQKMt$<3
z6_z%qX6e+2A7)2Jg5BMn_upSAIL;U%=g?QIEVb#Bt!}OlHrKBNSXuf46<}Gw7ytr^
zfGmS_%2}Omhov;?C6{7;9U+9L<C)$AdnSet*tt=knh*I=T|fyms%}k|Wyz`Uz?e=c
zGcB6UTZx2qVu0?>N|c1d^$WXuR<*U%W9;}t=Vys5wdiiX<(Bk`6Mc_8R<~h8Xz^lB
zDPWw=rFB#Hdjh6q#FEj|p5#1htTHWSrPGt|zn`C+tX#6B>WV97il~0l%3wlp&Pj38
z0RULGNToB`Oe&wtnx;;v#Ti2g$%;aVqG~R$H{c5dd>(aX`?TPKi!&vjFP4;88^=zJ
z?EK&*$n|#Ai+L@<P^BMK4G;$I6bRtOn$I))zkoQ!lLgpTKA9aHPxcKNY1-Je^rn?7
zS4!lQ6F1I0R42V?ngjp-?^sb<@3;d=5(4<!hyT;hU;bG*RP%#B|Ci+p)|^w}wa+k$
z8AzFlgwv!xykbRY=~DD*n>Ps|O06p`n;#z-8W}j8hz?l!DH&xwDsw5IsaTP*(>g#1
zWLhj|aNWX&tuW+w`5VHu9UYwu8|o^d?4h2YDSvWtZc#38z3{8Yr0n|}msiv@Rs)fR
zNtw;K!`DE?^!gl!mrjBS!B~|5i+n7xZSO>XwBg3vA8c=HJij|)N)K*&&+f?f9eC4f
z=2pF`=c!j8Su}6ilFsGvbgZSWt>Tmxap$QKW)U>T^z_7g?^(%Y^_n#mJv{(tsa15g
zvkHvy*hK83ZEvO{dxL7Cz0uWB;|m5n*rfp>fG`L+iI0T<oJvNvZRL&Wcy@3sJv_xt
z+}P5!VfC7IZkK$iHX}K=J{n8^;*r0)c5!^c(s|qz)U=>jg+vH}FaiNZ{u3aCIOn3g
zH$`Eh2q9ox0DvS(#3QGsB2WJ&vV8MjtXi?OP<U+?DX%z)(+zI+CuN5_CF9IktZ($F
zE`eKhZ{Po3OI=5GsMfIb_QtMo#q9kl=c5s(Q$2iga`OH6X)ag2c5QI}eE1BIDqS~|
zHD7+=DQo(@)eBvn9W})30fxY)oN>krjYtsy!U!W&tb$v(gBW9iF_tmN1O&~+lKT!v
zdPh79R^GGWsw*#aN95B^3(!w~@ZH<iOg6T)>d71-1?7YZMgp*mEt6u5B$+VEIpvgb
zMUybbg#mNn@EQdd)Mk=QIOPDq7?(8_W8<Hn8olMK|Jc%0bKyK+=e2xy=j+{VJ+-IQ
zTPw*a30J2PW@O~CmmX3T^=qGdurgS6>cQn5zp}%_lUuh6#%iv*%HQ4&pAAxu=Y|j(
z7#e@^ssDQY6~=;V+JF<PTV^7K5MYED7mkT8%a{vbHq$LCE0U&3oCy$u$b^~}r@*KX
zc@P3zE^Yn#j<tIBjdy?aZ%6lh<!gT+UtC-j8p-V1*X%#s*xH?&j!80RRJdHy&X1>#
z4<+ksysAPX@qEyy5`v?#{Q8ykue>|hP~&xJlBy8XWSUBJgCdOl9_9E*vb#MruQh1f
z93ilD)8*2xUxVL!?dj{Q=jEB%wE21~l>z|nlq+J)DTm1!<Ic~eN=Bt(MvMtcfpcE`
zaE8hOAQ)@9<rcXz1OSXt##m`yr()}rnxqH;z#sqpH{Sl}EiRyM=<q*(@5z(;mzIGh
zef;>;wrz-z+Kn4$wV3;4cU_3GFef04V~OmqAOFj*e@+WjH5<tc!r<`Ug%DUG@pS&B
zw~p6Txhn#iZqRhjG7MT>=~fg%F!FiTk@57VHBG7_Iq_4BfZ3*H3XJegTNZAA@7<sO
z8$9r>Ke)(^FaaQ$oUE^tAfF@11_nq7ZV|7>t3y&EnMr4@&elLOozLd&fL9UJSkUH~
zi01M+aA{I1V|m^3$Ygd=S16ma>Z@dG>w>DzE^iEA=B(;kPvX_>Z~WB{>#kj|dVOX(
z?Gz(LrN0SrD*P6HP}P}#mcCH-P3N}&AbY*2&^s3Z0U;757ywQeNSmV(W;7W&GH}Rg
zgt@<Ok6{~{tcl{bS_d@ABS#|Jw-dL!Ve@8pU0ng!b1^Vay01m!vtUz{;-X~<8Z(_%
z{r<OKd-l5JnLwyEpNLBY0|x<sB?JOEwft^qtW_)gaxSk|R%nVu{7vp`&Jvsjy;|PL
zGiCxefinbvFmNgW00V%4+*E$;RUOBldA;}W%{>b`E}FgNOfgj1IJzUXyr;@e>rQzl
z(}ea$ZGM}Z(qaKi1VRAkf-`Z&0{^lFeo<&aiUb!3RRKb_%?U<;z_ttk5Kg;1k2-W>
zTx#2V-^f$>$b`GLuAH^;=|vPuMLL;8wW<mLl9_~QnP)g?jz*Z_VD-&c-S*@w|B5mG
z#x=jMo!kgB(c2sO=p!W%Xx_4=kTWhT={{2=9Zu#8oF=!&DRtUa*x9U=N?}4i`rd!y
zIhMVnr?tm#rji5|dh-bZ@uY<i_&hSkXxV~bD5#k>vrHy6xg*hhcSi_Bf%<SoPX)DY
z!?aA3<_%UGc5zy$Xoiu1tmtf&P8>Vfv!LUmWwbEH0Al$Si#~X3MSt)1&hGY1LdRGj
zgct{E3xrT1X#+D=(M-dkY#=~IdsjF;&!D`*GGjv16mG?yeapP*E4Kg!t-5CBS(MN5
z3^*%uMg;&AlWayTHumP5%(9wpx=9U%5I`awAB_yDirQM=ajrI2PR~+CzxTU;R~Za@
zUET+7|Gh+dT2<X{)jhp;Z*0#VH56*O?KZ8l5`=KJS(a<5Q?F5gPBv?2GIlm=XR}W4
z32xhhF#te>5LtE_oOtT%>o#2-Y-mlf@pSy1n(A8HvYc~bjNbil(6SlASR#mX;c-i2
zQ~8A*!TM_VTOW>l+>+NN6M`~1+wYYlaig`tD@!;UH`Xq#uB&!Cwg_VaJSZN`kOudh
z1HN$LsE>QU_18c9(VuLH?OM00i7`nxm=L^t6sICxobrPMDo2qiGI9H0a(wiWS76CC
z-&?+H!AXVJKE*hl#fK0pogRDR4Kp6E+q5ar)iw0%UstVI;c0Aq_5J6+_POuuJ@V1^
z{ae>A*>ILPmIJ+y`*shF4}|=oBZIxFqP5hvrmcJ}RYF5CrM|ZA%Jt+_#y4YyDy~KJ
z6lw`u7Pl-X3W8;sXqx2lD1N`}^T}SX<n>B!H#ub+f-}kk2m5xv_^k)-Y09UO;M8d<
z9#5HE!0>ps!ms)~QaWqflvf5-k6Y3WHWf2GF3GmJ0Ku3rE#BJTNo8zjC%(@kGbR`p
z9=Dpw#DDbf?g#(l!{JKbMa~-vArOMR&Yphq;r!5Jn-&}M+k=Ycq7+*;FK#^ofVo=d
zl{H|*7%4JVWDwjMpUk|!pB_uExZ(CcT(zR-v&^VuA~VAnd;9I|&`{0#^_5GO0KoC5
zpO$>ymYcS`vFkTg{>m#BtPw)|;<ZONEWfV4dXCzT=hO%@KQSRF)xu#t5;0;iR#pJr
zsXmPe!HPmOO?JB_ueSglrwiuUx*49@VuW)>B>BY`UyL94n|rs^NU}GVr$TU9MhK83
zA<6}CAQ%84#+(lIAQ8-YVb28s2n5XL7$YVG=fJ6uB;xYo$+78&UXrfA`|sDSS$0XX
z(WR(w|B3N;UVB=fdaKblI<Jv6)o4DiD$6n;A_U?b@v>%nsL-!aAYh!)oNh&8#<5X;
zB3hBb%X(IR{_0IvdED}+o>2)>oYKh;K1d!uT(x|8^{Q3Q&Fp*h(cr>`bTTrm*-5{A
z)0!<#elVVze)WSF?!NIpiOep$b@oP>93Ve3GQDSyqkAN`TlRWoNAWn&QPneBh_ei@
z)7e|)QV5p3w{7<ue|z<U@ul4%Np+hhST<u07od1_p@A|KVp=n+hEq!ifMBeuSeAG?
zm3en}cF)+7+rIqW<x9ISA;+OS0T53aAMe|D{K$v-crUgFy;3~nF?=rO*0`o1i68*r
z0&FUB2FmC-omY~&PltNq=?XV4UA$~{*Suy$I)|X+=>}7Tl;AwNYghc^j|1J^HS5-4
zNpey;{f|E$?Cusq<i^MPnmwBqUZrX7(i9H#@5vkaHH)vBReSABjWAuBr>A2H0Hlu}
z&reK*SFAX79V{Q*jMg~^=$us?HraGM_nQ}=N)A3ZuWF>HjnsxcimD1Aj3LT|vvibA
z0Xcy#LO>!wun>aga>nq4zW;<Yn4aId_^z98zA4~yT@K8d@`M!tPzI4$c5-4OHa(F}
zPUmw;+stxi2_Ym&krbDtc)kA0icobpTvJn174#|PXL5X{PcZ_=M2_#@Kec0rueG&q
z<3@*_>_pr99(^=0Z(eZW!qMlRYyJAykq{VTCxQjVs*ZEAvQ7)E5BI<4(L77KRseuL
zHI*3{NS`=C^LbBWW1zFs+tO0n&2k<Y_@|D<F+yWW{iE&MP8@oRW%gAl6SYCz=|t*v
z5hr%#WI`AhjC0dsxjc)d#bg|hC%kFi?5bSRz4+>tE3OFm)ys-G14Zox;3%+9Fe-;F
z^C^w=GDszl9-aE&16Or*-PKpiUau(aCBeA=@y9()P4!n_ef*I}qK%C^`ueV1wQB!?
z1CdB1lgZq0!wpSMO_WjqsI9FH1Onx+>uG`Y=nMbs*1TW5;i~|UJaQy?_;AbZw{zQe
zx_sH$tP%+L+uQve9W!-y#T-P?&nUBA>sZnl7#JKG>WfDP^vpQbBZ6fym>?(s7D(kF
zW63YOYutf`%IdbJ=8m@3rl4Ofo{fK+H~RvMnBn@JE4DaiPAd8n2jR-N0-3?ViQoQK
z_Im5Dy|zRRM+iCEum9&i_cS!rUw!rPZ+;^y$}ju-mv(m_I((Qh=61W|@whC@wrw{x
zHGTj4-+%0}#}+JDQ0^Yi-3ar&-EVqaUftAXNnW$~s^qa_`uKQ!|Ne&SuMf_j4?=Lp
zaw8+DW5<k01k19gvC%(oo~ycgX8h+>jXCf_FgpOt1Xwmun=#G-K$3_=uq*+=vkw0Z
zFZYEM&RBVcNXzE2cq);IrBm^IE@N8;V>SpuBw3PFRdf3T6~T(iP$=YemyBh>8As>F
zBP~&RooFW@)Nt*!u9}*11?H%R{wJRBHaFL8+?X928h-7yg}?i|Ti<(ccx2?7tFMkk
zqpGTAG8svdMn^|GIy(04+jsZfcgwPTT3|VV9T+>d_sGsWuluqP;_2T!a@~g8yz%_#
zZ{O{>`|cCJ{3UU@TJN}{d{?I#kEf0u%Z-dM!%!<L{qyGenww|(<P-{QekL`>ITu2d
zQ?dX+2(WB!+cu@tSu_bDk|ZgLEX^)8bpcqspG``uJR5whbN~P#07*naR2MKbJbtY2
zKy>^l(<e14?{|aGgFPBi6e3C3+0bU&OgC9h=b1cY44IRVFVx=Nxummmo=cMoC&c)4
z(<@Qe%|v4Ct+!}4TYv4f-sa|6i;VO0u_vGOHaFK^brlG4<l%>#w`_6O*E<F@rL@52
zW$euDx&ap==-tYJB><3a=AV1}>Dx9H8evW+BCl_I@!l=pOdLEowS9Z{x4sqGv15AA
zp5`rEyv@zrww=6^b38MQ%)mhE*fBF6m)ve&TU(&Bv($675TpNuPq%z4h)u=BWOQug
zM09c}o1Wx$25}uDTf)L&d=Vm96j3fA$*Z_RzF=)_eOqHwYh}ob3TK;XQg;c(d9!nQ
z>!TeXjP$+dm#5krl%_ggu)>E_6$k-QaCA>D^bUXkI0M_xr*mUdse!TlWYX)eU9tMg
z>+5SP=ZuS%cG}t5?D*UNtGO?alBzoQ{r2AHoT@rCbyaosJkKrC2qK_N0ur1N;v6v=
zhnQp~dH21Q_43|YH}S5U+`Dda*S)!k<|PU$=yga?k$`AG8H6Axf*^D^P0!u*+%-?<
zoW1w^V^>ud-7R8(Zob9R1%0~e?6be~?Y+P6_x*k!#z#i-7A<mCS3^bsOJ6DWRrd1o
zyhV!upzGatiP>DZe0fKEJ7sKeaB$nUZNL2GFQ0klnS~1%78Dc&gTWIgPF#KU)h3fk
zh%%LwBq8wQ6Qn!#Z>cP<ttqW%j4{q6B7NTc>Cj03O*h;=aQLwA#EH7c9!vOq9dEs5
zEh;KnwF)4qKL{BMA7?Cj_H3Y~B|0#G04%w=&YBuEKR@#V$gCBfcLF$v(=8pRjvw&#
zf03nz3OppoV|F`Lo6RICLRl_}!vfBLac&rixE2h@M|{!#;Y8mEBv4*q#oTM=EXc`r
zW*+sY#geMq`wyHx@<u~hd}dv)+2sI+L8pd68O!8mLSqG%3`7t@SRxoH5)fdqXnXtM
z!7rkcd&%v0Jz!InG00O!wzF^V-f(w!&b)c<h6b46Qt72|ELH)8+S_|S_@M6b#~GzR
zfBI>w)oQU=8X6jwEnD{6-~P6;vhv`;gQKIPLL%;_n{FB!8k#?U{%yD2mc%=ZTMB)_
z5tqZ0IWESTKjd@UT!3-kzJ1}YuIh&#0)W1~d;N`#Woy=0a&yy>R-7p^7d|}{3Y<P2
z?(Ec~QIp$kFDr9YRE+Voe))c1q#KT(Xgaj-4X>%Ip~hZP<dJMD00GLuV2rUe25an@
zBS0c3NdyQ60zmc1Xz+CV$QSKYcF$k2>Ta*cF@412T&L)@P0x7wzE#U=uvw)s-7u)g
z%w?ucMBN?%AT$|f4gqjr956<bSwVz;ajb3k3Fq2%KP$}l2%xseb`Bgk;BRWmo-@Zg
zcdlp^oJffye6i(~SL|hFd5ac_NYV8C^JQz-TD)EW*t~gjRaF&ZthTmRmgQ~RwpCPA
z96x^CYPHtY)ipOa&zw2))TvXmXV0D_Vx=t*2%I@{CObR3si~=>qvQ75Z!at?OnM9<
zJ@3D-g+di~-wgn<fq{-KTe9lv@|P|hk7u8NcVN06?(7VlITIfqCW>M$E_PN|o3pdW
zh9{VSQWy%&;D3H~gB<?g=Ea4MoNTUhn$THB!Fyt`;~879G>R7hNixAE8Mxkdx@Xs?
z+SLo6y5ahZ76SVECQv$?UU;U?xo6(unF(JEGSt5SfXEmaAOr^I2$Hn~#yBPz5CG$d
z3y=md%7vIO05Hxu1G7^d=|B75@8d^*^gEkma3T*MIWm0osC&kY9Fgsu^f;B8wbL6n
zIw~vk7A<1Bj%B&y?YGU@*?Ef>k3&RWc>Zq^0fFY`=4YRM*6Z~~qtWi}?qB`-R|WY6
z$%81Rh>(sgTd*XR+<v?G*6tlUqW%5lYu74H=cN6O6NeNV7zms`9q#Vtlv;9goz>O0
zl9Dm16V5oo&prFEbMlW}w`hhD(hW_Q6@oKWlQ9CG1U{rI@`xZ&nB~9`#+)TPKLrW}
zI4G(KLE@FojRmv+VfnJ9Q|Vj6s~Vfyj{Wt2JaBh?WF#g}Xeavgi^1Z2TXUOlMzu#G
z`0QX<k%?-Njx`R~lxGoyY*slIH#moEm&In4)4l}&hQU;)`q_z&Q)jNr{_{Jo8<&=>
zT$wX}J~5lmb3zx>dV1qVM@2>6;>FA`uq64Ln)>(euY3IQv{z9P0#l(bQ>hT8Xd}~q
z6`wqbV;wql2xHvW*B1x`oKEMWMT^{Scjn5CFh29zYnI&H!sW|_gNHjiyWV}*J8z!%
z{EQ_N7Cs{q3AVKb+uHO{NVeNu_4SEhz>{CF=gb+S?boYrn;jht5rQOwNBnVvGMCE?
z02oj(qFF7noQ8pNzzF<d&0>-eLW+z>{BfsUK>&uqBngY9l5vg@F{$kLuk?KLiRW{@
z&I^A9FVX~g`mSB?dE(E{t}75CE~%#ivV=zbiS2tj95%%t)ZAGng3+)qKBL;5<uIKc
zh!BE&!Gz0UYV8WB7I{Xs`|4_UJYk%3^Bi=EKmTv-vyI}q?>>^ZXz}^vw=-i^MMd7?
z#Ug4jO>2DaxvB>rG`Zau1LvA#DNH*ce2E^DaE{ZPHf7b;=FFcje2W`K=eBJ|BvQ6!
zjijnyLAI1kH)rhkDGhgb#|H-w{_G!Po&Dj*R@}4FZ<bXKoH1@u<q!6Eg`>Jbxe&>b
zWy~nga+(H)qX?l`+_-s3>COXPgy0;vWoR_U7|+kK4v)qx7Ks{s)shnNMT~Ka&2->!
zd(i&fTW+~!%4FrlOMBqJ!9?rNmoKUa2V$ZQC=4Mm42}q*1|RmtBnjJ98DWF~WC_bM
zHVkeU%wSwVhA;wI#+g&cImn7UI5hP3=W~AW!=G_Rfx~&GKuluOh7DOYHNvZe3%32~
zPuAk%-0QEu$hLq<8dfu30))^cP#cVa^O}brZd$*dSS+4~24)xt<FdQ%@;5i1e(9zB
zrAu8iW}J^cHRIpYlxz0VQhQn1{HLE*OpbT<zs&R~ClcorIM9S%oTr2$$m=o>j>HB>
z<JG0MXw2{hwXy=UB4b@=z~a}`Iw<2#n*v-@&62L`HKi)TpzDn4F@lk3LjVehYl%bx
zzE%z8;!HfoIdiZ7<A=F(>$|NsZ!{85`xXZv2si_Upu!vp063?>IRIjeYYC1Jk}${w
zaS@z3XU5ovQ_c}0lG*snp26ztmjVFi@TE<ZsgADZ7hZ6ty$WN5(C8Om81eYUdlmfs
zeTAF@Ld-Cl*RL<U=_W^2RodlgJl^rnI|$>l)vK|hd<~vBkzePW5VCXUPTu)X-&k1}
z9FEBn001EvAz%QU0Rq4hLL8z|T~%e_qGHKo94O;v8AmnBbf#J)$~gw4=@bAs0}jM$
zr~mQN;4SOc*VmR#Wi>jv&1!Dn`qES1UK!6T%8Ny4`be0(24F0AH3=dsY3VcsV}KD>
zRl;a=)7F8w=dtfS_0+k?n2EQ+5kk!`zUZu~O0R$bKx47y7hkMiw@$WCu5J0X>>?Ug
zMJhHLZP~P`<c>S6g@qzJB3AC<qeuHc`l#gATZPYEc;=l`3cwMOe*c@FUzfAvy7^Vn
zAf?nuJ^HcC4gg?`(i_-}6E5P(26o8Y-ZF;FW?5GBjc;~A(T~6V@VBNO;~*Bqw$A>|
z8~>@=aqz}#?Jl>2Qljb1FgWKN5Xb3JPKNYLc1I^gR<SH|Egt*4De%FG?25Th-Sf@W
z=NnK8xzzIV%Z`eQ+=UB;SBd!4`o<g1sw%<jH{HZ*oC89d-{11eE0y=(Z_dunJUr^5
zP}}CsCXc7|_S*$*+}EMF<Z+F^^xUsqu{Um8oMm%5v;-tH$~niGiM{i#Wjr+v7-O@E
zNRrXnHTvg0C}+m^*R6XHeZ_BIE)x_wIz_v7eR%TYmvc=g>WdTQg_bObg-9~zm@-5e
zXAD?I<{hQ!nJ~wgb7n-N@!r8$V<$R2SYRu>dF3s4SCyYv;yQ(`IlXC<v${I>`s*{j
zYUJ24e`90i0}ouPj?0T}u^0Cd?eA}Y>#Z6QMLEw*#P#prKXU9?*_t)h!omv=U7Q1O
zhA`gy(Z@%2KU?WMIlBfI<k}>~OexZJFwz~XnYk-5B!SApNRqHD0Y)?yjkR`14mFvE
z*!9b9{m%TkS5Ge<E1mt<4F1K*mg7f09PK@<Lc7a6nr%;HJGo887890bOfUuj#yO=d
zp5Wma^@m|NAPt4>0lg60uBxnGH0Rpuit=4>{v=Z>R-N9s(OFZI_A2p1JsfV?w5jHi
zM<xnq{@r#7xEq9Tg*rOAwr{U{>@h)6BvPG%Y$-lG-2Ud9_KJ$4l`F^RQP1<SDZorT
z!44hz<cm+=fzT%fj{cGyBhMo{ZHmbxNs^R;2Beor&KNTcBNj78gIdoZ?HsZUL`y8*
z8?KqRYVMq?6&YV4kSt0mPC*+C3Vj3q?yiphv+e$oo_J(Pi~E2^Inx0+CJH7dj%_A2
z+n$y0_7)cumKGNkxSSUT2TI4P30{><9=-C4yP?6|&~OPG#4imgh`1qNV`KlmeRYpN
zp1iqq-U}f>sCU<{U|U=H+O_8F><bTFnT6H9!BA7<$*#6z{=p^|>sDaYLP924S0suN
z<A4k*X$EN25@!w_d9kI$m0MR{)lgeolj9MfF)r{k7eC}nWkOyRV+3Enb@qbbK<QZZ
z(o4>|y4(c|#(CA?;lrVhj>>!Qy|lCgmyB&j+?Hq&t9|UTbHZ{ebVbje?by22)6kGB
zB+W0Fe<oA45CAwpFl_k!fj}S-iA1zSj8X#t$%>*VW>r<4&aA8~yWKjL+rH%NWS7Kv
zDr21K83~<5!m)Tfrt1lVQsA6Ok}S!J$!t|si&@IJmQ%_mO$m*C0RTd%`Gps<>g&&0
z0W<c;bx%AoQH|^(?Nah%iJR{K=%Y|aNA<dO<I7Ab8LI9bJ7PmaWoy<b4#$P>=ta#L
zBaxoD@Q}kPrJMt~FrK$5vrJ?xWzg3@+|kxN*w+>f^#cvbC?;X5NFXAM0Qeh>7~I6L
zO*Ut{yd}k@HD#qGW)p#Pc@Hzc0{{S_rVSfhS6wx3UnQoa`NbD==FJmH$4d(?zr@6A
z;?{e1?$iQ-io5R~?>DK?6>M+s*|8&M!Gi2LbG{O5N-0fa^f-Vo5FP028y-3v3XH^}
z0X-4rOyisaAXza1k|jm8**#8|*XzyC&C5~E$t3XPPk%Zry}tJk`i_43(NOniHhHAL
zg9>s~kISm67G#ov5I|`-kSIt|&<!n?@CBoNgQ4yL%^$Oyv+8Efxv{pU9KpG)Yv+ko
zDX;23a3I>(S8?~<mxFuf(sPiC0d#HKh6pLX<(7#tDOr;;jLxlFX(Ca6*ImS7nKX2z
zCqOs&>6X@}lZT_eHWTvM&6?XuvK%I>MYfn^NhSm%&Ve$n>qa!Dha#Fkq>lz!IH6L>
z>n*ry=B(=q^RwaHP204XNM#L;1V4E1PZ0WaW`$H;o~=0T00a!q4JzP38QIV=LkJO!
zk%U1afH{xFdU}SBw}c0x#d8<m+i-O)V+^N<hEVf{4OtUnl~@Gh!^5qwzh3{;Qxhd#
zE{R<ha$E5Rv~AvO@p|)@E}g__QfEV7V`Ja$-TBLwx$5i3q0htwL}U8Cy&v?p?9O-k
zt4q}40+-og1xW^ufbry?aY##?`U4CSasOzjt=o5|mqwxdngw@U({R-^wp1iLpbj2B
zzW@K-Jl|4UT?m}exUQ%2?-TDTJwKU0VVpAtgkVXLk%EGQ!|(3x0naV>-1lt)NgcB0
z4I8rR>vM0oVchdiRteXy&tI~{SyOYFGB1~lH93uQbyQW2e`C_u2-5mktmEysiP>Cw
z=bfTS5)k457~>;HPaN9y$7`#ia~g_dyA2Frnn9Bq0+3`up9Gf0d1^i|LPVC3LI9}0
zf8?Vh1H-i8j&DAh?Qu+3+I{z)y?w|2^TD<C986j)jsOrwl1vz7C`rcv7zr^vNT=zD
zgsINbITZweB}@&<7;wgkEK7Fj;NCBqgG(NH<cEe9?Re{LTUl9NDz`rNY#2irpWVG%
z4+cwDufBW)beEToTL2Ng^X7SG&6;!!=?&KKkt2hL4i(>etG%p@Q3Dg{z4zW9I`zl<
z@2rxoP9u__lnQhx2f)ed4d)yo3<#2JY^i-k^2^0Hh*A&dASp6YrQS1LoA<K2*8QTi
zIB#kTg&ZL?Fcf%u!xK+ESd@rj;54~$<j~sf_qr^KOiT)4z;%tu3Q5Ebi&^rA69mxU
zXtbgvD@hxP5pWnBiRNajvLrAL+%Q1(nBUve;cII^zxj{(&p%gw*BXJZ%Df3cDB9oO
z@zz^ceeZh!7u!^P9=q(0#SEkAx#tR2tjMaZ{j&E%yj5B-*tum3v0A-Vm0f1X;VnOU
z^x>IWh%ssim?c8M5h4T|nt>&PFc5^O!5HJ3##B`Tg2l4PA^Ex^jJQE5O^%ULZn3K)
zLw&FO)$;wH{7#-i4rL*<@!<!%tiEUFUt1oF#KoX6La~Ig=i^>XkYO+mFfbe~%CljN
z99E^N&F6BOX4ZQ49_p24f)UtMMUt>#(1b=;EiQ4`6q>G<a+HwZ*(X1k=e=g`uYT#M
z7|$^z{@S#Dec??v*~`i<25$A0c6oT-g&_o-V@axc<dLTJ>m^mS6&FwHTcTnmt7`Sb
z5AXZI_xFA0N$r2FTYXy&4aJ$ECs7RmjKljMb(R*|Pq+JLRC^Q|cl3trR@swfZff(D
z6*>ID1aOcfoY1IMl_Y{g5xum~UX*7O97Y5|)F1ccx@vNpKR$SH@uKUe3`Ckl=5t1n
z4m8ebLagTu0S3N!t|uBZB!Y*1@$v$5QJ&QoNSG9&nw&PPoa-X1mlyhj+Tdu+rpk7!
zED>xn5rTAP@UhT<2n_~YcdcIj5B~;y48xtg0mcx<Jv(<=3k&UKWtW?U^>R8EfM~Cf
zRJD5Dx|Ww;uDt(#OU`(D-Q<NB3z6qJKmBRNZEJUYyh$}ldLjylGXTy(l29O|ai;b5
z`3yrp-8N`aNHk`691hMjnb6jb;c!%&S>qY?$Ksk{QOw7he2R>nRw&9<7)^pL5dcJ^
z9v414+y?-cF<_r-!hLJ6n!Ei)I(Jr(Gb}pW1QJV9kZQslz>{SG1iH?$YzkvglxwGq
zQ^PPTknJ>;7b@a>LdA)N>D180=j#SIyp}x&&swtY1OQ4Ikuv;-bA)lErzh0jUjO8i
z7oM8_yX`VNmO!&GW^%bI?!CA5wbyDMeN=HcCJn-3;w=S*w&IekU{6QuD>G+QhJ!JQ
zAOt`)u$$qw8}k|Cp^%0!vRWjB5Ty(uDDb)@BASi>fyx00Mp+KXb6YHCqQxTVFEb1d
z4%U1oP<}%xz$B-z%l8}@V?_n-f`%Wwvia$U)|BbG5|3*FtdTx#Pyo>|k<bAEG%b13
z<pvm&d?s)XjDtjo!$m$j)cCjdhX470)&fk9^6T8Tt@MsNF7G(g_ck@J>{y|C+qSyL
zA0I1JPcVTh8S%wl{_VHFb92b<%n66%>AE6kfDi~Rah7rCNibF>R2RUcU_lKm4p!ov
zU~`#1{iJPI%i^E>-+v`jo+}m4;V;|XZ9Vues}~yOWnM<5c!C;~2?x3mKTo!@a=;iX
z3RYwu3WVM}7-|VG|ISlC&C79(-&!$-Fz(vE9V<%F%9T??MLxB%aw2iHcW?a@Ph=LV
z$6qO0M_RkLy!higuI;U_FVHm{Pf*|tXQ1G|`WsV>S)2pLM70pkV(;%C__S}~Q$PM^
z?{s7wAhnBcY3tp-`B^po;k8w<>Qbx2u5yqlMLOk_3Ruk;gI^j<iZCJ=Nd!p}U_`Ze
zqPstG<TO7sT3dJBL$}_t%4{Oz2gNxc6l`nj-MO>=yWgF%Ay26gra1i#fA-nP(WAAG
zJ$9Z`Nh&=Zdh^w1%%LrdX43K^Cy~v%fdr+Z*bS#PP2;{M#SV**M35q5LTD@!J>C-D
zchcpoxc`9%*4b^QX@q2@<?>E7cYXS|9YdXa9r#SCH<It+9;alt%8D#W62a*XZ{VD9
z%9yUxXiWEojQ$bcHEcQ?%$2jQt(m#v`s)|CoR-PqK%4`>$>0CJ{F~oY^YSk1Nifr<
zTwzrdst+6pwYOJ4^w4?2a+<Z__{r9TyWh}9c9(nls|z77+ibO(2$2CW<47pXr~07N
ziFXFTbY1rc<2?gfbC28;s&EvpSi0iQ+N#1U0gok$HeyE~*H~+NZ%6B?{+`CrXe%W8
z2@l99A`_h;3IKozWl~Hx8OQ;$S5}K$xiv+lb(NKs1-Z^t-i`s_@lM4U!nkwmR>k4S
zzwySY)Z>^2O=#g;y*qctM@K8~yYD;zhcwa>0Q!eQpCA3Sqvc?9<b;X!IL!f<Rdc9J
zHG?7{f;k7I8=&bdn!v%R<cpa733mdQICE!J*3D~ZnCW#}A$1JALXZwgFjfYO4&xAx
z7~x1X8jET1xM3Kab0QI0R!k<7s;YLI#bP=qH8rkNH1kIYp+HN^z<~obk32HPDlgL{
zHZD4<-+2ciRC?!~=LgR)#sD$|BQ@UFKRVEVc4W9e;Omb?15}SussX~1WG1rNqGn~e
z^E}ykxw(0HxmhMT)naw!vaV5t(BGx7%FfTdCfcYf?zzY0@l4qwC~SHh3sSz-`o<e3
zx4UTN%C7`wan32Fz!{MULKiv*oCz{qd_|FC3Clz;a)41^q_?MQXs|aF7>Y-Hh86~{
z15Yl6fFvxL&6X^yBirrC&o3;=%k_x1M1dB>lQk80Y}sPT&AlXjf?wCB&9NXg_|uy<
zIVvkBmP^Mjn<#{7aKA4Y2>8R{U_2Jlb&W9tA*9G=Nmk4jtKH$u%5pjE=5vHFGjwvN
z*V0Qo2k7kTJNfy?zJW%G4Y}=xH%oSBne8^S#Ux7-5eln}af4D#Ga}K1KbRQuB?f&w
ztlMqw>Z<yA_4Rco8D~Od#Uki$Y#cgr<op}i%V*Q+Sdgw>ZP<`Kdv^AmIpa(588FL)
z&RWm3cXc%ShdcD>fP%wTGqaeGS-~bHnHuFB5*m%fSS*2Jx@;i3#a`&itE{ZLs;JP5
z&fT<4mx=N@Lip&h6DK~|X2+d%Wv22Xx7ld}Nd|_1F`x_>AJ_hc1QtkeGcih|(Y`)^
zV_WcS(3M}ge9_`%nNo~2k!XJ5g{lW1RGiK!UIc|rvtuQD#VBq3;~xu_Ez1(9tki2K
zoS^6I(BZ%B3Jo1|nf(<-mcm?z(`m(K6A+Rl^??jj90EWb7z4x5qp{)9aA$9*bAZO7
zu()Q?`~?fG7FjTFP1A5WLTGp-xOMX%@=PZeUz=yoaRWt6GYo@53Q_i@evp9(A{Y}z
z0tFl4@X_Nvhg;M|tG++0p`PkGk>%FcUw2egc<0TVmT(2r?^uxZEgFwEKKESdop;*H
z%D7<wAqb&hD8BujR}J6(`7_k2iX3dU0tL`0rHnF$F#reAO_1*X5@L}6fDk4aVTpi3
zfYa!x|MSLyFFMuQYwumMWYM%dZsAp3-Thnt`ybaVMuk-+G@={2A>cr1U&`#>76^!B
z@qmkbO6HLe1RPnmnY3`=wZF8N%>LoBWlKj-of<iMwEA1$nl7(`E5flL)iDwXoZh&x
z^1k~lxw!z)*3rA|wO@SW+C<&Va?UV~=_ySL0ii*OgaH^-yNT(Hr=mU8Y39QhEv=k`
zBokthSv<09PiwDn!?zy!p)yhJ{_>kn;Sc}*!*8vOxwG?Q;V2>J+=IaR5D6z8h;ynl
z3S5#1q!d7@K?OuK(-`A~NV3`3xP3S`Fbm#$XUXetOl3NBqFot|mD<Qh`};e$Zq1*6
zonBb+>K}gm=xWvB&WQ)3LI^W`F=O0hk^j1<b#Nq_n{9PE%mM*tw<?D}Kf8Kmjmv2^
z3^wkOQpOR&CYR;#M<-7DmOT3SkET)xGYLxm_;9HC7vES>8}&s=MyZkmNEn48+P+WD
zT2<L;Q~HJ?o-E6-FQ!@~O=nh%6pb5Ji`+X9UN*ldCp#%-HuedeD})SD`d@dvzPx6^
zl0Uzy*e5UcPmNu6bi)OjAk0+r@)VcrorO!apZs9eQs!{jqP~%|5a!s$0NgOD%4{Ad
z=^YHa>{zu(7(++TaAmPoLK>&%t|$PIA%r<^Vda@OcAY$R>x`?arVfwAIRHe$quJR6
zq7ei-XXjkNI6}zqy0FEJhDJg%VT{GC7VfkojHGZ>*R_NvPXVqFtTP(psp5LtbOW1>
zSlN^Jt@z2a$%M@GWmv8h#{vKWqAk1YPSw5r?d`uQ%JU>bLBSf8X$S$Od^Dh2t=Q|f
zUo#_XWHe3<7S-vB#RXKS%+NKBei`LCK^(%os!VEYJvrm5swoTDVtLNZt7!T#Fz0HI
z5lTqsuEi9<B*EO7S-=6;*bx9{oC8qKF+vC<3}7%`jZ~&HBPFal_Un|}?3R|ce%(16
z5fJe1sTta&b_F?>Fhr#M6^k96hXMopGKDbH#yBW4-t)JP!O>Vnv0c+xLZ^noRg3ib
z2_OXJW?P!t0<&t}v+F(4gfXsuW>5xJG%^&DimWh&wH=Hx=WOQHH3xPt|LoAVIoH*O
zN8<o|T)5OTP**6`H$l(+sEJi(#=vG(B7w7S?!otccMSlb>CV_)agHUjptI)P`PaYv
z<<Wa>S^`sQ5Pa@Yh@u6voC)2A0T=_-B1Pkd#YFr;&FePD64X*>^SZF6M}cvkF%1Ug
zR@LMm?D?d{^Zm68V5*CT7y#Bi{?q4w7a17dv1)N4B9>T;rusz2U(GZAJITLuv4g^9
zGm&K4($f3t9_O;P|6EsFHjTiIv|TBi_e^fiH*Wv{0&ht~K~xhP`R&`b4}SjiL$`S)
z#V&*})67_$gCt>u0de36gb*fYoM3D)h5-?R1Y@Uox}x<^BE(|DeLX|ZZ<kly|LghJ
z&6@fN;2aPzgX1l4z1i{E9~M*(&8oHA9ahFAO%u(k!e0Q+1qAW*|4<SRB+E!5Tu;PX
zyF>d=NTX!g>U+LdTRn-`>9p9D=va`}irWA2;rIV#X<g5(dbeUyH4PFv<(y~q+a;%f
z15Yg+h^Kxk=7(TxQm`bkfIqb7Ncd>qHFrJmzprVyT#cGvY3Xu8|4{J5om&Ua>~N9h
zs{B}KzT|eAEoKE10)RQ-jCN?AqLXBtQBBu_p+xVH*3v_If(6L2VD7@z3+By|2)aVN
z3a(hkf|N4Fh%dTh+v}rkZ&kXxW>nyOuWB-xIZ6v*ig`-@iopG0ga{GB6pS+?9Eo?H
zjU8{7J41Dq4fou9^D2kkJna*}7{v$!LUE0sYCO|?^3Z7C2|e6m;sXwI$Y#=16E!O!
zrHEm41BK%#9GAlhYuIp6xzy^ZD=MGW&~Qyrfg3@RM)C^rD!7sz3o>{Xe1Z5UpM2bQ
zYPS(M=9JIoWyQQ%++`!Gg(xyk3Sk0J$|+--#v(B`8f5)Ga@KDTvl2D?+Pa1%b7s$S
z*pw>=kCj3tj1|{IQ93j<Iy^iS42(v?ek~p`42^Rx%ZjX+Ws}wJaJ${v9*@W4wkgus
z=S)G@&DXUn+Oc55(;x9CT3g#X+na{_Tcg1qni#??LXZYr2fz%O7?+XcBxbMGS)83;
zQCe10QC{M5q%`iXNJy5D1i~4@g%@A~&G1#MYtv`{AN+dSWPd417ytkO07*qoM6N<$
Eg5A&l8vp<R

literal 0
HcmV?d00001

diff --git a/public/assets/plugins/jscripty/templates/images/venn1.png b/public/assets/plugins/jscripty/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/jscripty/templates/images/wf1.png b/public/assets/plugins/jscripty/templates/images/wf1.png
new file mode 100644
index 0000000000000000000000000000000000000000..2e4e2efceb68a22bf5f17b7d33c996fc79870a23
GIT binary patch
literal 7413
zcmaJ`byQSczaAL6K{|&}0f7POl7Rt+E-C4O8A2Fl=u%|pl2DLtMY>av1}Q127o=4{
zx<Ldke)oI7d;hra-D{n*V?EFFi~ZYcowIh7o(_zhgqZ{Y0FbMzDI47O{kKmB5%Bg+
zmC18*+c9~nn0h`&+k5)J-H`xA1lkq}Qb)lZkOoLN!q060DF*-mK~9FIo~GJbGInT`
z5d05D$QOmVWdi_m3ceV)oioxCWQ%lga+T-WYiZ{KIU(e^OvJT?wJ}hnqm!DyJMyu=
zj-j2uvz;`8OW_en&R6DE0EP5~gM3jgt{yVJ@?8JYmAM`NSq5`~{sr-Lmgo9!r%bi=
zKv1+h5+p7pENCYzAq<ib5fTv<la!Pc06i2I5e5rC1dBWr6p@q>eJCR=4ElHDy0zwx
zu$M7VR{giF+nGF<qo*fE1`PJ`@e%S76+*i^fJLOGrT=I=d?<K}5cKeK^@RHhx_WT`
zt)Ptbuyc39csik7L4OqCwrDR;d9GVe|2qT}=0CEo9{*0$ZNk95a12;PNcc}ke*?9(
z|9>b7^&hl{rvdVR{QW<LJq-OYNU#CY1MTH*ce`=++<#1AWT5UyxF_1(5RG>EJBxab
zXiv0<BN_vOJ{AX=IJqLwJ|6!<YirA>yLx!SUG0$S%JN*dd?6<%gp8D`l!~OPxR|84
zvZ#oNiinbms*;MZgp{%(R9Q(yQt@xDGTP1yg>?1&n~V4#uJ}K4{}ciWb8A@{>F(r>
zM5wx>QJ{YXEaUXgzC8R#y?=8N|LlwCKXSph&Vc`H>;Ky3zn5-n=g;szMSDB>PuU|~
zZ)@HCwy1mUYe;VogpHn-p~}tm`FISVbP~{A3@8Qy27dsu=Kvcf0BJ2i(g2|5FTfBE
zz|;${2?R{`12#?pZ3sX^7ocq!kT(w41_RzsfNqvE8^C~_I-;vw39l?bbR*!V&ouc9
zAY}-UHViOiVMPJ}j5q4aiiW;(+m<nJ@;}f_33uugnuq$rV6rPWH;2;?z{<}~Eq$`Q
zQbj39u-kGarxhfbQ!lPL=lMJAThIFN7AGjS!y8e3a?h&AGe`E<k1zaWvPN<^_AmUx
zpNo!UePsS5Quo=v{28N@^99HK7fUr^V+|;xc)F(ww+&P9LSd8g+UM!|h!tnt=b4$A
zwzC2cy|dTYJ6X~#)0y*U5MnEi8Q2a7bT#*)S~M3%c1>zs<?(3Lm0ito#=2=I`KIU9
z7~lsP3X|XNa7NEMYnZ{JhB+S~fKs!VN)Wy<TX$r*P6NM$NVGdS&*}dB6d!+-_Ti3?
zE*fAPF1}zRntGR2=N)Q{KbE4f`@&^dIx`QhTNUug8cYG%Rt)mZG+#fuQ2w&5{P=S#
z9KrPQJ<GP2Dc-}k+CCB;tQWlZ37=bWfW+zoSG@H)2ME?g_u7E{*uC78`|8ql%UXnM
zzqKB-HQsqHgu?_=Idhs5z8<!BfkLKFJFj29C(MMnHv1Fxl%BZG+%Qt4^F%^34%Qp!
zGPWB|RtWcK!gsu7LnXhimIRnrxBqOKS<A${9!+^4eGu{@Utw(S&;oTqnp)v4*Vt#_
z+m!5iMIZ219$Sy^fs;+-(%~z^srnZ0y~+GTsU7xq0w&$Moco;o_j&l&DUV;SGl4qM
zFUmXnWNSP(2oz>@o@K($zxUAZzq1l4c}#g0Df=RF<%&x5_dzGed1VWp?eXr+UO5AZ
zgTuC+`js8<`hqKAc`BDZEexwixJ$4}v&q8A|6UU`#<^TRCJ`<=9tzl{ZK9W%qE?t~
zXb&zxNnC!`zKmOhHkCa_cyTLWnQ(5TS02=|yM~E|sui3*EMD+*ZI_t}K}UWrPf5f>
z3jTITuF>%6*B{C05FH`-iy+REht0mT_EK=k{+v&gBT0|e>ukB^jYW%A?5G^<(R?W+
zb|<b0b)xG>vqYK!e78TwDuQsss47Rhn*qA6spM8io1p=bF1v1LpK5UwQkprmy%z(E
zpj}1b{q>XQcE53cL;~|-%qhQ+w$eW%aEV%u_9otSVjSTI%|=*9c**i_DV>Xeymen+
zl^%eQ9j#fqg1pS<jOM%JqWz1teyXQRXd7^-o8Cv}vDRzGB)YjIqPO^^7#cz~W87g?
z7Pi%O2VdN9Zi)(veMLUcI|}&7<XCQAWf(xG3y(4OQcJE=js$v;NmQVnBjEG`K!U4o
z!0=n@N^vwKJJRq_8l_9lf5?rf_{MQQe$`QSAB1=uh(q=11sAazNBp2w`f7DW^@EPj
zY5gjTl*r^VIb6S~F=G$zw;H4&gcPqjll8hX{1KnbZ<rI7^^y5V_mZN5Gbm!;eq-)i
z#X~cpbBbb?H5;(y=Tdv^-wok;(_1~yyNVjORE_iuh0bLX7|R2R3H=JRN$b4Gm|*Q-
zQ#3|Ig5~|7qpW4tq3wQWyH<VhoN(AQl*x;MVG46!&BgmQ9|P|)R`*G}%m-f9NuXl!
z`wz;d(#Advoya?FjdS**GZMeI!sq7S&X$4SY4{B~LwJ~T=7?L9f%qYe9X=q%W?<yx
zdai6tr+E@=Uw^6wW4e;REE}{BDTMzTa3iD_TS?0Nr7bYdv@^$_^W~^g4rt)w4H;#B
zWt<oc24c5hS3g2yh`6N>QhI0IVqewuOj14{pS6kL>xvZTNHm(avaO{UPOhR=^r<>k
zK?g&;<@h_&sla*U15s6U=dElz<EZxe@^Ucr$@1YGL7>sb71?<&W5!);ZnArNir+h*
zwj(5+9N%4!CLx~j+(Vazw>O}YOIu|pXU!M#Qw&4c$eSL09*M`jYn%uRb)RDv*w=VJ
zhFD6Zcs_TW4)2JzgMRwJ^N^0UPi+4|eG}6|!+gLXpF`{yWE#UTm@4UgRw>hfk5rxi
zZ)y5+Qixgz#K(pqjo&@mw9Ht|O86;F7pYm8oUBS)cJGSVtGSM0DjwQ{6GM(|YTB0A
ziEy}5DCQ^V@rtP-@5N_Pr?B-4Vl9utP<?Tn68BI*f}y0#fs=r2QDR{PJ+8Wiv>a*A
z`KQ`tr*v7-LXohJGQq8<B_%*qnS<D5MhWG6zU*JT0y%k=v_0$%u#w>PjwsC>(hKU;
zAL(0nxk(=wPt!sbjR0TB2H)6A6!+=FVtymu>uvk6)h<J{SiS4HEj71$GBJW-8Qr#B
zRJD4&JU$hSCiM3_j0g(7o$RwT<Q)chZ5mS@1Vm(dxF04hv7q|m85KLLh^0<nt6wBK
zF>;^;(_WOdk1zCVt9Kb^N|4b!GSJ$g5Xc;Q+7@HhJFBAtBQBSmQzHLL+(V|M(MY2b
z#Rn%V3QgiDHV(>tEmm^p@!Gt;UH<EN>QcOXP*t_N*vs0;$=uTZ;Z+90rdM8DK@Gmq
zlr;3P#{>*==PlUnKw_%s)Kn^Ije4}kNZZn$WI0XDgMoORqkf8#FByyGJf@JcmC2&F
z5Qk0^1XWQ{Sr?d}O_MKa7VJK#deIU=f28X;X<HBZXsttCc$NFc(c<N+-%>vrxkbE>
z>KiQy=~nF$^BKfgXz9vz)%k}c1KJ!}8#Oj79(~Uqh@(XYRE{5AG4K&pOGd+fEcQMs
z;5ao;iF@vrqU^0<Eph?1HqCrnS~P4!V439}@4(TZT`(^TjH-UbbzC?Q-=yk*h8k!K
zNCYpe2XFE}a}f%&{rPy;J+l0H2dC1BasbsAX4}K=Pu=I;XhsNUNug@!R9xGY>Nt&&
zF|FlO_hhBWE3+kXJgwmc;W4V6Z-+Jq<<rj1=I*cNfzxasu|@YPh+^+$$07*u-cHIH
ze<<;g`(APPPAMUu?1YR#2w~VWW6FXrE!~yfBP2P@gpBhMUPFQD%paTzl%90YWF7kU
z>y6%3XPTslH&SNb=FG~EuvsMI$t^G#IjO=%1Qn_XO?5R&xWR{ux~WxmyVueXg;BoC
zX&Y*KQBve7ZZZ|zM9=6<L^6%f%o7kAvPU|gx4+0pcqqGcDRU!(ey<8ALU`R3)^lHf
z__pwz^pK(Xj!MwM@N8`sK3(uD{twD%x7`lEdyls|yQMMO9W0CZq0kM2-4IcrGN%Qz
zxa)XO|3`>DpX9eeDU~v0iKw0tKSsXK-k_MPTKyj5Jb4_@lEqa!Y06G`f5Nq6q-uCP
zW{Bn628o|PpJU>CXrej-ht(FcTc*d_*NJ=_%o{wd9J3;E?`N0^RxO>_w2_TBHmEhL
z-k-BN$OPaVai9-Wbds8STx0+Mj?xw9X@AYWPjW(UMe4JEsM+o8b@r{}?i_HGY`Q$0
zpADXhW6IIM={JiT`OvhIIf^qmI13AUXC5MWg6?-DA7pI36izn@>MsgT6LH**mCBFc
zB#qA{_!b*ZZ1QecUA>y7jDQ~4S?WxkSW*`^h9Th-_l#fpZUuMqE#J*z6&CIAOckIw
zv2hnbfNE(RTygLUBOcs|v~#m4B>YUr+St%qYVa&I0|3D%_6%JQ8apSrPoAYetCH`@
z+Q>B`ulG32QB#zPY`B*xp_6z~Y7{!gxXh2$(<NJldoY2NXToQGQjFs4kaxF}5d$a^
z6jdjFaO?V)=?+&%1ry#d70_UQFs|L<B7NQ2MIZE|=maIUGr^B7&@qXa`KjtUt?!U~
znu!O+498AdR=1O;<UZ+I%k+{sE8kWDcf*@!7cq)k8kJ%gIf9W_0S491-Ol2&f~#3s
z-96-b8d-#-vSh*$Y^oTH#za*xCsh_nj7`Y&U{(5hju(u$t>Secpx3pA35ay^cq@`i
zr%Vse{|Uo8HXP_5@y*`^V|__v4aDxq*y){5^?`8oD5P=+T)Z)4CGYs8$TQT=6QNVW
zCA7z;vKz*HZocVn4mbP3*jE><0afgpD{A7NiVM=TXY>>YC5SIxN!&dv$crc8RRBEC
z6Z_h}Y{qb$Z&D~{hOOC3Ht}TCLF-FyNfjh>bsv^QJcx~`f_7c@@T{I!s&ab&?q)nZ
z=A9W($i2!UivFXT!;CM$DRrWW^jVrJ)aVyY<Tvn)WrS$A$1fT~pOJ~KJPJ_`=jkPz
z#Mks3q~uE-yivVpTxuJ0G%*Rsn_>2ZeT!aCzQzObOREwr;s)nQrQ6eg&Wdk+6O<;P
zo^EF%S`C8AZg_HQy6M@$rufBU4H)hvTfayqR%%X<oagC(fQ=RRkO(|*8lapE+7&W6
zVsO94jl^q~vdmOzR8~A^v`|0vs<L)IXr;MhbK#Xt_Ht$y?RdI;_%J6)$e0f&c09=U
zQeYh%6j|}6A9v`;nvAFEWG|IBlqK?7s9uWtWnB<;?Q507T3@~IN(q++wJ@A`hNMfI
zygJPtspO;5m}aYr0@`G9r1WIWuS^VHvAj_=onQsxNs!^<Uz~K5VFbG4DXd*;O&k84
zR#oK1$q=FS1*(j#gb*Qy*Os0&4xa?XvFyY>1@q!-j4Dk>emZqcQZ;NUj2*?7hH~F_
z7ptc<B%`ge<BGWgyGozohRGCt|ESTTNc)1N0vG2UiNRdVpfNd0{*{7fzs;;lJi$!&
zUXM1wb_v6@s)}mg@%yd|?#&W-`&fIasGpH=Mr<S^liu|g<N943^nfL9UN|uQ`R|~X
zXs4{LHNo{OqNen`cPc+OQepA=^8wt6J`?I(E3Ng}Zz&@aih85yfD6uHDryH*PTW!-
zJB}$!qQbbSf&P$m`LGsj1eS>N5O<wZ9vVl`(xdfKRhqU!Rv9rL-i0SJAKc7qL#QO9
ze_xueU<$IO&w{LuzWuurr^OQ$5wOZE);Hx68KZ;ps21^WhGB^rLhkf{pEOW`3)-i+
z%}WP5l)|)I<?mhth-!|H1@F7?t&}~v>G3?ubt8``7jOCYP5D^=$b{86DWV(;qRX>d
z5hAT#-DiouPyzM0;iy%UVc98%nc|e5KfVK<CyIbY#<5i4a#g$TG8tE525M*$C3LYJ
zAl)e00^2w7PnAP<WvHMJDMtDS0WxBe?BDyevTj6ELzKeRzhuy<7mwK)#DSR*)82*A
zX8n3uxFSODTeMPsqIk>e0Llhs+!NoWypl&m_-Q{@n2M{)=L<iL_G5ZBEh|y?VIwhB
zU`p(UAnO5qV$CE4QZ^!=?-8H7VYN;D)G!%FseLG-DJN`)Pu1;#_w>7zdUlc#FGIpA
zt)zbSYww;w%>|dfCiAmMBU*gsRiZIFc^G{VrZ;Fd8Y2n<(K1KUp7wUD@RAY;&qDAA
z;{t@k+1wH#6!a7bPA#!ol5Tj@FP=wyMYW59hn-DAq2<PEKOd7ZGBQLfZ^9{v$jIa%
zZNM;dkS>Ld=?qia_hUhdmI|O{kbb((O2|BaobB4GRqiUrmYFV#T&^ohslaN|X`hy|
z4`1tMBB`&p0c*$=4GtMh{2lot?IF&pVsAajSh!?wzB4$&3*m8*=z<SSQY9@nJ8WGA
z)}^>MGXudluj$E`+md)D_f6i}?!Kw{(6Dx*lujbe1`|r+m*eu4>y4{rVV!<iTh<f<
z3Enjudmi{<FsbIf`9k$vw-*1SNR;00SOdJ6Ws>=ng;Ger-kg6;It1!ub!VnWeOH1Z
z-lDXVTSnOp2(ty{@%G9q)#oYpp7HR9w!nUvd0w^|N4k}7(M#jS)V{n|kWI@apToSQ
zGS-pmUdE$N6jhQGTb9%*gTy}h@#0-WCX3a37vmEfi?N6T_Mw1ZR6go8w2k0t=O~IE
zL^|)A%C|6*Fy76tODytuIiW^_ey-orLVrijw^pt4R2J3oJS!z!OX%No6k@0mUU;;0
z=u-|OX-=lIm9^sUX}U*GpwGEK@#u@|6WV|#!^jIG0y{Grexo#m*Jc);IdfJ%73CAo
zXhep7q`rh+{PrM>VUCwqnH1TXa@R~ov&VG8UurPWh(y0aP~L#Jl)sc^j@zqsV9063
z{iqR)t@2)BQR^%^<x0RZgzi36OLUZjk$jh=zxd0yrHCrSz`njE|DHbWAtZ<*ua_33
zWA}x1U`neo$4pS_dk3i^k-A|3F%dPL4cVrgssLA<PRvJv_@?3#Um|tdzTaTWWvY<E
zYT8P9g_`QMI;DyXL3DdeW960F(vZ0(WFkl^=DyxFeFGqgq+k$}9qmnU`n@wg=zVk9
zn+0Q?=w3HzL5|H!7x<=HlR)y~Cpgpf?EEac#HV-1ftKq-$$0_(S*p&mgJ4>vBW8c`
z{uBGTx}QK+q<P=ZJFj1@I`!HlHy`R9a2+w-etClhqg(st`=1-SUBa`Sdxw?}H5?pF
z;Q3E04|VV*OQt!k%I?1V-NJN#HHw68LZzkj!Jbk5vT#Ln2L7uWA+`RU-?q+!_Z9GY
zDoe5eeD3a~kbId3qP#Ofcu)LeN<bE6M{mP$Xvas>E+c}*<|ty#wE}o3E4Co742z?#
z#hJl87IZPz&aB7jbn=L+Ya%MES5JkoZ#(M&JVkF&uE3QRO_LdjaN6r1dGGM1X(K-p
zht2@ZCE0!zPtjwWgi%YS5Hk5GusrJh6+9ZBBD3px9ZcEHI3}<(bdQG0%CGXPrF>U(
zR`mmuvxwq8qKIa8!Y=ieAtgRxH?Oz^w(`1tngq@hl{C7_OK$s4@&4pb*j)92p}V$u
z=ds<mRAx3}O!rOh%UbcuOD4wVr&$VwtqsY`z&7Nx#xmyQd*D@oP{Dc<ADleB!t_x4
z*o;wU!r0XB+-E>0kHXdspMU}wRZkC}z;R^PhU!zC+R%_U<Fl=-0)|7?!(C&8R&A+>
z$yvCmSxatgGYipIh^<1ZhBus=u#Yveu4h9V{?fwdd$J9qJJI%cZ6hKU9WTuX$xezk
zUKS>M3Vac7wg|LbJu<vg%}vd;7`5K>jYMiq_{g;PaTA6MVKGE^bMYgTECrM`*BBOG
zhr$c;N&|R=<eFl|{6Bt1SOHhq-&l2i<NJcUJI9~9X3le{pHQ^(`|?Xd$roxeFZDdD
zY`(4ICQIL~bf$(Yy^8)*yQSDb`p7*=YwHZ&<Ws&RcNAPYhx}?5wK@-0=GtjL-AaRZ
znIv<ED4VX@2A94&cctI02D3XJUH#fy@=|ED$&IY)SswoJEB|=aMRHpcq$0IpOYHN=
zc8-mKMm{IbvU$F+33xqrb5(10bumBsjmjhR?%k{QigwT3{#q8JAAfx+Maz|RDZZ8q
zpdkFbSZ#%fS75~<1WAtwF!oc^C!I<zni+<LM9=t6uH+U|O3T&tzbO1m;taqStVFYN
z?qv$#!g&=Ql*Gy7weu2YB*pvuFKzmZQQbtDQE~;BN+2JuTpq>O;rO{{-sC-!GwdR~
z@mkor&l4fUv>H)~plh6#Z=)jSQ-e=;C?eR9`zs%++O7PbNoH&7rvp*rPsOVgObUFB
zo{V;ex!Y_}#ebIZZZ(J3E45!;FP_%=odylyS5FnPC7C^Q0e+zbhJ|b_$eiooq|kVp
z4BD363p3vkuQ}&2jvbiom2EIKL9?Yj@@-B(^ng$IY62>L6(vRF(*=r9vTiGlujbkL
zeN_2X@dn)=51&DREp&BZ%+}?SZPahm=on@OwayJDNQZg{m-|1GrtTow_JB0bwhTiS
zk36@9pvHRuu9N0<zAL`DfOMPi<@pvFguUZ}nNX=v0q=~mf%vs8#^Hi*KE@=y=8#x2
zCzayqMR^#5e6Vimhuv%+iRt*2aDer}=IM7PSr6n(QiN;U&&dr}>MeY#f_ijIKw)Gf
zU1i@%vlTey*vh(Xf;Q!dV&UbdcOp64SKQE;l(oe`4Y8(^gC_5`{RF-JrrBi7;DOZh
z5z)GNaqzZft2xle+}~~bX}0jvvv6w6vr6M7rfQQ*e0CwJgn*l@)&#A?{+LR>kd~{v
z)4O~4ucogS{hd?MZHe{I-(M~XF^1OAa|I7v&3tCaQo5rhwTc268T+&v6?<+9AC(lw
z*uR^jT^{N=UX9Ut4)rl-TeyOhc(um^nx6<aaRdMQrOAA?^%=r7)pl_`Id(Lr(futh
zSb!@iAi_*+Au#Js)#=c^CXv53KSX4Jr%3}ZuhvJ;rXwy%l~N#Sb{zI~eXa-cxR^%n
zuc$nz&}X#cWuaRmM=M3!lI!Kq&bddGYahe$1}&x;85l~<p-(y&zCuSi2^7AbU;<Lx
zf+$HAx$utmwn?w!Zo~)5XRgYB&}izmZD43#KDS}%YiwQIw+7wdUNH3AK_+jQ``x40
zpMX{#JrOTW&%U&N7g~CeG!u00fb|6&YFVc@I4@D+$$5V{)@|iFxd^UM)Y!KNbwpeT
zzPLfLS5Q68QCNDx@#3YZNY!3DxJ|+@{ObB6t-_g0eqA=NTJZAdT$m3o_Q!<>U*N9O
zOk!_e&Q1Y7-B7tn3ql+m2ob)D4@$N2T+6^l9$p5zhss$A$6*Ud_OiB<6#4MJTtP!g
zAGy}~^PaB<T>coKpqpclpTBRvSc|Wpr`YM!dMCgizMlQz=Mg^a?AMJ8d?kxgcam4m
yd{-XaaRYO?4YD0bb9;O7Gw1My%ylII2w<l^i2eM4arVzeq`HcZa)pvj@P7etoohA#

literal 0
HcmV?d00001

diff --git a/public/assets/plugins/jscripty/templates/xml/aws1.xml b/public/assets/plugins/jscripty/templates/xml/aws1.xml
new file mode 100644
index 0000000..9e03520
--- /dev/null
+++ b/public/assets/plugins/jscripty/templates/xml/aws1.xml
@@ -0,0 +1 @@
\ No newline at end of file
diff --git a/public/assets/plugins/jscripty/templates/xml/bpmn1.xml b/public/assets/plugins/jscripty/templates/xml/bpmn1.xml
new file mode 100644
index 0000000..33ee552
--- /dev/null
+++ b/public/assets/plugins/jscripty/templates/xml/bpmn1.xml
@@ -0,0 +1 @@
\ No newline at end of file
diff --git a/public/assets/plugins/jscripty/templates/xml/compare1.xml b/public/assets/plugins/jscripty/templates/xml/compare1.xml
new file mode 100644
index 0000000..8b3a001
--- /dev/null
+++ b/public/assets/plugins/jscripty/templates/xml/compare1.xml
@@ -0,0 +1 @@
\ No newline at end of file
diff --git a/public/assets/plugins/jscripty/templates/xml/flowchart1.xml b/public/assets/plugins/jscripty/templates/xml/flowchart1.xml
new file mode 100644
index 0000000..81959c0
--- /dev/null
+++ b/public/assets/plugins/jscripty/templates/xml/flowchart1.xml
@@ -0,0 +1 @@
\ No newline at end of file
diff --git a/public/assets/plugins/jscripty/templates/xml/flowchart2.xml b/public/assets/plugins/jscripty/templates/xml/flowchart2.xml
new file mode 100644
index 0000000..5e53264
--- /dev/null
+++ b/public/assets/plugins/jscripty/templates/xml/flowchart2.xml
@@ -0,0 +1 @@
\ No newline at end of file
diff --git a/public/assets/plugins/jscripty/templates/xml/gantt1.xml b/public/assets/plugins/jscripty/templates/xml/gantt1.xml
new file mode 100644
index 0000000..0c2d0bd
--- /dev/null
+++ b/public/assets/plugins/jscripty/templates/xml/gantt1.xml
@@ -0,0 +1 @@
\ No newline at end of file
diff --git a/public/assets/plugins/jscripty/templates/xml/lean1.xml b/public/assets/plugins/jscripty/templates/xml/lean1.xml
new file mode 100644
index 0000000..bc7b3ad
--- /dev/null
+++ b/public/assets/plugins/jscripty/templates/xml/lean1.xml
@@ -0,0 +1 @@
\ No newline at end of file
diff --git a/public/assets/plugins/jscripty/templates/xml/mindmap1.xml b/public/assets/plugins/jscripty/templates/xml/mindmap1.xml
new file mode 100644
index 0000000..a3fc6b7
--- /dev/null
+++ b/public/assets/plugins/jscripty/templates/xml/mindmap1.xml
@@ -0,0 +1 @@
\ No newline at end of file
diff --git a/public/assets/plugins/jscripty/templates/xml/orgchart1.xml b/public/assets/plugins/jscripty/templates/xml/orgchart1.xml
new file mode 100644
index 0000000..df46b8b
--- /dev/null
+++ b/public/assets/plugins/jscripty/templates/xml/orgchart1.xml
@@ -0,0 +1 @@
\ No newline at end of file
diff --git a/public/assets/plugins/jscripty/templates/xml/orgchart2.xml b/public/assets/plugins/jscripty/templates/xml/orgchart2.xml
new file mode 100644
index 0000000..b829c2d
--- /dev/null
+++ b/public/assets/plugins/jscripty/templates/xml/orgchart2.xml
@@ -0,0 +1 @@
\ No newline at end of file
diff --git a/public/assets/plugins/jscripty/templates/xml/package1.xml b/public/assets/plugins/jscripty/templates/xml/package1.xml
new file mode 100644
index 0000000..1fa6cdf
--- /dev/null
+++ b/public/assets/plugins/jscripty/templates/xml/package1.xml
@@ -0,0 +1 @@
\ No newline at end of file
diff --git a/public/assets/plugins/jscripty/templates/xml/pid1.xml b/public/assets/plugins/jscripty/templates/xml/pid1.xml
new file mode 100644
index 0000000..bfac4da
--- /dev/null
+++ b/public/assets/plugins/jscripty/templates/xml/pid1.xml
@@ -0,0 +1 @@
\ No newline at end of file
diff --git a/public/assets/plugins/jscripty/templates/xml/plcladder1.xml b/public/assets/plugins/jscripty/templates/xml/plcladder1.xml
new file mode 100644
index 0000000..d23e8a2
--- /dev/null
+++ b/public/assets/plugins/jscripty/templates/xml/plcladder1.xml
@@ -0,0 +1 @@
\ No newline at end of file
diff --git a/public/assets/plugins/jscripty/templates/xml/seqdiag1.xml b/public/assets/plugins/jscripty/templates/xml/seqdiag1.xml
new file mode 100644
index 0000000..130ac37
--- /dev/null
+++ b/public/assets/plugins/jscripty/templates/xml/seqdiag1.xml
@@ -0,0 +1 @@
\ No newline at end of file
diff --git a/public/assets/plugins/jscripty/templates/xml/sitemap1.xml b/public/assets/plugins/jscripty/templates/xml/sitemap1.xml
new file mode 100644
index 0000000..93048cc
--- /dev/null
+++ b/public/assets/plugins/jscripty/templates/xml/sitemap1.xml
@@ -0,0 +1 @@
\ No newline at end of file
diff --git a/public/assets/plugins/jscripty/templates/xml/socnet1.xml b/public/assets/plugins/jscripty/templates/xml/socnet1.xml
new file mode 100644
index 0000000..1d2cf4c
--- /dev/null
+++ b/public/assets/plugins/jscripty/templates/xml/socnet1.xml
@@ -0,0 +1 @@
\ No newline at end of file
diff --git a/public/assets/plugins/jscripty/templates/xml/stardelta.xml b/public/assets/plugins/jscripty/templates/xml/stardelta.xml
new file mode 100644
index 0000000..4dba8e2
--- /dev/null
+++ b/public/assets/plugins/jscripty/templates/xml/stardelta.xml
@@ -0,0 +1 @@
\ No newline at end of file
diff --git a/public/assets/plugins/jscripty/templates/xml/statemachine1.xml b/public/assets/plugins/jscripty/templates/xml/statemachine1.xml
new file mode 100644
index 0000000..1804865
--- /dev/null
+++ b/public/assets/plugins/jscripty/templates/xml/statemachine1.xml
@@ -0,0 +1 @@
\ No newline at end of file
diff --git a/public/assets/plugins/jscripty/templates/xml/uml1.xml b/public/assets/plugins/jscripty/templates/xml/uml1.xml
new file mode 100644
index 0000000..e4b6887
--- /dev/null
+++ b/public/assets/plugins/jscripty/templates/xml/uml1.xml
@@ -0,0 +1 @@
\ No newline at end of file
diff --git a/public/assets/plugins/jscripty/templates/xml/usecase1.xml b/public/assets/plugins/jscripty/templates/xml/usecase1.xml
new file mode 100644
index 0000000..26192cd
--- /dev/null
+++ b/public/assets/plugins/jscripty/templates/xml/usecase1.xml
@@ -0,0 +1 @@
\ No newline at end of file
diff --git a/public/assets/plugins/jscripty/templates/xml/venn1.xml b/public/assets/plugins/jscripty/templates/xml/venn1.xml
new file mode 100644
index 0000000..c0a0610
--- /dev/null
+++ b/public/assets/plugins/jscripty/templates/xml/venn1.xml
@@ -0,0 +1 @@
\ No newline at end of file
diff --git a/public/assets/plugins/jscripty/templates/xml/wf1.xml b/public/assets/plugins/jscripty/templates/xml/wf1.xml
new file mode 100644
index 0000000..8d72685
--- /dev/null
+++ b/public/assets/plugins/jscripty/templates/xml/wf1.xml
@@ -0,0 +1 @@
\ No newline at end of file
diff --git a/public/assets/plugins/mxgraph/images/warning.gif b/public/assets/plugins/mxgraph/images/warning.gif
new file mode 100644
index 0000000000000000000000000000000000000000..2b0d961b8c101790490c7b97270610541293f2cb
GIT binary patch
literal 22231
zcmYgWXHXN)(@rO(5qgmldWX;yP%!ka6h*qB8kz<~MMMpu7a>R&OK5`hE+As)9cdy}
z>C*HE0tzbe_5ba?xw)D9a63D5&px;N+?tpfYihX@fB@i60N~#W1H+JD00$Vr2LlLl
z0i?J98ZrR0GZ0@}E<b0nRA2t8Kw$YTK=~a=Z3v*{HlX${pfwE87>0Zmc&g+MZz=gy
z(>>m(Ac>41#g{jvO72KE-jgW4tJWS47`zYdcz_za5AF!(?F<)dih{N#0N+IM*2QD1
zVq}`5B}=0;>S8o2GPH)M;J#RB2L&}A1^$o-ntlWxi)NinWSvfe_ou<8XyDn$(1je>
zWEOlbops>}q9=~0GxAhd;;FF|uKsl1k2%~+xv<4&$ff7lxqQ}%Qp{Wd?@B&;tpu}K
zg4wEPTPfgJFXUZ+#kE<^wO%H$Q6aEh%e7X=zg>IkTeHw!J>Oo7U{{=YUzWu16Xoe*
z$*C&*hmtd^WfD8}V&9s@*Xw1zwaD(jmfUL<-+L>+{8DqXMdN#$+TjP-$p`SsG>G{D
z#hgKY>*F}?;r;QEmpQ?~oZ&o~6kyJt`uzp*XA5<*&ULcI$y_^ivMIpa<=g3y*>9IT
z?vps^lt1p4KkS!39#A;>AjX^(Kbev{nUmk{IkVrTdfcu4qhI}aNbR6o>u})g@v!#S
zam|wn^^-ZZgGsGlW9OK2XHQnePqxHQR^(2$<WE-AnOkZnD`!u(&N6rLb*WZmnYM2V
zuXX1*jF(?nZ8lzSu^TA9Hd+-p{rb*QOYnBD@!_EU&wk^hVg3Cfv%@iiU*iUcvqmR#
z28ZJozb7qDW-Yh-9QOz9zm8r$9Jl-Z!S-a<?r_49Iq&pi&FEy=;AGq2WX0lS%i?6&
z?qtjE$Fjr8iu1{qGjq>ww&VJCzxTJH>pwqUJDRzDxZ-v4Z*F;>tOT5F`TyM`ovhwG
z*}8eSa`$BQ-pSTI=H8u!*67bYv0u7le#}LFAI~^hjXc?k{IME$vX*$VmB`$S{j>J?
zWGn4>E&F6Um-#)7x&P#7rr>0yn7NbpcaP3oZTh?4^7mWU--E8d$K8Jq2mc-q{XLxc
z`)lIw;T-eV+@Bv`n7>y5|8IyMLx2FlAAl%R#>mSz#M=vZ$2Ww8v%GcP-P+ev8%GKW
zA!{ou2mITUeLa;tZv-j>6#jSqfAIr=GXck}f~M8<_DDFVoJ(JIUS}*;-2AC&O@4PG
zpPJu%Urj-83eF%w(5$wwKTXE2)TO_+XfO-!Iq=l1?&WZ<=FP47{<`A#F9?wcA@ll@
zu>#XHIoE;uR};n71?JDp8%jTvIn?<r3^bH|tRi+M2w60i&(x77N?ivVE9PEv9B$5K
zv0ZJu_w)N&S{YmA)sj2g?Vi1Xj<w$NO*N5Mls~t<qor<jnxqJoUOZ*(HS<)gJAqqH
zH_yXF`ReL~-hRJxqgZ!}h+Y_k)uW(s2j^&6NNBhE<Tl9&`m``5I+!wh+PtYcPdpYQ
ze%d9SfRV6Zxqdg&Kc%_q`5A605>xu)-pkP<%Pgh6r8MSv?&@g@#4K-l{%!Bve%6kB
z^&8ob1j9QJsjQu#-U#?7_gJC3Po?|W2Uyu5i2TWd&(RY7hslU)$vaWPSqdfeI99p1
zUg0n=57wyDkR>q7e><HbG3wXr-)jqz^b7(scWUTDlAs)-@ZCjsiMZHF`$(Qs)t*j|
ztepxk>dptyp;#rsrTB>Rvk@#bl<?6?9Q<2NuarrBN%yUvLwsww=&v`~<YY$eL4r9u
zsVvz@fx9fiUSfSF!iewgy}~&G-+M!x=#+u`WaAcVomYj}sF3KVq{6%?;W(B&ePIU)
zy7xC5ldxEYGa_=|n`Af3n1AM1(1`OJiyfjb9++(j8UC2vEN=T1)+-#k5s@!7aYCb>
z`N`PY(b<{I5tO<Gkn^Y_2(t!M&u^KP3uof|BUxoMH_Ho;7~+AfPdD^dX@=LG3x!`i
z*(`f*_{4Wdc=NKpexe*>f3?|W3hWjb<Djqn>i9|ge{W^Bd?l)XKXD|6<q%XCSmo-?
z$d7^_Jk}4svFeDcYS(_sB4YgVTK`}c#k9PWXFpe1>KWWtAL|qj+U)(+-~6cF(#vD#
z`Q7Q?*E_Qug8M|%OvMf-vWXsM5$gNyL1E7eH}w(olaV5$vqjDkq0Y}kZ&W?ZKT@Ae
zW2pAa*IIhKmdK`?>@$V8YqEs#d%o_#bLZ0@&Fb!#6N{zPIL!mb|62}Xm3n+hzhAy;
zqt-&PWmMlnA>EQAUg~afuk!F0_hn=OFeNb5>yYl@%Nli1QlI+viEqEu?RU1wFD(#}
zKT7pGVipQE{<W+<FFjjXrD;w0t8&9_!j8IIu%Hh1y8^!Jsm=Rtth+6fw&99z3NI$E
zH}r`iCDH=K9)5y&B=t)@BWNz213R-_(a9&Yvzm{_gYL2!b<bXr!iXk1lD<W}TXESt
z{kqL*XgM@(u}f++jrAZ@jPvds1aD5ywI1rc#q=E1&F7BdNFSnL5*>$V>a30=rTg#Z
zTz--H+J_y<98B6YktG)1fw`W~cKQg27#VxVRk<dtP;CeN86(C|#d6d-i2M$YYjZuI
z#=hI`R`82xHGrqa85}@VZ)ZkxUwR+!Khs-I;*2c|tnj%v?K<BQYM}g$9Lv75tfYM<
zz9dlW#&gDJ?Ag3{qjUmXX4jZ=iIf=@f`hA6w@VR1RLUD-gKPLC6vH;Um0!M3*PPE=
z_po_w9wKJ*e78$pP1J&6b`koW?&b7D^sIuA*u^XUDR{NKcr!q4;#*T6)!5WF_i&Y*
z&3p7Ow^iaVIH=jgcU+Zz{)M_l_jufb8q_KDhG0%xWsfAzi9lZs*$EV+mm01q1+ynQ
zge*tqFq>X#oCTu9P1&G42x-TSpoA3~oime=g8#V~zrQ;Y{xIsA?2A`J2?KRE>$9Wq
zZnEdC960%=4xp^$n+azS2lCT%1U45!^cA=Kye}%QEQwkJaZU#>BX^>ep1(5Rx6$Xp
zS*_|;$m+}O1b{(jH?JH38N2BKz9IwZ9&MX=g>`Z)*IQpBae?9QqW|&!KIk^_-bA`5
zO+s|-O0Rrx@8Ezh)4m=PEjhd6&5~?s59(#q6tr#5V>s?V&oz`JAg1nvR;oKTI!7)L
zl^Xnt&I+0*D{uWA-zV?h&7gE&p7?pebAGb!?X>^d{T74w{a<-w*C3|HcO8i3>_q7h
zW`O;-_D5WRJjjz#Lxtv;o-c2gD;;#!tc=PmM}OU-olDBaTmK%L5;NednRY~Ey4%i}
zdn@giaAHFMsEb{|mzhEyt~$NC<$fADLjc9A;#*q#4f#9_tg-)!e3CgF%wLo9p4HWR
zp?F9ZNx<nzYO)Vv)&t{?%H+NTXpeabcvih1Ej6@?w{dC}<LS~YSH>hdxu+lUvD4ex
ztl3AI#zq=i1LLRn9J>ORZ*bHAK8ZYIwK^!h@|H_yO}qb|`>~ik9|0DloZJrG3?vB4
zsH@n0+j}9BPT>2V7@S_mih9%C5uttHZ<Lt#@zAaQCZB7!`~boW$5}Acp&7#rv074*
zJOdT^kA9iWsl`h6hFIzm7$#Av;3@QOzm>yyjT--2*J&vKxi<#(<iFf$PDliJw>maA
zCqLzGxIR)+6R5hS@a_VMR&x1eRGwnr2fK02dQG9PK_-qHjzge-RMCUyvqD`ZcxpTD
z@;{WeN)ImwLml)XHU)n+Q<xp>)lJ*<<^fB=pC1yRyGmmmt&k3ypw2qso}BkdC=V_$
zM}y;X<z2<}Fqz8Jx%R>}4Ku9nmdotV#jAGtP^9Mrb@g|OjN}zi@kHzj-`}a*PySZ;
zoEq&FUXglz@mtL!u2u>p9RQR5c4p@sc!ifn>2535YPJ3NJEt@BOFi>G-;D|FWp2RV
zGb*&8Bu`YqS`DA<G~*TdMTz`56KqfMTCrYW4=+d6bQ8~;SxX@`&f;FHwg0|7F}m+B
z$S!x|?%-uN6p0)W)l_(Q_}1eTyQo-5*HO3e+2Q!=tr_+Tic#%<0xQI$YMzll;_8X*
zNFft7TEx)n9(N$CDXxG|@u8Lq6OHyHh=cZJH>V=<*}?+o(OOrP@c9AL7jR&XbW(R)
z?x#+N0QM*AU!lsOvv#f5YBv31yXCO#iPtUOu8o(psJGzWA{gRJiB<hNhI@x<BDZr5
zbQDx6rmPLU&OBr`N!(3#C&G`Kp5`WZrG)k&c;giwzjuNXSSD~c(_n?~a~4cJLFG}Z
zj~>_K5uJ<q-k?(l?VV-bivBB!aYimmhhI;gDaE8BMa*+!pA^{j*V_R|y2V!l{eB{n
z8DYJE(9vDW;u-V^09|MeGM{wVy2JSkVB|;>+&y#k-JPJ0(K~6@;YV3Up6Yr!QRej6
zD`ODjDHG(kwEL1x6x*K^P56UR8hZSYwc>HanIQ2xHP!<tRsY{BLV>4|gZ;kfN@hJ|
zFGSw@X>z~IK(|ZRN;*;%j;tlHrtiX2swt)T2cwIq@m<ts7WDENq{Jv#wi@Ha5~UEt
zD>oW(n(Xt`+TLr*{d_DunMieU2)r=uHsBMzp%%^TO*d%YkAi34cRPY7R#V>6V*DK9
zeKgU@J|H2ASFk4Mv9;`Z0w`h1$x8~AaNDPSlqG2qPRtIQetla~S`U9jZ3jEpIJke?
zPjKCczPbTN#=$4B4}3Q6k71J}=nC`L*k_>}zX5FawjdKS%A5OY8;%_LG3@?gY|3<$
zR9tx9HC?3Cxu<H$XB$Fl`a*hQ?^ltuQcB>DDDYZo^f)%jTP9^@6e_(77Q{LaZg5ym
z-IM>~nRxpuZIq?$2wpw<XbX;1@zJy3z28xQYzCa;)VlF}g4RE!TLnk%97U%y;KVpM
z!y#o^I%S-O9>Jn}vq1q<DT-rB^|nlqD+SfJi0mU=^|AMvX@V1v;ORuITN6<z{z$&d
zNKRk97+5N|k6y2*?z6P8WK-7E(X@m`xCa(FflK*7OmS|`AdSYz0N9k8Iey{TUJyY#
z)}V3IH1At!2|hkZIP1C1RMum=8EIq{nN*pHd|jQ@N=8z0kj)Ha({2`ZCaY=mVdWy>
zWrpJpNeidN`e-+qghPM8qCe1bJ`m8($EX>+?fG3+_?b+Zc6%8jNRk34Ol5}2pc+nx
zdMw5!0AgAl!gIQ#r@#2s?GlHqQ9}&W$ZqcNZtge()p?xzt{FA7i>mZ-a*ey+%ExNk
z4^OAT6Djag%HvFCJUWLTEwzbA?g8%5yb4)4yd7ivgHYa$!9cChN=I5E1ODSnT0;&k
z!U0*mi+IBTAt^xSD*zvW&OCkr7NA2A=wzZ(_my0c<J3efYa$UAkAwMT=S-8)(-d@O
zP7cXesQJ=!33s+nL|F*}vTprG2O!jzCA5P8J$wyk`vte_r?ckV?%hZ6;Q?SQ0Eqin
zkN`l~LVdYHFuo9Mjpo0CJn#FWfuA)M&q`&$BWN&>UBnYd^vCLqd0+Gg28t99TA)3^
z32-F;1lI!5-?VO_vx9pn@cTG8g^^a@Pj|}>OQR!(C_oUSAbg+zfCT`sB~-Z*<~eP^
zH05qkXQHG`M*1#26%S9O!y|EU4|>LxCwU(z=ovb+ss?y~e<`XWoyh_0p$A@@x)0$c
zd(hxi?29CP#<*Dlt1Pl&5ivvu>1vm>w3Jch0AMn@6yTY2xp++LSt<igM!@4np%XOp
zd^~!J@+v0*eJu@?0xA`*Vf$VUywC%!>V0W*2UV5;uNZ)@Bgzi?6RnzVG%`RB2FfA^
zir<(6KGP8o9kSf|l2w1D_RW?i;9(wkROV*+6F)R05$#3<ohN&(##eBsvRSPIY|n&3
zieGkFBRxi05^-=F#A8+M;w`7}hEmiwM9FSgEzlZp_zMx=!lb($m8$wxo*>}y6qqXw
zJ>ge9Lqvb1<W1vkWr&D@jcT^MibXvT36Ji!uKE1yhARaY4}eqgaMgR|zs-vUz95=#
zh<jnRdjn-GM0DjSf@)M;jd<MaS6QwNBT<lNkr@8cSNvh<RRThq21O0BHJQ{SYuFBO
zs(J*_1U|INBwq1aMtKW7?N=!t86)YCmC1Rgo`Ni(mAU!<Gh4tiiYld?I~qt#It%ZW
zYY{}keQ7XPYxEQWvr0pg6Vc>1Ez*nNW_y8fXZD}fn0Y5q+2Vc0;(Shc=mZ0L0|CD@
z*o2eKP?IaGpdkD40Jq-_Q3C~VMl*uRryU|tmvpL#tPS_V!%7L5(XH}DY{eqr^=rZ#
zD_hss+t@g}SSehSe;A6C9r-yHPQt<>@C}#lwf1UfY?hYXTxrcb^>zXY_^^$rV$f?6
zT2lt#X-+K^Jj@k`o+7vLg|{v3qE{Eex&)E^(KZe}=SCw?%V=<WNhGJt1I1pbCjkDS
zx`}zO@`^m80>D~ILqUj)H;59}YE&7P@f%U+`@1BSQDcXM`%qvcTHX?^eU*m!vR$M{
z1kEwp#Gd~1P*ABFI*z~P&6l*lf$GJfNqCrYQdhon18EyxW6t_;Bf5f)n6hTHCNxJ1
z01#MADWQ0RUz@3lY)=trC!4pw-$k#``o36T7HNGe)li*LFfgqf6U0_bbmpMMKv>Wm
z*%>3Wj20|ZS)t(}q2bS9kKOV0gfOkrQMBv5=9VY5h*4DCVs8qg$@ov{$zaU`EZo}~
zN+MuZcDufu9a`B%FH_K*c+mutenf<(;4WCoy8ZJRv`4^W4+WSP5k|qnA7G0jt9#bN
z27e2bDQ?3{v6!l%&OJE*f`O_ayx43>n20a;7aTF&VR>K;b77!X7=4fayia=C=ei5l
ztp@&C8Db4$%cDWrUT63?Jbn=n!#0h$N`v_jVG+A5g7SUX`6g9?-n_b~D%!~Q(1=a~
z6F9&?><uwQv@*VEHzdqe{n}ySvc!~~#Q<H076};MQLrNx;ZQyr&@IYAM|_e^kq>x$
zRRQgRgLzuRK8Fu1&!<hA6-#RNE&<-|JZ%QjfCGz&hMBa(Kk)oFgV>}l3I*!93vHyJ
zJIeb6o?=$55xmvaU-9+fiJA(OOleA;#H$Q0MReRQRN3Vptl&ioeRik%CYwwC)v`DL
zpj{r-KGc4Dbr@Afzq={-%wDLEZD^3}1oOeeTmWy9clwrym`xf6vCS`9J_-@duM7gU
z&?cptGcvVO?9ag31Urk8-k(C&_5Y5&US4_Ap!aNeGbN!}2Z0#CzOP_15_MQ(e7DDr
z1X*p7aLOplB?_#NfGG<cTA^Upce^eLnuUF>-e+`6lXKpDeU_7hmWqdY5MjTzSsv1+
zRTb)9|B1fwCptJ%E5ro=OX__n0H8CF<rG@VMk*kDFj=TQYX09{L0t&{z=eqqz^o0=
zmOTRz9$DPmuD%2ckf6kzYRPepudDe9B@$*o3BrHhYZbazc@<uJaEvHhL=2MwQL`T)
z*njSZu*!~WVPd|>y|NpuNgG(W4`6Y?{Ua=l@Tb}JuS?qZ(VR4>U^Qyn^|_rYn*a@}
zLx*M#JZlO37lV&occI?64|c<!MTGjwO`qxZCnRVinWeicBf}$LBBHe#QASvptaux-
zvuf(n@_-0^K!FV7ht|oMw2|4B#U<xzey-hDl9>F%T@fifFgqt_l9AJ*h!!YCx?o}M
z^!I`~@IQeAmrlL-Z$0h1OP2JP6*y(_oF$-`i1hr8c;UQYe!Vg+Y^TU#CCCkSdaiGM
zcjpUnE$ew-T`s5?yY4xYWUo4$YlfDu%#m?KyW(K(qYH0`-Yq4SCkHN=ep~GLhM270
zc3l`Lp&&g@FI3YiMV!0TghqNX+mVc6cj9a_{_8pgGxlKfy)L4@47fX5P1lypr=5EE
zHb?Vb(FelkF$(f3;KPH_1;MYY36%0mZRUvC^Z$;YmxPa?5RC1yxq>+gvW|B9n7L>_
zT$TKFRs9=FBE5?^%Ho3iw7k2sL0sD)e%i#p`SSDB*EjltqhJX-qU6DzrvKJ~BHCmZ
zI=91eqh*8H_D$+yc`IK?Wi?9i{C^MS0H27+%FNqR*(=KOORD|@MX1gQdRL(p)Rc(a
zw8pFv4p<&yHgK5RCu09mzCP1rlfx}bEtWfKe-27SPtwrQXxN-W!+q@c1mvsalhmN3
z|9<#}ml1y`J!}S(F$|?0o4XsD%5{SN@T2ng5k#1+BFqVZdH-#R<uk_QJZ6jhy4i;f
zd-2IJUS0<e93r5Da$m6wJ{x0FAS%LND2y@Jzhh7TD{WMIe+!Y(_yky#Qd^vYR24z0
zzqs4TjK<|KH%Dp`=<tWT%(s@X`@55c<Xxc$nAR7+r$*O!aAvQa*#I?5vGKT>O7A-R
ziYE;LtL5&UnH5L@dGCQE_9z<~-6&F9)v3$0P~1G-^l>;OkwYP~%IU4sO8~<X03?0t
za<pS;IoG+=xb%N#FETNDMCH;lrS%#`{DJ(ssWOzU?AG?EvlO$?e0yyu$0Do4FcZE1
zW6vPh{;N}C;6hvUsVm=HT5f&))P3)#uw0D<-Th4rTF@YFu}^EK+sHB-PyQ1XBtY`)
z)e}=R@lX%h7_e7x9A`c$O5m5t)v}sERZnEfJJp}7k|-T7u`x=5-Sw)s!3q{X_;Uc<
zk51PvUmtBg`}5F6n=BpfrFTpDzmTmD6<2$ozx~>FSD^N2`thSD#JK6ch)4&tGp~|o
zc~pDfSu8Hu!a&<&btARFG+D6ym$Hn5SA;hYIL9WheuC?1|I26TIo%rXFZo56<cZyt
zP#fggBoz>z{#r@V{T0fFQq1O;77A(HGJjSzzPH?rUL315K6Rr@#iZ%G%Gw)NE^41Z
zCqtA&hfKB!Kplm1N*FHi*c6@~RGp}j0P28;xvv;=5-1Y_U9tesNV}vytIl?L;Y{+f
zwX7b9->~-l;s&!bMU{c=ObqE!xh@})q;^d(SP2h=+I=5Wu`%NH4lxNmeU!`<AS`Br
z*Xz_vc@n?{7EjV1jN36t(FFOj|M98&&Yh|4U(w(gDvGw8;6l;u!5uY{yiQJ9oF(?^
zxsMEtaWfk!MT9@;C{@M=D2rV0#NK>9P2Rg4y{cDl6Zm@VN6Y=K<1UDZ5<xlFEYXlH
zmsD*NotVJ4|23ufPaG%qWmHiVd%jd&VFu!Cr!DU&nYCLAc0;@AC72w@&GRv=!n!Ve
zf3Tu|ZiBNh<;)+7fum~MG*wXd{n&s|$n5ciAjZ;ki8E|u>$FeKwd?XCx8-)-LCz3y
zj@%#y^H{1nu5e60Nv;~+`AK!L<Vr1pi~V%rpM-=!ebC*v(V17$wTcFnIblS1=a8VL
z2G)m{Z#Mqn+1vH)e{wL)ruq$aAtS`pE%n*$S;rAUZ>8M`@a@{7W^!jkLvf@+*gvf@
zcI5ZVKJz-!Xr$arMm|byh*F12%4$Iun#m|_o_|~&@Q6Di$Oe`HY#Vx|4r!?=y8O`#
zI9+G*0G&Dg=sL2Hjr~PS+&5(^W8Jax=+ix;Tb4(niI}a3WAb)Y)tK-N&D|x4Pq^;;
zzP^X{SCDem)u6<t7f)`86SO%_*PSSYvu0iqR(jLml0CD2%h8>M0^lH`-LhqQ8Y7La
zG2O<h3b-UC0>DvX5WN?7wV)X9YARRTD3mwI`|dr95e+#S6cgGhJZ<2PD6V6>OBjHN
zijTifh~l<PEkGK-0r7-v<bJBZLG9>Zdte#d=(_g)a-BoZX*dyI{Q=_6x?!9XVuP%+
zf)luFA3xAMU?c;U4fyvS8GSQ^$&&N<*U2Vl>#3^g83sbmp~<jS8y)VcvE;z^URm44
zNER2c;1Xj1)gF-%wA&GU+4RM)Wu8)z;8oodQL}eW9c8gP0X$6(J=&RYhEs+Q06{X&
z@zd)zFGa{0jnTjshizwoV%NWO6mYjOpgPf!^77g&XYIW(L6$hAtR{5n8&h-W?6^UY
z?rsOpNXkGzc|~A#k-ElnGu5b885>9y5XWh~LrBuDl-4dNDK#hEMA75n256ZZsYo@^
zQMJ-qY_7QmoDjNa5F~G~&Zt&Ul8F@TbstN(t(AZ*B!GX8vZ!!B>9{}N$#t)lLIm*l
z>2YufeofFX?x6RDHV5k-rayW0-L3_4VZ)uJyjzJ}bN)6KK)FyD55QxSGp59N3zJ4m
znHpSwHO2g#|IkeCd9te#BTzQjP9BCkh7A#twZfQzTe_!2DNUBf)H$*Q`yj=jeuB$b
z6E!qvl=3BaL{k43vGWJrisoN06|bN)_lpyWtJGWHuna9vY379YVm_Z;09sb)hd>4`
z%0qX-L+5LATX^OYf=CB(1O&b2&L|MPXJ?|-lZRqAy+OVL{W`Rs2V%G`Ui(r*((JIo
z1kob7jA&FYx!}~Hy;0f!PC+Jl_Tpxbq$S^2(7!qrA(z+1cn1lwT3U`zoL&+6Tc@Ex
z>~ZJw=#Y#+CkXUE{?|i}U5HCGZ!9A(|Mc}W!H2fJaOGXryHQhb=URHTtw$q~^VFDO
z%dsmAJ#?*`9%7-$XPzr@uCdZr=0A0@pn^f9clv%297(x(H!soAlvf??oDuLNP2|N^
z<MW>(=KQM}TJo2G2=7U|7f)LTz2g$W+nP)Fyvqxi;X?*NI(R+pO6t|1LUF;(>Lp&K
zJ5UvEV}={V*Lm&E<G(2TCOh?SN<Z!-gF-jk)z|?t*%67ZhF6Fkim$Bytl6<hO+Byd
zx~5xE?IUL>3ZDX`zaTp%htL<bghFSM4qe3WuNs`1&jo1ou_ssU#%G29%F&=MLT0F<
zvEG#TkI$7l$OM%X*W^W&0(cyp3hQ~g@z*2K^p8)yj+<?yzGandSSkGa5fLBy!h`=F
zyJi#+<r583YzTH+NiV2fZ;DaYqCX11bnAWZ%Vgd4r4GfT>9QzGle~!<sKhyUg#Yz&
z?%hqJ^Ikvi$CIPPglpzb{+LHpG+*@(VP9}%az*kE5qg29k2rxzRDRo$=&bg04xjkD
zi{lP&+qpQNOAJsz*=JL^^6AlP4~)9oq-J<(3Ho)ox#iF?6Jh1iNQ6V@XvC~tJ&+Z1
zjdlxhxrAy|4PZ(B<-=%+ej*lL#;@L-zynIW-gY-4F+^~2KwXw1+c@ui`*U~;^ZR;C
zFIv(FHO+QdpLXYSBsn^AXlA{-+*|%P8kw}s^^?BR-Oc3Txy^t`;kuvO`e5`qX9Z)%
zI(Q4o!T8bJYmdxkC$?qd3<GLpm@2H}LdIrt2+Q`CKB#g>1m%UN7Jq9tS=lzwy`uT0
zTGnSa#%oPIbzU}IZI^xSKZDUY8D@c|<25<$R()%c5P-91?0sjBu#}5*280t3tBE+t
zC$S&|8?ha{&#j|-x2$7#YxJMFjQli`$p23d)w<a3`{vfR{`cR`tr=AclrP`)zkm4q
zJ?m};V`1~!yzbXGuetqW@TZN3yUql0CI75T@w_ij71LYP6&3RA)%|ho5R1Vgon?{<
zHkg~%v8#Ys5dz4#4um%?oOODkYpt*je*GNOYUK}AW6yR1yt}m$ecc-H_1-I|O;}%D
zTc_GNC*q^Q{j3E?Z9Ct#M;qWDNb&QbDd8Pd!BXmUK1i_|`dVK7>Tg6)bu@Cfyn6p#
zO+oBM(+GtUz_Lv8pYa5dQ_R=_clC5<HKAI#VA3fB1oGu(n__U389B;+l<nbO*3wq}
zmNVXs6vH0S3V_G54nq6)YcX9S6s^voPBsj?K}ngklidp;Ly`0XYM*Mv{8@tAc)9SY
zJTB{qFbDm=gDlq<DO^nypGD3pa+9xUvOj<-=0Hs|kXX5gQfY|;p6YA^voic^-;<&{
za?e5Q<k`zJ997Ujd~Ajs?Di?i+n`77a<8tAr91>{67XQ}`m_=|wH388`B17f0i;Y$
z{r%=t<3zbP;3?NG%)Qjm%U`BDr->w=yn2KP!6k=mfTSI$k~EN_dfUu*!Si_V`<XZR
zdiBrRoxfg*Tw(4qoLtVh5MzA$0Bf_lAq=R}Z{1}9$&cC48{_p?G>s3+>Qibt3D!m{
z6M1rgNNEaH8u#}6EJEbwn`(hr1->|RTn)Lt>E4l=NHxU=tG^c4=;{}P!&0ZIR5?0m
zY(+l<iGLr_&^Yi?Rh`vtmN7+!MnKxHGXOUSy8p^HxJ4=D=jJOH<U2Nrs9WOF7HP(&
z@4{vUA6+t5(HBu5f`p&GktBdbNsYl9FtAre6)4t+4B+HD9Zoj$vTH=~MX>Tgd1dR@
zHgYShSro}2=}@YSLmg?=RHZh}+oi|e@;vHNXRO(4ipv=%Ygr%4fXma@09#X8@H;0`
zF%xcsOXwmba&;aP&r>_;hH@&)&Qy64NCFP>A()j{D=fT0C=>ZVZog{_snWeCBT_=C
zGG|<ba8(myI5k0%n$69FqEdjjGXtjKJCO(ex_=j|9{{uC{^i9J(X3^<K8ufgPEmpw
z(2arUcdF-X1&r;t4PN*`WcUqg(-TVO^wT>*>5)`f3P_9qQpClU@fChji0uoaFtpN_
z)h~=vS&*Y$wu_t{mug(aVz~%ZSySrt6RK>Vs64<tETAWhs&T*dU;7N(Z%2dNG9%f0
zXRL907vv~zNvb3DT2~e`25*iHtzcQdpMK9Dd1*3F-t<L*s7)QHUm6F(H8G(9M={kL
zEc)9qRV^^vT_Af?W<csFtI$iSArN~BK*T^fLN(_+f2=JWBoRlI4F!$8X@t+~_q!OI
zpX$7Sj<wL)U<%)Q$+_AG4*h$#8XyB8Qz~x_LN{$S2KS{t`$7I<2iGGTrlZ&{yVP-T
zzLlp?<#A&Y4j}0bAOjm)=~Q7Sl=5hWaxt4l1+94Bf#q8>#k+4b<Xn!c#~TqWNIDKA
zL!`>W?bFYW;jN7l=|kQDx+Qu&4^T?xwy$%`+OD|ASU1^Bvr?k>+QJ775dPUOc3)nW
zNss|{;ZdFEbfy${F8vj=mLY@0WT-d-n6CAK3@EdE8{=Oc&C1-3Ks&IIqduG!=w;sp
za*|mfT_4{17KGrSq9lg0jFEeV)w02h1OQ&Ox);x7u<)dL0mw(vxOlE!-bWMqH|KSL
zPJ6gT1Iatu)%TIT12o7x`nf8%ie;4dIr|<>!wW?dvUHGaC{?P@iUXTOKbBL3#`^Qc
za&DAk2ql!uB^Ho+AAA+bjs;t)K*j?_Nz`sZYisDJP`E<aB_nT$>?3dcleig;0LQJB
zp(B?VFZ>M0Qz19frIlb)TR%Mwu8%|D*M!zfbsF}jo=F<wHr7Hma`1k-1{G&2MUNM(
z{sr@Iin&3IVZ}ypfE-GU@&qO*I<r*Br2_7`BIcQ}iSAaaB$3)+sKo(|Z0V$XdY`{3
zWZ?5`(gb@&<G?1?9X*P@M750ZKM|18e;@18o^`pCcj#PBog-pi(6o-TN3&^k+wnzU
zoo@h06c6;-Eue44^Z^CVk5iSt0z$3zN8SpD5ujXsAjC$D%P-F2EyPuS7>sLHk^=f*
zrRl+~W8z;v-2kuq;Ghx^Wp-GxdSdhXtLhuSn2-F!0DvS{>#On|*DUnM=UZo0p3-wQ
z273ttp3kP)tz2bHyJX<A^XEnjE9P&+J*AsD`DIh6+R>SYS9khZ?$QA@e9$yKes2E)
zE;FF03{}b+B*Ql<Npj^78e<7B|NDXYwDwZDiaK$BpVvzM{gRy08w3lBn-bi9(ixk5
z+hagPsBWs>@lnxGi6;uLX_%fyz2Hr?b(xo1{AUjMEifh=Eg*UfYsZc#(8Sxy-FNb0
zV^t$$&M6<CGz{Ag37Uc=i6B$qQTC!$D=QH(&VqaDbL!QOIs0t()6XtDbnYci<*F&U
zU}Kw~aZ4o-eaNPlEr|BN&(?%Qp-xAt&>6a;g4hRy3r1S_(3LqakSx5vQW7LO`pJ(D
z;}uSN(-q@Ghp{kftm(0Mq1EjE*gLzJc9()9S9UBYkqb^0v!<H79GT>va(7)WX!n{v
z6dcL3%+**l4u#lby|b8P$E8~5Hv%m3;8Rki+$a+4V3J$qdGu=Fu$dL4CZz4A2DrYq
z!Rjr@FjyULy>RDTjdW<QC>bPL4ZKW`35O<yb8jlHT|rY~hu`{KA7dfU6v%kVrHi^&
zlkLR$KsS|^FDiDs2f8YTEZ>`dYG?|se@h6v9d&u5_q^5Xmy^&di`NVu39TbGzJONj
z<FShF4Jw1J=C^d!NKx!Sh^L0V0)+v1Mmocz<9>Sijtf-`N8OQ}-NS9tUc&t8F@D*A
zU%wy%ZoUD}FI!!L-6V=fFG!|4I#muwNK#gxo?dPcv@w*calZMbc}7s?`UdLTt6+;y
zF~CR0Z=;>DEKFsUY`os1Cw-JJ9ND#bh2^ld=N=>#g+Y~3!48eFNQ36Nbu-X2kZI4=
zy!#;GMIdg2>gT}Q{4!=m>f8OxBe$@tZQppl^-;L6$Q4cHj>_wg_dw59BP4JhTMElW
zp;0qkElwi|v289@z}E1RS8n&k2bT=&tvi1=Z@B;h$6~6V5V3YE(dDlSGl%_5vK{}D
z+diI-v{(>S<#U0DGv;7(x1shj*8e~>B*913mWsGW_kYtCvyvQhOY036qi+A!b)zws
z>l7~J2CT}oz~#`VSv|rgWc5xGSqks5AUrz9^p=WI_bRgVRv^nNEk38t47Z8osw#~t
z0kS)o|GnyBwbs;_i}=r;<oL-wIwuffBtulOjLd6WQ>6tucjDk(dr@^kG9(cE3e`rD
zDpul&n+Dx#-d@Sv$6SkH`AYF#+-8^F3!esXHc=Fhd_st^hD@I`v!G`IR8fb2@fM(7
z9Hja%K=5kag_*rqd|-lUBuIp)aKp;R-r#q$$d%oA=ZzQ}Pnr~hV(kz!%YMt|i}O9V
z=&6^J3OAxaXCf^>3(hpcReJY?y{?ESlhv;sNKrm&X9C<dc1er7q|g{lFHDip5oznI
z^Nu|n5B=tNLGQ0m4kpBB+UYd!<?c3856=xV<r)@+$Y%b?fy$x72W{^TQ$$m4Ofm6T
zMPJwpBt44*aQP#*{j~GL_?c`)gww-7k&BTk4tF3aB*Tuq`O_ZaQzWqmAW0JFwGv1a
zK*g2BT%*NciebK_+n6jL3_iNJ=(gZ1x%<^D3`m4c+~)e2<kg$cMF1etX`qn^NG#d&
zkL1th+_NpG=00+7OIPjyc?|v%whG+lY}N-XT7FJqKLNf!Zq<i+lcO60(Ke0O8g4}y
z6Qe;sqzj+EdmRS1++B!y@rLu>5&T7{B%Z2%l`4p%dMW`glYWqJ*L|9P`^3SNvjLoa
zl!UX#f}3?09U>IS6w({X>%1~IWuk@SfI@hX?WF^FR#1<y4SV;V^ISVK<o&JNpTB>T
zSd=vmlZ~CZ5(+g9g<dAXAbeIpK1ykCwCmX8)rv0{+rH29`dL*4L|r7CAeV+79!W><
znz(^Nhwq9tMF;_?9DOh!z}=09FdzDU0Er?@;!hI^*PUYtonF7h&~6(m%KqEH3ZM$&
zLBiG{{MY==GQHRznZRCz<oyi3eZ{6`=mhuIYrf*z5sVfDii1EQaDX)ypdSTc<(Q5^
z@|M}xJK4B2Byg9RBnxQSrb}5B7{(9L6!?2kIjY2R3ec_yku7WMWu6Cu4x~M`$ds{p
z>}8fJX%@QMm)dE>>pN7a=L!3oQ%`!IT@g0g+41K7pT^*?%&kND>1vPO$BO<x6rAdR
zuiiHgiim6p-dNA~Jagsx*_(xi8+bo2)5kCL?<l!{_v*KjwSI}O6kGG=mcKke6!rA6
zG<)p(O9I4Y>s3HY7OV)4+GFoFEAvsbz!4dgk4WB*7%O_N;*|>F_7>7uy|GEW{sUnx
zRrGqAXJ3>rE9cAf92+i!yvO_TkEPD#{y|wr#ia^r-ZqR|KbWa2wkzUKJG~Sgck#zT
zQN@kFy39Ynj+a&%MJ=F%^qUvXh75aSw1YElMqux+5e<pw4<{!sn9tWwd#LH0HsW@m
z1Q}TnOVnXL5|1LDn#y8&Q^f_`)5pYlnu9G=^Rqb+$xN-SxB}UHg%xwd3W(XPaRDpu
zW3l+cJP9*OwrLL^QN5SLOK>Vg^n#XmR@6lcY`YML(VBH6mOzeh3wulNN2$H9=FsC2
z2sQZp;MVM2>F2~v&-XBK7kc#BHLlQ+2zb6{vbHk`XmAyakmSp<5QIfX#}BV&b6p|y
zJWiL+u*v7YkWeo{%B#_w6;C00u^X38=O-yvDS_oH2Bu3<YRy{X2}Z589UdfHs`<F7
z)MHI!K6jd4j2A5;&ppKPw4N`g)ls@3yOFv(<n_{5h5<_Az!nwer|W6iJo<+SVi6q5
zl5X7_xR<FjOUCI#7y7(;^I`|QlQkDC0bNWin?4`kMXGF2c0-(_+yr-u9?b5hm{^&M
zKo=GEL@e(Sk5dwF%`#k~vZOXaPO5G>p<iJx*h04OXbMqkeBH~>wA1IdW4d?A>f@U>
znlPjKi;EB=&gsBoPT~TGQ5RYRz#gT(@*`iWxrg*N5iCZgB<SoX==^B)_a#TLITwmw
zc?W)Cm#n#7m=?`*c9I5WH^8#z5u<$X*cE+Xe<m9{(x@&Lp9Q4O#LK>nfR6~jITB0N
zXAYSA%DiqtR8`Ug_J>d1RrkBbpJljQ%zc(+Cd9}hmoqDzrALv?cz0J3O`y>SKJ*-T
zSgN$K)gjgO4#*L({Y8V*`@`E=%oLeZM~f6K_;Z62ZSW^ajG9DKbtiTy_C;5FxSgi^
z1zx9|O$);7LIu7g&lo}6eOil$xX>Anr@m#uljh>~d2()!g%lbedfmRAz0U{}Y@t80
zNsCrc4cXGN4b8OVxGA*bu+3_=n0%+}CoX>%z@pI<fibsk_{{Ig*FM+1n>|KZi5CkP
zc_WG$^k74KErAO7dgs20@ru4&f#{63V;IG+#SAx`xJyTGDHUe-XuiD9Wj9rm42>H;
zHyYHr$tQonOBmtb^fH!Pyuq`lVm}IEPsH{Q3;$#vDQq{37q_V`<PwwjNYMW1$hYH_
z71gRI!{RZ}j=2s1^U|4lcN7JC@YI?_SH1!y=MfOPo|hpQT$}c%saM*VQWXMV*F)r6
zX!Y16Z~~TK=BUpFVh1J9Wrj(%PdgTUY@4te(&m}XEAc%HeszWZOCtRuBbI4ehEHv{
zrTx3aFw^iM6*cxm{0FjegG5ix1*%710UzBCnrE~vbt-9rrK;ieTXY`n97TY`lL+R3
zv&D2%-0?BjlHfE7_(fl=G<fUW{c=yRSQ9}Od+BWuc1v(AbmPpBN`&wv9nQU=_X$u3
zVW_8C=p56>^uy}gxhoM@;WidZ;FxF6E=c(BVdTfL#xxwr8*zy!eklU(v!$N&tL)VU
zp;TB3UmcUpS<pbtJfz&~)pbebJXY?6#&&6kZKv?x7d|D~;svow*EPry=r%y-61sq=
z6A5z~BY@bgi9!Hw8J927Dcodw>^D=IR*y<D@Wi6Z4F|;f;T)vHrCFC(N{-VRoMvVS
zi?PyW&qBtlqiA4CuWF|WKG8Ao^m6ujSE#@!9WnM;pSw^dP~3E{EG;ij-80Vjv2K1L
z%Yd@E&3M7hHb9z;p$5WGO`7GNM+F=RyYX2x!3L`Z;Y==ua>)2ACfguA2v_*hG-0e^
z|0MbO$O}OymCtsU{)uG_&~RwUy8)ZGhcPRsq~TQgM9P?G>to;Wx&Di#MM7p)<|<4z
zQGwX`*zq-5pK6ZYhzU<GzvRhQP#h5|aJv-YmM&)Bh=U4Tut-Q5ofMCw2llMq$#MHM
zbzj-{8CO0w`li&^$nX`tsA?yC#WLUqwE~EC!9qxo&hiGDgp;>k;u%*W_>+ThXj-{Q
zSO^i~*r!jA(oAjw?g++*0kHuz!(H!#YHGUoc;+IctML81v7C7B3kl;`@4aMKE*~+?
zl~fg4Bi8__M@E%Sff9*8ei<XRbaplS5;1h%u++2j`eLi~jwt`z{qbc)PPy{XNaSxE
zy#EXrpXUdeSV1;1|7x%Rjn19AvzOv6igfSm;M2(_@TlV1{*!B-y2kwXpYY8Hcwc8S
z9a9v1=E)KO*9Bl1%m9iaPwOrtf?0p-SpG`7y)J9`At3+;PM;mJDiqUr6%&J(&2&dV
zxNv|qV^e^K0R^Ja$x{HYFi{QAHfBjP^q?;mxN<-j8Zij@O7*OmQ=;NKUzH^k29h38
zBctcO!ju5pDjx1r#6Qct?b%TZRJ}xa>l&A7qefpp2b*vL19?X)U3Ljp9Ym(Hbh#b5
zXP~q9L^E%gO<Wj19an^Uw6Eo-wCCOMR<p422WrWfp$DRe02CH*U>pTh9^sC;mN|A%
z84&Lb%Fo)(eSOh%?~=~Oat&w1gdyw2;74MS)cD!!>e)<bv9NN#%YXBEYO}9n-H24n
z>#C~{ekSNx1}Sg79Tr^DEDGyx*I^q1z|Jz-XFYXqcKSKp<{n6{JI>YpY#cjo7pLEL
zzu8u%o2^d5Tuw|i0C@=uI1MC*O>lZ(seE*PyNhxv{e&UUZsi9y!66nBQ@vGR3dgm4
zK^#wZCHdHbZ~Rv-6r6VUdE;CK3?F)yH92+f>d`W9S_!1A>Qsa<nZR{;boSTl{FFN+
z1`DStN%Q-Yk8bBL32qV@D9EY1o~O=+FCAN8hFpec<}bL!-k2F*)P(U__ST(y(&(GZ
zhwG53{sd?ho{)@!y5T0?#sC$-0&&0<nw|iK9?0}w5YD-jkjFP&k^Mk2f+fhL0n#&p
z%lf)XiJY9q#?4~82pnSs<R}GVsHgacs(^K8w+FE^J9tegtd{`iS}*^KeyS5S4s`)w
zqrq4!{;)#<SqcEv2f)lz&<Q4ghqFH^%mMsNh%!7mqQnbN9l7x_*Yk+re6CGJfoIV?
zvJwW{LXZ~OXXC5{nA;*if}%)o_olbkVyA1*IX%%JhM=xq&}_d|PjBP{a<U8Bi+(Il
z747^$VO^k{YXCqXU=Aio`Vv*{rH3R0%-TxeDQD;yy7#fCLj^C%S~~uD1fG}qWB^PB
zuZr;H(;`QCk0u=e<4;k+mjrxFm<<G=WX$A8Bae_tcZ<bS@E$fOD<|JmpppzFK>ZmG
zmcMi24!|;GLfiT2z=(z10^rrSp{1OnMTGE+2i>?kyOi%iPBTII2l2ftGs7J@G}I^o
z#ULPY?brc*NitQc#6!}wLpce^YRP~#aVyR`om0<YqZ70#k#27vx!vka-~7OnP0<^m
zpyKj6_&tv#3bNJ!YeDICmo2RHfu2IcAJG>YbSyLweEeQ3d~raV$DlLVC_U8jHd+iO
z2LTo8lh8$P+gF4uy4voypDUe)Er=g;0YlXzW@awf2y%#tj%TXOqvt8+58VGXe1fNi
z4D|~oO!XxvsmN9)10F&-H|k{Ek)eAO3&#`GD3O|7pXV6EXC!<)v?)jigO{3zG4xrL
zWw&gc00eWvqjL%+(Bq~yO3(Nu)}8;0Z)bU|4@;l39T2uFU59c2&V;tJz$6><()pfF
zYTno58ja%8)I-dQUy-}Y$puV$I}s$x%O2oJNRACwa&daOruU1E&h{{{?+_g=k|I$R
z&QT#028`U<dssyH+Ifz|cpISSCM&F*X>ca4^9-f)46T#36@Z3M5fXZXC0&BMT>uYq
zhG$kETuw9{UODGc#8r~>Bm!uY0OXzT0OE@xGd=A%7%yzrp17~Yr`m;BniMSvq8^x$
z_4~4z>CYTKjqnL{ukf#g7J7?4qoKMes7V5HhyXbUlI&Y^@uNzRsS4ASPrd-1UCGd3
z+r@vf?Ii{=8SI|WX^;_lFWEp1Z-C$W{IAI{SkYy6kMg%Y+tQDF4Q)%@$f`RTgPFB+
zmMlVDv2iXmp$F}}(;y(@xu2Z37EjbTngUAi;I}R^b8OFfo|90tn4qP{sj0^`?}>uN
zkbkVSr^<+lu7paYvg)|qtXy?kpGGwi6o-mlnp34NU6Zuz03S@qjvCNl>7hQ97omD?
z?s;w>L^PYEwKNHALySb~QhE%V>dOWG;7!2kTq{-kX`@8S^BG=>X-$tf$Fx2ZNRWA2
z`*P=46qF9i&F9*%DtqBa%Hi1J#FplT$sC}e#|H()MGFLkS0UBoW`Y=|iGUgfU}J!{
z%=K>#Y>N^*L`fhHOA1?`)8`C1%$k97HU$hBI+J9eDX8EfC8ast0ciqMl&+>%F3dXm
zT6`lsi0Q@RT->=c?*NQYJ|?%*H?tr76A2{wo^lQ3x62&4Pjo+rsg?owD2m~Ffjp!q
z5yJFRhr9#@q?m|qOv(4VYjFwj-A?840?u>M%Y}^_Xo7HZ17PwoMQ%X;gK&o^Ux#R)
zJ|v_t{Ky}()_K-}!gh(E^tezH_p04PRMQ2l3GrNcCDGL}&-}o=HY+Lq3D9$Pc=d7+
zOP?RhWvjtc-`CYKB#kZmzz6LzSON@`Kj^V&tNRVOxY^GmZ_lxjlkqCSCV$;_S;r^w
z%hpOhM>KYN5ra#`i~@qC9)~I@&bMsnDcS1VUc2R{D8&VmGVPFvYoD?OoF(LaRDFN0
zgz}G~ph*U2us)iCH`<d8?s-J=ni7yrGV>Q?S7+oZrvf`R(V6S$UY@BNpbekd@obF0
zMD1qVqYgl;LW_$0ijpe;PFU3jMvUAT@u;*%Y|-r#IY~%zm?S&AnEZJ3bzx=qG6kcq
z2$IHkHIh*3)&KYirJ1E*Nd4dzD9T0sU`$n}QCOHq6vWW%f2!|wLpx_IDT*@d-=$t^
zghy(qgHQKup-ii~KFR%ExQ6yr&cs0N*M_sS#)fS&I3atDm~RbkqZYUbzI6R<SxB9(
zzy9dvZ{ux#;#!Eq^*!(F>%o<D-3TnC_{*=Ve5F!Hv10klS0|oZqw8hnOTEBvWFY6C
zVyv%;@_}F<l|+ZUMGPsde2(v8s$1s`SPCidY=U-pr$+rX54TPYoa|{zBoBpw>Z(Q=
z2p`(l-d~sNU^nWCVY9!x`RS<iLG%LlTFHnpki#0tJ52?a+~6!**K38rk~+Au0@kPg
z`@DXmVfVi*FJus`8XI@rrcjBa*>*z8mdSUaRHjtr)H@|KZWU}zmEfXEPPU6qwhQu7
z4Z~94B*yV^P3sO=m(&S!p@7xFa{{#*<zHvrA~lF$H9UbWoPgHcJ+Q5<iO37B_o^Jf
z0`TKb^4`HI=HeRuWgr_89DcIbHh6JBj;9g+Tu~z0+aks?GD#rbA!VMjX}X`1l7FJo
zJr!lnc4ZNlF+_Vwj%4x@09}5)rL^XtF$ioxP70%-$@*`3K%$dCAwjC-;(<7U!bYZ?
zKB_$PxnFnG0CqsTd)mMQ^HS`^P4S-q35!})yV?r-+L}W()daI1k4>q>6!*Y@C_X>E
zi(*KovuvF&cZi-$VU<3BnZKf232l20z*1Dnz#`H55#yE5x_aMJ8%)6DjpQ|ew9P+A
zBSbx0o~z7D)opjEztMh~^b07})ehy=7xKC-IH@N&O<{>+fGA{}&+)qRk&CVXaCj%N
zP42V{Sfl>5M$->P3WKGKjOq=X$E<eQ$_|N&Kkz9R?Ux{&d2vVPYEatY2xjYDV3|EN
zf-^u*R*+!W>Gr$!KY$m3mki{<g<wte?uhH<J=WmZ4JI>h0AiKIM8_N-@2My^dcHgG
z>;=4OA;6;mXhVSX<ToGZ+k%UFLRfu?Pyn1vk!>9$eT<*MZt~02dQ>W&ZoQ3s{gq|<
z&OyrthPnh|dTQL5tB#k-a_2VU;Ioyk;%xk*fO@R)Mc{?8c%=+n%-{Y@6ovpyr`|5+
z%lmZHxO}7G&n=}$Nr&&MtdG=f{x66Ycj+WiFeecbr6_%d;R%VN469}9#&-kHK-5yf
zAr!)9XLcRTfleDj5kSD+#lwNy$rRp81w6GO8?tLt!`f0q7f!hK&1V{8c!u997}{_d
z_8<3RR3{q}<w2i*dFY87DphT36D0Q+>@VUffa^*0v%W8Eh=LacaiI@-q3f592WO9a
z<>wOT4#<~q68R2{E^?wSbJBp4r=?57G)%K)OgEmCLx3a@LL9__9$>ka-*E)Ezy)+|
znCHhnu%8ILpZ+47Gdo{HHCO|(zcvGWKyAmsJljB=hv6_<HCFF74jLQyfKOSL-Aj5k
zM}6|%RLhqjs{Y=iih;Kg?As1-K`9_WY)m(V62#Mif;tvK5GNo03aXC(b+(xI|9*!M
zB<gpB`rQz4ax#~xM@?GJa}20ud_S=38f0W6Bn*6j3+R9(=)sj^HkKa(6}$lQyhE?&
z2Plnz`+);B#P(BDgEd?OHbet9Y(Z^*KnpmgV9D@GR<Awle4SHomDWJ`%vTN?(s1gH
z^EF?H0__I@Ixbg>iWR}3JAoG1LIU(*Qcky{6F^0CfxQ=jDPOvw_WKw2`@t1~5STPZ
zQC~nB{xf1L?ahlKlP5C+r#b|GAq+TNV>+`WY_@-6c^qiDCP)DJi2_lN{8`8Y1!Tbl
zkb)wseB-Bl%11*3Ot>UJW}L6F&Qod6Tklq3JAKhtM%k^=mmTQ?t#OOHco!-X7{Q<x
zfnPK98GM2Pv|en)hSCv0U9Vdzc!3a%_ZQgvEn_;SXA4MsB@YNT2_2_b8hkM?9J-=0
zr84|uv+-Iwu-)5zi-v%d+dwsMwj5~r9LPatPeBB*)sGr}TG#_BaKHpOz=KmmG^jk}
z$96RY!2~or45V=yJ12%W?aoImKn#(AV+am|1&7o?IAq9<9Yb<N<UxdDMT<#@G)a>F
zqzMs@Mv63P5>jLoBu<<(d13?!7cZq)BrrgLW=#YON}bt)1W6N=KS?&>F|tU}B1DYx
z;88?r(;Y>25OL@*2h|-p4DK*k;|A9oF=TuV8-pxZurgqjO-nW{47V^oz<4l-P@Oq-
z;>4LV$4#6{5k6c%g^yoh!-o+kR=k*TW5<snAKn+Q!-WZ>s$px^j2bm-oufr-#_U0h
z8E$KYkRc-kS+T2E<A6O-HbaBAZ|6W*gWyBm44d-EK}0DLBRnutOi~2nNarC#4lUv&
ziV=}Wgdo{6YE&xk-b;<z!eytEjY*sseNMC}Ql=A$JLNG|>Qwu@X>8@)6}JA^uVq(j
z3kDg~A`2}S(h8x54?bwYhC}LTgD*AqQbP|yn2<n(4Csl>!w*3W(L;UK*}#MbqM?Q}
zX*#2ZMbV<sLIM|BSgVE_W{bgw{$Mj`AlhQX4Y!4G@QtCUa!_ixiJHPF3HX#FPNXS)
zLa7KNtZV5DA%rMmye+^4^NjSI5W<O`ny?N!qLw<!%{JdFj-nc-62iV6ZpiNjt!TKR
zE3Q@(tE?DaGjOf80(^_C4`OJc1qk3M#0@p<kgyFr)QH27228MEoqa?MRn$=*!^ad3
zF8BePYN$!E)f7W}rkMs_pwX=uR3k7@Kf~%Vw%Kkg=pbQlQ>e&-BK}G?N%)TA!3g4v
z^JqDbkf4Yu_CivEqascsa|a}fY66L;ib@GfBa}F4P3hc>589^ebcl#}<#nh?tnl;`
z$3R^(kkJ2HGmyX-YC!bR7~X2(0}qTSBn~y)h*-ji4{@P~3rxv})QveF)gBEjE2Txy
zU~RP-Qao_fh1CqjQQ%&CmF>sdXcKZ+9I!%G*`1Sh7D|hbdQzjKupPQwD#aBl2{e&j
zx})WU>IlB~j-qG?C3oOKh^n~edaC^B<O<M!bp;UN0MSM`h8Y@lONN4Lz}2k~LhwM6
zIogQW4LK&g3knw|*x;Uy2`?P7cq{;+fo4)<JhaE7VMdxQ{v=TOR)Pm)`K+&Q=&|$8
zeY9D0f^fJ2E1V-jU82>as%R<VFhUL~_uN#kOZB7^>Gh>1dXk80kyA>j;NXi&sjRck
z;RYRcpaH8JZo{*5eP#P^(1F=XG(d#gQac0~3P$*QxFq-^LO0lGgKszHkmHXCUeF*O
z!|AWzuzkGY0E7v!3GLO$W5uEgd|(Er8PI?fgcgDMhetqi;OMY&I@Fa;Syx%s@rc8e
z3^rvXOft#`jgp=ZChc0lLjn&@2oj}4M<{WEN}aTJCwpln2YqUuLBRGof)U71X1Si*
z1{Fjf!azZ9amxoJ0EIe0Om7mCgCtzwfema!ANI5UBH{LN3JyqM3(^?P<DL;lX*?q|
z5BLBGPJ<Sf?aM4Y3>3^_CY#XJ%x1|_T@G}>GvQn?J}cy1o8SaOK^i3^LKt30L_)|o
z{jrY|dC1lrG9UXe4>!EoPY(Gtu+IH(du!odT3|!B)TG8ODr*?}*x-gXut5!LkOLuf
zAb}KUql#Cw<*4xS3Co<J8j_2~Gn^5|XD}m-%wPcB=%%)TsWFqC3(MzX13Dm$u1H0i
zVO6e@wLQv*c){UP?UGW2+YK^<(0N@^{-{AF9j{9}5Q0+Z<xXtwAZ!lFPrmZiE3Oc#
zEG`(7Clv@5PzLdPWHI1dKHvfy)B$~KaKru@SgA@nC_w@o_yl2YnNbkwgEE%6#TbPd
z%rF`Q8qe6p07GyZwfz$|FFQ-jekHTe$uT!siQt~D!aVyBPn*FxN^zD#E~bR@o#GrS
z)zaxr6cSGe^=U{%WH=RT;t5Y;!_mI1XT2Es(@<&Qs(}z>D6^#HppJ6XLfOCuheFh$
z62gK6F2JE$YLu>zp+^Qp@PJ+jQ<%jFV=qd&3kVRfpa2>uuFCS7XTs5$xcODh5`vou
zS~G%G5l$qrDV%Oj1S&`gDwK+2NTv>@DU00fRIoYEsnE$GblOu_c$KG3_DhKW3?dA^
z+Pwp^#fWh6zzvp|)-|jZVr_s!1pY*z0ejSyxsB0>JQgql1`v~&dv(S!jL{2YY}c5`
zyjAzw$S<(;@MS^zkpl%1gM#qpUe+`SzKWE`NX}<IN$ROK=_9X-90hp|A)aS98=nhm
zbDsB#Dh={=qprxTnYFzw_j2nt7#I+-mzx_5T0nvv%psL(9WGm634sg9Z?4TXabfiF
z4v;;dy3g3IU$whkl1{(_459(s{u#HIF0*XX1lD;OEIP>Es~{Fc-BT-=tcO&DArxud
zk}dK&YdKjeP<bKpE_>OAGz4c-wO8rbYsuAM6??167527@mRp6jw={5z0b8RQ?$Hef
zBw&IZAlk|gr?m})fIxEL{!!u+H<zOt7y$%?$qX4|SG(GMh7de30|tH9Ujjv#V&6C$
zXa0C*)1+n%@b%>hS`eyGeaMlbq7WhsK`KN5_0{InYFXDODg-XI*RoPg9MGwBz4pp}
z#ynmCv1~wO;c9OY=Fhhv=*<Ni7!ip$gStWB4|!v&aQSSAKWpF}f*y2TIhuhiO!u$G
zC`K`4yxm^xf)x#L!D$?|Qe2g-w*PVFju|}7nNf4s2f<fWrmCB4Qn_{YsYtz|a<%=k
zR@PO^rX=A@72HU#NS54+rU{nu%w3PS0kth#Alw$VwPtRTZjcKK(T3rsmE{l(adP7U
zs&AV(+#GnoE}qf;Xmj^s-MbjZFm_=K5|p5FHG*@292`WJ&4%esZ#qrGJi}^66`QKQ
z(W+_PkXpO5sZ+6Xs$ES_S_3?rQ?DjY*{iSF#()Mo&NvM`4swGX>T;j7dz_8PAP-2u
z3UW}na3PvX3jIOE8IXs}XU<%G*dqfRfIu#op<SOF<L5pn#xQEJi(NE;1TTR0_uQ_i
z+M=1`!*05P_BD_Nv$x+{S#MTYdnZ?ied|IPLcE3()z#|0wKL2Un5}xF8nj&oZKna-
z)dId7K^uI!?JcsOZ$y$$m_cVv`QO)|25hgP4p{KOhL)Rn6Waq6TSS9)e-3n?Yd-zE
zC<YoDps@aA;$1*>7m%fK?89Miye#{I`;ErzZD;^&-lm=`$&z+2_UOqz5~8(O>jATA
z0jY|fcCEGiBtLd7PlQiw;EwHvkL}#722P`3Zbet7FZ!Zyd@#(2a3uuv&IMc`0tjK1
z9xCtvPkorc11!oOyiNRW2_H~_112B{&@cUJ!3cvP^Mb(`zMugj4VmZ+!)k;D>u<vH
zPf_SDd$x+D$YKCp2KnMf`8IG2$B>?cuX#2Q4R6E&`2+_B&<*2e`1VN-2e2!;Z~%|5
zU<NQP-0b*JQ2PGxE$D1~2vPdzhJX@E0%TAPv~LYm&IX684eG!KJm3OOK_7b12d@Z!
zEdF2u9>AoAAsBwH7HWYQd@dMJaThX=6(GO^pfCi?szJ;O7Gd%EzDEV8u#}jM*`jZ&
z+JXjJfGom?ZB**`)@BCcrhr6n8G!%~ozV-ua2bcs89@*PZ2$)La0afCZLsl^+=51C
zz%)v!M!d1Na1kz~aBkv)h#Vy@7~~y^2$`zy0c^k!<bcE4YUNr^4k94}KtKc5Arm$6
zitK>`E&u}1;OB}V6lFmclCTyW5+a2`7JQBi7@!s9F`-=G9TBl35mC~l4G|T_timxI
z9VHwI$TTF)G+5G6tZ)TuL?s*L_)O!*X22#3=q7VACxKumeex#@=*DmoC|ke<{&4c$
z!13M8N+lV@1x=14rOo8z(FL25BVq9!q3{DBz|PLc1_93o<-iF%00byta0ZgO^1&1?
z00bmJ8gwBRiXj*rG6_-9AssRnDuEP@0S$nF0WMMkARsU$U@##d0w4e|4-+vHb1(^0
zFcmW~9g{Ez(*yQS0w|L*Ez>ghZZk7e0!V-{L31-P(*sE0GEMU|QS&l0lQSo?GA9!>
zXXG_ulQjVoGbNKSUDGyQlQB)R6>lI?>OienNzYoT1|#Ya7~}#(L1WIcuJ%F2M1TPh
zVIkvE7LHIDAhIDF@)x*s5*qUIXyFmWb3Db<5g6e-$CD8hVG$PL5fs7xJ<n4S6hS@J
za}X9`5Y+QN2Vp<?^AGkj5dQNI0zp6tR6qy8KnoNO{@@Q3R6*%L5E?W>859mEG(s)3
zLNQbhFmyvXv_n0#L$Lr3LbO7!ph8DfL{XGNnSesy;0@q_5Dvj%7*RMQ#-VC(xa=TP
zrhoyG>m3lUIW@{2bO{6;;22a<7K9-d?2<cW;TI~Q61Wo>IDr$Olu2Qs5-8zGwe(3P
zff6KvOC^C5Bw<X+bW9JSOeNt=)znN6Ard0t5a2XU-!x9?v=HFbPVcl3^pp<jKu-&y
z4*FD2`xH>?fDY;cQ0Jg7?t)MG)Gqd-4&)$G{cd9JF;es9Qq}&)?^H>BFtrUl)l(<c
z5!FXjMOEcM)s-I6Qza&E_J$GJ$HP7>R@G`!;@}WS00edrNSiAj7C;0f00@jh7AWBt
zwDT7rk~=xUNxyVT$8<_7VG^E{N-IH3x3m(_^jg=HPPJ8A?X+9t)K9^6Pye(}50y~&
z;!)4lQT5_n+oxUG^;}g+V&YX^Hx+#%CYA2B!)owGVRhwV)nE6lUja7oh6|M(O8f3L
z@NV?O)SwQc$OkB3esopw)RHa7pcaB*5}dRW8WKvibYnGP5;Q>*&U9M2)LO?>6U;PC
zB>@xCbX)HfW@9u)!<A+QHBbZfPsf!|&DAb=)=}SeFaGW^X!k-w_=0_!2w(LTl~}H6
zowntg780ZOX`R+9t2ST>w!^aa!`h$_GDHM8z!U^>Vy)<|Mj$##AsC!gS~)=$zEl>X
zl}c4s5=OQXRMu`a0Tbr7Wm^_zF#%33;adYYTnYDQ4fig5_AV3`UD=g=hIVh>m2dDy
zRVlZLEcbGmR$n_TtsbhC^vuJk7HUCPA6e<zLRUDWHeg3r4e($N%76g^BLl*ZY{5+)
zG=Kx5vkQ*FNq-?szqDE>;Y+WTWm#5R{}xXFR!?mfTya)s0o8d46%XP7QGFIKrnhy0
zmM<bzXo>b{^@cBwb}ud$Un7Qz8Y-<27GgHH{&Y$AYO#&wv=4M!&T0wPD`mCi&Npk-
zplgxf0YpFqB6e(P*M9Kf9U4yrARq{KK|7~4OrKQ~o-`6t_Dn~%cwbgcw-ryj)e;If
zTnDu-8r5)lR&lfU9vzomEd_j$mM=P0Z&(#`ABxZN)nFUyU!gXJPdA5kc!wh@hVu+!
z;y@B?00M9|1AKIVO$;C6;dXsM0vI3-jG-2OVG_jjcO{_{z!YWAly5IsaA)=q0+(j<
zlyISUXGNHLN%&kVm3t!<X}8yVn+T3y*b)C#Zy?4IwH8(lwqRGThEaEirFLplH;1#Y
zb6IH)YW280U;-{+0p0<lkXZ5XK^`*xzyi*e0VKc?h9O#i*IFaNlUFu_>l986K~G_{
z5K6g&34sm-)lZ*yXG6GW<sfkxw|m7`Xx&(q+W1q|XH!2Fq8{oIiHmbRY+)C6&j$7@
zWtFY|RUc*5Rn?cz@<x3nF%rxGFhKwWMhqSxIg%AmALzjpDBx^g-~l2)3?2a@vlL68
z)JxY{g2xn|<ynH~v`vfmP2bcIBEb;&xu5%)5DWoE2?3x7x}Xc1E)3eB4RxVcnGPKK
zq3Hk)9$KOq6{6*U4(`#R=Ku~QwWB39Q!Uk_KboUG8l*wBq&qrOO**7M`lRJRFDg}1
z7n-7oSOhMB0z_dRy4jme>>mE!p#uyO1U#S>JwOQ1z!6}<I!SS<X`vyPniQ29BBk1?
zsk*AQ^Qy5rt2veu;Py$cR9LH(owIbT$-14*+N{UA5+Wf>C72T0S`yqeuJL&g=-Ex-
zni1qWuk|{w;hL}Q`mf^}uKT*L_u5VA`VX)`3Ua^&T5(|}Km$799e9wZ6E7d+!5coo
zAph4g9>AO<AOacyv>RZwA7Hdi`?OJev>jlyMLV@!y8%}FwNo3k3v;$x`?Etk0!mxA
z8=$jG+nj&<vq77;hugD<`?EV+w<Ev-aJvBtQ@DlOxS@Nxqno;+Te_`Vx+mbXClfL+
zfCD&y0#;xh=z%#YJO1(XAs-4@8!|uxZg&JG-~~M31wg<AOyB~1Ae*z9zCl0)_S?Vp
zJHWHqzh8jAwK>4~djb%=z+d143LFH^=)VOV!UOz_=$pYopusa71U8bs9lXIk{K03y
z1up!-JMRTfAj28_Rv&!A$8x?Ie7^Ua#c6!MUx3A1{8lqu!F3$R<r~63Km?FT0ww@#
z-Ma%$As%?}N6#C*`2imam>Wz1s41YzDWC#0zyjQx0<xR}EWiT1{L8;Q%*A}ny*$gs
zyvn~E&C49jHGs_9yv^Y}&eMF%>HN;i9M07o&-uL1{ru1SoXx>pyiI`{Bztz7TvyXO
zAMW8E=pi27+ab~=ebOnt(k=bcF+I~YebYI;(>?vuK|RzhJs#x29_-;B@`1?{y~%rU
zY-_324P&lg9mNg<6P+tDN=(%sBi9|{)fGe5V?Ee?T`~$o=8V1Akv-T~ec744*`58_
zp*`BAecGwL+O7TCu|3<hecQRc+r9nU!9Co?ecZ{t+|B*m(LLSOecjo;-QE4&;XU5v
zectK4-tGO~@jc)5ec$=L-~IjH0Y2abe&7kd;0^xZ5kBD+e&HFu;T`_rAwJ?Ie&Q*<
Z;w}E-F+Srpe&ad5<30Z4vppaH06Xg{jVAyA

literal 0
HcmV?d00001

diff --git a/public/assets/plugins/mxgraph/images/warning.png b/public/assets/plugins/mxgraph/images/warning.png
new file mode 100644
index 0000000000000000000000000000000000000000..cf53cddc3cb57809786855ed3f2d7c1248cc688d
GIT binary patch
literal 24526
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
AeE<Le

literal 0
HcmV?d00001

diff --git a/public/assets/plugins/mxgraph/js/Actions.js b/public/assets/plugins/mxgraph/js/Actions.js
deleted file mode 100644
index 9f0b6c2..0000000
--- a/public/assets/plugins/mxgraph/js/Actions.js
+++ /dev/null
@@ -1,631 +0,0 @@
-'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
deleted file mode 100644
index 5a04240..0000000
--- a/public/assets/plugins/mxgraph/js/Dialogs.js
+++ /dev/null
@@ -1,949 +0,0 @@
-'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
deleted file mode 100644
index 9858989..0000000
--- a/public/assets/plugins/mxgraph/js/Editor.js
+++ /dev/null
@@ -1,888 +0,0 @@
-/**
- * $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 = 1; 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
deleted file mode 100644
index 105a4ed..0000000
--- a/public/assets/plugins/mxgraph/js/EditorUi.js
+++ /dev/null
@@ -1,1317 +0,0 @@
-/**
- * $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
deleted file mode 100644
index 46f34e4..0000000
--- a/public/assets/plugins/mxgraph/js/Graph.js
+++ /dev/null
@@ -1,748 +0,0 @@
-/**
- * $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
deleted file mode 100644
index bc0cc25..0000000
--- a/public/assets/plugins/mxgraph/js/Menus.js
+++ /dev/null
@@ -1,716 +0,0 @@
-/**
- * $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
deleted file mode 100644
index 42e13ca..0000000
--- a/public/assets/plugins/mxgraph/js/Shapes.js
+++ /dev/null
@@ -1,1234 +0,0 @@
-/**
- * $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
deleted file mode 100644
index 3c4f47e..0000000
--- a/public/assets/plugins/mxgraph/js/Sidebar.js
+++ /dev/null
@@ -1,903 +0,0 @@
-'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
deleted file mode 100644
index 7eab562..0000000
--- a/public/assets/plugins/mxgraph/js/Toolbar.js
+++ /dev/null
@@ -1,407 +0,0 @@
-/**
- * $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
deleted file mode 100644
index a1dcf5c..0000000
--- a/public/assets/plugins/mxgraph/js/custom.js
+++ /dev/null
@@ -1,270 +0,0 @@
-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
index 93d223d..b0067ec 100644
--- a/public/assets/plugins/mxgraph/js/mxClient.js
+++ b/public/assets/plugins/mxgraph/js/mxClient.js
@@ -1,1708 +1,1729 @@
 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");
+  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";
+"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)
+  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")
+    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"
         }
+      }
     },
-    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]
-        }
-    };
+    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()
+  this.clear()
 }
 mxDictionary.prototype.map = null;
 mxDictionary.prototype.clear = function() {
-    this.map = {}
+  this.map = {}
 };
 mxDictionary.prototype.get = function(a) {
-    a = mxObjectIdentity.get(a);
-    return this.map[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
+  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
+  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
+  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
+  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])
+  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("")
+  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
+          }
         }
-        return a
     }
+  },
+  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
+  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
+  return a.x == this.x && a.y == this.y
 };
 mxPoint.prototype.clone = function() {
-    return mxUtils.clone(this)
+  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
+  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
+  this.x = a;
+  this.y = b;
+  this.width = c;
+  this.height = d
 };
 mxRectangle.prototype.getCenterX = function() {
-    return this.x + this.width / 2
+  return this.x + this.width / 2
 };
 mxRectangle.prototype.getCenterY = function() {
-    return this.y + this.height / 2
+  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
-    }
+  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
+  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)
+  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
+  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";
+    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 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) : "")
+                  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)
                 }
             }
-            return a
+          }
+          10 > d && g ? (d++, window.setTimeout(e, f)) : null != c && c()
         },
-        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)
+        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 + '"')
             }
-            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
+          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('"'))
             }
-            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
+          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)
             }
-            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))
+        } 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)
             }
-            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
+        } finally {
+          a.endUpdate()
         }
+      }
     },
-    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"
-    };
+    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])
+  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
+  return this.name
 };
 mxEventObject.prototype.getProperties = function() {
-    return this.properties
+  return this.properties
 };
 mxEventObject.prototype.getProperty = function(a) {
-    return this.properties[a]
+  return this.properties[a]
 };
 mxEventObject.prototype.isConsumed = function() {
-    return this.consumed
+  return this.consumed
 };
 mxEventObject.prototype.consume = function() {
-    this.consumed = !0
+  this.consumed = !0
 };
 
 function mxMouseEvent(a, b) {
-    this.evt = a;
-    this.state = b
+  this.evt = a;
+  this.state = b
 }
 mxMouseEvent.prototype.consumed = !1;
 mxMouseEvent.prototype.evt = null;
@@ -1710,342 +1731,343 @@ mxMouseEvent.prototype.graphX = null;
 mxMouseEvent.prototype.graphY = null;
 mxMouseEvent.prototype.state = null;
 mxMouseEvent.prototype.getEvent = function() {
-    return this.evt
+  return this.evt
 };
 mxMouseEvent.prototype.getSource = function() {
-    return mxEvent.getSource(this.evt)
+  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
+  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())
+  return mxEvent.getClientX(this.getEvent())
 };
 mxMouseEvent.prototype.getY = function() {
-    return mxEvent.getClientY(this.getEvent())
+  return mxEvent.getClientY(this.getEvent())
 };
 mxMouseEvent.prototype.getGraphX = function() {
-    return this.graphX
+  return this.graphX
 };
 mxMouseEvent.prototype.getGraphY = function() {
-    return this.graphY
+  return this.graphY
 };
 mxMouseEvent.prototype.getState = function() {
-    return this.state
+  return this.state
 };
 mxMouseEvent.prototype.getCell = function() {
-    var a = this.getState();
-    return null != a ? a.cell : null
+  var a = this.getState();
+  return null != a ? a.cell : null
 };
 mxMouseEvent.prototype.isPopupTrigger = function() {
-    return mxEvent.isPopupTrigger(this.getEvent())
+  return mxEvent.isPopupTrigger(this.getEvent())
 };
 mxMouseEvent.prototype.isConsumed = function() {
-    return this.consumed
+  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
+  (null != a ? a : 1) && this.evt.preventDefault && this.evt.preventDefault();
+  this.evt.returnValue = !1;
+  this.consumed = !0
 };
 
 function mxEventSource(a) {
-    this.setEventSource(a)
+  this.setEventSource(a)
 }
 mxEventSource.prototype.eventListeners = null;
 mxEventSource.prototype.eventsEnabled = !0;
 mxEventSource.prototype.eventSource = null;
 mxEventSource.prototype.isEventsEnabled = function() {
-    return this.eventsEnabled
+  return this.eventsEnabled
 };
 mxEventSource.prototype.setEventsEnabled = function(a) {
-    this.eventsEnabled = a
+  this.eventsEnabled = a
 };
 mxEventSource.prototype.getEventSource = function() {
-    return this.eventSource
+  return this.eventSource
 };
 mxEventSource.prototype.setEventSource = function(a) {
-    this.eventSource = a
+  this.eventSource = a
 };
 mxEventSource.prototype.addListener = function(a, b) {
-    null == this.eventListeners && (this.eventListeners = []);
-    this.eventListeners.push(a);
-    this.eventListeners.push(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
+  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)
-        }
+  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"
+  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
+  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;
@@ -2056,118 +2078,119 @@ mxXmlRequest.prototype.username = null;
 mxXmlRequest.prototype.password = null;
 mxXmlRequest.prototype.request = null;
 mxXmlRequest.prototype.isBinary = function() {
-    return this.binary
+  return this.binary
 };
 mxXmlRequest.prototype.setBinary = function(a) {
-    this.binary = a
+  this.binary = a
 };
 mxXmlRequest.prototype.getText = function() {
-    return this.request.responseText
+  return this.request.responseText
 };
 mxXmlRequest.prototype.isReady = function() {
-    return 4 == this.request.readyState
+  return 4 == this.request.readyState
 };
 mxXmlRequest.prototype.getDocumentElement = function() {
-    var a = this.getXml();
-    return null != a ? a.documentElement : null
+  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
+  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
+  return this.request.responseText
 };
 mxXmlRequest.prototype.getStatus = function() {
-    return this.request.status
+  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")
-    }
+  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))
+  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")
+  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)
+  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)
-        }
-    }
+  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))
+  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;
@@ -2183,423 +2206,426 @@ 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()
+  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 || "")
+  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")
+  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))
-    }
+  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
+  return this.div
 };
 mxWindow.prototype.fit = function() {
-    mxUtils.fit(this.div)
+  mxUtils.fit(this.div)
 };
 mxWindow.prototype.isResizable = function() {
-    return null != this.resize ? "none" != this.resize.style.display : !1
+  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));
+  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)
-        }), null, null), this.div.appendChild(this.resize)) :
-        this.resize.style.display = "inline" : null != this.resize && (this.resize.style.display = "none")
+          }),
+        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")
+  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"
+  this.minimize.style.display = a ? "" : "none"
 };
 mxWindow.prototype.getMinimumSize = function() {
-    return new mxRectangle(0, 0, 0, this.title.offsetHeight)
+  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)
+  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"
+  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)
+  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));
+  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"
+  this.div.style.left = a + "px";
+  this.div.style.top = b + "px"
 };
 mxWindow.prototype.getX = function() {
-    return parseInt(this.div.style.left)
+  return parseInt(this.div.style.left)
 };
 mxWindow.prototype.getY = function() {
-    return parseInt(this.div.style.top)
+  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)
-    }))
+  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)
+  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"
+  this.closeImg.style.display = a ? "" : "none"
 };
 mxWindow.prototype.isVisible = function() {
-    return null != this.div ? "hidden" != this.div.style.visibility : !1
+  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())
+  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))
+  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))
+  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
+  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)
+  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
+  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()
-    });
+  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("cancel") || "Cancel");
-    d.appendChild(e);
-    mxEvent.addListener(e, "click", function() {
-        b()
-    });
-    c.appendChild(d);
-    this.body.appendChild(c)
+  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)
+  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
+  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)
+  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)
+  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)
+  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);
+  var c = document.createElement("tr"),
     d = document.createElement("td");
-    d.appendChild(b);
-    c.appendChild(d);
-    this.body.appendChild(c);
-    return b
+  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
+  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()
-    }
+  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")
+  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
+  return document.body.clientWidth
 };
 mxDivResizer.prototype.getDocumentHeight = function() {
-    return document.body.clientHeight
+  return document.body.clientHeight
 };
 
 function mxDragSource(a, b) {
-    this.element = a;
-    this.dropHandler = b;
-    mxEvent.addGestureListeners(a, mxUtils.bind(this, this.mouseDown))
+  this.element = a;
+  this.dropHandler = b;
+  mxEvent.addGestureListeners(a, mxUtils.bind(this, this.mouseDown))
 }
 mxDragSource.prototype.element = null;
 mxDragSource.prototype.dropHandler = null;
@@ -2619,141 +2645,142 @@ mxDragSource.prototype.highlightDropTargets = !0;
 mxDragSource.prototype.dragElementZIndex = 100;
 mxDragSource.prototype.dragElementOpacity = 70;
 mxDragSource.prototype.isEnabled = function() {
-    return this.enabled
+  return this.enabled
 };
 mxDragSource.prototype.setEnabled = function(a) {
-    this.enabled = a
+  this.enabled = a
 };
 mxDragSource.prototype.isGuidesEnabled = function() {
-    return this.guidesEnabled
+  return this.guidesEnabled
 };
 mxDragSource.prototype.setGuidesEnabled = function(a) {
-    this.guidesEnabled = a
+  this.guidesEnabled = a
 };
 mxDragSource.prototype.isGridEnabled = function() {
-    return this.gridEnabled
+  return this.gridEnabled
 };
 mxDragSource.prototype.setGridEnabled = function(a) {
-    this.gridEnabled = a
+  this.gridEnabled = a
 };
 mxDragSource.prototype.getGraphForEvent = function(a) {
-    return null
+  return null
 };
 mxDragSource.prototype.getDropTarget = function(a, b, c) {
-    return a.getCellAt(b, c)
+  return a.getCellAt(b, c)
 };
 mxDragSource.prototype.createDragElement = function(a) {
-    return this.element.cloneNode(!0)
+  return this.element.cloneNode(!0)
 };
 mxDragSource.prototype.createPreviewElement = function(a) {
-    return null
+  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))
+  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)
+  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)
+  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
+  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)
+  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)
+  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))
+  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)
+  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)
+  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()
+  this.dropHandler(a, b, c, d, e);
+  a.container.focus()
 };
 
 function mxToolbar(a) {
-    this.container = a
+  this.container = a
 }
 mxToolbar.prototype = new mxEventSource;
 mxToolbar.prototype.constructor = mxToolbar;
@@ -2762,149 +2789,150 @@ 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
+  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
+  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
+  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
+  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
+  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
+  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))
-    }
+  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)
+  (a || !this.noReset) && this.selectedMode != this.defaultMode && this.selectMode(this.defaultMode, this.defaultFunction)
 };
 mxToolbar.prototype.addSeparator = function(a) {
-    return this.addItem(null, a, null)
+  return this.addItem(null, a, null)
 };
 mxToolbar.prototype.addBreak = function() {
-    mxUtils.br(this.container)
+  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)
+  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()
+  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")
-    }))
+  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;
@@ -2923,120 +2951,123 @@ 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()
-    }))
+  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)))
+  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())
+  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))
+  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
+  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)))
+  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")
-            })
-    }
+  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")
+  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
+  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))
+  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)
+  (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
+  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))
-    }
+  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
+  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
+  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
+  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))
+  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
+  this.source = a;
+  this.changes = [];
+  this.significant = null != b ? b : !0
 }
 mxUndoableEdit.prototype.source = null;
 mxUndoableEdit.prototype.changes = null;
@@ -3044,48 +3075,48 @@ mxUndoableEdit.prototype.significant = null;
 mxUndoableEdit.prototype.undone = !1;
 mxUndoableEdit.prototype.redone = !1;
 mxUndoableEdit.prototype.isEmpty = function() {
-    return 0 == this.changes.length
+  return 0 == this.changes.length
 };
 mxUndoableEdit.prototype.isSignificant = function() {
-    return this.significant
+  return this.significant
 };
 mxUndoableEdit.prototype.add = function(a) {
-    this.changes.push(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()
+  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()
+  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()
+  this.size = null != a ? a : 100;
+  this.clear()
 }
 mxUndoManager.prototype = new mxEventSource;
 mxUndoManager.prototype.constructor = mxUndoManager;
@@ -3093,168 +3124,169 @@ mxUndoManager.prototype.size = null;
 mxUndoManager.prototype.history = null;
 mxUndoManager.prototype.indexOfNextAdd = 0;
 mxUndoManager.prototype.isEmpty = function() {
-    return 0 == this.history.length
+  return 0 == this.history.length
 };
 mxUndoManager.prototype.clear = function() {
-    this.history = [];
-    this.indexOfNextAdd = 0;
-    this.fireEvent(new mxEventObject(mxEvent.CLEAR))
+  this.history = [];
+  this.indexOfNextAdd = 0;
+  this.fireEvent(new mxEventObject(mxEvent.CLEAR))
 };
 mxUndoManager.prototype.canUndo = function() {
-    return 0 < this.indexOfNextAdd
+  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
-        }
+  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
+  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
-        }
+  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))
+  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()
+  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
+  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.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.destroy = function() {
-        a.removeMouseListener(this.mouseListener)
-    }
+  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;
@@ -3262,8 +3294,8 @@ mxPanningManager.prototype.handleMouseOut = !0;
 mxPanningManager.prototype.border = 0;
 
 function mxPopupMenu(a) {
-    this.factoryMethod = a;
-    null != a && this.init()
+  this.factoryMethod = a;
+  null != a && this.init()
 }
 mxPopupMenu.prototype = new mxEventSource;
 mxPopupMenu.prototype.constructor = mxPopupMenu;
@@ -3277,139 +3309,141 @@ 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)
+  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
+  return this.enabled
 };
 mxPopupMenu.prototype.setEnabled = function(a) {
-    this.enabled = a
+  this.enabled = a
 };
 mxPopupMenu.prototype.isPopupTrigger = function(a) {
-    return a.isPopupTrigger() || this.useLeftButtonForPopup && mxEvent.isLeftMouseButton(a.getEvent())
+  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
+  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)
+  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)
-    }
+  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)
-    }
+  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)))
-    }
+  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
+  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)
+  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)
+  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)
+  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)
+  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)
+  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;
@@ -3422,51 +3456,51 @@ mxAutoSaveManager.prototype.lastSnapshot = 0;
 mxAutoSaveManager.prototype.enabled = !0;
 mxAutoSaveManager.prototype.changeHandler = null;
 mxAutoSaveManager.prototype.isEnabled = function() {
-    return this.enabled
+  return this.enabled
 };
 mxAutoSaveManager.prototype.setEnabled = function(a) {
-    this.enabled = 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)
+  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++
+  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
+  this.lastSnapshot = (new Date).getTime();
+  this.ignoredChanges = 0
 };
 mxAutoSaveManager.prototype.destroy = function() {
-    this.setGraph(null)
+  this.setGraph(null)
 };
 
 function mxAnimation(a) {
-    this.delay = null != a ? a : 20
+  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))
+  null == this.thread && (this.thread = window.setInterval(mxUtils.bind(this, this.updateAnimation), this.delay))
 };
 mxAnimation.prototype.updateAnimation = function() {
-    this.fireEvent(new mxEventObject(mxEvent.EXECUTE))
+  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)))
+  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
+  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;
@@ -3476,93 +3510,93 @@ 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()
+  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()
+  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)
-    }
+  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)
+  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)
+  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
+  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
+  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
-    }
+  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
+  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))
+  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)
-        }
+  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())
+  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)
-    })
+  null != a.overlays && a.overlays.visit(function(a, d) {
+    d instanceof mxShape && d.paint(b)
+  })
 };
 
 function mxAbstractCanvas2D() {
-    this.converter = this.createUrlConverter();
-    this.reset()
+  this.converter = this.createUrlConverter();
+  this.reset()
 }
 mxAbstractCanvas2D.prototype.state = null;
 mxAbstractCanvas2D.prototype.states = null;
@@ -3577,563 +3611,566 @@ mxAbstractCanvas2D.prototype.curveOp = "C";
 mxAbstractCanvas2D.prototype.closeOp = "Z";
 mxAbstractCanvas2D.prototype.pointerEvents = !1;
 mxAbstractCanvas2D.prototype.createUrlConverter = function() {
-    return new mxUrlConverter
+  return new mxUrlConverter
 };
 mxAbstractCanvas2D.prototype.reset = function() {
-    this.state = this.createState();
-    this.states = []
+  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
-    }
+  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))
+  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))
+  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))
+  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)
+  this.states.push(this.state);
+  this.state = mxUtils.clone(this.state)
 };
 mxAbstractCanvas2D.prototype.restore = function() {
-    this.state = this.states.pop()
+  this.state = this.states.pop()
 };
 mxAbstractCanvas2D.prototype.scale = function(a) {
-    this.state.scale *= a;
-    this.state.strokeWidth *= a
+  this.state.scale *= a;
+  this.state.strokeWidth *= a
 };
 mxAbstractCanvas2D.prototype.translate = function(a, b) {
-    this.state.dx += a;
-    this.state.dy += b
+  this.state.dx += a;
+  this.state.dy += b
 };
 mxAbstractCanvas2D.prototype.setAlpha = function(a) {
-    this.state.alpha = a
+  this.state.alpha = a
 };
 mxAbstractCanvas2D.prototype.setFillColor = function(a) {
-    a == mxConstants.NONE && (a = null);
-    this.state.fillColor = a;
-    this.state.gradientColor = null
+  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
+  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
+  a == mxConstants.NONE && (a = null);
+  this.state.strokeColor = a
 };
 mxAbstractCanvas2D.prototype.setStrokeWidth = function(a) {
-    this.state.strokeWidth = a
+  this.state.strokeWidth = a
 };
 mxAbstractCanvas2D.prototype.setDashed = function(a) {
-    this.state.dashed = a
+  this.state.dashed = a
 };
 mxAbstractCanvas2D.prototype.setDashPattern = function(a) {
-    this.state.dashPattern = a
+  this.state.dashPattern = a
 };
 mxAbstractCanvas2D.prototype.setLineCap = function(a) {
-    this.state.lineCap = a
+  this.state.lineCap = a
 };
 mxAbstractCanvas2D.prototype.setLineJoin = function(a) {
-    this.state.lineJoin = a
+  this.state.lineJoin = a
 };
 mxAbstractCanvas2D.prototype.setMiterLimit = function(a) {
-    this.state.miterLimit = a
+  this.state.miterLimit = a
 };
 mxAbstractCanvas2D.prototype.setFontColor = function(a) {
-    a == mxConstants.NONE && (a = null);
-    this.state.fontColor = a
+  a == mxConstants.NONE && (a = null);
+  this.state.fontColor = a
 };
 mxAbstractCanvas2D.prototype.setFontBackgroundColor = function(a) {
-    a == mxConstants.NONE && (a = null);
-    this.state.fontBackgroundColor = a
+  a == mxConstants.NONE && (a = null);
+  this.state.fontBackgroundColor = a
 };
 mxAbstractCanvas2D.prototype.setFontBorderColor = function(a) {
-    a == mxConstants.NONE && (a = null);
-    this.state.fontBorderColor = a
+  a == mxConstants.NONE && (a = null);
+  this.state.fontBorderColor = a
 };
 mxAbstractCanvas2D.prototype.setFontSize = function(a) {
-    this.state.fontSize = a
+  this.state.fontSize = a
 };
 mxAbstractCanvas2D.prototype.setFontFamily = function(a) {
-    this.state.fontFamily = a
+  this.state.fontFamily = a
 };
 mxAbstractCanvas2D.prototype.setFontStyle = function(a) {
-    null == a && (a = 0);
-    this.state.fontStyle = a
+  null == a && (a = 0);
+  this.state.fontStyle = a
 };
 mxAbstractCanvas2D.prototype.setShadow = function(a) {
-    this.state.shadow = a
+  this.state.shadow = a
 };
 mxAbstractCanvas2D.prototype.setShadowColor = function(a) {
-    a == mxConstants.NONE && (a = null);
-    this.state.shadowColor = a
+  a == mxConstants.NONE && (a = null);
+  this.state.shadowColor = a
 };
 mxAbstractCanvas2D.prototype.setShadowAlpha = function(a) {
-    this.state.shadowAlpha = a
+  this.state.shadowAlpha = a
 };
 mxAbstractCanvas2D.prototype.setShadowOffset = function(a, b) {
-    this.state.shadowDx = a;
-    this.state.shadowDy = b
+  this.state.shadowDx = a;
+  this.state.shadowDy = b
 };
 mxAbstractCanvas2D.prototype.begin = function() {
-    this.lastY = this.lastX = 0;
-    this.path = []
+  this.lastY = this.lastX = 0;
+  this.path = []
 };
 mxAbstractCanvas2D.prototype.moveTo = function(a, b) {
-    this.addOp(this.moveOp, a, b)
+  this.addOp(this.moveOp, a, b)
 };
 mxAbstractCanvas2D.prototype.lineTo = function(a, b) {
-    this.addOp(this.lineOp, a, b)
+  this.addOp(this.lineOp, a, b)
 };
 mxAbstractCanvas2D.prototype.quadTo = function(a, b, c, d) {
-    this.addOp(this.quadOp, 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)
+  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])
+  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)
+  this.addOp(this.closeOp)
 };
 mxAbstractCanvas2D.prototype.end = function() {};
 
 function mxXmlCanvas2D(a) {
-    mxAbstractCanvas2D.call(this);
-    this.root = a;
-    this.writeDefaults()
+  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)
+  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))
+  return parseFloat(parseFloat(a).toFixed(2))
 };
 mxXmlCanvas2D.prototype.createElement = function(a) {
-    return this.root.ownerDocument.createElement(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"))
+  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"))
+  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)
+  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)
+  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)
+  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)
+  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)
+  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)
-    }
+  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)
+  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)
+  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)
+  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)
+  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)
+  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)
+  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)
+  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)
+  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)
+  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)
+  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)
+  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)
+  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.textEnabled) {
+    null == a && (a = 0);
     if (this.compressed) {
-        if (this.state.shadow == a) return;
-        mxAbstractCanvas2D.prototype.setShadow.apply(this, arguments)
+      if (this.state.fontStyle == a) return;
+      mxAbstractCanvas2D.prototype.setFontStyle.apply(this, arguments)
     }
-    var b = this.createElement("shadow");
-    b.setAttribute("enabled", a ? "1" : "0");
+    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)
+  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)
+  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)
+  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)
+  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)
+  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)
+  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)
+  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
+  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
+  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
+  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
+  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
+  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"))
+  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)
-    }
+  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"))
+  this.root.appendChild(this.createElement("stroke"))
 };
 mxXmlCanvas2D.prototype.fill = function() {
-    this.root.appendChild(this.createElement("fill"))
+  this.root.appendChild(this.createElement("fill"))
 };
 mxXmlCanvas2D.prototype.fillAndStroke = function() {
-    this.root.appendChild(this.createElement("fillstroke"))
+  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()))
+  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;
@@ -4144,363 +4181,384 @@ mxSvgCanvas2D.prototype.strokeTolerance = 0;
 mxSvgCanvas2D.prototype.refCount = 0;
 mxSvgCanvas2D.prototype.blockImagePointerEvents = !1;
 mxSvgCanvas2D.prototype.reset = function() {
-    mxAbstractCanvas2D.prototype.reset.apply(this, arguments);
-    this.gradients = []
+  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
+  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
+  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
+  "#" == 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")
+  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
+  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)
-    }
+  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()))
+  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))
+  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)
+  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(" ")
+  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
+  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
+  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
+  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")
+  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
+  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))
+  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
+  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))
+  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
+  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)
-    }
+  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
+  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)
+  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")
+  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))
-    }
+  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)
+  this.addNode(!1, !0)
 };
 mxSvgCanvas2D.prototype.fill = function() {
-    this.addNode(!0, !1)
+  this.addNode(!0, !1)
 };
 mxSvgCanvas2D.prototype.fillAndStroke = function() {
-    this.addNode(!0, !0)
+  this.addNode(!0, !0)
 };
 var mxVmlCanvas2D = function(a) {
-    mxAbstractCanvas2D.call(this);
-    this.root = a
+  mxAbstractCanvas2D.call(this);
+  this.root = a
 };
 mxUtils.extend(mxVmlCanvas2D, mxAbstractCanvas2D);
 mxVmlCanvas2D.prototype.node = null;
@@ -4512,275 +4570,286 @@ 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)
-    }
+  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
+  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
+  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
+  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
+  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
+  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
+  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
+  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
+  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"
+  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
+  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
+  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)
+  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) + "%")
+  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)
+  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)
+  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
+  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)
-    }
+  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)
+  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)
+  this.addNode(!1, !0)
 };
 mxVmlCanvas2D.prototype.fill = function() {
-    this.addNode(!0, !1)
+  this.addNode(!0, !1)
 };
 mxVmlCanvas2D.prototype.fillAndStroke = function() {
-    this.addNode(!0, !0)
+  this.addNode(!0, !0)
 };
 
 function mxGuide(a, b) {
-    this.graph = a;
-    this.setStates(b)
+  this.graph = a;
+  this.setStates(b)
 }
 mxGuide.prototype.graph = null;
 mxGuide.prototype.states = null;
@@ -4789,88 +4858,93 @@ mxGuide.prototype.vertical = !0;
 mxGuide.prototype.guideX = null;
 mxGuide.prototype.guideY = null;
 mxGuide.prototype.setStates = function(a) {
-    this.states = a
+  this.states = a
 };
 mxGuide.prototype.isEnabledForEvent = function(a) {
-    return !0
+  return !0
 };
 mxGuide.prototype.getGuideTolerance = function() {
-    return this.graph.gridSize * this.graph.view.scale / 2
+  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
+  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
+  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")
+  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)
+  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()
+  this.desc = a;
+  this.parseDescription();
+  this.parseConstraints()
 }
 mxStencil.defaultLocalized = !1;
 mxStencil.prototype.desc = null;
@@ -4882,131 +4956,136 @@ 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"
+  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]))
-    }
+  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)
+  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
+  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
+  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)
+  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
-    }
+  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)
+  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)
+  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
+  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;
@@ -5022,660 +5101,668 @@ 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))
+  null == this.node && (this.node = this.create(a), null != a && a.appendChild(this.node))
 };
 mxShape.prototype.isParseVml = function() {
-    return !0
+  return !0
 };
 mxShape.prototype.isHtmlAllowed = function() {
-    return !1
+  return !1
 };
 mxShape.prototype.getSvgScreenOffset = function() {
-    return 1 == mxUtils.mod(Math.max(1, Math.round(this.strokewidth * this.scale)), 2) ? 0.5 : 0
+  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)
+  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")
+  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
+  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
+  var a = document.createElement("div");
+  a.style.position = "absolute";
+  return a
 };
 mxShape.prototype.reconfigure = function() {
-    this.redraw()
+  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)
+  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))
-    }
+  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
+  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
+  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)
+  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
+  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"
+  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
+  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)
+  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)
+  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)
+  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)
+  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)
+  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)
+  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)
+  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()
+  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)
-    }
+  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)
+  null == a && (a = "");
+  this.cursor = a;
+  null != this.node && (this.node.style.cursor = a)
 };
 mxShape.prototype.getCursor = function() {
-    return this.cursor
+  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
+  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
+  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))
+  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)
+  return null == this.stencil && ("north" == this.direction || "south" == this.direction)
 };
 mxShape.prototype.getRotation = function() {
-    return null != this.rotation ? this.rotation : 0
+  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
+  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
+  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)
+  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')"
+  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)
-        }
+  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
+  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]
-        }
+    stencils: [],
+    addStencil: function(a, b) {
+      mxStencilRegistry.stencils[a] = b
     },
-    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()
-        }
+    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 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
+  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()
+  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()
+  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
+  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()
+  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
+  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
+  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()
+  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))
+  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)
+  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"
+  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)
+  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
+  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
+  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()
+  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
+  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()
+  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()
+  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
+  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()
+  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
+  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
+  return 0
 };
 mxPolyline.prototype.paintEdgeShape = function(a, b) {
-    this.paintLine(a, b, this.isRounded)
+  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()
+  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
+  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()
+  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
+  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;
@@ -5687,309 +5774,320 @@ mxText.prototype.verticalTextRotation = -90;
 mxText.prototype.ignoreClippedStringSize = !0;
 mxText.prototype.ignoreStringSize = !1;
 mxText.prototype.isParseVml = function() {
-    return !1
+  return !1
 };
 mxText.prototype.isHtmlAllowed = function() {
-    return 8 != document.documentMode
+  return 8 != document.documentMode
 };
 mxText.prototype.getSvgScreenOffset = function() {
-    return 0
+  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)
+  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))
+  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
+  return 0
 };
 mxText.prototype.getTextRotation = function() {
-    return null != this.state && null != this.state.shape ? this.state.shape.getTextRotation() : 0
+  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)
+  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)
+  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"
+  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())
+  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()
+  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"
+  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"
+  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
-    }
+  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"
+  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"
+  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)
+  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)
+  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)
+  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()
+  a.moveTo(0, 0);
+  a.lineTo(d, 0.5 * e);
+  a.lineTo(0, e);
+  a.close()
 };
 
 function mxHexagon() {
-    mxActor.call(this)
+  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()
+  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
+  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()
+  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
+  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
+  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))
+  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
+  return !this.preserveImageAspect
 };
 mxImageShape.prototype.createHtml = function() {
-    var a = document.createElement("div");
-    a.style.position = "absolute";
-    return a
+  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)
+  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)
+  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)
+  mxRectangleShape.call(this, a, b, c, d)
 }
 mxUtils.extend(mxLabel, mxRectangleShape);
 mxLabel.prototype.imageSize = mxConstants.DEFAULT_IMAGESIZE;
@@ -5997,220 +6095,225 @@ 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))
+  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)
+  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
+  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)
+  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))
+  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)
+  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))
+  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)
+  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)
-    }
+  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
+  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()
+  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())
+  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)
+  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()
+  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()
+  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])
+  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))
+  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
+  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)
+  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
+  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()
+  return this.getRotation()
 };
 mxSwimlane.prototype.isPaintBoundsInverted = function() {
-    return mxShape.prototype.isPaintBoundsInverted.apply(this, arguments) || 1 != mxUtils.getValue(this.style, mxConstants.STYLE_HORIZONTAL, 1)
+  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
+  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))
+  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())
+  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())
+  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))
+  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)
+  return new mxRectangle(a + c - this.imageSize, b, this.imageSize, this.imageSize)
 };
 
 function mxGraphLayout(a) {
-    this.graph = a
+  this.graph = a
 }
 mxGraphLayout.prototype.graph = null;
 mxGraphLayout.prototype.useBoundingBox = !0;
@@ -6218,128 +6321,129 @@ mxGraphLayout.prototype.parent = null;
 mxGraphLayout.prototype.moveCell = function(a, b, c) {};
 mxGraphLayout.prototype.execute = function(a) {};
 mxGraphLayout.prototype.getGraph = function() {
-    return this.graph
+  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
+  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)
-                }
-    }
+  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)
+  return this.graph.isCellMovable(a)
 };
 mxGraphLayout.prototype.isVertexIgnored = function(a) {
-    return !this.graph.getModel().isVertex(a) || !this.graph.isCellVisible(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)
+  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])
+  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])
+  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
+  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)
-    }
+  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
+  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)
+  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()
+  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
+  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;
@@ -6354,84 +6458,87 @@ mxStackLayout.prototype.resizeParent = !1;
 mxStackLayout.prototype.resizeLast = !1;
 mxStackLayout.prototype.wrap = null;
 mxStackLayout.prototype.isHorizontal = function() {
-    return this.horizontal
+  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)
-    }
+  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
+  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()
+  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
+  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;
@@ -6440,69 +6547,71 @@ mxPartitionLayout.prototype.spacing = null;
 mxPartitionLayout.prototype.border = null;
 mxPartitionLayout.prototype.resizeVertices = !0;
 mxPartitionLayout.prototype.isHorizontal = function() {
-    return this.horizontal
+  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)
-    }
+  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()
-                }
-            }
+  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
+  mxGraphLayout.call(this, a);
+  this.horizontal = null != b ? b : !0;
+  this.invert = null != c ? c : !1
 }
 mxCompactTreeLayout.prototype = new mxGraphLayout;
 mxCompactTreeLayout.prototype.constructor = mxCompactTreeLayout;
@@ -6521,235 +6630,240 @@ 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
+  return mxGraphLayout.prototype.isVertexIgnored.apply(this, arguments) || 0 == this.graph.getConnections(a).length
 };
 mxCompactTreeLayout.prototype.isHorizontal = function() {
-    return this.horizontal
+  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
-                    }
+  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)
         }
-    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()
+        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
+  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
+  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)
-    }
+  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
+  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
+  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))
+  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)
+  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
+  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
+  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
+  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
+  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
+  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
+  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
+  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)
+  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
+  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)
-    }
+  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
+  this.cell = a;
+  this.weightedValue = b
 }
 WeightedCellSorter.prototype.weightedValue = 0;
 WeightedCellSorter.prototype.nudge = !1;
@@ -6757,11 +6871,11 @@ 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
+  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)
+  mxGraphLayout.call(this, a)
 }
 mxFastOrganicLayout.prototype = new mxGraphLayout;
 mxFastOrganicLayout.prototype.constructor = mxFastOrganicLayout;
@@ -6779,133 +6893,135 @@ 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
+  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()
-    }
+  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
-        }
+  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
-            }
-        }
+  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)
-            }
-        }
+  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)
+  this.temperature = this.initialTemp * (1 - this.iteration / this.maxIterations)
 };
 
 function mxCircleLayout(a, b) {
-    mxGraphLayout.call(this, a);
-    this.radius = null != b ? b : 100
+  mxGraphLayout.call(this, a);
+  this.radius = null != b ? b : 100
 }
 mxCircleLayout.prototype = new mxGraphLayout;
 mxCircleLayout.prototype.constructor = mxCircleLayout;
@@ -6916,156 +7032,157 @@ 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()
-    }
+  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)
+  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))
+  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)
+  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()
+  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))
-        }
+  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
+  }
+  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
+  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
+  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)])
+  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
+  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)
+  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()
-    }
+  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)
+  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)
+  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)
-                }
+  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()
     }
+  } 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))
-    }
+  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 = []
+  this.x = [];
+  this.y = [];
+  this.temp = []
 }
 mxGraphAbstractHierarchyCell.prototype.maxRank = -1;
 mxGraphAbstractHierarchyCell.prototype.minRank = -1;
@@ -7077,36 +7194,36 @@ mxGraphAbstractHierarchyCell.prototype.nextLayerConnectedCells = null;
 mxGraphAbstractHierarchyCell.prototype.previousLayerConnectedCells = null;
 mxGraphAbstractHierarchyCell.prototype.temp = null;
 mxGraphAbstractHierarchyCell.prototype.getNextLayerConnectedCells = function(a) {
-    return null
+  return null
 };
 mxGraphAbstractHierarchyCell.prototype.getPreviousLayerConnectedCells = function(a) {
-    return null
+  return null
 };
 mxGraphAbstractHierarchyCell.prototype.isEdge = function() {
-    return !1
+  return !1
 };
 mxGraphAbstractHierarchyCell.prototype.isVertex = function() {
-    return !1
+  return !1
 };
 mxGraphAbstractHierarchyCell.prototype.getGeneralPurposeVariable = function(a) {
-    return null
+  return null
 };
 mxGraphAbstractHierarchyCell.prototype.setGeneralPurposeVariable = function(a, b) {
-    return null
+  return null
 };
 mxGraphAbstractHierarchyCell.prototype.setX = function(a, b) {
-    this.isVertex() ? this.x[0] = b : this.isEdge() && (this.x[a - this.minRank - 1] = 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
+  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)
+  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
+  mxGraphAbstractHierarchyCell.apply(this, arguments);
+  this.cell = a
 }
 mxGraphHierarchyNode.prototype = new mxGraphAbstractHierarchyCell;
 mxGraphHierarchyNode.prototype.constructor = mxGraphHierarchyNode;
@@ -7115,54 +7232,54 @@ mxGraphHierarchyNode.prototype.connectsAsTarget = [];
 mxGraphHierarchyNode.prototype.connectsAsSource = [];
 mxGraphHierarchyNode.prototype.hashCode = !1;
 mxGraphHierarchyNode.prototype.getRankValue = function(a) {
-    return this.maxRank
+  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)
-        }
+  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]
+  }
+  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)
-        }
+  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]
+  }
+  return this.previousLayerConnectedCells[0]
 };
 mxGraphHierarchyNode.prototype.isVertex = function() {
-    return !0
+  return !0
 };
 mxGraphHierarchyNode.prototype.getGeneralPurposeVariable = function(a) {
-    return this.temp[0]
+  return this.temp[0]
 };
 mxGraphHierarchyNode.prototype.setGeneralPurposeVariable = function(a, b) {
-    this.temp[0] = 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
+  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
+  return this.cell
 };
 
 function mxGraphHierarchyEdge(a) {
-    mxGraphAbstractHierarchyCell.apply(this, arguments);
-    this.edges = a
+  mxGraphAbstractHierarchyCell.apply(this, arguments);
+  this.edges = a
 }
 mxGraphHierarchyEdge.prototype = new mxGraphAbstractHierarchyCell;
 mxGraphHierarchyEdge.prototype.constructor = mxGraphHierarchyEdge;
@@ -7171,66 +7288,68 @@ 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
+  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]
+  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]
+  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
+  return !0
 };
 mxGraphHierarchyEdge.prototype.getGeneralPurposeVariable = function(a) {
-    return this.temp[a - this.minRank - 1]
+  return this.temp[a - this.minRank - 1]
 };
 mxGraphHierarchyEdge.prototype.setGeneralPurposeVariable = function(a, b) {
-    this.temp[a - this.minRank - 1] = b
+  this.temp[a - this.minRank - 1] = b
 };
 mxGraphHierarchyEdge.prototype.getCoreCell = function() {
-    return null != this.edges && 0 < this.edges.length ? this.edges[0] : null
+  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
-    }
+  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;
@@ -7242,136 +7361,137 @@ 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)
-                }
-            }
+  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
+      }
     }
+    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
+  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)
+  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++
+  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)
-    }
+  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)
-    }
+  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
+  this.layout = a
 }
 mxMedianHybridCrossingReduction.prototype = new mxHierarchicalLayoutStage;
 mxMedianHybridCrossingReduction.prototype.constructor = mxMedianHybridCrossingReduction;
@@ -7382,189 +7502,189 @@ 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)
-            }
+  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
         }
-        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
+    } 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
+  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
+  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)
-            }
-        }
+  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)
+  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))
+  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)
+  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
+  return null != a && null != b ? b.medianValue > a.medianValue ? -1 : b.medianValue < a.medianValue ? 1 : 0 : 0
 };
 
 function mxMinimumCycleRemover(a) {
-    this.layout = 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);
+  var b = this.layout.getModel(),
+    c = {},
+    d = mxUtils.clone(b.vertexMapper, null, !0),
     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)
-    }
+  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
+  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
+  ORTHOGONAL: 1,
+  POLYLINE: 2,
+  STRAIGHT: 3,
+  CURVE: 4
 };
 mxCoordinateAssignment.prototype = new mxHierarchicalLayoutStage;
 mxCoordinateAssignment.prototype.constructor = mxCoordinateAssignment;
@@ -7594,388 +7714,399 @@ 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")
+  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.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.setCellLocations(this.layout.getGraph(), a)
+      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++
-    }
+  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)
+  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
-    }
+  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
+  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
+  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)
+  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")
+  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)
-    }
+  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])
-            }
+  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
+  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])
+  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)
+  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)))
+  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)
             }
-            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
+            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)
             }
-            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++
+          }
+          f = e.getNextLayerConnectedCells(b);
+          g = b + 1
         }
-        a.temp[0] = 101207
     }
 };
+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)
+  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
+  this.cell = a;
+  this.weightedValue = b
 }
 WeightedCellSorter.prototype.weightedValue = 0;
 WeightedCellSorter.prototype.nudge = !1;
@@ -7983,13 +8114,13 @@ 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
+  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
+  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;
@@ -8009,167 +8140,168 @@ mxHierarchicalLayout.prototype.traverseAncestors = !0;
 mxHierarchicalLayout.prototype.model = null;
 mxHierarchicalLayout.prototype.edgesCache = null;
 mxHierarchicalLayout.prototype.getModel = function() {
-    return this.model
+  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()
-        }
+  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
+  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
+  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
+  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
-                }
+  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)
     }
+  } 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)
-        }
+  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
+  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
+  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
+  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)
+  (new mxMinimumCycleRemover(this)).execute(a)
 };
 mxHierarchicalLayout.prototype.layeringStage = function() {
-    this.model.initialRank();
-    this.model.fixRanks()
+  this.model.initialRank();
+  this.model.fixRanks()
 };
 mxHierarchicalLayout.prototype.crossingStage = function(a) {
-    (new mxMedianHybridCrossingReduction(this)).execute(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
+  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()
+  this.currentEdit = this.createUndoableEdit();
+  null != a ? this.setRoot(a) : this.clear()
 }
 mxGraphModel.prototype = new mxEventSource;
 mxGraphModel.prototype.constructor = mxGraphModel;
@@ -8184,600 +8316,601 @@ mxGraphModel.prototype.currentEdit = null;
 mxGraphModel.prototype.updateLevel = 0;
 mxGraphModel.prototype.endingUpdate = !1;
 mxGraphModel.prototype.clear = function() {
-    this.setRoot(this.createRoot())
+  this.setRoot(this.createRoot())
 };
 mxGraphModel.prototype.isCreateIds = function() {
-    return this.createIds
+  return this.createIds
 };
 mxGraphModel.prototype.setCreateIds = function(a) {
-    this.createIds = a
+  this.createIds = a
 };
 mxGraphModel.prototype.createRoot = function() {
-    var a = new mxCell;
-    a.insert(new mxCell);
-    return a
+  var a = new mxCell;
+  a.insert(new mxCell);
+  return a
 };
 mxGraphModel.prototype.getCell = function(a) {
-    return null != this.cells ? this.cells[a] : null
+  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
+  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)
+  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
+  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
+  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
+  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
+  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
+  return null != a && this.root == a
 };
 mxGraphModel.prototype.isLayer = function(a) {
-    return this.isRoot(this.getParent(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
+  for (; null != b && b != a;) b = this.getParent(b);
+  return b == a
 };
 mxGraphModel.prototype.contains = function(a) {
-    return this.isAncestor(this.root, a)
+  return this.isAncestor(this.root, a)
 };
 mxGraphModel.prototype.getParent = function(a) {
-    return null != a ? a.getParent() : null
+  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
+  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))
-    }
+  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
+  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)
+  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))
+  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
+  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
+  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
+  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()]
-    }
+  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
+  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
+  return null != a ? a.getChildCount() : 0
 };
 mxGraphModel.prototype.getChildAt = function(a, b) {
-    return null != a ? a.getChildAt(b) : null
+  return null != a ? a.getChildAt(b) : null
 };
 mxGraphModel.prototype.getChildren = function(a) {
-    return null != a ? a.children : null
+  return null != a ? a.children : null
 };
 mxGraphModel.prototype.getChildVertices = function(a) {
-    return this.getChildCells(a, !0, !1)
+  return this.getChildCells(a, !0, !1)
 };
 mxGraphModel.prototype.getChildEdges = function(a) {
-    return this.getChildCells(a, !1, !0)
+  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
+  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
+  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
+  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()
-    }
+  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
+  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
+  return null != a ? a.getEdgeCount() : 0
 };
 mxGraphModel.prototype.getEdgeAt = function(a, b) {
-    return null != a ? a.getEdgeAt(b) : null
+  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
+  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)
+  return this.getEdges(a, !0, !0, !1)
 };
 mxGraphModel.prototype.getIncomingEdges = function(a) {
-    return this.getEdges(a, !0, !1, !1)
+  return this.getEdges(a, !0, !1, !1)
 };
 mxGraphModel.prototype.getOutgoingEdges = function(a) {
-    return this.getEdges(a, !1, !0, !1)
+  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
+  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
+  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
+  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)
+  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)
     }
-    return b
+    e && b.push(d)
+  }
+  return b
 };
 mxGraphModel.prototype.isVertex = function(a) {
-    return null != a ? a.isVertex() : !1
+  return null != a ? a.isVertex() : !1
 };
 mxGraphModel.prototype.isEdge = function(a) {
-    return null != a ? a.isEdge() : !1
+  return null != a ? a.isEdge() : !1
 };
 mxGraphModel.prototype.isConnectable = function(a) {
-    return null != a ? a.isConnectable() : !1
+  return null != a ? a.isConnectable() : !1
 };
 mxGraphModel.prototype.getValue = function(a) {
-    return null != a ? a.getValue() : null
+  return null != a ? a.getValue() : null
 };
 mxGraphModel.prototype.setValue = function(a, b) {
-    this.execute(new mxValueChange(this, a, b));
-    return b
+  this.execute(new mxValueChange(this, a, b));
+  return b
 };
 mxGraphModel.prototype.valueForCellChanged = function(a, b) {
-    return a.valueChanged(b)
+  return a.valueChanged(b)
 };
 mxGraphModel.prototype.getGeometry = function(a, b) {
-    return null != a ? a.getGeometry() : null
+  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
+  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
+  var c = this.getGeometry(a);
+  a.setGeometry(b);
+  return c
 };
 mxGraphModel.prototype.getStyle = function(a) {
-    return null != a ? a.getStyle() : null
+  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
+  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
+  var c = this.getStyle(a);
+  a.setStyle(b);
+  return c
 };
 mxGraphModel.prototype.isCollapsed = function(a) {
-    return null != a ? a.isCollapsed() : !1
+  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
+  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
+  var c = this.isCollapsed(a);
+  a.setCollapsed(b);
+  return c
 };
 mxGraphModel.prototype.isVisible = function(a) {
-    return null != a ? a.isVisible() : !1
+  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
+  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
+  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()
+  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))
+  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
-        }
+  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
+  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()
-    }
+  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)
-            }
+  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)
         }
-    } finally {
-        this.endUpdate()
+        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
+  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
+  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
+  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)
-        }
+  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
+  }
+  return d
 };
 mxGraphModel.prototype.cellCloned = function(a) {
-    return a.clone()
+  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)
+  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
+  this.model = a;
+  this.previous = this.root = b
 }
 mxRootChange.prototype.execute = function() {
-    this.root = this.previous;
-    this.previous = this.model.rootChanged(this.previous)
+  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
+  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
+  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)
+  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
+  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)
+  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
+  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)
+  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
+  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)
+  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
+  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)
+  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
+  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)
+  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
+  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)
+  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
+  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
+  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()
+  this.value = a;
+  this.setGeometry(b);
+  this.setStyle(c);
+  if (null != this.onInit) this.onInit()
 }
 mxCell.prototype.id = null;
 mxCell.prototype.value = null;
@@ -8795,149 +8928,151 @@ 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
+  return this.id
 };
 mxCell.prototype.setId = function(a) {
-    this.id = a
+  this.id = a
 };
 mxCell.prototype.getValue = function() {
-    return this.value
+  return this.value
 };
 mxCell.prototype.setValue = function(a) {
-    this.value = a
+  this.value = a
 };
 mxCell.prototype.valueChanged = function(a) {
-    var b = this.getValue();
-    this.setValue(a);
-    return b
+  var b = this.getValue();
+  this.setValue(a);
+  return b
 };
 mxCell.prototype.getGeometry = function() {
-    return this.geometry
+  return this.geometry
 };
 mxCell.prototype.setGeometry = function(a) {
-    this.geometry = a
+  this.geometry = a
 };
 mxCell.prototype.getStyle = function() {
-    return this.style
+  return this.style
 };
 mxCell.prototype.setStyle = function(a) {
-    this.style = a
+  this.style = a
 };
 mxCell.prototype.isVertex = function() {
-    return this.vertex
+  return this.vertex
 };
 mxCell.prototype.setVertex = function(a) {
-    this.vertex = a
+  this.vertex = a
 };
 mxCell.prototype.isEdge = function() {
-    return this.edge
+  return this.edge
 };
 mxCell.prototype.setEdge = function(a) {
-    this.edge = a
+  this.edge = a
 };
 mxCell.prototype.isConnectable = function() {
-    return this.connectable
+  return this.connectable
 };
 mxCell.prototype.setConnectable = function(a) {
-    this.connectable = a
+  this.connectable = a
 };
 mxCell.prototype.isVisible = function() {
-    return this.visible
+  return this.visible
 };
 mxCell.prototype.setVisible = function(a) {
-    this.visible = a
+  this.visible = a
 };
 mxCell.prototype.isCollapsed = function() {
-    return this.collapsed
+  return this.collapsed
 };
 mxCell.prototype.setCollapsed = function(a) {
-    this.collapsed = a
+  this.collapsed = a
 };
 mxCell.prototype.getParent = function() {
-    return this.parent
+  return this.parent
 };
 mxCell.prototype.setParent = function(a) {
-    this.parent = a
+  this.parent = a
 };
 mxCell.prototype.getTerminal = function(a) {
-    return a ? this.source : this.target
+  return a ? this.source : this.target
 };
 mxCell.prototype.setTerminal = function(a, b) {
-    b ? this.source = a : this.target = a;
-    return a
+  b ? this.source = a : this.target = a;
+  return a
 };
 mxCell.prototype.getChildCount = function() {
-    return null == this.children ? 0 : this.children.length
+  return null == this.children ? 0 : this.children.length
 };
 mxCell.prototype.getIndex = function(a) {
-    return mxUtils.indexOf(this.children, a)
+  return mxUtils.indexOf(this.children, a)
 };
 mxCell.prototype.getChildAt = function(a) {
-    return null == this.children ? null : this.children[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
+  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
+  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)
-    }
+  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
+  return null == this.edges ? 0 : this.edges.length
 };
 mxCell.prototype.getEdgeIndex = function(a) {
-    return mxUtils.indexOf(this.edges, a)
+  return mxUtils.indexOf(this.edges, a)
 };
 mxCell.prototype.getEdgeAt = function(a) {
-    return null == this.edges ? null : this.edges[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
+  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)
+  if (null != a) {
+    if (a.getTerminal(!b) != this && null != this.edges) {
+      var c = this.getEdgeIndex(a);
+      0 <= c && this.edges.splice(c, 1)
     }
-    return a
+    a.setTerminal(null, b)
+  }
+  return a
 };
 mxCell.prototype.removeFromTerminal = function(a) {
-    var b = this.getTerminal(a);
-    null != b && b.removeEdge(this, 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
+  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)
+  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
+  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
+  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)
+  mxRectangle.call(this, a, b, c, d)
 }
 mxGeometry.prototype = new mxRectangle;
 mxGeometry.prototype.constructor = mxGeometry;
@@ -8949,170 +9084,178 @@ 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
-    }
+  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
+  return a ? this.sourcePoint : this.targetPoint
 };
 mxGeometry.prototype.setTerminalPoint = function(a, b) {
-    b ? this.sourcePoint = a : this.targetPoint = a;
-    return a
+  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)
-        }
+  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
-        }
+    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
     },
-    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
+    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
+  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;
@@ -9128,279 +9271,281 @@ mxPrintPreview.prototype.pageSelector = null;
 mxPrintPreview.prototype.wnd = null;
 mxPrintPreview.prototype.pageCount = 0;
 mxPrintPreview.prototype.getWindow = function() {
-    return this.wnd
+  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
+  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 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"
             };
-            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)
+            mxEvent.addListener(this.wnd, "scroll", function(a) {
+              b()
+            });
+            mxEvent.addListener(this.wnd, "resize", function(a) {
+              b()
+            })
+          }
         }
-        this.wnd.focus()
-    } catch (y) {
-        null != c && null != c.parentNode && c.parentNode.removeChild(c)
-    } finally {
-        this.graph.cellRenderer.initializeOverlay = b
-    }
-    return this.wnd
+      });
+      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")
+  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
+  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
+  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)
-    }
+  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
+  return null
 };
 mxPrintPreview.prototype.getAppendices = function() {
-    return null
+  return null
 };
 mxPrintPreview.prototype.print = function() {
-    var a = this.open();
-    null != a && a.print()
+  var a = this.open();
+  null != a && a.print()
 };
 mxPrintPreview.prototype.close = function() {
-    null != this.wnd && (this.wnd.close(), this.wnd = null)
+  null != this.wnd && (this.wnd.close(), this.wnd = null)
 };
 
 function mxStylesheet() {
-    this.styles = {};
-    this.putDefaultVertexStyle(this.createDefaultVertexStyle());
-    this.putDefaultEdgeStyle(this.createDefaultEdgeStyle())
+  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
+  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
+  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)
+  this.putCellStyle("defaultVertex", a)
 };
 mxStylesheet.prototype.putDefaultEdgeStyle = function(a) {
-    this.putCellStyle("defaultEdge", a)
+  this.putCellStyle("defaultEdge", a)
 };
 mxStylesheet.prototype.getDefaultVertexStyle = function() {
-    return this.styles.defaultVertex
+  return this.styles.defaultVertex
 };
 mxStylesheet.prototype.getDefaultEdgeStyle = function() {
-    return this.styles.defaultEdge
+  return this.styles.defaultEdge
 };
 mxStylesheet.prototype.putCellStyle = function(a, b) {
-    this.styles[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
+  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
+  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;
@@ -9421,61 +9566,62 @@ 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
+  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
+  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)
+  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
+  a = this.getVisibleTerminalState(a);
+  return null != a ? a.cell : null
 };
 mxCellState.prototype.getVisibleTerminalState = function(a) {
-    return a ? this.visibleSourceState : this.visibleTargetState
+  return a ? this.visibleSourceState : this.visibleTargetState
 };
 mxCellState.prototype.setVisibleTerminalState = function(a, b) {
-    b ? this.visibleSourceState = a : this.visibleTargetState = a
+  b ? this.visibleSourceState = a : this.visibleTargetState = a
 };
 mxCellState.prototype.destroy = function() {
-    this.view.graph.cellRenderer.destroy(this)
+  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
+  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 = []
+  this.graph = a;
+  this.cells = []
 }
 mxGraphSelectionModel.prototype = new mxEventSource;
 mxGraphSelectionModel.prototype.constructor = mxGraphSelectionModel;
@@ -9484,95 +9630,95 @@ mxGraphSelectionModel.prototype.updatingSelectionResource = "none" != mxClient.l
 mxGraphSelectionModel.prototype.graph = null;
 mxGraphSelectionModel.prototype.singleSelection = !1;
 mxGraphSelectionModel.prototype.isSingleSelection = function() {
-    return this.singleSelection
+  return this.singleSelection
 };
 mxGraphSelectionModel.prototype.setSingleSelection = function(a) {
-    this.singleSelection = a
+  this.singleSelection = a
 };
 mxGraphSelectionModel.prototype.isSelected = function(a) {
-    return null != a ? 0 <= mxUtils.indexOf(this.cells, a) : !1
+  return null != a ? 0 <= mxUtils.indexOf(this.cells, a) : !1
 };
 mxGraphSelectionModel.prototype.isEmpty = function() {
-    return 0 == this.cells.length
+  return 0 == this.cells.length
 };
 mxGraphSelectionModel.prototype.clear = function() {
-    this.changeSelection(null, this.cells)
+  this.changeSelection(null, this.cells)
 };
 mxGraphSelectionModel.prototype.setCell = function(a) {
-    null != a && this.setCells([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)
-    }
+  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
+  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])
+  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)
-    }
+  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])
+  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)
-    }
+  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))
-    }
+  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)
+  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))
+  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
+  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))
+  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
+  this.graph = a
 }
 mxCellEditor.prototype.graph = null;
 mxCellEditor.prototype.textarea = null;
@@ -9583,181 +9729,188 @@ 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)
-    }))
+  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"
-    }
+  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
+  return this.modified
 };
 mxCellEditor.prototype.setModified = function(a) {
-    this.modified = a
+  this.modified = a
 };
 mxCellEditor.prototype.focusLost = function() {
-    this.stopEditing(!this.graph.isInvokesStopCellEditing())
+  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())
-    }
+  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
+  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))
+  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)
+  return this.graph.getEditingValue(a.cell, b)
 };
 mxCellEditor.prototype.getCurrentValue = function() {
-    return this.textarea.value.replace(/\r/g, "")
+  return this.textarea.value.replace(/\r/g, "")
 };
 mxCellEditor.prototype.isHideLabel = function(a) {
-    return !0
+  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)
+  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
+  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
+  return this.emptyLabelText
 };
 mxCellEditor.prototype.getEditingCell = function() {
-    return this.editingCell
+  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)
+  null != this.textarea && (mxEvent.release(this.textarea), null != this.textarea.parentNode && this.textarea.parentNode.removeChild(this.textarea), this.textarea = null)
 };
 
 function mxCellRenderer() {}
@@ -9767,7 +9920,7 @@ mxCellRenderer.prototype.defaultTextShape = mxText;
 mxCellRenderer.prototype.legacyControlPosition = !0;
 mxCellRenderer.prototype.defaultShapes = {};
 mxCellRenderer.registerShape = function(a, b) {
-    mxCellRenderer.prototype.defaultShapes[a] = b
+  mxCellRenderer.prototype.defaultShapes[a] = b
 };
 mxCellRenderer.registerShape(mxConstants.SHAPE_RECTANGLE, mxRectangleShape);
 mxCellRenderer.registerShape(mxConstants.SHAPE_ELLIPSE, mxEllipse);
@@ -9785,700 +9938,736 @@ 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)
+  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())
+  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
+  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
+  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)
+  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)
-    }
+  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)
+  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)
-    }
+  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
+  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
+  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)
+  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))
+  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]))
+  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)
+  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.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))
-        }))
-    }
+  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))
+  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
+  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())
+  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))
-    })
+  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)
-                }
-            })
+  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)
+      })
+    }
+  } 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
+  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
+  return !0
 };
 mxCellRenderer.prototype.isLabelEvent = function(a, b) {
-    return !0
+  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)
+  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_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))
-    }))
+    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()
-    }
+  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
+  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
+  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
+  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()
-        })
-    }
+  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()
-    }
+  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
+  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)
-    }
+  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)
+  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
+    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)
     },
-    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
+    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);
@@ -10492,10 +10681,10 @@ mxStyleRegistry.putValue(mxConstants.PERIMETER_RHOMBUS, mxPerimeter.RhombusPerim
 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
+  this.graph = a;
+  this.translate = new mxPoint;
+  this.graphBounds = new mxRectangle;
+  this.states = new mxDictionary
 }
 mxGraphView.prototype = new mxEventSource;
 mxGraphView.prototype.constructor = mxGraphView;
@@ -10513,692 +10702,706 @@ mxGraphView.prototype.scale = 1;
 mxGraphView.prototype.translate = null;
 mxGraphView.prototype.updateStyle = !1;
 mxGraphView.prototype.getGraphBounds = function() {
-    return this.graphBounds
+  return this.graphBounds
 };
 mxGraphView.prototype.setGraphBounds = function(a) {
-    this.graphBounds = 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
+  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
+  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))
+  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
+  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))
+  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
+  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))
+  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()
+  null != this.currentRoot && this.clear();
+  this.revalidate()
 };
 mxGraphView.prototype.revalidate = function() {
-    this.invalidate();
-    this.validate()
+  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)
+  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)
-    }
+  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)
+  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")
+  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))
+  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))
+      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)
+      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)
+  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()
+  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)
-                    }
-                }
+  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
             }
-        } 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)
-    }
+            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)
+  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())
+  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)
         }
-        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
+        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))
+  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))
+  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)
+  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
-    }
+  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))
+  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
+  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)
+  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)
+  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
+  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
+  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
+  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
+  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)
+  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
+  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
+  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
+  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)
-            }
+  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)
+  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
+  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
-            }
-        }
-    }
+  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
+  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
+  return this.rendering
 };
 mxGraphView.prototype.setRendering = function(a) {
-    this.rendering = a
+  this.rendering = a
 };
 mxGraphView.prototype.isAllowEval = function() {
-    return this.allowEval
+  return this.allowEval
 };
 mxGraphView.prototype.setAllowEval = function(a) {
-    this.allowEval = a
+  this.allowEval = a
 };
 mxGraphView.prototype.getStates = function() {
-    return this.states
+  return this.states
 };
 mxGraphView.prototype.setStates = function(a) {
-    this.states = 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
+  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
+  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
+  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
+  return this.canvas
 };
 mxGraphView.prototype.getBackgroundPane = function() {
-    return this.backgroundPane
+  return this.backgroundPane
 };
 mxGraphView.prototype.getDrawPane = function() {
-    return this.drawPane
+  return this.drawPane
 };
 mxGraphView.prototype.getOverlayPane = function() {
-    return this.overlayPane
+  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
+  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
+  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()
+  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)
-    }
+  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)
+  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%"
-    }
+  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
+  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)
-    }
+  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
+  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"))
+  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)
+  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)
-        }
+  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
+  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()
+  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;
@@ -11305,2361 +11508,2410 @@ 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.warningImage = new mxImage(mxClient.imageBasePath + "/warning" + (mxClient.IS_MAC ? ".png" : ".gif"), 16, 16);
+mxGraph.prototype.warningImage = new mxImage("/assets/plugins/mxgraph/images/warning.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')
+  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)
+  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)
+  return new mxGraphSelectionModel(this)
 };
 mxGraph.prototype.createStylesheet = function() {
-    return new mxStylesheet
+  return new mxStylesheet
 };
 mxGraph.prototype.createGraphView = function() {
-    return new mxGraphView(this)
+  return new mxGraphView(this)
 };
 mxGraph.prototype.createCellRenderer = function() {
-    return new mxCellRenderer
+  return new mxCellRenderer
 };
 mxGraph.prototype.createCellEditor = function() {
-    return new mxCellEditor(this)
+  return new mxCellEditor(this)
 };
 mxGraph.prototype.getModel = function() {
-    return this.model
+  return this.model
 };
 mxGraph.prototype.getView = function() {
-    return this.view
+  return this.view
 };
 mxGraph.prototype.getStylesheet = function() {
-    return this.stylesheet
+  return this.stylesheet
 };
 mxGraph.prototype.setStylesheet = function(a) {
-    this.stylesheet = a
+  this.stylesheet = a
 };
 mxGraph.prototype.getSelectionModel = function() {
-    return this.selectionModel
+  return this.selectionModel
 };
 mxGraph.prototype.setSelectionModel = function(a) {
-    this.selectionModel = 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)
-        }
+  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)
+  }
+  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()
+  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
+  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)
+  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)
+  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
+  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
+  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
+  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
+  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)
-    }
+  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)
+  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
+  this.removeCellOverlays(a);
+  return null
 };
 mxGraph.prototype.startEditing = function(a) {
-    this.startEditingAtCell(null, 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))
+  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)
+  return this.convertValueToString(a)
 };
 mxGraph.prototype.stopEditing = function(a) {
-    this.cellEditor.stopEditing(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
+  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()
-    }
+  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()
-    }
+  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()))
+  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)
+  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))
+  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 this.allowAutoPanning && !this.panningHandler.active && (null == this.panningManager && (this.panningManager = this.createPanningManager()), this.panningManager.panTo(a + this.panDx, b + this.panDy))
+      } 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)
+  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
+  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)
+  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))
+  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"
+  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)
-    }
+  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
+  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
+  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()
-        }
+  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])
+  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))
-    }
+  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)
+  c = c || this.getSelectionCells();
+  mxUtils.setCellStyles(this.model, c, a, b)
 };
 mxGraph.prototype.toggleCellStyleFlags = function(a, b, c) {
-    this.setCellStyleFlags(a, b, null, 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)
+  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()
-            }
-        }
+  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
+  }
+  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()
-        }
+  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
+  }
+  return a
 };
 mxGraph.prototype.addImageBundle = function(a) {
-    this.imageBundles.push(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
+  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
+  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));
+  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 {
-        this.cellsOrdered(b, a), this.fireEvent(new mxEventObject(mxEvent.ORDER_CELLS, "back", a, "cells", b))
+      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()
-    }
-    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()
-        }
+      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()
-        }
+  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
+  }
+  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
+  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
+  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
+  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());
+  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 {
-        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))
+      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()
+      this.model.endUpdate()
     }
-    return a
+  }
+  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)
-                    }
-                }
-            }
+  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
+  } 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
+  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)
+  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
+  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)
+  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
+  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)
+  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]
+  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
+  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)));
+  if (null != a && null != b && null != c) {
     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])
+      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)
             }
-            this.fireEvent(new mxEventObject(mxEvent.CELLS_REMOVED, "cells", a))
-        } finally {
-            this.model.endUpdate()
+          }
+          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.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);
+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 {
-        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))
+      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()
+      this.model.endUpdate()
     }
-    return c
+  }
+};
+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));
+  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 {
-        this.cellsToggled(b, a), this.fireEvent(new mxEventObject(mxEvent.TOGGLE_CELLS, "show", a, "cells", b, "includeEdges", c))
+      for (var c = 0; c < a.length; c++) this.model.setVisible(a[c], b)
     } 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()
-        }
+      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);
+  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 {
-        this.cellsFolded(c, a, b, d), this.fireEvent(new mxEventObject(mxEvent.FOLD_CELLS, "collapse", a, "recurse", b, "cells", c))
+      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()
-    }
-    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()
-        }
+      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))
-    }
+  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)
-        }
-    }
+  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))
+  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
+  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
+  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()
+  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
+  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)
-    }
+  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]
+  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
+  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()
+  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])
-    }
+  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)
+  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()
-        }
+  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
+  }
+  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()
-        }
+  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))
+  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
+  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
+  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)
-    }
+  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()
-        }
+  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
+  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
+  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)
+  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()
-        }
+  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
+  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.cellConnected(a, b, c, d);
-        this.fireEvent(new mxEventObject(mxEvent.CONNECT_CELL, "edge", a, "terminal", b, "source", c, "previous", e))
+      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()
-    }
-    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()
-        }
+      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)
-                        }
-                    }
+  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)
                 }
-        } finally {
-            this.model.endUpdate()
+              }
+              this.model.setGeometry(a[e], g)
+            }
+          }
         }
+    } finally {
+      this.model.endUpdate()
     }
+  }
 };
 mxGraph.prototype.getCurrentRoot = function() {
-    return this.view.currentRoot
+  return this.view.currentRoot
 };
 mxGraph.prototype.getTranslateForRoot = function(a) {
-    return null
+  return null
 };
 mxGraph.prototype.isPort = function(a) {
-    return !1
+  return !1
 };
 mxGraph.prototype.getTerminalForPort = function(a, b) {
-    return this.model.getParent(a)
+  return this.model.getParent(a)
 };
 mxGraph.prototype.getChildOffsetForCell = function(a) {
-    return null
+  return null
 };
 mxGraph.prototype.enterGroup = function(a) {
-    a = a || this.getSelectionCell();
-    null != a && this.isValidRoot(a) && (this.view.setCurrentRoot(a), this.clearSelection())
+  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)
-    }
+  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))
+  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
+  return null != a
 };
 mxGraph.prototype.getGraphBounds = function() {
-    return this.view.getGraphBounds()
+  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
-        }
+  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
+  }
+  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
+  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))
+  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
+  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))
-    }
+  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)
+  this.zoom(this.zoomFactor)
 };
 mxGraph.prototype.zoomOut = function() {
-    this.zoom(1 / this.zoomFactor)
+  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))
+  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)
+  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))
+  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)
+  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
+  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))
+  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
+  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)
+  return this.model.getGeometry(a)
 };
 mxGraph.prototype.isCellVisible = function(a) {
-    return this.model.isVisible(a)
+  return this.model.isVisible(a)
 };
 mxGraph.prototype.isCellCollapsed = function(a) {
-    return this.model.isCollapsed(a)
+  return this.model.isCollapsed(a)
 };
 mxGraph.prototype.isCellConnectable = function(a) {
-    return this.model.isConnectable(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
+  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
+  var b = a.getVisibleTerminalState(!0);
+  a = a.getVisibleTerminalState(!1);
+  return null != b && b == a
 };
 mxGraph.prototype.isCloneEvent = function(a) {
-    return mxEvent.isControlDown(a)
+  return mxEvent.isControlDown(a)
 };
 mxGraph.prototype.isToggleEvent = function(a) {
-    return mxClient.IS_MAC ? mxEvent.isMetaDown(a) : mxEvent.isControlDown(a)
+  return mxClient.IS_MAC ? mxEvent.isMetaDown(a) : mxEvent.isControlDown(a)
 };
 mxGraph.prototype.isGridEnabledEvent = function(a) {
-    return null != a && !mxEvent.isAltDown(a)
+  return null != a && !mxEvent.isAltDown(a)
 };
 mxGraph.prototype.isConstrainedEvent = function(a) {
-    return mxEvent.isShiftDown(a)
+  return mxEvent.isShiftDown(a)
 };
 mxGraph.prototype.isForceMarqueeEvent = function(a) {
-    return mxEvent.isAltDown(a)
+  return mxEvent.isAltDown(a)
 };
 mxGraph.prototype.validationAlert = function(a) {
-    mxUtils.alert(a)
+  mxUtils.alert(a)
 };
 mxGraph.prototype.isEdgeValid = function(a, b, c) {
-    return null == this.getEdgeValidationError(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
+  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"
     }
-    return this.allowDanglingEdges ? null : ""
+    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
+  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
+  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
+  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
+  return null
 };
 mxGraph.prototype.getBackgroundImage = function() {
-    return this.backgroundImage
+  return this.backgroundImage
 };
 mxGraph.prototype.setBackgroundImage = function(a) {
-    this.backgroundImage = 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
+  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 ""
+  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
+  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()
+  return this.isHtmlLabels()
 };
 mxGraph.prototype.isHtmlLabels = function() {
-    return this.htmlLabels
+  return this.htmlLabels
 };
 mxGraph.prototype.setHtmlLabels = function(a) {
-    this.htmlLabels = 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
+  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
+  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
+  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)
+  var b = null;
+  return b = null != a && null != a.getTooltip ? a.getTooltip() : this.convertValueToString(a)
 };
 mxGraph.prototype.getCursorForCell = function(a) {
-    return null
+  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
+  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
+  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
+  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
+  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
+  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
+  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
+  return null != a && null != a.style ? a.style[mxConstants.STYLE_INDICATOR_IMAGE] : null
 };
 mxGraph.prototype.getBorder = function() {
-    return this.border
+  return this.border
 };
 mxGraph.prototype.setBorder = function(a) {
-    this.border = 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
+  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
+  return this.resizeContainer
 };
 mxGraph.prototype.setResizeContainer = function(a) {
-    this.resizeContainer = a
+  this.resizeContainer = a
 };
 mxGraph.prototype.isEnabled = function() {
-    return this.enabled
+  return this.enabled
 };
 mxGraph.prototype.setEnabled = function(a) {
-    this.enabled = a
+  this.enabled = a
 };
 mxGraph.prototype.isEscapeEnabled = function() {
-    return this.escapeEnabled
+  return this.escapeEnabled
 };
 mxGraph.prototype.setEscapeEnabled = function(a) {
-    this.escapeEnabled = a
+  this.escapeEnabled = a
 };
 mxGraph.prototype.isInvokesStopCellEditing = function() {
-    return this.invokesStopCellEditing
+  return this.invokesStopCellEditing
 };
 mxGraph.prototype.setInvokesStopCellEditing = function(a) {
-    this.invokesStopCellEditing = a
+  this.invokesStopCellEditing = a
 };
 mxGraph.prototype.isEnterStopsCellEditing = function() {
-    return this.enterStopsCellEditing
+  return this.enterStopsCellEditing
 };
 mxGraph.prototype.setEnterStopsCellEditing = function(a) {
-    this.enterStopsCellEditing = 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
+  var b = this.model.getGeometry(a);
+  return this.isCellsLocked() || null != b && this.model.isVertex(a) && b.relative
 };
 mxGraph.prototype.isCellsLocked = function() {
-    return this.cellsLocked
+  return this.cellsLocked
 };
 mxGraph.prototype.setCellsLocked = function(a) {
-    this.cellsLocked = a
+  this.cellsLocked = a
 };
 mxGraph.prototype.getCloneableCells = function(a) {
-    return this.model.filterCells(a, mxUtils.bind(this, function(a) {
-        return this.isCellCloneable(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]
+  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
+  return this.cellsCloneable
 };
 mxGraph.prototype.setCellsCloneable = function(a) {
-    this.cellsCloneable = a
+  this.cellsCloneable = a
 };
 mxGraph.prototype.getExportableCells = function(a) {
-    return this.model.filterCells(a, mxUtils.bind(this, function(a) {
-        return this.canExportCell(a)
-    }))
+  return this.model.filterCells(a, mxUtils.bind(this, function(a) {
+    return this.canExportCell(a)
+  }))
 };
 mxGraph.prototype.canExportCell = function(a) {
-    return this.exportEnabled
+  return this.exportEnabled
 };
 mxGraph.prototype.getImportableCells = function(a) {
-    return this.model.filterCells(a, mxUtils.bind(this, function(a) {
-        return this.canImportCell(a)
-    }))
+  return this.model.filterCells(a, mxUtils.bind(this, function(a) {
+    return this.canImportCell(a)
+  }))
 };
 mxGraph.prototype.canImportCell = function(a) {
-    return this.importEnabled
+  return this.importEnabled
 };
 mxGraph.prototype.isCellSelectable = function(a) {
-    return this.isCellsSelectable()
+  return this.isCellsSelectable()
 };
 mxGraph.prototype.isCellsSelectable = function() {
-    return this.cellsSelectable
+  return this.cellsSelectable
 };
 mxGraph.prototype.setCellsSelectable = function(a) {
-    this.cellsSelectable = a
+  this.cellsSelectable = a
 };
 mxGraph.prototype.getDeletableCells = function(a) {
-    return this.model.filterCells(a, mxUtils.bind(this, function(a) {
-        return this.isCellDeletable(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]
+  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
+  return this.cellsDeletable
 };
 mxGraph.prototype.setCellsDeletable = function(a) {
-    this.cellsDeletable = 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)
+  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)
-    }))
+  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]
+  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
+  return this.cellsMovable
 };
 mxGraph.prototype.setCellsMovable = function(a) {
-    this.cellsMovable = a
+  this.cellsMovable = a
 };
 mxGraph.prototype.isGridEnabled = function() {
-    return this.gridEnabled
+  return this.gridEnabled
 };
 mxGraph.prototype.setGridEnabled = function(a) {
-    this.gridEnabled = a
+  this.gridEnabled = a
 };
 mxGraph.prototype.isPortsEnabled = function() {
-    return this.portsEnabled
+  return this.portsEnabled
 };
 mxGraph.prototype.setPortsEnabled = function(a) {
-    this.portsEnabled = a
+  this.portsEnabled = a
 };
 mxGraph.prototype.getGridSize = function() {
-    return this.gridSize
+  return this.gridSize
 };
 mxGraph.prototype.setGridSize = function(a) {
-    this.gridSize = a
+  this.gridSize = a
 };
 mxGraph.prototype.getTolerance = function() {
-    return this.tolerance
+  return this.tolerance
 };
 mxGraph.prototype.setTolerance = function(a) {
-    this.tolerance = a
+  this.tolerance = a
 };
 mxGraph.prototype.isVertexLabelsMovable = function() {
-    return this.vertexLabelsMovable
+  return this.vertexLabelsMovable
 };
 mxGraph.prototype.setVertexLabelsMovable = function(a) {
-    this.vertexLabelsMovable = a
+  this.vertexLabelsMovable = a
 };
 mxGraph.prototype.isEdgeLabelsMovable = function() {
-    return this.edgeLabelsMovable
+  return this.edgeLabelsMovable
 };
 mxGraph.prototype.setEdgeLabelsMovable = function(a) {
-    this.edgeLabelsMovable = a
+  this.edgeLabelsMovable = a
 };
 mxGraph.prototype.isSwimlaneNesting = function() {
-    return this.swimlaneNesting
+  return this.swimlaneNesting
 };
 mxGraph.prototype.setSwimlaneNesting = function(a) {
-    this.swimlaneNesting = a
+  this.swimlaneNesting = a
 };
 mxGraph.prototype.isSwimlaneSelectionEnabled = function() {
-    return this.swimlaneSelectionEnabled
+  return this.swimlaneSelectionEnabled
 };
 mxGraph.prototype.setSwimlaneSelectionEnabled = function(a) {
-    this.swimlaneSelectionEnabled = a
+  this.swimlaneSelectionEnabled = a
 };
 mxGraph.prototype.isMultigraph = function() {
-    return this.multigraph
+  return this.multigraph
 };
 mxGraph.prototype.setMultigraph = function(a) {
-    this.multigraph = a
+  this.multigraph = a
 };
 mxGraph.prototype.isAllowLoops = function() {
-    return this.allowLoops
+  return this.allowLoops
 };
 mxGraph.prototype.setAllowDanglingEdges = function(a) {
-    this.allowDanglingEdges = a
+  this.allowDanglingEdges = a
 };
 mxGraph.prototype.isAllowDanglingEdges = function() {
-    return this.allowDanglingEdges
+  return this.allowDanglingEdges
 };
 mxGraph.prototype.setConnectableEdges = function(a) {
-    this.connectableEdges = a
+  this.connectableEdges = a
 };
 mxGraph.prototype.isConnectableEdges = function() {
-    return this.connectableEdges
+  return this.connectableEdges
 };
 mxGraph.prototype.setCloneInvalidEdges = function(a) {
-    this.cloneInvalidEdges = a
+  this.cloneInvalidEdges = a
 };
 mxGraph.prototype.isCloneInvalidEdges = function() {
-    return this.cloneInvalidEdges
+  return this.cloneInvalidEdges
 };
 mxGraph.prototype.setAllowLoops = function(a) {
-    this.allowLoops = a
+  this.allowLoops = a
 };
 mxGraph.prototype.isDisconnectOnMove = function() {
-    return this.disconnectOnMove
+  return this.disconnectOnMove
 };
 mxGraph.prototype.setDisconnectOnMove = function(a) {
-    this.disconnectOnMove = a
+  this.disconnectOnMove = a
 };
 mxGraph.prototype.isDropEnabled = function() {
-    return this.dropEnabled
+  return this.dropEnabled
 };
 mxGraph.prototype.setDropEnabled = function(a) {
-    this.dropEnabled = a
+  this.dropEnabled = a
 };
 mxGraph.prototype.isSplitEnabled = function() {
-    return this.splitEnabled
+  return this.splitEnabled
 };
 mxGraph.prototype.setSplitEnabled = function(a) {
-    this.splitEnabled = 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]
+  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
+  return this.cellsResizable
 };
 mxGraph.prototype.setCellsResizable = function(a) {
-    this.cellsResizable = a
+  this.cellsResizable = a
 };
 mxGraph.prototype.isTerminalPointMovable = function(a, b) {
-    return !0
+  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]
+  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
+  return this.cellsBendable
 };
 mxGraph.prototype.setCellsBendable = function(a) {
-    this.cellsBendable = 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]
+  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
+  return this.cellsEditable
 };
 mxGraph.prototype.setCellsEditable = function(a) {
-    this.cellsEditable = a
+  this.cellsEditable = a
 };
 mxGraph.prototype.isCellDisconnectable = function(a, b, c) {
-    return this.isCellsDisconnectable() && !this.isCellLocked(a)
+  return this.isCellsDisconnectable() && !this.isCellLocked(a)
 };
 mxGraph.prototype.isCellsDisconnectable = function() {
-    return this.cellsDisconnectable
+  return this.cellsDisconnectable
 };
 mxGraph.prototype.setCellsDisconnectable = function(a) {
-    this.cellsDisconnectable = 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)
+  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)
+  return this.isValidSource(a)
 };
 mxGraph.prototype.isValidConnection = function(a, b) {
-    return this.isValidSource(a) && this.isValidTarget(b)
+  return this.isValidSource(a) && this.isValidTarget(b)
 };
 mxGraph.prototype.setConnectable = function(a) {
-    this.connectionHandler.setEnabled(a)
+  this.connectionHandler.setEnabled(a)
 };
 mxGraph.prototype.isConnectable = function(a) {
-    return this.connectionHandler.isEnabled()
+  return this.connectionHandler.isEnabled()
 };
 mxGraph.prototype.setTooltips = function(a) {
-    this.tooltipHandler.setEnabled(a)
+  this.tooltipHandler.setEnabled(a)
 };
 mxGraph.prototype.setPanning = function(a) {
-    this.panningHandler.panningEnabled = 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
+  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]
+  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
+  return this.autoSizeCells
 };
 mxGraph.prototype.setAutoSizeCells = function(a) {
-    this.autoSizeCells = a
+  this.autoSizeCells = a
 };
 mxGraph.prototype.isExtendParent = function(a) {
-    return !this.getModel().isEdge(a) && this.isExtendParents()
+  return !this.getModel().isEdge(a) && this.isExtendParents()
 };
 mxGraph.prototype.isExtendParents = function() {
-    return this.extendParents
+  return this.extendParents
 };
 mxGraph.prototype.setExtendParents = function(a) {
-    this.extendParents = a
+  this.extendParents = a
 };
 mxGraph.prototype.isExtendParentsOnAdd = function() {
-    return this.extendParentsOnAdd
+  return this.extendParentsOnAdd
 };
 mxGraph.prototype.setExtendParentsOnAdd = function(a) {
-    this.extendParentsOnAdd = a
+  this.extendParentsOnAdd = a
 };
 mxGraph.prototype.isConstrainChild = function(a) {
-    return this.isConstrainChildren() && !this.getModel().isEdge(this.getModel().getParent(a))
+  return this.isConstrainChildren() && !this.getModel().isEdge(this.getModel().getParent(a))
 };
 mxGraph.prototype.isConstrainChildren = function() {
-    return this.constrainChildren
+  return this.constrainChildren
 };
 mxGraph.prototype.setConstrainChildren = function(a) {
-    this.constrainChildren = a
+  this.constrainChildren = a
 };
 mxGraph.prototype.isAllowNegativeCoordinates = function() {
-    return this.allowNegativeCoordinates
+  return this.allowNegativeCoordinates
 };
 mxGraph.prototype.setAllowNegativeCoordinates = function(a) {
-    this.allowNegativeCoordinates = a
+  this.allowNegativeCoordinates = a
 };
 mxGraph.prototype.getOverlap = function(a) {
-    return this.isAllowOverlapParent(a) ? this.defaultOverlap : 0
+  return this.isAllowOverlapParent(a) ? this.defaultOverlap : 0
 };
 mxGraph.prototype.isAllowOverlapParent = function(a) {
-    return !1
+  return !1
 };
 mxGraph.prototype.getFoldableCells = function(a, b) {
-    return this.model.filterCells(a, mxUtils.bind(this, function(a) {
-        return this.isCellFoldable(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]
+  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)))
+  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
+  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
+  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
+  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
+  this.defaultParent = a
 };
 mxGraph.prototype.getSwimlane = function(a) {
-    for (; null != a && !this.isSwimlane(a);) a = this.model.getParent(a);
-    return 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
+  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
+  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
+  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
+  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)
+  return this.getChildCells(a, !0, !1)
 };
 mxGraph.prototype.getChildEdges = function(a) {
-    return this.getChildCells(a, !1, !0)
+  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
+  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)
+  return this.getEdges(a, b, !0, !0, !1)
 };
 mxGraph.prototype.getIncomingEdges = function(a, b) {
-    return this.getEdges(a, b, !0, !1, !1)
+  return this.getEdges(a, b, !0, !1, !1)
 };
 mxGraph.prototype.getOutgoingEdges = function(a, b) {
-    return this.getEdges(a, b, !1, !0, !1)
+  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
+  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
+  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
+  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
+  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
+  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
+  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
+  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
+  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)
-                }
-    }
+  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)
+  return this.getSelectionModel().isSelected(a)
 };
 mxGraph.prototype.isSelectionEmpty = function() {
-    return this.getSelectionModel().isEmpty()
+  return this.getSelectionModel().isEmpty()
 };
 mxGraph.prototype.clearSelection = function() {
-    return this.getSelectionModel().clear()
+  return this.getSelectionModel().clear()
 };
 mxGraph.prototype.getSelectionCount = function() {
-    return this.getSelectionModel().cells.length
+  return this.getSelectionModel().cells.length
 };
 mxGraph.prototype.getSelectionCell = function() {
-    return this.getSelectionModel().cells[0]
+  return this.getSelectionModel().cells[0]
 };
 mxGraph.prototype.getSelectionCells = function() {
-    return this.getSelectionModel().cells.slice()
+  return this.getSelectionModel().cells.slice()
 };
 mxGraph.prototype.setSelectionCell = function(a) {
-    this.getSelectionModel().setCell(a)
+  this.getSelectionModel().setCell(a)
 };
 mxGraph.prototype.setSelectionCells = function(a) {
-    this.getSelectionModel().setCells(a)
+  this.getSelectionModel().setCells(a)
 };
 mxGraph.prototype.addSelectionCell = function(a) {
-    this.getSelectionModel().addCell(a)
+  this.getSelectionModel().addCell(a)
 };
 mxGraph.prototype.addSelectionCells = function(a) {
-    this.getSelectionModel().addCells(a)
+  this.getSelectionModel().addCells(a)
 };
 mxGraph.prototype.removeSelectionCell = function(a) {
-    this.getSelectionModel().removeCell(a)
+  this.getSelectionModel().removeCell(a)
 };
 mxGraph.prototype.removeSelectionCells = function(a) {
-    this.getSelectionModel().removeCells(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
+  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)
+  this.selectCell(!0)
 };
 mxGraph.prototype.selectPreviousCell = function() {
-    this.selectCell()
+  this.selectCell()
 };
 mxGraph.prototype.selectParentCell = function() {
-    this.selectCell(!1, !0)
+  this.selectCell(!1, !0)
 };
 mxGraph.prototype.selectChildCell = function() {
-    this.selectCell(!1, !1, !0)
+  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))
+  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)
+  a = a || this.getDefaultParent();
+  a = this.model.getChildren(a);
+  null != a && this.setSelectionCells(a)
 };
 mxGraph.prototype.selectVertices = function(a) {
-    this.selectCells(!0, !1, a)
+  this.selectCells(!0, !1, a)
 };
 mxGraph.prototype.selectEdges = function(a) {
-    this.selectCells(!1, !0, 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)
+  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)
+  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)
+  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
+  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)
+  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
-            }
+  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
-    }
+  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)
+  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)
         }
-    } else a == mxEvent.MOUSE_UP && (this.isMouseDown = !1)
+      }
+      a ==
+        mxEvent.MOUSE_UP && this.click(b)
+    }
+  } else a == mxEvent.MOUSE_UP && (this.isMouseDown = !1)
 };
 mxGraph.prototype.destroy = function() {
-        (this.model.removeListener(this.graphModelChangeListener), this.graphModelChangeListener = null), this.container = null)
+  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"
+  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;
@@ -13671,22 +13923,24 @@ 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)
+  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
+  return this.tooltip
 };
 
 function mxOutline(a, b) {
-    this.source = a;
-    null != b && this.init(b)
+  this.source = a;
+  null != b && this.init(b)
 }
 mxOutline.prototype.source = null;
 mxOutline.prototype.outline = null;
@@ -13699,188 +13953,193 @@ 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)
+  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
+  return this.enabled
 };
 mxOutline.prototype.setEnabled = function(a) {
-    this.enabled = a
+  this.enabled = a
 };
 mxOutline.prototype.setZoomEnabled = function(a) {
-    this.sizer.node.style.visibility = a ? "visible" : "hidden"
+  this.sizer.node.style.visibility = a ? "visible" : "hidden"
 };
 mxOutline.prototype.refresh = function() {
-    this.update(!0)
+  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
+  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)
+  return new mxRectangle(0, 0, this.source.container.scrollWidth, this.source.container.scrollHeight)
 };
 mxOutline.prototype.getOutlineOffset = function(a) {
-    return null
+  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()
-        }
-    }
+  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()
+  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()
-    }
+  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
-    }
+  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)
+  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
+  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;
@@ -13893,43 +14152,43 @@ 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
+  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
+  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)
+  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
+  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)
+  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;
@@ -13939,92 +14198,92 @@ mxLayoutManager.prototype.enabled = !0;
 mxLayoutManager.prototype.updateHandler = null;
 mxLayoutManager.prototype.moveHandler = null;
 mxLayoutManager.prototype.isEnabled = function() {
-    return this.enabled
+  return this.enabled
 };
 mxLayoutManager.prototype.setEnabled = function(a) {
-    this.enabled = a
+  this.enabled = a
 };
 mxLayoutManager.prototype.isBubbling = function() {
-    return this.bubbling
+  return this.bubbling
 };
 mxLayoutManager.prototype.setBubbling = function(a) {
-    this.bubbling = a
+  this.bubbling = a
 };
 mxLayoutManager.prototype.getGraph = function() {
-    return this.graph
+  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))
+  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
+  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))
+  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)
-        }
+  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
+  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)] : []
+  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()
-        }
+  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)
+  null != a && null != b && a.execute(b)
 };
 mxLayoutManager.prototype.destroy = function() {
-    this.setGraph(null)
+  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)
+  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;
@@ -14036,140 +14295,140 @@ mxSpaceManager.prototype.extendParents = !0;
 mxSpaceManager.prototype.resizeHandler = null;
 mxSpaceManager.prototype.foldHandler = null;
 mxSpaceManager.prototype.isCellIgnored = function(a) {
-    return !this.getGraph().getModel().isVertex(a)
+  return !this.getGraph().getModel().isVertex(a)
 };
 mxSpaceManager.prototype.isCellShiftable = function(a) {
-    return this.getGraph().getModel().isVertex(a) && this.getGraph().isCellMovable(a)
+  return this.getGraph().getModel().isVertex(a) && this.getGraph().isCellMovable(a)
 };
 mxSpaceManager.prototype.isEnabled = function() {
-    return this.enabled
+  return this.enabled
 };
 mxSpaceManager.prototype.setEnabled = function(a) {
-    this.enabled = a
+  this.enabled = a
 };
 mxSpaceManager.prototype.isShiftRightwards = function() {
-    return this.shiftRightwards
+  return this.shiftRightwards
 };
 mxSpaceManager.prototype.setShiftRightwards = function(a) {
-    this.shiftRightwards = a
+  this.shiftRightwards = a
 };
 mxSpaceManager.prototype.isShiftDownwards = function() {
-    return this.shiftDownwards
+  return this.shiftDownwards
 };
 mxSpaceManager.prototype.setShiftDownwards = function(a) {
-    this.shiftDownwards = a
+  this.shiftDownwards = a
 };
 mxSpaceManager.prototype.isExtendParents = function() {
-    return this.extendParents
+  return this.extendParents
 };
 mxSpaceManager.prototype.setExtendParents = function(a) {
-    this.extendParents = a
+  this.extendParents = a
 };
 mxSpaceManager.prototype.getGraph = function() {
-    return this.graph
+  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))
+  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()
+  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()
-            }
-        }
+  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()
-            }
-        }
-    }
+  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)
+  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)
+  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)
+  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;
@@ -14181,226 +14440,226 @@ mxSwimlaneManager.prototype.resizeEnabled = !0;
 mxSwimlaneManager.prototype.addHandler = null;
 mxSwimlaneManager.prototype.resizeHandler = null;
 mxSwimlaneManager.prototype.isEnabled = function() {
-    return this.enabled
+  return this.enabled
 };
 mxSwimlaneManager.prototype.setEnabled = function(a) {
-    this.enabled = a
+  this.enabled = a
 };
 mxSwimlaneManager.prototype.isHorizontal = function() {
-    return this.horizontal
+  return this.horizontal
 };
 mxSwimlaneManager.prototype.setHorizontal = function(a) {
-    this.horizontal = a
+  this.horizontal = a
 };
 mxSwimlaneManager.prototype.isAddEnabled = function() {
-    return this.addEnabled
+  return this.addEnabled
 };
 mxSwimlaneManager.prototype.setAddEnabled = function(a) {
-    this.addEnabled = a
+  this.addEnabled = a
 };
 mxSwimlaneManager.prototype.isResizeEnabled = function() {
-    return this.resizeEnabled
+  return this.resizeEnabled
 };
 mxSwimlaneManager.prototype.setResizeEnabled = function(a) {
-    this.resizeEnabled = a
+  this.resizeEnabled = a
 };
 mxSwimlaneManager.prototype.getGraph = function() {
-    return this.graph
+  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))
+  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)
+  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()
+  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()
-        }
+  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)
+  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();
+  if (null != a) {
+    var b = this.getGraph().getModel();
+    b.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)
+      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
             }
-        }
-        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)
+            this.resizeSwimlane(f, e.width, e.height)
+          }
         }
     } finally {
-        d.endUpdate()
+      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)
+  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)
-    }
+  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)
+  this.view.setScale(this.oldScale);
+  this.view.setStates(this.oldStates);
+  this.view.setGraphBounds(this.oldBounds)
 };
 
 function mxCellStatePreview(a) {
-    this.graph = a;
-    this.deltas = {}
+  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
+  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
+  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)
+  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)
+  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)
-    }
+  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)
-    }
+  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
+  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)
+  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;
@@ -14424,217 +14683,225 @@ mxGraphHandler.prototype.shape = null;
 mxGraphHandler.prototype.scaleGrid = !1;
 mxGraphHandler.prototype.rotationEnabled = !0;
 mxGraphHandler.prototype.isEnabled = function() {
-    return this.enabled
+  return this.enabled
 };
 mxGraphHandler.prototype.setEnabled = function(a) {
-    this.enabled = a
+  this.enabled = a
 };
 mxGraphHandler.prototype.isCloneEnabled = function() {
-    return this.cloneEnabled
+  return this.cloneEnabled
 };
 mxGraphHandler.prototype.setCloneEnabled = function(a) {
-    this.cloneEnabled = a
+  this.cloneEnabled = a
 };
 mxGraphHandler.prototype.isMoveEnabled = function() {
-    return this.moveEnabled
+  return this.moveEnabled
 };
 mxGraphHandler.prototype.setMoveEnabled = function(a) {
-    this.moveEnabled = a
+  this.moveEnabled = a
 };
 mxGraphHandler.prototype.isSelectEnabled = function() {
-    return this.selectEnabled
+  return this.selectEnabled
 };
 mxGraphHandler.prototype.setSelectEnabled = function(a) {
-    this.selectEnabled = a
+  this.selectEnabled = a
 };
 mxGraphHandler.prototype.isRemoveCellsFromParent = function() {
-    return this.removeCellsFromParent
+  return this.removeCellsFromParent
 };
 mxGraphHandler.prototype.setRemoveCellsFromParent = function(a) {
-    this.removeCellsFromParent = a
+  this.removeCellsFromParent = a
 };
 mxGraphHandler.prototype.getInitialCellForEvent = function(a) {
-    return a.getCell()
+  return a.getCell()
 };
 mxGraphHandler.prototype.isDelayedSelection = function(a) {
-    return this.graph.isCellSelected(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)
-        }
-    }
+  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))
+  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())
+  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
+  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
+  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
+  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()))
+  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
+  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
+  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()
+  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())
+  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)
+  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()
+  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())
+  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
+  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
+  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)
+  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)
+  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()
+  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())
+  null != a && (this.graph = a, this.factoryMethod = b, this.graph.addMouseListener(this), this.init())
 }
 mxPanningHandler.prototype = new mxPopupMenu;
 mxPanningHandler.prototype.constructor = mxPanningHandler;
@@ -14650,84 +14917,89 @@ mxPanningHandler.prototype.previewEnabled = !0;
 mxPanningHandler.prototype.useGrid = !1;
 mxPanningHandler.prototype.panningEnabled = !0;
 mxPanningHandler.prototype.isPanningEnabled = function() {
-    return this.panningEnabled
+  return this.panningEnabled
 };
 mxPanningHandler.prototype.setPanningEnabled = function(a) {
-    this.panningEnabled = 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()
-    }))
+  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)
+  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)
-    }
+  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()
+  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))
-    }
+  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
+  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()
+  return a.getCell()
 };
 mxPanningHandler.prototype.panGraph = function(a, b) {
-    this.graph.getView().setTranslate(a, b)
+  this.graph.getView().setTranslate(a, b)
 };
 mxPanningHandler.prototype.destroy = function() {
-    this.graph.removeMouseListener(this);
-    mxPopupMenu.prototype.destroy.apply(this)
+  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))
+  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;
@@ -14740,101 +15012,102 @@ mxCellMarker.prototype.currentColor = null;
 mxCellMarker.prototype.validState = null;
 mxCellMarker.prototype.markedState = null;
 mxCellMarker.prototype.setEnabled = function(a) {
-    this.enabled = a
+  this.enabled = a
 };
 mxCellMarker.prototype.isEnabled = function() {
-    return this.enabled
+  return this.enabled
 };
 mxCellMarker.prototype.setHotspot = function(a) {
-    this.hotspot = a
+  this.hotspot = a
 };
 mxCellMarker.prototype.getHotspot = function() {
-    return this.hotspot
+  return this.hotspot
 };
 mxCellMarker.prototype.setHotspotEnabled = function(a) {
-    this.hotspotEnabled = a
+  this.hotspotEnabled = a
 };
 mxCellMarker.prototype.isHotspotEnabled = function() {
-    return this.hotspotEnabled
+  return this.hotspotEnabled
 };
 mxCellMarker.prototype.hasValidState = function() {
-    return null != this.validState
+  return null != this.validState
 };
 mxCellMarker.prototype.getValidState = function() {
-    return this.validState
+  return this.validState
 };
 mxCellMarker.prototype.getMarkedState = function() {
-    return this.markedState
+  return this.markedState
 };
 mxCellMarker.prototype.reset = function() {
-    this.validState = null;
-    null != this.markedState && (this.markedState = null, this.unmark())
+  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
+  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())
+  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))
+  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()
+  this.mark()
 };
 mxCellMarker.prototype.isValidState = function(a) {
-    return !0
+  return !0
 };
 mxCellMarker.prototype.getMarkerColor = function(a, b, c) {
-    return c ? this.validColor : this.invalidColor
+  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
+  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()
+  return a.getCell()
 };
 mxCellMarker.prototype.getStateToMark = function(a) {
-    return 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
+  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()
+  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)
+  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;
@@ -14843,69 +15116,70 @@ mxSelectionCellsHandler.prototype.refreshHandler = null;
 mxSelectionCellsHandler.prototype.maxHandlers = 100;
 mxSelectionCellsHandler.prototype.handlers = null;
 mxSelectionCellsHandler.prototype.isEnabled = function() {
-    return this.enabled
+  return this.enabled
 };
 mxSelectionCellsHandler.prototype.setEnabled = function(a) {
-    this.enabled = a
+  this.enabled = a
 };
 mxSelectionCellsHandler.prototype.getHandler = function(a) {
-    return this.handlers.get(a)
+  return this.handlers.get(a)
 };
 mxSelectionCellsHandler.prototype.reset = function() {
-    this.handlers.visit(function(a, b) {
-        b.reset.apply(b)
-    })
+  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()
-    }))
+  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)
-        })
-    }
+  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)
-        })
-    }
+  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)
-        })
-    }
+  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)
+  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())
+  mxEventSource.call(this);
+  null != a && (this.graph = a, this.factoryMethod = b, this.init())
 }
 mxUtils.extend(mxConnectionHandler, mxEventSource);
 mxConnectionHandler.prototype.graph = null;
@@ -14937,559 +15211,575 @@ mxConnectionHandler.prototype.drillHandler = null;
 mxConnectionHandler.prototype.mouseDownCounter = 0;
 mxConnectionHandler.prototype.movePreviewAway = mxClient.IS_VML;
 mxConnectionHandler.prototype.isEnabled = function() {
-    return this.enabled
+  return this.enabled
 };
 mxConnectionHandler.prototype.setEnabled = function(a) {
-    this.enabled = a
+  this.enabled = a
 };
 mxConnectionHandler.prototype.isCreateTarget = function() {
-    return this.createTarget
+  return this.createTarget
 };
 mxConnectionHandler.prototype.setCreateTarget = function(a) {
-    this.createTarget = 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
+  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)
+  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
+  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
+  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))
+  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
+  return null != this.first && null != this.shape
 };
 mxConnectionHandler.prototype.isValidSource = function(a) {
-    return this.graph.isValidSource(a)
+  return this.graph.isValidSource(a)
 };
 mxConnectionHandler.prototype.isValidTarget = function(a) {
-    return !0
+  return !0
 };
 mxConnectionHandler.prototype.validateConnection = function(a, b) {
-    return !this.isValidTarget(b) ? "" : this.graph.getEdgeValidationError(null, a, b)
+  return !this.isValidTarget(b) ? "" : this.graph.getEdgeValidationError(null, a, b)
 };
 mxConnectionHandler.prototype.getConnectImage = function(a) {
-    return this.connectImage
+  return this.connectImage
 };
 mxConnectionHandler.prototype.isMoveIconToFrontForState = function(a) {
-    return null != a.text && a.text.node.parentNode == this.graph.container ? !0 : this.moveIconFront
+  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
+  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()
-    }
+  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)
+  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()
-    }
+  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))
+  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
+  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)))
+  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)
+  return !this.graph.isCellMovable(a.cell)
 };
 mxConnectionHandler.prototype.createEdgeState = function(a) {
-    return null
+  return null
 };
 mxConnectionHandler.prototype.updateCurrentState = function(a) {
-    var b = this.marker.process(a);
-    this.constraintHandler.update(a, null == this.first);
-    this.currentState = b
+  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
+  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)
+  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
         }
-    } else this.constraintHandler.reset()
+        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
+  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
+  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()
+  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)
+  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
+  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))
+  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()
+  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
+  return a ? mxConstants.VALID_COLOR : mxConstants.INVALID_COLOR
 };
 mxConnectionHandler.prototype.getEdgeWidth = function(a) {
-    return a ? 3 : 1
+  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()
+  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))
+          }
         }
-        this.select && this.selectCells(f, b)
+        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)
+  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)
+  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
+  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
+  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
+  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)
+  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
+  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
+  return this.enabled
 };
 mxConstraintHandler.prototype.setEnabled = function(a) {
-    this.enabled = 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
+  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()
+  return this.graph.getTolerance()
 };
 mxConstraintHandler.prototype.getImageForConstraint = function(a, b, c) {
-    return this.pointImage
+  return this.pointImage
 };
 mxConstraintHandler.prototype.isEventIgnored = function(a, b) {
-    return !1
+  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);
+  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
         }
-        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)
-    }
+    null == this.currentConstraint && null != this.focusHighlight && (this.focusHighlight.destroy(), this.focusHighlight = null)
+  }
 };
 mxConstraintHandler.prototype.destroy = function() {
-    this.reset()
+  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()
-    })))
+  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;
@@ -15498,100 +15788,100 @@ mxRubberband.prototype.sharedDiv = null;
 mxRubberband.prototype.currentX = 0;
 mxRubberband.prototype.currentY = 0;
 mxRubberband.prototype.isEnabled = function() {
-    return this.enabled
+  return this.enabled
 };
 mxRubberband.prototype.setEnabled = function(a) {
-    this.enabled = 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)
-    }
+  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)
+  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()
-    }
+  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
+  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())
+  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
+  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()
+  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"
-    }
+  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))
+  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())
+  null != a && (this.state = a, this.init())
 }
 mxVertexHandler.prototype.graph = null;
 mxVertexHandler.prototype.state = null;
@@ -15603,317 +15893,329 @@ 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()
+  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))
+  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
+  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
+  return mxConstants.VERTEX_SELECTION_COLOR
 };
 mxVertexHandler.prototype.getSelectionStrokeWidth = function() {
-    return mxConstants.VERTEX_SELECTION_STROKEWIDTH
+  return mxConstants.VERTEX_SELECTION_STROKEWIDTH
 };
 mxVertexHandler.prototype.isSelectionDashed = function() {
-    return mxConstants.VERTEX_SELECTION_DASHED
+  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
+  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
+  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)
+  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())
+  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
+  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())
-    }
+  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()))
+  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)
+  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()
+  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)
-    }
+  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())
+  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)
-        }
+  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))
-        }
+  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)
+  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()
+  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()
+  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
+  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())
+  null != a && (this.state = a, this.init())
 }
 mxEdgeHandler.prototype.graph = null;
 mxEdgeHandler.prototype.state = null;
@@ -15932,444 +16234,448 @@ 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()
+  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)
+  return mxEvent.isShiftDown(a)
 };
 mxEdgeHandler.prototype.isRemovePointEvent = function(a) {
-    return mxEvent.isShiftDown(a)
+  return mxEvent.isShiftDown(a)
 };
 mxEdgeHandler.prototype.getSelectionPoints = function(a) {
-    return a.absolutePoints
+  return a.absolutePoints
 };
 mxEdgeHandler.prototype.createSelectionShape = function(a) {
-    a = new mxPolyline(a, this.getSelectionColor());
-    a.strokewidth = this.getSelectionStrokeWidth();
-    a.isDashed = this.isSelectionDashed();
-    return 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
+  return mxConstants.EDGE_SELECTION_COLOR
 };
 mxEdgeHandler.prototype.getSelectionStrokeWidth = function() {
-    return mxConstants.EDGE_SELECTION_STROKEWIDTH
+  return mxConstants.EDGE_SELECTION_STROKEWIDTH
 };
 mxEdgeHandler.prototype.isSelectionDashed = function() {
-    return mxConstants.EDGE_SELECTION_DASHED
+  return mxConstants.EDGE_SELECTION_DASHED
 };
 mxEdgeHandler.prototype.isConnectableCell = function(a) {
-    return !0
+  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
+  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)
+  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
+  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
+  return !0
 };
 mxEdgeHandler.prototype.isHandleVisible = function(a) {
-    return !0
+  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)
+  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()))
+  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
+  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())
+  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
+  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()
+  return this.state.clone()
 };
 mxEdgeHandler.prototype.getSnapToTerminalTolerance = function() {
-    return this.graph.gridSize * this.graph.view.scale / 2
+  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
+  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
+  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
+  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)
+  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)
+  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()
-    }
+  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()
+  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)
+  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
+  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)
-    }
+  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
+  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()
-        }
+  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))
+  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)
+  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()
-    }
+  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())
-    }
+  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
+  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()
+  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
-    }
+  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()
+  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)
+  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)
+  mxEdgeHandler.call(this, a)
 }
 mxUtils.extend(mxElbowEdgeHandler, mxEdgeHandler);
 mxElbowEdgeHandler.prototype = new mxEdgeHandler;
@@ -16377,160 +16683,167 @@ 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
+  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
+  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"
+  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
+  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)
+  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()
+  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)
+  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
+  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
+  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)
+  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()
-    }
+  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()
-                }
-    }
+  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)
+  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)
+  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()
-    })))
+    this.destroy()
+  })))
 }
 mxKeyHandler.prototype.graph = null;
 mxKeyHandler.prototype.target = null;
@@ -16540,55 +16853,56 @@ mxKeyHandler.prototype.controlKeys = null;
 mxKeyHandler.prototype.controlShiftKeys = null;
 mxKeyHandler.prototype.enabled = !0;
 mxKeyHandler.prototype.isEnabled = function() {
-    return this.enabled
+  return this.enabled
 };
 mxKeyHandler.prototype.setEnabled = function(a) {
-    this.enabled = a
+  this.enabled = a
 };
 mxKeyHandler.prototype.bindKey = function(a, b) {
-    this.normalKeys[a] = b
+  this.normalKeys[a] = b
 };
 mxKeyHandler.prototype.bindShiftKey = function(a, b) {
-    this.shiftKeys[a] = b
+  this.shiftKeys[a] = b
 };
 mxKeyHandler.prototype.bindControlKey = function(a, b) {
-    this.controlKeys[a] = b
+  this.controlKeys[a] = b
 };
 mxKeyHandler.prototype.bindControlShiftKey = function(a, b) {
-    this.controlShiftKeys[a] = b
+  this.controlShiftKeys[a] = b
 };
 mxKeyHandler.prototype.isControlDown = function(a) {
-    return mxEvent.isControlDown(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
+  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
+  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))
-    }
+  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)
+  this.graph.isEscapeEnabled() && this.graph.escape(a)
 };
 mxKeyHandler.prototype.destroy = function() {
-    this.target = null
+  this.target = null
 };
 
 function mxTooltipHandler(a, b) {
-    null != a && (this.graph = a, this.delay = b || 500, this.graph.addMouseListener(this))
+  null != a && (this.graph = a, this.delay = b || 500, this.graph.addMouseListener(this))
 }
 mxTooltipHandler.prototype.zIndex = 10005;
 mxTooltipHandler.prototype.graph = null;
@@ -16596,108 +16910,112 @@ mxTooltipHandler.prototype.delay = null;
 mxTooltipHandler.prototype.hideOnHover = !1;
 mxTooltipHandler.prototype.enabled = !0;
 mxTooltipHandler.prototype.isEnabled = function() {
-    return this.enabled
+  return this.enabled
 };
 mxTooltipHandler.prototype.setEnabled = function(a) {
-    this.enabled = a
+  this.enabled = a
 };
 mxTooltipHandler.prototype.isHideOnHover = function() {
-    return this.hideOnHover
+  return this.hideOnHover
 };
 mxTooltipHandler.prototype.setHideOnHover = function(a) {
-    this.hideOnHover = 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()
-    })))
+  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()
+  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()
+  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()
+  this.reset(b, !0);
+  this.hideTooltip()
 };
 mxTooltipHandler.prototype.resetTimer = function() {
-    null != this.thread && (window.clearTimeout(this.thread), this.thread = null)
+  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)
-    }
+  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()
+  this.resetTimer();
+  this.hideTooltip()
 };
 mxTooltipHandler.prototype.hideTooltip = function() {
-    null != this.div && (this.div.style.visibility = "hidden")
+  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)
-    }
+  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
+  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()
-    }))
+  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)
+  this.isEnabled() && this.process(b)
 };
 mxCellTracker.prototype.mouseUp = function(a, b) {
-    this.reset()
+  this.reset()
 };
 mxCellTracker.prototype.destroy = function() {
-    this.destroyed || (this.destroyed = !0, this.graph.removeMouseListener(this), mxCellMarker.prototype.destroy.apply(this))
+  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()
+  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;
@@ -16706,138 +17024,140 @@ 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)
+  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)
+  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
+  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()
-    }
+  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)
+  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())
+  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)
+  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))
-        }
-    }
+  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)
+  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
+  this.handler.destroy();
+  this.handler = null
 };
 
 function mxDefaultPopupMenu(a) {
-    this.config = 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)
-    }
+  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
-    }
+  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)
+  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
+  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)
+  this.editor = b;
+  null != a && null != b && this.init(a)
 }
 mxDefaultToolbar.prototype.editor = null;
 mxDefaultToolbar.prototype.toolbar = null;
@@ -16845,149 +17165,149 @@ 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))
+  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)
+  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)
+  a = a || mxClient.imageBasePath + "/separator.gif";
+  this.toolbar.addSeparator(a)
 };
 mxDefaultToolbar.prototype.addCombo = function() {
-    return this.toolbar.addCombo()
+  return this.toolbar.addCombo()
 };
 mxDefaultToolbar.prototype.addActionCombo = function(a) {
-    return this.toolbar.addActionCombo(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)
+  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)
+  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)
+  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)
+  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)
     });
-    return 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)
+  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
+  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)
+  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)
+  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)
+  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()
-            }))
-    }
+  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;
@@ -17050,793 +17370,802 @@ mxEditor.prototype.movePropertiesDialog = !1;
 mxEditor.prototype.validating = !1;
 mxEditor.prototype.modified = !1;
 mxEditor.prototype.isModified = function() {
-    return this.modified
+  return this.modified
 };
 mxEditor.prototype.setModified = function(a) {
-    this.modified = 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("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("toggleConsole", function(a) {
-        mxLog.setVisible(!mxLog.isVisible())
-    })
+  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)
+  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())
+  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/"
+  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)
+  this.lastSnapshot = (new Date).getTime();
+  this.undoManager.clear();
+  this.ignoredChanges = 0;
+  this.setModified(!1)
 };
 mxEditor.prototype.addAction = function(a, b) {
-    this.actions[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)
+  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
+  this.templates[a] = b
 };
 mxEditor.prototype.getTemplate = function(a) {
-    return this.templates[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
+  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
+  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
+  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))
+  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())
-    }))
+  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)
+  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)
+  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)
+  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())
-        }
-    })
+  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
+  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)
+  return new mxCompactTreeLayout(this.graph, this.horizontalFlow)
 };
 mxEditor.prototype.createToolbar = function() {
-    return new mxDefaultToolbar(null, this)
+  return new mxDefaultToolbar(null, this)
 };
 mxEditor.prototype.setToolbarContainer = function(a) {
-    this.toolbar.init(a);
-    mxClient.IS_QUIRKS && new mxDivResizer(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))
+  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)
+  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)
+  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)
+  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
+  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)
+  var a = this.graph.getModel().getRoot();
+  return this.graph.convertValueToString(a)
 };
 mxEditor.prototype.undo = function() {
-    this.undoManager.undo()
+  this.undoManager.undo()
 };
 mxEditor.prototype.redo = function() {
-    this.undoManager.redo()
+  this.undoManager.redo()
 };
 mxEditor.prototype.groupCells = function() {
-    var a = null != this.groupBorderSize ? this.groupBorderSize : this.graph.gridSize;
-    return this.graph.groupCells(this.createGroup(), a)
+  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)
+  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))
-    }
+  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()
+  (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))
+  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))
-    }))
+  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)
+  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
+  return this.urlPost
 };
 mxEditor.prototype.getUrlImage = function() {
-    return this.urlImage
+  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
+  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()
+  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))
+  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
+  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
+  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)
+  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)
+  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))
+  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)
+  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)
+  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))
+  "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)
+  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
+  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
+  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
+  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)
-    }
+  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)
+  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)
         }
-    }
-    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
+      } 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)
+  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
+  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 = []
+  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
+  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
+  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
+  return null
 };
 mxCodec.prototype.getElementById = function(a, b) {
-    return mxUtils.findNodeByAttribute(this.document.documentElement, null != b ? b : "id", a)
+  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
+  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
+  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
+  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)
-        }
+  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
+  }
+  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)
-    }
+  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
+  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
+  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)
+  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)
+  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
+  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;
@@ -17844,293 +18173,295 @@ mxObjectCodec.prototype.idrefs = null;
 mxObjectCodec.prototype.mapping = null;
 mxObjectCodec.prototype.reverse = null;
 mxObjectCodec.prototype.getName = function() {
-    return mxUtils.getFunctionName(this.template.constructor)
+  return mxUtils.getFunctionName(this.template.constructor)
 };
 mxObjectCodec.prototype.cloneTemplate = function() {
-    return new this.template.constructor
+  return new this.template.constructor
 };
 mxObjectCodec.prototype.getFieldName = function(a) {
-    if (null != a) {
-        var b = this.reverse[a];
-        null != b && (a = b)
-    }
-    return 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
+  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)
+  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)
+  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)
+  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))
-    }
+  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)
-    }
+  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)
+  "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)
+  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)
+  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
+  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
+  mxUtils.isNumeric(a) && (a = parseFloat(a));
+  return a
 };
 mxObjectCodec.prototype.beforeEncode = function(a, b, c) {
-    return b
+  return b
 };
 mxObjectCodec.prototype.afterEncode = function(a, b, c) {
-    return 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)
+  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))
+  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)
+  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)
-    }
+  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
-    }
+  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)
-    }
+  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
+  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))
+  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
+  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
+  return b
 };
 mxObjectCodec.prototype.afterDecode = function(a, b, c) {
-    return 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")
+  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 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
+      }
+    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
+  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
+  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
+  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 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
+  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"));
@@ -18139,259 +18470,263 @@ 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(" "))
+  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)
-            }
+  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)))
         }
-        return m
-    };
-    return a
+        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)
-            }
+  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)
+          }
         }
-        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
+        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
         }
-        return d
-    };
-    return a
+        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
+  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
+  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))
         }
-        return d
-    };
-    return a
+        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
+  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))
+  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)
         }
-    };
-    return a
-}());
\ No newline at end of file
+        "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
+}());
diff --git a/public/assets/plugins/mxgraph/resources/dia.txt b/public/assets/plugins/mxgraph/resources/dia.txt
deleted file mode 100644
index 1a9df74..0000000
--- a/public/assets/plugins/mxgraph/resources/dia.txt
+++ /dev/null
@@ -1,255 +0,0 @@
-# *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
deleted file mode 100644
index 1a9df74..0000000
--- a/public/assets/plugins/mxgraph/resources/dia_am.txt
+++ /dev/null
@@ -1,255 +0,0 @@
-# *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
deleted file mode 100644
index 9e46f2b..0000000
--- a/public/assets/plugins/mxgraph/resources/dia_ar.txt
+++ /dev/null
@@ -1,255 +0,0 @@
-# *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
deleted file mode 100644
index 1a9df74..0000000
--- a/public/assets/plugins/mxgraph/resources/dia_bg.txt
+++ /dev/null
@@ -1,255 +0,0 @@
-# *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
deleted file mode 100644
index 1a9df74..0000000
--- a/public/assets/plugins/mxgraph/resources/dia_bn.txt
+++ /dev/null
@@ -1,255 +0,0 @@
-# *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
deleted file mode 100644
index f44bba0..0000000
--- a/public/assets/plugins/mxgraph/resources/dia_bs.txt
+++ /dev/null
@@ -1,255 +0,0 @@
-# *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
deleted file mode 100644
index cc01565..0000000
--- a/public/assets/plugins/mxgraph/resources/dia_ca.txt
+++ /dev/null
@@ -1,255 +0,0 @@
-# *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
deleted file mode 100644
index 5da8f9e..0000000
--- a/public/assets/plugins/mxgraph/resources/dia_cs.txt
+++ /dev/null
@@ -1,255 +0,0 @@
-# *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
deleted file mode 100644
index abb59a8..0000000
--- a/public/assets/plugins/mxgraph/resources/dia_da.txt
+++ /dev/null
@@ -1,255 +0,0 @@
-# *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
deleted file mode 100644
index 335335d..0000000
--- a/public/assets/plugins/mxgraph/resources/dia_de.txt
+++ /dev/null
@@ -1,255 +0,0 @@
-# *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
deleted file mode 100644
index c2d41fb..0000000
--- a/public/assets/plugins/mxgraph/resources/dia_el.txt
+++ /dev/null
@@ -1,255 +0,0 @@
-# *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
deleted file mode 100644
index 747b9a9..0000000
--- a/public/assets/plugins/mxgraph/resources/dia_es-AR.txt
+++ /dev/null
@@ -1,255 +0,0 @@
-# *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
deleted file mode 100644
index 0029331..0000000
--- a/public/assets/plugins/mxgraph/resources/dia_es.txt
+++ /dev/null
@@ -1,255 +0,0 @@
-# *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
deleted file mode 100644
index 1a9df74..0000000
--- a/public/assets/plugins/mxgraph/resources/dia_et.txt
+++ /dev/null
@@ -1,255 +0,0 @@
-# *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
deleted file mode 100644
index 1a9df74..0000000
--- a/public/assets/plugins/mxgraph/resources/dia_fa.txt
+++ /dev/null
@@ -1,255 +0,0 @@
-# *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
deleted file mode 100644
index 693f99b..0000000
--- a/public/assets/plugins/mxgraph/resources/dia_fi.txt
+++ /dev/null
@@ -1,255 +0,0 @@
-# *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
deleted file mode 100644
index 1a9df74..0000000
--- a/public/assets/plugins/mxgraph/resources/dia_fil.txt
+++ /dev/null
@@ -1,255 +0,0 @@
-# *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
deleted file mode 100644
index 704f1d8..0000000
--- a/public/assets/plugins/mxgraph/resources/dia_fr.txt
+++ /dev/null
@@ -1,255 +0,0 @@
-# *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
deleted file mode 100644
index 1a9df74..0000000
--- a/public/assets/plugins/mxgraph/resources/dia_gu.txt
+++ /dev/null
@@ -1,255 +0,0 @@
-# *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
deleted file mode 100644
index 1a9df74..0000000
--- a/public/assets/plugins/mxgraph/resources/dia_he.txt
+++ /dev/null
@@ -1,255 +0,0 @@
-# *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
deleted file mode 100644
index 1a9df74..0000000
--- a/public/assets/plugins/mxgraph/resources/dia_hi.txt
+++ /dev/null
@@ -1,255 +0,0 @@
-# *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
deleted file mode 100644
index 1a9df74..0000000
--- a/public/assets/plugins/mxgraph/resources/dia_hr.txt
+++ /dev/null
@@ -1,255 +0,0 @@
-# *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
deleted file mode 100644
index 40fb543..0000000
--- a/public/assets/plugins/mxgraph/resources/dia_hu.txt
+++ /dev/null
@@ -1,255 +0,0 @@
-# *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
deleted file mode 100644
index 9366284..0000000
--- a/public/assets/plugins/mxgraph/resources/dia_id.txt
+++ /dev/null
@@ -1,255 +0,0 @@
-# *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
deleted file mode 100644
index 5035120..0000000
--- a/public/assets/plugins/mxgraph/resources/dia_it.txt
+++ /dev/null
@@ -1,385 +0,0 @@
-# *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
deleted file mode 100644
index 2ec7078..0000000
--- a/public/assets/plugins/mxgraph/resources/dia_ja.txt
+++ /dev/null
@@ -1,255 +0,0 @@
-# *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
deleted file mode 100644
index 1a9df74..0000000
--- a/public/assets/plugins/mxgraph/resources/dia_kn.txt
+++ /dev/null
@@ -1,255 +0,0 @@
-# *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
deleted file mode 100644
index d68dde6..0000000
--- a/public/assets/plugins/mxgraph/resources/dia_ko.txt
+++ /dev/null
@@ -1,255 +0,0 @@
-# *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
deleted file mode 100644
index cea8074..0000000
--- a/public/assets/plugins/mxgraph/resources/dia_lt.txt
+++ /dev/null
@@ -1,255 +0,0 @@
-# *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
deleted file mode 100644
index 1a9df74..0000000
--- a/public/assets/plugins/mxgraph/resources/dia_lv.txt
+++ /dev/null
@@ -1,255 +0,0 @@
-# *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
deleted file mode 100644
index 1a9df74..0000000
--- a/public/assets/plugins/mxgraph/resources/dia_ml.txt
+++ /dev/null
@@ -1,255 +0,0 @@
-# *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
deleted file mode 100644
index 1a9df74..0000000
--- a/public/assets/plugins/mxgraph/resources/dia_mr.txt
+++ /dev/null
@@ -1,255 +0,0 @@
-# *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
deleted file mode 100644
index 1a9df74..0000000
--- a/public/assets/plugins/mxgraph/resources/dia_ms.txt
+++ /dev/null
@@ -1,255 +0,0 @@
-# *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
deleted file mode 100644
index 0d64cf2..0000000
--- a/public/assets/plugins/mxgraph/resources/dia_nl.txt
+++ /dev/null
@@ -1,255 +0,0 @@
-# *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
deleted file mode 100644
index d9be511..0000000
--- a/public/assets/plugins/mxgraph/resources/dia_no.txt
+++ /dev/null
@@ -1,255 +0,0 @@
-# *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
deleted file mode 100644
index e87be75..0000000
--- a/public/assets/plugins/mxgraph/resources/dia_pl.txt
+++ /dev/null
@@ -1,255 +0,0 @@
-# *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
deleted file mode 100644
index 4e739c0..0000000
--- a/public/assets/plugins/mxgraph/resources/dia_pt-br.txt
+++ /dev/null
@@ -1,255 +0,0 @@
-# *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
deleted file mode 100644
index 4e69edc..0000000
--- a/public/assets/plugins/mxgraph/resources/dia_pt.txt
+++ /dev/null
@@ -1,255 +0,0 @@
-# *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
deleted file mode 100644
index d5da7d1..0000000
--- a/public/assets/plugins/mxgraph/resources/dia_ro.txt
+++ /dev/null
@@ -1,255 +0,0 @@
-# *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
deleted file mode 100644
index ff1334e..0000000
--- a/public/assets/plugins/mxgraph/resources/dia_ru.txt
+++ /dev/null
@@ -1,255 +0,0 @@
-# *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
deleted file mode 100644
index 1a9df74..0000000
--- a/public/assets/plugins/mxgraph/resources/dia_sk.txt
+++ /dev/null
@@ -1,255 +0,0 @@
-# *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
deleted file mode 100644
index 1a9df74..0000000
--- a/public/assets/plugins/mxgraph/resources/dia_sl.txt
+++ /dev/null
@@ -1,255 +0,0 @@
-# *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
deleted file mode 100644
index 4c14276..0000000
--- a/public/assets/plugins/mxgraph/resources/dia_sr.txt
+++ /dev/null
@@ -1,255 +0,0 @@
-# *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
deleted file mode 100644
index 489cb16..0000000
--- a/public/assets/plugins/mxgraph/resources/dia_sv.txt
+++ /dev/null
@@ -1,255 +0,0 @@
-# *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
deleted file mode 100644
index 1a9df74..0000000
--- a/public/assets/plugins/mxgraph/resources/dia_sw.txt
+++ /dev/null
@@ -1,255 +0,0 @@
-# *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
deleted file mode 100644
index 1a9df74..0000000
--- a/public/assets/plugins/mxgraph/resources/dia_ta.txt
+++ /dev/null
@@ -1,255 +0,0 @@
-# *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
deleted file mode 100644
index 1a9df74..0000000
--- a/public/assets/plugins/mxgraph/resources/dia_te.txt
+++ /dev/null
@@ -1,255 +0,0 @@
-# *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
deleted file mode 100644
index 1edf3cc..0000000
--- a/public/assets/plugins/mxgraph/resources/dia_th.txt
+++ /dev/null
@@ -1,255 +0,0 @@
-# *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
deleted file mode 100644
index 10ec67e..0000000
--- a/public/assets/plugins/mxgraph/resources/dia_tr.txt
+++ /dev/null
@@ -1,255 +0,0 @@
-# *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
deleted file mode 100644
index 5e827ff..0000000
--- a/public/assets/plugins/mxgraph/resources/dia_uk.txt
+++ /dev/null
@@ -1,255 +0,0 @@
-# *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
deleted file mode 100644
index 1f6add8..0000000
--- a/public/assets/plugins/mxgraph/resources/dia_zh.txt
+++ /dev/null
@@ -1,255 +0,0 @@
-# *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
deleted file mode 100644
index c87692f..0000000
--- a/public/assets/plugins/mxgraph/resources/help_it.html
+++ /dev/null
@@ -1,10 +0,0 @@
-<!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
deleted file mode 100644
index dba08945cd8ce69a0ec2afba6b44a54d4e7bcba5..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 5966
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
XdMlm-ceu^JhXzoRQ<trlHvjm4UGOL7

diff --git a/public/assets/plugins/mxgraph/stencils/call_management/callback_128x128.png b/public/assets/plugins/mxgraph/stencils/call_management/callback_128x128.png
deleted file mode 100644
index 082379a917fb6d72f63d775398430d46bdd41ff2..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 2377
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
Q`ileX_B)a*_W8yA2ekM%RR910

diff --git a/public/assets/plugins/mxgraph/stencils/call_management/dial_128x128.png b/public/assets/plugins/mxgraph/stencils/call_management/dial_128x128.png
deleted file mode 100644
index 6ccafca8736eff57247e73591214db7f10304da0..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 5782
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
P9s@u@Mn$?-(k$#hQ+NQ<

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
deleted file mode 100644
index 228d0493beea47c2b96543685c5bde94f4344911..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 5385
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
S;`@(90XiB6>a}WiFaHOsOf@wC

diff --git a/public/assets/plugins/mxgraph/stencils/call_management/hangup_128x128.png b/public/assets/plugins/mxgraph/stencils/call_management/hangup_128x128.png
deleted file mode 100644
index a08f547b69ebbffb86351414a4aef414b23d2eab..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 7477
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
NKtV=Tx<<-0<bS#oUfuuz

diff --git a/public/assets/plugins/mxgraph/stencils/call_management/queue_128x128.png b/public/assets/plugins/mxgraph/stencils/call_management/queue_128x128.png
deleted file mode 100644
index 71466667a4d8346a92fd739e89d801f74aae338a..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 6290
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
bclE$>4HD~{?Y90G3IR=3U6ndz+qeG#5CX@L

diff --git a/public/assets/plugins/mxgraph/stencils/call_management/voicemail_128x128.png b/public/assets/plugins/mxgraph/stencils/call_management/voicemail_128x128.png
deleted file mode 100644
index 10a67a7e31ef2568dbbeef6f522d5cfe2564815d..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 7469
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

diff --git a/public/assets/plugins/mxgraph/stencils/callflow/gotoc_128x128.png b/public/assets/plugins/mxgraph/stencils/callflow/gotoc_128x128.png
deleted file mode 100644
index c51512d6744ce9fb145bf0f6049177ababf76ad6..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 5581
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

diff --git a/public/assets/plugins/mxgraph/stencils/callflow/gotoif_128x128.png b/public/assets/plugins/mxgraph/stencils/callflow/gotoif_128x128.png
deleted file mode 100644
index 5fad88fb439b8c267dd3d608cc39786de0a09db6..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 7130
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

diff --git a/public/assets/plugins/mxgraph/stencils/callflow/gotoifmultitime_128x128.png b/public/assets/plugins/mxgraph/stencils/callflow/gotoifmultitime_128x128.png
deleted file mode 100644
index 49c0794a2bc30b8c3903c95e27a4adebecc8b40b..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 9851
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

diff --git a/public/assets/plugins/mxgraph/stencils/callflow/gotoiftime_128x128.png b/public/assets/plugins/mxgraph/stencils/callflow/gotoiftime_128x128.png
deleted file mode 100644
index b91b5b6d43abb6468dea70b7ef7dd355517546f7..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 7388
zcmb_=)mPPz6Yb}m101?UN=lHD?(UXuknT=t4sZbJ7NomHI7o<ecb8JqE!_?G`@8?a
zUF$yVnTJ`k=Vh-wvnEPSMGgy{6deEnECqRKjsG(Ie?Ud~FZPI<jQ{|;w4Iccnu3%R
zm72SYwVk6C0LWwIq<U)+%n=Q&jykf{8>LcP?YI3xE@o|$|4N5Gatv0~|6@h;gHIZn
zIyw?n=N*H2r!50MQ=uLzD&Zjrjrs$oEZ*y{qy1!8H$wDxPbw>v-l7))H@V)sD-Yu&
z00ZbP*bKW85N}YUj=#LI?(d^#KWhU}q~Q==z_qcdaFU_J7LE`%;pHOo{BmZ30baXe
zfqw)L21uW|GJ^JBPNb5U@D%}g_Y@#RA(j^7{&raZ4nIjLPdX#_3!?=wjRi+0)o=x;
z%0ur?&^^ptmE@u}On6o<wJtJkEZL1{_{~KzEF}pyCFUII5tibTUztZcMwtJIV&%u1
zmy7{~Q_s-CoCSyfFlhEpB{`<-g2nTT1Ns<EYCfC5chCSKxq4}4dBrsLxF$NKH#Rne
zT=2ZSzBGB}Zh^l_@#zDWyOuHh-LwGg-ddkP?aS}fD8hxQ{)MTj?mze}FS}O>S$S>G
zB$jPYTW6db6S)$xxonGR^K2hgSb$2#dR~KeTSg&}tpN`F-!fa~vna5I0kS=M_~%bt
z>#L9^FU_i>b9Z-_3KpHy(3zY#2oi){Kl<PP6INXC&2t#ITrYDk*2gccEdQHbN%k#0
zgK5L{PATSvVk3zBR{NvLwi(5c>UPYX<YhUr$1qYicm1+tt~m7|9w%~l$H8d_=EHj^
zNnoY}fvqPcNMs0~;c^Oe?ts%dIS45H4LugmdmxmI1=VH|eHXd5J64yyd8vOfTjRWZ
zJ^s3w!-`XgGjr%`^o3>Y3R*@N7(Wr}k&jXjr(j1R>?Gs|>8_!{Bydq7Q&bepV8cZ0
z+F;_X&}~yJ1~9ED#yoaKm$4d@RQwe`%3`O2E4Cq$ZWoX1tG^H_QvzW~@)}QiFcm6}
z`diXs6gw%DL=sDk8Y=HWBJ^PD0v`sF522qE2|i+1g?`9)FDG5Z;SpbzqR;;{X;n_y
z48fAxoIIHnA`WI`C;#&q%Zw=<*}tpHmAe&JC6uT~ab41f%Mf|4TW(F~mJIf~9Sx^z
zVvP}r%JOsY9u*-fh8c~SJorm=WYSl84vnZ;YGrxobey4Fcp};s3ra+RSvoOBEE65T
zMcLEG++W$7VqU=!!CsZlI_f#fZjFC|r`Tt2I`)HgUfhw47b`1)rCZ1RpoV20V?JwM
z{m_97d!UnKJ=+!3=wpcDOoAZz^=2+sDCS@wZmsmxr<HUC^CTRn=hG=Z3@?!W8TA=6
z5D<$FlA?N5kJf-BCJC01*HbKiM@E-Thl$&d$|a3l2$~8bmfgZj!ySqA?8P>xbW7ov
z(s)Ob^jChW7;~Cb<Mp>Fk6@3y%P&fF2VZiA@GL>TJWbKC6j+q7QlO%GVY<eAiga{J
zZH9ZId#ZcH`IiqRq#7dM(6rDzxqb%w<=!XW%f{2$FcL8gBpcA`(#*Z*qq;H7WpJT7
zq3w_l{01v|bh{J1LqjeMDF7P;7yZyEkX`@Wo!^~8tvn^mp~PWOqjmOU!>W(|gAc6~
ztqE<eM!__w<l+Mj_vcbMi<!oH&w9Z{<V6N@Ile;ZG}j*O<;h;#rGgc$mH#&JHh7zK
zTXR?n^Rw9?s--2zF!2EKFX9s|ZtYgB+xJ;onOZ1XrP{mYeii51G1^($E*0&X78Q3D
zRuxX#4x0Y?@#=iq32GC%t3`nl0p{2N@dsqb*&6}_JAZ$}d6amlc~b4jCikY&r)Q@x
z=LqbMXN9W;3i>9`XNM;%CIzc_5Xv)NbA-0Kws}*5!&=sU9Chj1qpUl{@!=})crBX_
zmFn?WMA9*A`DgQ3GtQ;FA9I^l8+w~cn?iuoliJhvecZh_RwN2@s7EL{$}-AKxNLY$
z_#4b6%sk?6q{yT!JoenpE=oMt?8c6U4zM01n{Lh_?gc0JF#=vsc4fXQjw7znF|siv
z>z1+mv6`Ln9m$K27ZMoJVQDhCGDUqqXnQz&-K(s!wm&fid`J3TrL(L<Sw&u1S9wr*
zvcRx_v{3nT|Hs|(pV?Fg0}KD2c>7(OU&Dyy<FK|2k=4M2Cnsp8RCy0dgh~WXyh^<J
z0NsEaeL$IInUP8;vmjHp_Hgr7tmn0t@iuJwt}3P|rguAi#05c!$UsCG<&E-Wj^r8e
zdG{*M#cejMIt}LR=N`6C1Pn?Igl?)IoDFJDB=72<2<%vGd|mhKJ!ty%^VfV!pMU02
zw{e%~LFn!61Hr@P{rkJ|o2u)8y|RO}ow+@}{gbth(HBR6mx|xiq0=<qnu_noTUX9O
zMq3#*U3Oaj_l<(L>XCMl{KYf`*jVVxgnmJ}UBc_F4eYpt#0@Nm5{>G&8>f^su6XNs
zJa`E-PSj~~UUE}~Ukb71+TyR{S!3GyR(;w%0&QYpO6E#ZqaKy2j=qO#+1h`j8^53Z
zI}5qJMuJHyNd|P!f>)83h+^pk-x1QTe6+3qVY<F8^Dm~BFz3S;)s1)Ls{M2Wbd)NA
z6KI>W?xh-FO|KFq_l3XYe{F<SjgeilPx{$*6H1y(Qp-dYJ}EAx^5z~V8E1&THN~hv
zX5$2NURx{Kgj-RJW{*XW*^kp%(%a<WzDMH<GZOeHfGqGt&841XYg;q2aTG(}*R^qP
z$lz_}-10g8S?NkXuH>Mk$M@Km$JgcD;yi(f;Xmv0OHF58sJC?dwmR*SW|r!f=E*vz
z-)?<(ieCNtL06JVQ^yN2ZJ^y~@A32HpOk~V1Lxdh{U1N4yG7jt^EpofdqM;&nf^&f
zdyPCo-jKVo%d=-CE<G+Jt}W}3_vr6sO}Z|uq_?@ab}NAK*X1xD@2XY+SBrq>CzlM1
zg<O_KmTs0`4StRyS_r-NdYGlbUc(=BYZ<q`??(ztY`TlO$IB9nZ<jf=UTger*9_WC
z%{lo#^WEi-&m8y3^!!h|xl8Aj<6x0o|IBOqW0r*n=RDKZqo?Nw0|zVzCY&|wEpi`2
zBF(ucmV>2mzpMK%_c+inXau$l#Xoyjdt3fWx5i35=M>&}N(Eu}BcZ&L#VqE`Yd)?_
z#rTk-=_1t*)#v9wHER|*1NsA5f$X<tx)@a@jj!#ErUe&LS9oVBR#$?k_oQti9OOn4
zQpG5QzkRCRNjd*kJ5xLpR%SE7EW+if<KeYoxY(35UOeu<yE(qP7rpnd4HvdPEz=RR
z+tSuNVd&oCab7#J{YqC)cM&0I>~!R|XLmQWUY2S+u<}Q=to_<yd`|Fw_d1W_l$hUp
zdH25WO)wu~CEL61<<FzRFX$_1g!6^7SW~j+Zr^fi3)hX#>c9$HVE$?Tc|m{AVxDrK
zGle^uAkQJ!-wTF+Q*C(1gLNkELB3)iZ`1D^-Ie?+*Q1V-lQ#o5=W<zn1n-qD9jy!Z
zbo)%aMfd`rdt7omu9W(f<J)mN(x2KcOBP2$s}D^)Rl-z7U^!2I*3GwZi&;`G`YtW2
zeeG|uhJq4;Os=}Nqy`4o5^ikjY;0ZtNczPi9`=;!e`h6{tGxav0Kj<lKY)PDY+?Yw
z7gdm!(DDHt8KET-{3dz6X(v)^l7KL%;|fzpYeYlwd8RbfHECr9X0`A~($i~&&1q$o
zTg}a}lhMz{3raYsyJ%$DQ6-Q$+}|_2ANd)A?tgOl^~9gcW%r1^<+5|MJ@@#AsIGcH
zaQTUH^<nj8d_0NX+bgnY(w>U1{)<r8R}?Zp5*rB$K;elFR9hQDIBNi|JJx4I*e>Y5
z3L-c$=0q3{5g+8ibwA62x&o+8D3Yx07XUW!c20b-&zqtXM72eV+H^Y(;Rik&Lf#Us
z`u@L>1qSYI@uhYD+a#01*r{<7ERX0y0kHnYiz%7SXSb3uvJECp!-{>W!<y6`<Pyse
z%EbjgrR>j=8*W9qg+VAXr+~P{44nOM{<I;<D!pp_ej3~6!_E+@UVy23ycWUM2Q&Z>
zW+)uX0^p0OUf-OL6XV2tDvX?JH)3@3qw1S$M9|-@;IgxCAz23jq~!etNgaZXYUAV@
zR3-vcCMbj_CfNqdv#cXxE?<2O47RqN@a`H3<=@&}O24H246369*kP=(Zuf9-22ZX0
zc*xnqYwObVK#KiDB2Y+#m}6>KUV}XJdm1xT@)`^nXV5-pcOjpL_9$*$1|y63?fTu`
z9Wjh8kqTKVN@c}L{bVo2zXEK>j(PRlTC~Fpjfo9IDj>#1m~N8Zy}BLEZ8FC})#}EJ
zfAGf|g5pbCbgdp?*L?tkN9E=~SKBHtLTj8-Cw=x5^H48{t<pJ(R>;80NjVD)M?cS8
z+Roh^0m1Q0)^>kMZ|!V*Qp+@HfO>FH0MvMer;BZFpH#Pi3q1CIr>-6@=<7j($K0yu
zK~)`|LHk~e;Wr)$S+@|FM~V?3K2`J<@y39fFOKDFd*t4${eamiRVVw@Cic+}#BD!m
zN#Dq0pK}TYxh^#$cRpb3qnaaH3GW<eoN6g3)&+#ifD__5dJ|S)l2xElO;%UB4drCB
zs1%D$Yh~BQfpjbQN;!ldAH+~?4Yk4n)c(nd-*t!}Fr7PGagGq7H7EK@3=_`r@>m}l
z?c1ktmmAODYe6zA{@MK`woB}NL_ezoORPobu(-1sKGzq7x%Z^w3kd53oU-<l-B4)K
zC97i@)wLRnnq_e+nui`ng4BZYz}^poz33$RsjWU^p>M=aev-O46U$bK4?Q27^;Kl8
zbzv!M3^Y*1t-gAT@jdUZOnX>B>Kf^-%M(ChyOZTvORTNxy>_twx-DSrg#tj&^O8>z
z_K<A4RB*iuddye&pw``SS3)g-d-MP!E23Kw>YDVp@@`wg9UIv_9=jcl5)K>m$2CWu
zwxHzc+4dg%S`_{J<!)Ea=i9F8w-kK<^c}Y&v~!gLC^_e3@E-rn$;fN?KFeaRx;#ye
zk5_>tB&52CyFHF7wqzpttr<gRA`7bE3lZK>ovS~!r7)(fC}CBkuK~?8u3eh`+L@>p
z$oirV)R}{YD~y(SOM>)_3=sINcgdWmy&7pDei50yO6yRkAMxrnWM&z-_IYpAFc|dy
z-$7W}je2<A<3DF#@*}@1Og0927(Lui@&)Wm)|x3nE#bN!bYO`{5Ro`X{~d$RnE{O!
zB0=#Zc3x$^8^MjuiSr920oRUe$jm99to4OC<eGI#(5g@QF5yzllp8ai<&^uaAgS80
zRVMxFDk{}Dy<)KBN2@JAwhQQz`}P6=c`#JNLkrZ~QNg_a4pa3im|+B_tmlvF=Hi)2
zONxU}jAd(fG(JKvS0A;>_a7b#!%lB|-ARnYcZ#OwC+D2Xp20wDx7RaeJX0E;Y<&lX
z=R;qNgB1qUYGdp_oi1HGtvP)PNSVW#Cy1S5h*cGi<VUek`{qmf1jj7>uh;P9X0pnk
zFoa7P^R|?&DyE_8sjteq#sOXR6b}$0_k3YJMMMSv<0+c@2#*b<ekmsi^Ji}Mc9Ecu
zp{w}!5P6-(wWb)lG&eEkgKoSEo|t>7ZdbH*WAbB55I^Wr)ed$65;3%wquK-NR&0b`
z+_<j<A?>jStZ{7Ornl_3LAErR!5rpXXI_KpGsuMZ6*;q%0NfxOoyeE9Szp<lUeyEz
z`T0DPE@qiBbhmwveWUkPGQW=}N=t2k#_L-!aOaxAN2XpY$Mxubd72}oR!pnJH#Uhe
zuy!YWDoWm#PFF+M0&-I^b`;F?9qX@oLYSs})>NaWE25EkC3pF!s3(H;f~DcRz?U>9
zq};T?Kks9_>xXTKvjxGLGamGKyR1sx>=)GWM0%_t*C3$Bn5Uv#alhk}a*^<vS@KpP
zx?0$3?U!pb|21C-T-dkE*-lP%y;3UXw+~9544W&DrE$GT$jbuqFQeauxt3)(Wo~wb
z)6c<gjqDY!vgUs$SUaq0oFXjY%oE~tD!jivcr7W$zYV2szG(r(&q}FBqsW7n2$BTj
zcWvs{e}45u*SBXUKVnqUnDPKB_<paN3AEQ>01V-E-aI@~BoofEbwl)^FFQ;ujF$I8
zK<796%y|LJH+$CrAcDy}mW&4N?@9cf-t&v_6}J;qc2V3;xnN(rg`F?yyl>BEa3$}k
zm!Iyk#8~kN1kkQCNcTTkBr`FbfiZ^~T(Nb;8NmzuIfk!nC=)`li+gfM|D(-FkeRDi
zP@J@^J;GNGoDPhAuR3Hae48E!z@rJ`lG}W2|8u(jB<Y}7e%}zyU;f|666S713tUXG
zEFEL#!1nz$%992VfXF_6gV;B=!K~c-4fXblM)>P8j9I6!SVQO1D5<{LFqT>fVB0~K
zBMgbz4EfX-UzX9dKS{8X@C}w@N#UJ4+6(I4w$wttoWFpY(c+t%IRxjE1LDRiY43Hp
z-W6t+7n&5)@{43aXm59;Y~@#yyV;18YpY3eR5d4gvhs#X>8%Qs)@mS}&d!lV2~0^J
zE~+vlnq|#$xpQ-swteaZG`t8>O_uoz3_X)|3Ix+bk<*!3M0C(5H;I`a+I@WR{+#y>
z#O|qobHP9QaFv-}xYUNq<j3t+h+=dxp=*)p)4a@ayGHui#cbzPZB*nPrS)NtK*BJ@
z*4j_tCj?*!R;&Y_RW?2fx9KF%`#vGsh>KAX7aU5>!mI^6Q+JaD*w(QOUrgFpKL>z2
zv%7TB6XbJWk1Zd_rVXlc;82mML+vw2jkEsT(E00s`E(6a#kU^Sl#R&n6$~V+(`-gT
zzqxO}&C(Pd-m25Irdvl5q5#Tm(ipxwDH|3(sWP7oL*9K?ldH(!7WqBmgA!^t-qJxF
z!%L!7D<(tquJq9^L4~IL)2$TIXcP(E(^ayy-Nvv=K&Y=<Q2g5-h@PJg&O~7a(7IvR
zYQUykhOKquD%hri{<sJNh%2S?a5hEz!Np(o;`}$4^a_=WG)V-tbzAO2VcC4HyTkMN
z)y}oFxjW~Gtp1c?+DHg0I)bj<-^k)VZh|OuK(LpyW8>nElgiCf#)=-$+a^BH@|COp
z!UO!+EW@Tnh%vcOy2?ssKYx9HmYORp^JTZD#%*c%zI@6}gobt%#s(t4U=|Sn{DsG>
z4TUwo;5DXxVZfvhDZkY>_}WsI-n&9>;sCJ6W<|<ga>fS>6gx?~E!8*ln$-s|R%30n
zlO8MvZYQ}IIbY!1GI%5V@_a;S4a94X7gpM3ON~`vzL7qe7LqK<J8bK0*!Nrde@aCG
zNHcpnGUqvp!89>67MW?WC5cYV;K>c!sxsp`^qK_a$t4J2NO7~y73F_EuN6L|C>syD
zSLol;ZQsmcQ$sz}@7nl|*Vu-EbNY>gy?dedZ!&#(@1FrX$c7uAH;cg#8uk9a(Rpa!
zLJ!5EVVoD0?vs6?zcBtA&IK~cxz=J4nS3#d<>lt5iQSGUyG@}5!iGp+e;^-a4ZjIe
zR!Z%IeBAu?D~3cp?sAE(lUf6~XlR&R)-iOM70AatZnZ-cKB1&&b=jF;gEx<r8c%lL
zDpJ<FGi1@R5~^n@mA34vcXV3V69KLPSwFDhRFl2RsjS6?liV7iG7FeU|JTik3LerP
zh#mYu5BN^&f}oh=yw+YC{IQI%6se9hQ!y$dV&{H*H?Ns%sfo4M^R{-7vgm~{`+pxL
za$c-@x&Km!ml&~OY=+Lih(Ve19>xE2-tTPPN(*zRLZSZq@N(uVcI+!>Q-cLBb@l9$
zQ>fGPtIh{$i^Z09e+kcbf&yAJ#wI@!?+Xooz7=nVhSDB><=Izvtl<q(Ol2jIfN>Fx
zbmiXiw~GN*7G<l;2bskp>Ux@|#=_Ugz}|z21Q|O~PZyn=M??5hr5=J_Iam0<-Lp*W
z`GIVAU8ez~iD4F6l2>~R0ZfY_I?s6Fp5AVxda;OJ^u-K4?Io)Xc>CTB!Rx25^U+>(
z?PmE=59G_}B#hrp2KfLgg1JJ6TkON;swn&Bmpx8_+~qPts1mnWuI8y9^`Dm)aBG&w
zo6^R%gl)5DMz3~r<cbi3N35OgF&n5tY~#dAUJZoa8+`&DxAV4$y(3BZ)1L0D4uw;H
zNBR?@x$3*~1Spl<BoVy>?2Q2;$hNX%ccoQTwIb2XP(FmPzy+;;H#~96vv_J}70_>o
zWM~}`4t!?oJtYFl@m;l$!;FHT;A1{;O1R&#B|`(4<WY|tUM8h}zH46Q8d#$A>fmXl
zW@4RiJm561;b{<GE26>_?Rp{ugzNe*oi1dpM3c#i+5&uCnwZXxBP>^qx7z33uSdm3
zA54E<O6cEDyzU)s-Kx&y;wtk)weVS*{0=vngK#Qh*r=gtyBQ6v17%Y|q%1`KutN$&
zJ+Dpb<0Nf!&OuQ~;mmo7m|E!JBR|=KG7R<n*3&x&$4(&AXQrHWJqRD87v6_ny$&jQ
zUS>5uKr7jUdA$0x>-tG7(0FIo4Z+$>U{K>GhZuTUVL7Xjd4fA@q#7@i^xz35cygI*
z=nI!5D8c#6>2a3stThu{ik9*uHXnSle5$_sSd~oNvdHYOr}25^i#_4N;S}OCjzw{8
zkYuKhdMuN_kH^vn`%#}hR?ff04vb5UxX(<Fc%b%)$nEWB`}z+5S7TOGg#+VqdxB#7
z&Qgaqd?%5Spa}^*C*<k&&MDuLn-nzf=t24os|@vXt~t2bsq*(`LzVX$-y3q33Ki9B
z)7;IvQzg-d_gW%kHA=FFL&BdV;+TI^*2$+1+3Y@^fa<%|YWda=jET&bZXMKjS3=^_
znr2c<d(2YAx}^T{mn!GVwvANntjLsM{IXJ~2%bTti+GLvn7(c6IgMLaDO6Mwd+ZWZ
z*%Ty&2tGQJ=~87}wYKka!CY>=JWQXknc!M;)v6HDvFZ$K9AJ>=u(vxvOcdvavwtQi
zc3KE4oP%zmeA@R_cydtWk=`ATT0Ez_0pamzm**W1fK+C-IRnorjz4=Lvn|5U-<Wk$
zQO)vD3(k(FXrrkC3uN#OSZtBN<3wNw{9Ru&Fqu8uI|rc8IN%md<Iz6VxB$UxB~02Z
zarxFNygwEFk_5-n-8ibQ0r}6@l-|c1-q48dSFTh20J8?;egVPEX?3qC`G}T!Dv9v{
zy+0_Q7S7{t>U+#1jNvKJf#j86bCEut8t*|5p1Mo#xkYXG@q)uwZ_ZQ*%`e`}$q1Ca
zhKM^v_ThW5FK%d_B`G+IOq7!9k{#hVh5gbCr=z2Hea0xsX-kQ&{d@Y6z6%6TjpR2S
zlAh!P`pdrC%pLj^ALi}0OFM$yZLp21xe#mbjryV4-zT;|eph2@4fV^}$A*hniKrHI
zh}Ui2aQgu4JczE&6bUiR!HMoVC|fhJz#{(IJ&bkI5x}1hEdwn778zjg6otBH8&$!z
zeyTjsHQJNvkz`C1CMl?s^(MSJjxt8wSv7@FWsKp+<uI#8jvtwPCZLu<*4Bc;^FRJ6
zGQ<WbUca7o#0DgOR?0Pz0mAR!moJb3A@=$S?gD_1mX=zb0D$znmSWo-I4v*FxBdj6
zR#=G)Zv$)U>Jno+0It@EU&;umv#2m6a|}dPo_fWQ27$}TAoFBF#MM|1)LEfGLNvNP
e@Bi0<2QL!pP_mgD5ahr25}+WXB8`wV4f#Kkx%2Y?

diff --git a/public/assets/plugins/mxgraph/stencils/callflow/vswitch_128x128.png b/public/assets/plugins/mxgraph/stencils/callflow/vswitch_128x128.png
deleted file mode 100644
index b2379c69ed871d748231c46e8e2f8c5086679066..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 5410
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

diff --git a/public/assets/plugins/mxgraph/stencils/entry/end_128x128.png b/public/assets/plugins/mxgraph/stencils/entry/end_128x128.png
deleted file mode 100644
index 2847e9dcc7228695ce781f51acaf036936d76d44..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 6551
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

diff --git a/public/assets/plugins/mxgraph/stencils/entry/finally_128x128.png b/public/assets/plugins/mxgraph/stencils/entry/finally_128x128.png
deleted file mode 100644
index 85beff1d422275dbd5e0bdc016a1bac5b7c55852..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 7568
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
P!~ivAEu|U-o5=qIV(DdM

diff --git a/public/assets/plugins/mxgraph/stencils/entry/start_128x128.png b/public/assets/plugins/mxgraph/stencils/entry/start_128x128.png
deleted file mode 100644
index b319c70e2c9fb9910d2172f96ba62ed28372a126..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 5631
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
LqoLHKU>Ws)6raB)

diff --git a/public/assets/plugins/mxgraph/stencils/general.xml b/public/assets/plugins/mxgraph/stencils/general.xml
deleted file mode 100644
index 137e5f5..0000000
--- a/public/assets/plugins/mxgraph/stencils/general.xml
+++ /dev/null
@@ -1,58 +0,0 @@
-<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
deleted file mode 100644
index c9af63fd141f22b099f8d75620d7b3d2c082ca39..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 4113
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

diff --git a/public/assets/plugins/mxgraph/stencils/general/custom_app_128x128.png b/public/assets/plugins/mxgraph/stencils/general/custom_app_128x128.png
deleted file mode 100644
index 5fed7d3009c0b43c8174a8c7849b7c4fd14906b0..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 5273
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

diff --git a/public/assets/plugins/mxgraph/stencils/general/noop_128x128.png b/public/assets/plugins/mxgraph/stencils/general/noop_128x128.png
deleted file mode 100644
index a7433894800bbb32cf7cccb025f05b3faa14f775..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 5933
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

diff --git a/public/assets/plugins/mxgraph/stencils/general/subproject_128x128.png b/public/assets/plugins/mxgraph/stencils/general/subproject_128x128.png
deleted file mode 100644
index 2121d75e39a046f1f6dede57c461f41433b24b36..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 5143
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

diff --git a/public/assets/plugins/mxgraph/stencils/general/system_128x128.png b/public/assets/plugins/mxgraph/stencils/general/system_128x128.png
deleted file mode 100644
index cadc61170e2c1d141346a10a9d25cecb9cf7bd10..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 5866
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
I!8+pq0BmL<!T<mO

diff --git a/public/assets/plugins/mxgraph/stencils/integration_server/asr_128x128.png b/public/assets/plugins/mxgraph/stencils/integration_server/asr_128x128.png
deleted file mode 100644
index fe440923fdfb8e8b618bd94e314ddc0228d38f75..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 9355
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
KvNh7Cq5lIG%M?)n

diff --git a/public/assets/plugins/mxgraph/stencils/integration_server/database_128x128.png b/public/assets/plugins/mxgraph/stencils/integration_server/database_128x128.png
deleted file mode 100644
index e7fda199ad4d8cefb3fd44d02c579f168160aa8d..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 5900
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

diff --git a/public/assets/plugins/mxgraph/stencils/integration_server/ispeechasr_128x128.png b/public/assets/plugins/mxgraph/stencils/integration_server/ispeechasr_128x128.png
deleted file mode 100644
index 2f2406c9929612792927e50561f82c99ef44d54a..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 4918
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

diff --git a/public/assets/plugins/mxgraph/stencils/playback/background_128x128.png b/public/assets/plugins/mxgraph/stencils/playback/background_128x128.png
deleted file mode 100644
index ab99232d6f3dced7ae0b21594ffba1ee08912bbc..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 6874
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
Kbfu)p*Z%`GED}-x

diff --git a/public/assets/plugins/mxgraph/stencils/playback/getdigits_128x128.png b/public/assets/plugins/mxgraph/stencils/playback/getdigits_128x128.png
deleted file mode 100644
index ac1176a8807deff4ad9cf871b636e196562602d2..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 4864
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
X<eje`S-|c-3P25_sa*T~P3V6B{g@xm

diff --git a/public/assets/plugins/mxgraph/stencils/playback/ispeechtts_128x128.png b/public/assets/plugins/mxgraph/stencils/playback/ispeechtts_128x128.png
deleted file mode 100644
index d785d80d010b74e2a96d1e94af16ef1eb9f4b851..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 4830
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

diff --git a/public/assets/plugins/mxgraph/stencils/playback/menu_128x128.png b/public/assets/plugins/mxgraph/stencils/playback/menu_128x128.png
deleted file mode 100644
index 1f6fbb0c2a553b3267614016cfb85a0b7019180b..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 5010
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

diff --git a/public/assets/plugins/mxgraph/stencils/playback/playback_128x128.png b/public/assets/plugins/mxgraph/stencils/playback/playback_128x128.png
deleted file mode 100644
index 3eb62f77989ce47e80c6c6d1fcb6c313ae927679..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 4903
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
S5&EyG06H3a>eXuY&;AcP_cbp7

diff --git a/public/assets/plugins/mxgraph/stencils/playback/saydigits_128x128.png b/public/assets/plugins/mxgraph/stencils/playback/saydigits_128x128.png
deleted file mode 100644
index 3b7d945398e18eaf30830720cad4cd92f76e3414..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 6105
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

diff --git a/public/assets/plugins/mxgraph/stencils/playback/saynumber_128x128.png b/public/assets/plugins/mxgraph/stencils/playback/saynumber_128x128.png
deleted file mode 100644
index aadeeacf308f3361e9708fc5e53fc918df86446a..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 7097
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

diff --git a/public/assets/plugins/mxgraph/stencils/playback/sayphonetic_128x128.png b/public/assets/plugins/mxgraph/stencils/playback/sayphonetic_128x128.png
deleted file mode 100644
index ed8ef20da72c4ffd118dcd237731ae940eeae9d3..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 6642
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
ZQRl(*6V>>|e@{1{@={%)O3p0g{{V^9j=KN=

diff --git a/public/assets/plugins/mxgraph/stencils/playback/tts_128x128.png b/public/assets/plugins/mxgraph/stencils/playback/tts_128x128.png
deleted file mode 100644
index b28a2f29aedd5817fc66df1415341a5f22479ebb..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 5600
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
U!z^OxKg0%Tywp{#Rk4oze`0Ec>i_@%

diff --git a/public/assets/plugins/mxgraph/stencils/recording/record_128x128.png b/public/assets/plugins/mxgraph/stencils/recording/record_128x128.png
deleted file mode 100644
index 80011e23a646beb2aff3754f1da5884a5b846ed2..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 5155
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
AS^xk5

diff --git a/public/assets/plugins/mxgraph/stencils/stats/goal_128x128.png b/public/assets/plugins/mxgraph/stencils/stats/goal_128x128.png
deleted file mode 100644
index bbce88942a2a5e670ac2b0698582671f7a492069..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 5807
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
IrOm(m51K*vb^rhX

diff --git a/public/assets/plugins/mxgraph/stencils/stats/queuelog_128x128.png b/public/assets/plugins/mxgraph/stencils/stats/queuelog_128x128.png
deleted file mode 100644
index 33f805ad2bc8e0a35946a0555ee73d89fb42cd94..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 4347
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
PBOYiz&{0FHTEF}cP2enH

diff --git a/public/assets/plugins/mxgraph/stencils/variable/math_128x128.png b/public/assets/plugins/mxgraph/stencils/variable/math_128x128.png
deleted file mode 100644
index 1cb6f903d99ecf956356c0593125b22f974cbef1..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 6286
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
HO+)@4{3hh)

diff --git a/public/assets/plugins/mxgraph/stencils/variable/set_128x128.png b/public/assets/plugins/mxgraph/stencils/variable/set_128x128.png
deleted file mode 100644
index 104d75ae3a1f82764f06401a514ccc181616ad8a..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 5854
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
E0E0X+R{#J2

diff --git a/public/assets/plugins/mxgraph/templates/images/aws1.png b/public/assets/plugins/mxgraph/templates/images/aws1.png
deleted file mode 100644
index 3c6243f40d5fd94d5914bb4a4af344440e755b75..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 14950
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
Tx1S4590kZqDM?m|8wLFb256pf

diff --git a/public/assets/plugins/mxgraph/templates/images/bpmn1.png b/public/assets/plugins/mxgraph/templates/images/bpmn1.png
deleted file mode 100644
index 5755f3124e1728013f6e31cb5ea12df58b88a699..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 12907
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
V3M0qF&<+3q002ovPDHLkV1iHw>IDD*

diff --git a/public/assets/plugins/mxgraph/templates/images/compare1.png b/public/assets/plugins/mxgraph/templates/images/compare1.png
deleted file mode 100644
index 74846aed6bfea4c3b7bd5e116bfa966ad84c64ca..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 11640
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
C_G(uE

diff --git a/public/assets/plugins/mxgraph/templates/images/flowchart1.png b/public/assets/plugins/mxgraph/templates/images/flowchart1.png
deleted file mode 100644
index 7cfa3c7c42c316da901b5c374ef51c30a650df64..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 13007
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
RS0n%c002ovPDHLkV1g*}R`37-

diff --git a/public/assets/plugins/mxgraph/templates/images/flowchart2.png b/public/assets/plugins/mxgraph/templates/images/flowchart2.png
deleted file mode 100644
index 4c598e2eb5bf0d86d7ea915cce1e4ccdbc988a8d..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 6606
zcmV;<88POGP)<h;3K|Lk000e1NJLTq002G!004{#0ssI2tD%i;00009a7bBm000XT
z000XT0n*)m`~UzMfJsC_RCt`-d|8hqS9aca&b>Dxa;e;^Dr@h3oo;SJa%gZyGo!`u
zh>!-7J%C{7!LNo5_^<fIFM<GLUTk<^3tq<dNS0*S5{H~2Ib?I~g}qdDEnRC??it&?
z#}8T6)l1gKE_M+<NEDEj5s_cqJohZ$IVVV#KENPx0@C>Pto>zeBFGn_Fj`w(5$CGo
z6JFrOt;P?k%ilhsB>~gG3w-UO_xOxRRy&j{l&42>olcmgNJK_Pi$P%S3$L|T2$1K7
z^l5mztvUb!h}^A}c(tR+m}WQCiZdRQO~!NS*{Ux>$F$<W-q5$iFi4=ezS8nEXDc~a
z0SKu;1afTazL&xP0FgvVtCy;*dGE`0->BEFcrHwsh#-NdSexTQzqi7WNcz){y-f_W
zqF$5|;QJa*h(G|M#y@|#6L`mie%DoZ0`_qIe!3o9IXRJw6DS1&tOEfM^c>7;)AL9K
z$D;AOLMH&uzWc!IcJAI@iBs!Jl}Z#v*4j7<%jKf;Dt}mQunt^&JiC<#{#OL#@!U$B
z7S0Um)EK4Nbs8IK*g+bRjk~=tAI_f{Gv7$N?$Xcd`BPIBZ(_(gaUuW|vvn@;_|AjY
z%lbN*tc%=n8OQ<91t86}Ml{<SJspQFOGE@P5nx3?Q7AgvxH6+8k>gr&>|tS2C%4vY
zl8S5v1+=l*(~3)lAdT!ynZ`<<*yHp`yDE%U^sQ+F00a=haAP^~jS4D0QU?K2kOJH{
z&?O06EJT#1X`_><oO$Q^nrHa6D-*7lC`BX)eB~dLQO6z%BmI|4|NL6ErAL@4NgWX>
zMg5f~g6(Ylt8ce`--F20iX-@X?Y#yQ21S4*psfDnR@BO!Jvp8YLs6QX6%Z)~GkO-q
z&3ceka5NAj5kW+pK(=pV@PS_ydb<-_H^3i?(E8HG2kYafPiLEJYx8rnK_&wrj^k5j
z&zFYt3wPG1-MwZwVx#b(oq0_21-_@U83Pg`KnMa@cVy7-uC$6nKI~)YMZkvs`r{3I
z`r9WwxxI8h8+gW0x6@^j=K4~(bTJn$2zNId5v&Cf1VjjwV<vz^0G6f2PPH-=I-R7@
zjA91GoQDC*^;Lvwx85laXOX(c7G4N!|MqSc)ysiGoLC4%gqR`Xc{IDydxbyw)`dJe
z>6S-kN_**l`~nk2F6dMQZTMfVQJu=<4>?DQT({SKqp<i7FDZ8vK3FHIlf+57;}iuT
zMH{u~i(2_~uG2_`SpnNSLIhn%<No=JWScPqu>DiG*^TDh*@hZ*N!qA4)|QvX#z&Q;
z(y5)ja7HZZak;Uv4#c|!Acuoa1R|jS7r<8FCFQ*T*3@bot$^SxNb_2)Yc!P$85_CD
zlWfdmE{O<CR0-UPVb$%}?t_(6qZyktnvJG1rc<w%N+nO6ujHtb!d>mUBAgxfwzNn9
z!yA6=X&&mkBnLd@N(C?sPs#ks;`+)`b!<F|qtZ|yLe2H%v2wnW*VH;1+<QR>;F7KN
z5dk?DJBDQ!IkCcz{7O5}MI1Qm(?oS-xK!}`AW72odMga0B#oEXYT^wIB}W$B?*;wg
zPD-69&or8C-|+BA&URyZe3ua*PO=$q)Gf~4>Ue&Zh|{ok<L15Z%&2qc`~VUr^_3Q~
zC4!hE0lx!%pgR``fpkD&*!$&zHj1VudtP895!v#o4|lf<H2?Uri^J705$7bEH<PXU
zrO9%kqLEsVe{u|PKzcMm+ZJ>pK=S~f$^>yA&PDI6jd-WN6DG-@{pRj(Pd6@<?5{tc
zpBOEiJ3RsCc3i%&mo;AB7-^myEt4`5JGh<2IjT5W0{|gP-TYGHku`)si23^c+NT@A
zjau;9Ro$BZtk>=OxuHLM-&`rQet2%!iMn%t^NB0&+&-bxOGb+UVN1V{Hl)!40rO@n
z(u&8cc}cbnya0q^)?A4AgJr)PWY3<O0nx(J>UVR?Z%hqM<Qan^h(~Y2XjY29rqFUn
zVY0psJPmrxtp<S^VO*%DpFFtx*@K3s`TN5gm#PFdu=`z`@U?PGJ6_F+KtyDl)9Syq
zPGaY*dht}|2bIO>%fG2`TgY><!{bK|c)26<J_BVR_NyPMLd3<Qjd}g**=#Nk+mEr1
zS@t9D04M0vqRdnsF6488jqUb+9*|b=o$=Aph3xx7X9L(2zFt|cYel8Xn6efO2*3>c
z_%0;y9u9|q^vKfLy`YPLl>G0TZlM!+8MC-rRm>koSr?~F03^f7A6&3Tt1a||G?kl6
zu^oi1ziCfZbRoy$j$rL~g)RaZUR>+G-Mlb0Jz8%?!4#!wx}iM3pv562EHB;yY63-l
zj?&Pr2l2mKI9ILYta~!7Wk@4*R~t8e@{)+9XLqQ(LkAe?d&|Mh<VZ=|Mt#2B?ex0c
z%E;(=@sy|4(nk2hu?>^;C6tFTbLw!SIy7Dm>h+c%1P~!2Cjx=z=@G|zLqU=w@lJ!G
z3&5H;>(Me!o+;ACdOK`4oU@~&!_9gvY7ghD<)l7uO7&Z_88`<3OkouN;*-tE*Itn%
zUbuV17!85aDvcx0_fMQSmCXz(`kLc)5fHnNR@B7AM7Oqn|Msona;0A1)RJU<)mWL0
z68B1_`NG*zyB$P2fHbVi-&8a)>{Y-2x&Y20w&+H%4h$Cw$x-A-dqHQ#tw!%|Jas<L
zi8u1fYZawfD_9E=XoEX<=3g9-AsNM689ob$sFYL92Mdd~<b*|B8h1V0ET}Nc))B4u
zOu>X8^EE;Tgtea38{z$i>sP}Fo86e1a)Ie3@@k=1EclORv_wEEr-#j-W>+`6D~W?)
z43$yLDi{S)0N@fhjr3@O$6cU1$@%)NOBOB#0S@qZeWk_Bm604$2iB4fOq7tz__^G}
z>%cll{7}33QJ3_LH?RliC@y6HL|Y`aDBlqQ25@j7H6XeodMtYZL-mvPNB+0-E_tRc
zyI+DwBsOjKQk6B=Zm$^4ujeOSFJU5x_@2_{5xSHRCGzQfVyysR=Isw2jp6&YQWVn*
z6UsLO@|z=oE+FU9fBUgt#{?^iTonmE_*C`DQD%}}{a?J&>65)8AVaqnqyM&XHHl*o
zs>4G`@>tL!fL2(qchb}ben9y2)iZ&MzhZr1&kCMT*Jsn#&`am1{U`!6h_{V6&<K%P
zZw3KF2m}&9v8VM^Ib%}=U}D6NlkK1#eg90phYY(UO*5G++%qZr?iD;DB=JYJLg2UO
zuFrcxRw)j{NGW#C1-{pH!E4#ocARxl)TbO>&)r+;coi3>76QX)by~A`ZYjl{pXqhl
zGpEkxt7R6;aExayLhbI7JeplfyTN2Z$8{1zRuLi_8XX8Z5gCdXhf2xXMvp`U08<nv
zw-)Q;<18rw2s8psnylDVQX0x<%7vV-;2UBf&_MDvKnDmm{j8BcJyj`XAv7*-E68;Y
zfx+#i<YGK`=5!VDb`a=*fW1ud!_)>^0C+6rLiXhsUl0)@B4TZ{uOv{yP691-<j@5m
zO|^P5*Bd<@^%h%hizy(22p}NpuFhS$NUmpT+q^gd$I|E~I;*X706aqgWiy$F*R>9w
zfznzzXr=A51?~f&69DT9Iq!GJR+8?rY;(W$R+Of0w31CjJAHyZ-;+nkAO=V<RaAGD
zZl;L?u-fzN<Fq{lN>SWPtaWimPme1+L*Tx91&`^{q}icMHMeSMl2T>NL(;F{Jw{^n
ztE$za{>e~#%j>xA;7j*Qf)KENnsYq@=y;MYm2QG0MJX0Z<RMq{gh>_$U^~N8gPN2G
zc<4jjGu1Z^M3?rzNijKQ0<mH!fF0yXD?vMl@6uc)4-b1**(W#ce-Qy>D2d}ZPDpv}
zcCy~Xd_#qne)|k-MaR+twrAU#A!32GE^+m)_ujnyvZkiP%5qC5D(~foHfx(NweM8R
znMb4F=O()c0>J!QG}oZ@B(u=Kay<_6Crr_sZ<y(sNl!y7n2^8r!tU;}i(OY-Z-zg+
zJ64^X%9VWIt>ilMt<~8~HbX(s+f?~#l|kyrlC`fQyRW*H$>E`sqkfV&$+9;-O5;@!
zv^H9EphYVL>iGKY_T*v235<aV&&-Sx^}}~K3jvY@z7JN~eWRKM`-P!=&I~OtE#I!Y
zKGQ~slT-x0r~Brd37NQ8oHSyOr*CcWs*^~@=s&&~*|bLlaUjF1wQii)>G2_n9Wg|p
zG=ubUHI?j{n~G9e3qTAg)+QAaQXXjs+9FKp8>KK0g*Ej%Lm+@Ah7cTSde|aDBKy}i
zzBbt%I$@(8MTvmmL^v?lzN~e^^t*xYdI>YZA?tG~Z;q>*dXQZgkfFu(=+AFX4h`i~
zyR8%E3>ms}TL2J<72@{hzkFf6lslgOwOw2ip&Lu7GBQ1$OH*jQQy^jm0+IyUU~z$>
zXchV6>0{qjVVGc$`Xr5dy|%sz!1FxM3p(v)yVX2(_F`^$$WZzOLG(OjuWjmS@)Ql1
za_mZ9-uNPy&l}^lTg`J9E)@$I!!X~>Kmb72P@qHwCQ}{Bc~_G-4l)@K7t19O0uQ-<
z{(MZb2Zbcv*eXQ;e5112(Qbrhvt^_9`uv87ke^wtMJOFx6><P{CP*riW$%3FR_$KK
zk|zSqN!r>tSG4CQG67S6AFpMlobzChrz3f{Kma+9e|P~%dy;lUz!_by5!fHfXOUPC
z3LXkY+G>(L4%xdg7DSpfAQ0hhLW%{>iO3d{Xpgg#df&8K`Yo~qQB054*S9E%<CFcX
z)qQb-)LJF%jv4Td>~ER-ya4Ca$FucMW;Z!YvK=oTW1fM1S6u{T7&iXf4|~`BHvr;~
z?)=U<McRWE_B7&D<ako+{dxpEy1&}_%ei7VcdpyK=X>54*>B&ucKfYU&8a+Y&(<%T
z8Y8X0Suu<gut#s-3g2m+zj%IZ`TqUTB{qz+$;RmUtN&?k?L_a|SSIpT+Q&d45g>cc
zC5c0Ih{vMNgN4=2l_g_L6h%>|xxA<<s(XGicV?s*hw1agyd_Lwl<rZG0aCdz?wzWv
z{r691H+5y^#AF;r57rvz^^Lc#1b!w!3Is<}dOn;G*?4#806>sLJZ1jzZ;h_5#ecU@
z_XK}(rE_w$fEX_7rx(XzWQY>$_Urv3h{#9p-_2&!o5h9`Ojj$mYZV{c5ZD&51G=Q?
zYSDPc3ORwq?y#Wyb(bT*)%{%(0o9RWd8E+og&Xy@XeEd7L?U31*gJaG<6z#@IUs)T
ze)7eNWo^NH5F8=^5&81rz3AG#h<xeOA4etoD2x-Z;W&zZe$AgR|A55)&ud@&=z=5d
zxzw?ut%IIE(Sbcq;^@DAO1E%XMDBic^A9h>c)m*<_g%rW-Nz2}ow0{UqC+;aupa%z
ztz3gDQzKz&-G`l-g^$+$_(E&6<oDV!6MWx$(#{aG=N8wx|6^|0RxVsFG6>7{@BH-h
zTYqq}HZkmXTaj<H(gUkakI0@MZb283Bz38khxJ4O9J!C?<(-Ww_%O|tr8zKjV6>~A
z{Mp^jH%g1)+FU-LyLxuw(Y{LodTDfXoqxGLlPi@AXg6wNtt)t{9*q8nJO20EtKs_m
z$?=i#v67^_&0_%~TJgYfudPE?ufIJyob7d!xz!f)P8T(pI=%QWSI^Fzn3})wq0ST<
zwT<%dh!bHOjhuOLdG^+iXCC;TXVV?>u3vk4_r}t^|MI1)SLQx_KP4}d@uMgrQu&Oo
zoV;}Vi_ib)!~@T0XZPxFa6p>6i!&wlbYme=6sNR${q5087FM9>G366L(Sv&YpReon
zo}MiGVeFD5&gX)~S~QgnfAS)gvl{NHs8ImTE1Tgj?&k6{S0~F9#vmZ@u~d`x!e_sK
zrc*8WyEl;2R^OB6xy8nKIpceJd#q@?SotV)N!`}Z^w=*3G8{$G|GHzE+4JXT3aP`F
za~o6k?(duvX5H5=dGedLPK@K|uWq82Ie%_u*g4#uUmK0@{G$snp5O11e^L<y#DGi0
ziF3lf{x5%b`+MJ-7_DT*3XwpYtv-||pbt!bL_o~o^!<C$7vYJF#tZp{%aa}~i`$E5
z+&WR)k7mP9yEDGgFXrYiPZ=aM@Wg(g`uY9n=W~_eA!VUi@mjrC%z2(sk|tq-DZT!a
zSCmVLnW8w|$F36r;#{I$znFg`cc)T+?_^0_s`kdcb7DlVoXfwNzc*a_RY|pz?six9
zpyS12x<Y}+Y2{qVg|_6gg-UA5jU?lboo#aY@~C^%5gjNHAQBhL=#bZHnQrJZ0S-v3
z6G0-W44IX6>PBu$CkB~w0>nx&@Bg!lD?hzSLe$>e=tWWB2U=srrEit*UO5@KaEF69
zXj;vLICbYwjFn0m2~#>S+en1O%H`7&m1-W{cn>#31Q)w<Df>@Ot^NDkBje+vN#e2@
zy||gYn!W$(Ip2n)Xy^2ULhoNXiW5ow!zQ8xL~$Zf(jV;HLzv)VIWg}4sJr%&z54q3
z!tAP)-L>DlL@wq>apUk4hy?6#?FV~_$irsI{e=lGl9x|=r<2cqbF&^TefHM5P{ceP
z{Tyc10nacQJ~*dN0%$gxqWBQu3KJyZA71qIt<PUNV?5s<XaElZ-8#9u+!_f}Iq)Q!
z0L0YnM3a^5q0%XWh^6mc&LG`&@a@3Ri4rSWUzdmcow2Kf$w=PI1?I4XFkvf)-0iHx
zZPQZDE98A7hw0er$4_6WLv8QG>JZQYSSN6@uRnS|atI4^tPegKAO{<%0+B###Y_+1
z_T#K?D8JqpHh@jwnWdEtqj_R71D9;=ou@~to}=tPQuQ}C+(IYoWzE9Ilv4cpwXBU(
zB9KVH$&W8u@8L+*^Ob!@suote@3t>aPK~TLqx>|IG~Hkm6g)Vjg!Kovn6^f$p1<rj
zQniwq9v`mw(rPYjG#hagj!(^uRHhYSvDW+U@R|-X+YH`w71@pH?T=K|Hlr0xohp#E
z;v1EC+BZ4F@HJRbdv*3^`(7zC<C649pFnZ|A=uqG$NoswwN+iMR<lYRBOj<vJ@kzi
zXeniAv6j3s+WM_GFCnGlGBSfZGgxu6(Yq5*oiFMn1`#HvX2vI``_xbD(As$LqZ5|l
z2_4x(Qw}S;G=Ym#TF;n`_<p@VW=u?-UIHMWF-hWHFGhu-!2#WKlU=r{Am{5JU2<@?
z{}vvvFE?3nWh9Tpfi>(mwr(ool73)L03@N5JO<f>;fUOE`q94Z6~nM1CJ@9qQ5m(c
zyzyYQrn39f0nbNtAH-A47@U(NOnhTVlP0^c68^e<QZa^?JJV$ir;hQ7Uwz>ubxx%J
z6ubV*I&q*@C;HWAv+XEe@4BB~SO5C|+PV~$!_2?=mHDeLy;?Utq9+=Cb)iq+{cF$T
zC#gdL5s2AJ`hVv9*>s|aR?=$`QDJy&zNua*uKv?kjU1m*2SBp?8|+po7XgulynS=?
z*ULl2k#Ro=))wx)Io10I=L>ukQ|Zql<Q6~Jf6w`<8>WAMhnVsG)8Ypj(eZVaZVMm8
zR@iQu_4MnbZCd-{vzzn1X4FqM4k!mFZ4M>-ryBjZKm-ZQ#j_{JhjVJHqqqOm(*3`X
z%;0CyJ$?}SvrY#EegNo1?2yFp%<STtXVlDO7QF-j1f&&YpFG2fEUZTTQP16u>;LeI
zX}atk++*xLDhnd}7oYKRJnRK#vz=$=_dhmioc3Lnaos<?8hb_$tSR;>^XvEHpDmq_
z<CvK$#cXP~hpGfb)E}O$HM-7;?|Xj|-~QH&f573{y_-t-?oxQeUO9QPw7JpAk06So
z*vsTcGjNE3_`waMBf?<&)YmF2G+C`AamdW$!<i_CQc$WtTM297d&u~{wa)j0=rC;_
zdo-00T>Ac6?!<U;NXcez{lW4QfhML;6m*~%^Q-OeRo0!#B#|AsNFso^RxkE^Yb8~}
zn&4%zytH1gt&7OS^odd_XDyVZfYV416<_S0Y8YBxk2lrHQ+cvhMk?iQvqr?FLN3s7
zMBJM9z0SRbv_E(^K$v@B`1hYT&%ViNjKJ4%r}g=#pA<`FNfQybJa=bho-SR!6c|oZ
z@iiSP_}?|bBiK*YgQ<zpoPtx-h?-eL#u$m(m0WRlHF~wuynLaGX!jWt0lcCP%AY$M
zXlSy<ynpG!g&^=*DQm5@sk4$X<gu_4UmY%Q*(FQTTyOO5MpNfJX@!o6M#iQ`#-@oO
z4vnts))rqlBNE9TL6{S;Lzvo3!9c8H9xi#Mp;5tBpaFsiG^5eg)^av5Y5Z)^34n8f
zZ(hu=y5%)*y8_&7MMNm({WOsujM{A0+ncTK56=!~`SS;}VU#ixx_)Y<KQp{N4+^cY
z*^Zo*$k#7aA3h^&f7$&>;QeNqzSR@J@aAeuF&Bn&unxjV5B4R5FpOnuK?dBa2>MN{
zOz;DP1MAE_J-rVrFa+wQ%uM-&BqgQ;R|f<^#y=n$In40vK}Ti#gKYhm>`vD|Erdgm
z>xT+O|Gy@w`;Sc{2c?(@&Orox+-=l2Q16!^<$*KQ>viKO<SZ!<bi5NL0QO&Xmf4kX
zvB~0lH)dHeosUzMBr^p!J?e`+&ZXZo{4(;3>vGdwDGcSJ*e<(!Q8(&_7cv?B?n?Wm
z&D+0w@o1j7`_*LcRi~_WK^%=|13jchO;tpSMH8oK*oXpi%zO6#0VVUA+5PFTY5)KL
M07*qoM6N<$f)1|sod5s;

diff --git a/public/assets/plugins/mxgraph/templates/images/gantt1.png b/public/assets/plugins/mxgraph/templates/images/gantt1.png
deleted file mode 100644
index 1877287a38607d4a0f6b27805d4f9efbfb1cff3d..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 15699
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
FV1l1P>dXKD

diff --git a/public/assets/plugins/mxgraph/templates/images/lean1.png b/public/assets/plugins/mxgraph/templates/images/lean1.png
deleted file mode 100644
index 63a6ac3c7385d2c1e18a609c19d279a1c109ce31..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 17148
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

diff --git a/public/assets/plugins/mxgraph/templates/images/mindmap1.png b/public/assets/plugins/mxgraph/templates/images/mindmap1.png
deleted file mode 100644
index 74646e2457698ff342de6735c253a99af51b90ed..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 30976
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

diff --git a/public/assets/plugins/mxgraph/templates/images/orgchart1.png b/public/assets/plugins/mxgraph/templates/images/orgchart1.png
deleted file mode 100644
index 40f8416e27c49a5912355d9d39272cd1229d1d4e..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 17824
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
Y2XJs9OG*7^vH$=807*qoM6N<$f}x!f=l}o!

diff --git a/public/assets/plugins/mxgraph/templates/images/orgchart2.png b/public/assets/plugins/mxgraph/templates/images/orgchart2.png
deleted file mode 100644
index bd28c40b1afca24683d23629f1c9a52d816429c5..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 14114
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

diff --git a/public/assets/plugins/mxgraph/templates/images/package1.png b/public/assets/plugins/mxgraph/templates/images/package1.png
deleted file mode 100644
index 1c446df681c3804e691c7d413ea7514eaf9294c8..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 12484
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
O0000<MNUMnLSTa2!bd~^

diff --git a/public/assets/plugins/mxgraph/templates/images/pid1.png b/public/assets/plugins/mxgraph/templates/images/pid1.png
deleted file mode 100644
index 9abd6d3935543b7683ca8d12159b157830cfa776..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 12276
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

diff --git a/public/assets/plugins/mxgraph/templates/images/plcladder1.png b/public/assets/plugins/mxgraph/templates/images/plcladder1.png
deleted file mode 100644
index cc6960bae71f50b381c3ce9cc0b15370e9b609cc..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 3315
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

diff --git a/public/assets/plugins/mxgraph/templates/images/seqdiag1.png b/public/assets/plugins/mxgraph/templates/images/seqdiag1.png
deleted file mode 100644
index 2463c26a27cb72bd2a903836bc5702fbdce9cdd5..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 10392
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
Cb7>d=

diff --git a/public/assets/plugins/mxgraph/templates/images/sitemap1.png b/public/assets/plugins/mxgraph/templates/images/sitemap1.png
deleted file mode 100644
index 94d9d8503e8b3d753611eb3efcab1154027abd4a..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 18466
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
Q9{>OV07*qoM6N<$f}1!wB>(^b

diff --git a/public/assets/plugins/mxgraph/templates/images/socnet1.png b/public/assets/plugins/mxgraph/templates/images/socnet1.png
deleted file mode 100644
index 29805f947d9b48ec861f60248adaf96e6e1a5bb8..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 19817
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
U(QF!9?EnA(07*qoM6N<$f|yCaj{pDw

diff --git a/public/assets/plugins/mxgraph/templates/images/stardelta.png b/public/assets/plugins/mxgraph/templates/images/stardelta.png
deleted file mode 100644
index 9b7b42b8a72e377f90abeef9b0c1226783ff6dd1..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 7197
zcmXwec{r5c|2~B#>%?SVBMnVRwj_*fgJher%f5_#U$ZY+LgOvjqY$zavXgZ}Ovt`v
z&rX&s-_z&%{r-67d9Jyx=RD`U&g*r*?)yH`8tO_^<jmwmL_}05WqB=d?*W%D<O=xR
z|8&9xZr5Fu_1%exC}{s(#KY5pXGBCSgD82Vj!(v>@wnS$&&U>;Y%s}@!UrCe{}iGP
zRB(5)m?j_S3m6Uj(CHFIqw?Hduk=v-BHe@6t8Tg7c$ALtcNoXjsQyq?nUZ%QC5E;J
zxdxh>lD~mF8IaB1gorV}+9DJ@%Py%XD*8x_M&IvZ?OxhHQRb1u@d%sc-h-|<N9XDZ
zq#Tmiw0}h-*MdyrZpfLG>Ed`|a)U#RwL8?NoETjY`fuFpjV{y87X;dZ%QeD0Q-y}a
zC?T=A9|NQXA)zP}-ib(Jvt+y#3is_^PPDqItR5bZA9wKb_GaMv09Tn!w_Fei#-5hI
zV+d=O`t+kncTtfccIgE@slgWCecq&AD2ds6g_=ib!oNW^;9rH}P-tGsuS(%o6?*OS
z<@hCG^m|@O`Kq1x`vNKWR5isnR^f@gU(~9j5+D?eBfoxG=4kBrHTA$|o>s?#zk1+|
zl#1^)vj?Np+J%P%C=c`w{W7ie)AIX0zspYwaUx<nasAe_%`Xhg#{SN7(s^I)V#P1H
z^$!fthF3&Sgh#6mAsV^ECE^VY4Lcaqm*wajJ7j%0SXndPzWs<P?$Hr{Ys(-rL5>_N
zud3q4S59u`+cBp$$kA;sD8-YC{PK`=6iY|omnCg;=|ud+Ny3nEt^z3!ZhO;Zw#x2j
z^;&+et?gI%E`LYJR26~Og4HxM*n<F6Q-v9GJte$W{<`LoX87-;!4_t5q{u|8ar26U
z79{T$86`wj6PA|GMjf@b<CN=ormR;~6iP$i?K(L*sa`;sVobAT;aICs#=#VZoNBLK
zA=ciX5#vFH@{w!66mUE*o~ht?P{W=gB|)4TVSd7?-&!uuw{^=*tg8M+2cG$d6Vkph
zR+iMugC!YcV`mq*cW+mUh7?;f(bv~EGsFIcu>XfUX<&R@Uxb;Bg#~Y2<$av)PabJz
zZDZ5sL|iE^!TNdJVM4tJTLU(ruDN6XjjUw%kaNp9y#;GRH$_Cdr}%Ho6>E!IuZiMG
zWvujPe*T1#5R3Z!92y#$pXd5QVBO%JpEj@f*56M>N%?Ev_pPJ%F}{Ji+|aUW+<SW_
zGb;=GT3uCDwY$4}$&HCi9xBhDY@n~-yRyGJ;Eo{bVr;H5DYJ-E&BGz^;7$K<l{~lY
zna6Le>}#0ilyN+7tnS>oWA-2%y5JjVZXRl-uL&!w$!m&0E{HZvON)r;6za5g&sz(Z
zsB&}smAT#Olih2njB^<NVVm^FfZ6Mw?H?yuNN?qD7YXwU#>5}}zh9=0@^c=@<s_=)
zT?uJD3932qeQ*amW+tl#Q^?H7nEG`<RaCSm<y<>SWeDLd)I*Rh4_qX2cIlx<Y(-Qw
zb#A@3^(*YHfXXSqS(4=x5*582vq1HmG_C?3lb)Vlp{IuXkWXJ!)F<@q;v!Hw+gmd8
z+&K$@Pi#XsXqSy`9DWhI22;49aD&xjTZj@u@i~e<HX`>Ui?SYs3&-Oq#`2UvAG;)F
zW)|ltHtESE*<`Z4u&~hD8r*OF1cDTIa(3=EzYm|=KY8=!O=#Pk=rD$Zv7XrMHIF`m
zzV`EHMJ1&iZzt~4miP|r>aGtxJ$<#9X&eJRy-FUgV_p`*7qj5iU}IxLiqt?Kei;py
zE~i|~OXTU@-E}2wHa&)t+@OxC$<Bq7g&~{d;rL2;jJ>_RUy^wcQ78!#O2aO-$~SxZ
zx*Vp!1qofOvlR9X2sk@g$xff4+C&N#y-&#Vtov+GLPtj@kg~zd9F>T`b4UlQ9vTMn
zAdZ(iI-Y<6{yqMn>DX?eNaz<y+NmNM4JH1|3t2z<aDIap{sT%HA0Lm=)h!-bPrCEW
zL2UBXi0G7}NPUcHoSA6d8_^sYt?2{@kUb~o7rcX9beUnCFO39J)Og#j#hSfMN}@xf
zr=7fmED>?LJ3B7fx2?%Vm4D8=NClo9j}+^gMu}G`c-@$jzfQq{!kO-`bts2noSmH$
z^4B!rKL+nRQde+ra6HS?a-MBI|1;_QbiT=vXe>$~*=l@czpd_8xKLM{sf&+K9ZmZq
zk$3x5Q)!lM`=JxQS~+Pdpm^U{(NI%^`M1vtbqHmOtlpt$((t?&_x#zoqxMaytihGB
z(NQp2MUx1*woR`NQ4}sh&J2sinwrWE-k@q^LC~whVQ%$Cyxm{;-`UvLO#D6CZZdIh
zGP#4QG!h8gym@A6n>I5su^>^(AWYw-hvP}Xi{8JVL**XzpK%FBNlA(O^-IkB-rk-~
z_KQg7*>p8t(E?7YE=khZPFe_w8s9}xaG(vNwWTG=Kjb#AP$r1{G?{;nghob1fe$4>
zz-AXWc#2IEUyFFQwocR)ZiUmi)5>UAf{Dph#(iZZi1Z6lBB7kRw%+iV^@vK4Ia?Te
zWy+`Fp3QM>=GRV-q~SK({4fPn0b$}<OfFbVz0v5`Ouwc;7nfi^v5>(H<8%`b^s|Qj
zgpKDpM`8ri0A7&}p$88h@XlgsS}Urv=N`Oo;YQ)6owkQ2(P+{^KgVNu%z}hKdjC3~
zowIY9LX!*%H-fFvLtyE^=67^-7?k8+Ut;afBiNlQwsBswtI(VJ`IAUH4`t|RYHv@`
zo?-e6%tJD>bOald+p5e%8?9CN;rzFN4!Q(W%$}fBES27`g8Oj2AIAgWikgb5rtV=e
zrZ{n1kC4U6%Iec(QanP=@m9T{cmylN_@gYLzjVB)C{ixx<iuAaDXot7ong!A`rS}Y
zTrZD2Wn6rG;L)@<XhmtRr{h&N2s}F*TTW?dqz1ZBXJT@)ScjkaGLfgyproBGJP{sK
zi2%v0T1&m-Bargw@#B#zP5>jOod&I|qz13rh31PV^)k96>T2rh>Z+?PYYezrhjp53
zA@}AF(#4${O#~?cxU_!cPbNpalp546Mr#;&oog_C>|5MD+wyLCBrP2oqKiHpdaq<*
zVPU}Yp0IYd)v!$){WZ_*LROpxROilI+rR+zcdDm^XIWBw^s%j_I_S*I%vYV}0C|<g
zpQSaiY)v;rLHm~6@*iMW60Pbr;IP<E2eC&I5<RXNxo}LeXHd{Awgv-`y+jczUvETD
zlGBjptrrOj8Nal5b|%&BT8UtYRVZKQp}pQRJGkG-gCarhNYRAObt<wWp%)iNEkWmp
zW1Q;OLy0ySNQkk)r*>)Tyh&}Q(6wdMezS**3slF1*Ub3(_ng3%%ig3r5prCNl%d~3
zm?PVJdr@z!*r=~{No1;r?aX*CW=?K;NwA&-%ve`x!bmG#RU-DKw%zJ^P+G7~^9mSw
z1g0k~f32+fv~T;U#sA33$A^&>29N2pu5uwO<GmQe*6@-!B!-D3t2jD2dF|Q<NfN0T
z7#M_7KnH1PXaLF{sLx#foxL<A`T{paMsRa;A8k$Fg^_~@V~R&Mz5J!JRPxL#^v(iX
z2x}e<(_-oOl6qUYj8aA)N=YH`mAUYFm!D3x9g85qVPRon>HSM?$n#K6qDw-SsPfG<
zxB39-*_oM{%x5(OZqvBC$>i9Bg29!l$xWAQU!)l+*C{+GS{Y;qu1b={?_HexE8n3A
zA8?%-7*M}EM7eXkw<pX)@|_Y>UTL3Q)zIKCU6g*dpM4q7{G!v`)z<c<)p)v{z<*W`
zQ}7^&mLg(|i&}*w)XySG{m55OLqdr4?1j1x{hBbv3b$@R19N->TV^-CylWjbSY85F
z5>mrJZytAFL9_hA06`By?)ylk#Fu>@vS1{e`eUZ6TQ&x^!pIOouZ(|3^Gihird^G}
zH8L_MUi37%ZC6luVlG@P{i*Zw4n`0r_9o`s*~rL9ks>sDWaIGkJg|gPLG!iphtAzR
zI7s2u!7?4RC@VD>?p|j6<fc>F3h$Z+M~P3-f%-nBe)QpmI;X36Q?+Lld`{~$;mVWH
ztZ6x^)aJme_P6CB*F#;T2kIPU7Xu|{jGvxc*O?q`ZZ@^%{nfwPehaej`}ZeLL#?~5
zj4N*SWi1z{cWBStSDu=s441mLuFuWQ{r>GxTa8HDQipXq-5A|uuHP?dsyk1+EZ`-x
zTXK%Q_v;pu>L&ZU_R@4gCj=*&C-@)34)XHKM{yMuZEbA@uInSAVq#*T3f${ivA<7_
zj*iC0#sH6<?3=8q&1jJbYDo^UzshifehUm^DGXZpq*HOTSuT9pt)2q0gyV5#y;ii+
zjCA}samZI`O8B*ZQtf&Ra*H<loqGU9AV@ZlKB=ipKf96JY^<yjtnm>M5g0PVN&l?>
zKlpi)k5E^#3TgEttW7LJ?cA;YQ{h?~mK!4XW(mOHW~8LA@kXLmDklVmYb_)8l93w3
zSAHtuSG$^)KY!($m%)I1NyLthWF|W+>ksU*@5RA^2yL{{y2BHkC4X|R9diZ)=NSbe
zd5#=iHnzB1w|wA6tb+#VyyoHO;PAW1cu1ywVs<uYXAY^2=tk#=Eu_XLBydRi5RpB7
z;ixh9>sR>7$@8-XhNl*z+8?wEOG-*)IW-XUi@OpEn!7#$=H|I3W&2VsO-*bG-6&j~
z{4J?L(4#rn*b0kI0rTKy6GTEt!`hsiPnM%N0vXxaNBM)!j$L_^?3N5+3a<4=^DcU^
z3HMU)@5YBAv5R#%IXU$1-y-F>l#|`_oPJ+3Lx#!aXb7ZO=#MV$dh`I!2{3<Za*~CG
z#lBBCf(65;ph+7Ii1L<bgBHtcen7y30H4Y)DBx-$-}wQ0zz^lRTaeIB^VGDo(CnC8
zgn)pxFw?8k`756q^Rxhg3^fetG)M6!y<2WRa0js&cQ9~ciMyYX1_Ir0-NA^j{Ouv>
zpSe}e5q>+yTsr%54=<>T!AMG7y&*pQP$uAb2Q2JuMur3byCN)a5)%hUlvLFVP6X%6
z`T6-M8V-;w<`t002Wa#lfPiPu=F_ak9mFV18t3>(RkLQdqohL=`D5CJ)Fd<G72lig
zDnN!rsMw7^8gCUZaT14)27cB{Zw4_s!0eZb89|>n`n(=oxs6)?+CcTi!rk57)%AX|
zO2~?0lF(h$a4dr$Xmj1Je)F{j!MeeohoDM)eILG71}(u>gdZX&kn(qD{z-)%WmHF-
zX}OU=SxE`#%$hKOb=O17^$>}fP>-IN+z(oOF3zEUAzUt-*oFuLYTCH_Na(~M{ZORD
ztYLiK;W5X>P83+y4Nb=?=xV%R^YImn#)gLC+HN~j#^s}y%g0^E{psR!)jv6iDY)bb
z2Ouw%Hvkk*7+l?b`2PL-i3uJ4WS~ZuZ{*czIM&^}orLOFA-)6z8bryY2Bndc3*Xq-
zVC@cxyN%x)7>IwPx}XxAtOE^K^{?Sj<qDVqp$#_ngiO8cJzEkCiXIrEYTVe_NnDgj
z%m4eCg9ILP<$;Z}^LEvsbXcu6ELpuEtj&}Y8VtoSu5~AHh>Oyc0`mUt+qdCiEl`>A
zw-QZVy}U5E4?w>?4md79{4*EX@&xEICZ?fqZ%vp*g`WR4`HxiBqGE?+=FblfJUl$A
zJBmzsVmi$Wb%YP#!(I_%3&h2IeMoI04r&xqwkod#xwyEvN;mbxyh7H%nNh~a($ew+
zoef>2nKF(94?vo-!$WxEfFCopLyF}m$i$0^ijrRc-Z8&JYQET+O@8@hdTV!g*GG!_
zA@2bP83TyhlAEuM%^gNcv74(`g}M-UtPDESJ!F*f#alBvW!#Uly}H+yMY{b>l4+9r
zjUQr93%j+@o&f=@n2y*x&+k6M;&`6qK!r;7Bg_!s0nUAjLK|F_<a04O_ab(#<5$M1
z6%e*(nl@Bw6M0exS86O5nd6#Re6nO7J=%y-4rk81lEVh!x)=IK3Z`(KEG)&Zzg?K-
z)2g;rt63$Tz3!blk8cKM-&VFgB4C#KfBv5D@9$6VnS?Ced@&_u5rohfSbuNVuy;B=
zJ*~{sUirz)jrf1=!T!nF)YMd7bWd5V`4(CAr_dK#iP+rx-L5j1CxZ=#)V7a1gyvm*
zY;7To(eq9N)>S2?rR?nN0IQyRs;Ad!3MG0nMi%PuC%$+W8)pWRXw73{)9YR+hNdo6
zC9iL3@9Woalz1&$|NQfJT^ZTg+Y7m+<J;B0q>ou;Gmd<u<|s^QM;(>i-6ofotl}!@
z#|bxoU~9ArMZkv4XhzCw!(l}uMIG~?&PA3A9tAH?QMH_olnHee7Z)2xpKGy<Yd&uY
zq{56mOCFz@8L$*45D2Sj!|Um*0%_h6?-(Q=J_Pu)-sr_S+Sb;#-Ew)cy4sVd+xE0v
z2OcwgFHOv~Nl3Y|%ayg;)mS|G>*6j&{21B%<D_0th?ZD7CmBjN@#BDI7m3EIDng0H
zXwC%aWyqJ*|M9`d*(4oO>$rsUJY;p5AS7QptAo$g)YYwpQwap^Cj?qf7`d-hR!Pad
zB#UV;#&T%S^xV<khDTri$B|>%&S45>`k$%BUeJkCb@8(G^DPXolznj7I|*P=8V_p`
z>ktBZXH!Vp!H5v=rK>qkUT>sAkUh%gA5{<}0uIb^`L2g#Q%#L$#UYE-!}miUXO33Q
ztA&4-e6RkqT@YhtO#g&#?1}}GDuvqLAFKaQc}vTCcn)yQxu)f77yg$EPwd&yzOA4c
z*S%=aT$UdhlJfQISNS`e_1B5Kdw9zbA5^tSrvo4OR_$up))-K|fF4-6aEBQ(7%sX<
zus`<mAV%kqnMLO^zEYG?IDM`BOItd)7UHMiN=G$qiMujY_d$-b!zfKLmIsyIPnM%8
zUhggwftmOO?<>|VYc$#Z@dK9lng^A5(!S;~ERxx4>E-3s)zx)COc1~J;`S$j%38xF
z$41lr96{~kk)jcP`BWz-Ck+2hq0d{}+x}AQ1q6NIa`5TKa(&-+C}jYzO!gT20l6tI
zCPw+#PE-RXDk;eyvoJ9+F)%PN82G1ZZ4HpfIB442w-OQ(J|}xiQ&So67?4UaxgTFG
zCShv~wrMjy$6ww-yy`Oh&2^ww)tZsQQ6p;d$bYr*GDzDjTq92_B<U|D#q+p)dj6Oz
zh0uZ8oh~`;2>DyDW0PBpisXzwOgqU)N~WcyeevEl0c4kueIbwg_55NlrJ~}#grpVd
z+(rTo(_6eDpZKJT*KEpKU?C_a7HdZK*iJVuFEX0~k?V2HkK3Nc<WkenBqSt=N>3d)
zp0*biIXO7ko>WY{<3IOT%^N;FJw16rcuF=pKin?(yjhKh7LudJd$qTkG4f=Q<MMcN
z_JW@GtjYg~KN(nFGXQP16)*A`)&w<Lc)21g9zJ}C;-LkU6OBgUD#sD5D58g2%gf8v
z?z*F+qa;Wo=YXEO+q*uTgTUZ8+MXRNqF2~G|9g}e2lyN?6tV}EG-2|@fGVHg?_eP6
zvlLDRa9Q-quPLkFn(GElM!xu?N0S=|d?iH8<;~5dG!+aAyG!^KAX8L|M3n~wP+F3i
zfu{$2a<<;ywI*fHo;|ZC{65)V32e#E{rF6O3walo(9IM%G|U*C`w`y9@H}9Mu$3#+
z1=b35?D56l?P(`*heOeeUZHQNr+yWB)dnSl*)qDYh?NtY!7Ncb5*>6Ne0{pX8!8tM
zy~1T05D;KyMl2kM)Y4w91T8eG$e8^2c&zNXvx7sxe!qB*hVmuW$61P9Fj+;tpz7K=
zfwy`I7%^%293a<6U_XFI`KxumkrP7M;o$7t5_EYn)^Z_=uLLSRCilAt8-&D^!?CWl
z4Kljn`NoRtE4w1*k$l}<4toeWm&oJCROuA=EUpo0wcEvte@h0YPtzkRAKBoPFM*0c
zG}qTZG#yGDq_&`phR-$D(ChjgAL}77C75|W9|lWg2t9UX%lJ|E@b~J~>f9%Gq41d4
z*jR0C?W<R>0^jP%lP6#nV4FDD*(1Y)IdvSIoFY5Sc2=Y>H?iD*P(g~G4ANz!XO~)U
z{|S8(gh(ag4(;_6JZaYU2-XwC1%ry)U0&uL+@H|WL(o5FPw1ErJ_PlqUTlE-keqx|
zq6O@`{4FFj9KQsd;&NDgTwHZC%(`m){QLzdZ#-z2_p1~0?Xp&EtgTt8yKCs^d#-}g
zszd-mLrqhti@xdQ3#`Dwtj7c;uAa)X+Lm)Fbyx%EbK)I5Xt2G#z4>$+{#3vTs^L)!
z_G`K*3p%$qH8u6~GYD$w%?iFR{rK@TFmIWdLSPI}ze`^gz+f;%BUlk;M{Yw)f`HbW
zrOr-;0s>QP=Ybgk7^^uNA7jlpH^G#FZY<&AK~-XkZ_`Gb3auXc-S0XH_{Z5<sV5yi
zV{B76U&?ZRU*S_a2Z}HwD=RA_gG7^!q)V2Qi0kLXvbw))EcyR*GN@tY8jHHc?+l8N
zdkBPWU%HsBDz_jC2UZNKWB%&{xGeN*Utdhe{HoMVt0+@O#q5;NcNtk(r5-*ELCmTb
z?BfMn8t0Yn&-q9NdU+{o{wL-DRHX*oXnj=)O2S%6dR;~^kO~PMcc6E;k-4D>QvkN!
zsdf|*rWg$+`3X1LMrJjAzbU%;W+L#j%xcn?Pcn60OvOqXEUCnor(-Q$<`n|gGOKKq
z5MZf9=i1gz3iix<p#Q@IT_aDZ?p|C=Oi{)Gf7rBa&P5_nvcmk(?{TV{7A#Ljc&n?O
zlTTSPGxAeY3cKPoxyXH)Om%_?TWsf)lehm!(JMM>VC6yO5+_azp6I#s%z4)4qNfV;
zb_U*4v21vPbCtAjO~y#?jo%6sPdylTyM>47&U8p%bT1-Ndc1z2rFPCTH6P3~ZBl32
z-P>r-l9DqHwyd6#iNIZACCg`pM~z3!ycoRSrF`kAfGL26PE8huDXzg3hg2ctUap(~
z2?U3=+K^>j06Q^v2>#)FL<h<Gp=5?1@T{(f)?F8v91FcXTaf|uPdb~Xv9!$(FQk^E
z5zNyKq6h0tN=nj0c=`E(rZ6{W+GKJq>Xrl#C2jKaqXG{#JuLT-8^{?Qe!zbL02m2G
z$pJ)tASv1BY9yTcX#`6j+X?ImRDem@5dbPk4uhacaFT`)<J9<gwEQi`MQ}#trMVVl
z$O!?`NzcTjREHnXp?Md;XlBor#lfkSTRpa>uM*KARH#EfpmEYIb759H2~==~9LPza
zgMnAc6zO|<uvWA2s^K#%UyE;U27w2*d)0W~QYB%Hgga&0DTN0GC2>(JA9rBwZX5Rn
z?^GfN2M2Ac^jl^H@s%C(btZIsHAE8P$FVWFkob_mmKLqTA6U^hRtlOh5~L=qVcMx`
z+^wGVYv}go=0nzaKy?G8xA#vh^}Xti#+q>#90{%*^3<7hhTy!92&JGdUn*xB`hPND
B)Z737

diff --git a/public/assets/plugins/mxgraph/templates/images/statemachine1.png b/public/assets/plugins/mxgraph/templates/images/statemachine1.png
deleted file mode 100644
index 0478176be82094402a8c8de118043713f796bee5..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 15022
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
Eg6KA4eE<Le

diff --git a/public/assets/plugins/mxgraph/templates/images/uml1.png b/public/assets/plugins/mxgraph/templates/images/uml1.png
deleted file mode 100644
index ffe977f2df9f5a48ef8cb0b20efc55fa866fcbf4..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 6388
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
JpJXip{|C;)!fOBk

diff --git a/public/assets/plugins/mxgraph/templates/images/usecase1.png b/public/assets/plugins/mxgraph/templates/images/usecase1.png
deleted file mode 100644
index 1bbc1858b215a8a067fbabf58a1cbb960cb21159..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 25313
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
Eg5A&l8vp<R

diff --git a/public/assets/plugins/mxgraph/templates/images/venn1.png b/public/assets/plugins/mxgraph/templates/images/venn1.png
deleted file mode 100644
index c1c2df6a5c763ecdf4a9b964cb5bb8cb3760285c..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 9761
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

diff --git a/public/assets/plugins/mxgraph/templates/images/wf1.png b/public/assets/plugins/mxgraph/templates/images/wf1.png
deleted file mode 100644
index 2e4e2efceb68a22bf5f17b7d33c996fc79870a23..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 7413
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

diff --git a/public/assets/plugins/mxgraph/templates/xml/aws1.xml b/public/assets/plugins/mxgraph/templates/xml/aws1.xml
deleted file mode 100644
index 9e03520..0000000
--- a/public/assets/plugins/mxgraph/templates/xml/aws1.xml
+++ /dev/null
@@ -1 +0,0 @@
\ 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
deleted file mode 100644
index 33ee552..0000000
--- a/public/assets/plugins/mxgraph/templates/xml/bpmn1.xml
+++ /dev/null
@@ -1 +0,0 @@
\ 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
deleted file mode 100644
index 8b3a001..0000000
--- a/public/assets/plugins/mxgraph/templates/xml/compare1.xml
+++ /dev/null
@@ -1 +0,0 @@
\ 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
deleted file mode 100644
index 81959c0..0000000
--- a/public/assets/plugins/mxgraph/templates/xml/flowchart1.xml
+++ /dev/null
@@ -1 +0,0 @@
\ 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
deleted file mode 100644
index 5e53264..0000000
--- a/public/assets/plugins/mxgraph/templates/xml/flowchart2.xml
+++ /dev/null
@@ -1 +0,0 @@
\ 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
deleted file mode 100644
index 0c2d0bd..0000000
--- a/public/assets/plugins/mxgraph/templates/xml/gantt1.xml
+++ /dev/null
@@ -1 +0,0 @@
\ 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
deleted file mode 100644
index bc7b3ad..0000000
--- a/public/assets/plugins/mxgraph/templates/xml/lean1.xml
+++ /dev/null
@@ -1 +0,0 @@
\ 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
deleted file mode 100644
index a3fc6b7..0000000
--- a/public/assets/plugins/mxgraph/templates/xml/mindmap1.xml
+++ /dev/null
@@ -1 +0,0 @@
\ 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
deleted file mode 100644
index df46b8b..0000000
--- a/public/assets/plugins/mxgraph/templates/xml/orgchart1.xml
+++ /dev/null
@@ -1 +0,0 @@
\ 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
deleted file mode 100644
index b829c2d..0000000
--- a/public/assets/plugins/mxgraph/templates/xml/orgchart2.xml
+++ /dev/null
@@ -1 +0,0 @@
\ 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
deleted file mode 100644
index 1fa6cdf..0000000
--- a/public/assets/plugins/mxgraph/templates/xml/package1.xml
+++ /dev/null
@@ -1 +0,0 @@
\ 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
deleted file mode 100644
index bfac4da..0000000
--- a/public/assets/plugins/mxgraph/templates/xml/pid1.xml
+++ /dev/null
@@ -1 +0,0 @@
\ 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
deleted file mode 100644
index d23e8a2..0000000
--- a/public/assets/plugins/mxgraph/templates/xml/plcladder1.xml
+++ /dev/null
@@ -1 +0,0 @@
\ 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
deleted file mode 100644
index 130ac37..0000000
--- a/public/assets/plugins/mxgraph/templates/xml/seqdiag1.xml
+++ /dev/null
@@ -1 +0,0 @@
\ 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
deleted file mode 100644
index 93048cc..0000000
--- a/public/assets/plugins/mxgraph/templates/xml/sitemap1.xml
+++ /dev/null
@@ -1 +0,0 @@
\ 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
deleted file mode 100644
index 1d2cf4c..0000000
--- a/public/assets/plugins/mxgraph/templates/xml/socnet1.xml
+++ /dev/null
@@ -1 +0,0 @@
\ 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
deleted file mode 100644
index 4dba8e2..0000000
--- a/public/assets/plugins/mxgraph/templates/xml/stardelta.xml
+++ /dev/null
@@ -1 +0,0 @@
\ 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
deleted file mode 100644
index 1804865..0000000
--- a/public/assets/plugins/mxgraph/templates/xml/statemachine1.xml
+++ /dev/null
@@ -1 +0,0 @@
\ 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
deleted file mode 100644
index e4b6887..0000000
--- a/public/assets/plugins/mxgraph/templates/xml/uml1.xml
+++ /dev/null
@@ -1 +0,0 @@
\ 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
deleted file mode 100644
index 26192cd..0000000
--- a/public/assets/plugins/mxgraph/templates/xml/usecase1.xml
+++ /dev/null
@@ -1 +0,0 @@
\ 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
deleted file mode 100644
index c0a0610..0000000
--- a/public/assets/plugins/mxgraph/templates/xml/venn1.xml
+++ /dev/null
@@ -1 +0,0 @@
\ 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
deleted file mode 100644
index 8d72685..0000000
--- a/public/assets/plugins/mxgraph/templates/xml/wf1.xml
+++ /dev/null
@@ -1 +0,0 @@
\ No newline at end of file
diff --git a/public/assets/plugins/square/js/Actions.js b/public/assets/plugins/square/js/Actions.js
new file mode 100644
index 0000000..9f0b6c2
--- /dev/null
+++ b/public/assets/plugins/square/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/square/js/Dialogs.js b/public/assets/plugins/square/js/Dialogs.js
new file mode 100644
index 0000000..5a04240
--- /dev/null
+++ b/public/assets/plugins/square/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/square/js/Editor.js b/public/assets/plugins/square/js/Editor.js
new file mode 100644
index 0000000..9858989
--- /dev/null
+++ b/public/assets/plugins/square/js/Editor.js
@@ -0,0 +1,888 @@
+/**
+ * $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 = 1; 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/square/js/EditorUi.js b/public/assets/plugins/square/js/EditorUi.js
new file mode 100644
index 0000000..c40b893
--- /dev/null
+++ b/public/assets/plugins/square/js/EditorUi.js
@@ -0,0 +1,1481 @@
+/**
+ * $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.validate = function(a, b) {
+	var graph = this.editor.graph;
+	for (var a = a != null ? a : graph.model.getRoot(), b = b != null ? b : {}, c = true, d = graph.model.getChildCount(a), e = 0; e < d; e++) {
+		var f = graph.model.getChildAt(a, e),
+			g = b;
+		graph.isValidRoot(f) && (g = {});
+		g = this.validate(f, g);
+		g != null ? graph.setCellWarning(f, g.replace(/\n/g, "<br>")) : graph.setCellWarning(f, null);
+		c = c && g == null
+	}
+
+	d = "";
+
+	//--- Giuseppe Careri - Modify 12/12/2013 - [email-masked]
+	if (graph.model.isVertex(a)) {
+		switch (a.value.nodeName) {
+			case 'start':
+				d = this.validateBlock('start') ? '' : "Only one Start block is allowed" + "\n";
+				break;
+			case 'finally':
+				d = this.validateBlock('finally') ? '' : "Only one Finally block is allowed" + "\n";
+				break;
+			case 'playback':
+			case 'background':
+			case 'menu':
+				d = (a.value.getAttribute('file_id') > 0) ? "" : mxResources.get('noAudioSelected') + "\n";
+				break;
+			case 'getdigits':
+				d = (a.value.getAttribute('file_id') > 0) ? "" : mxResources.get('noAudioSelected') + "\n";
+				d += (a.value.getAttribute('variable_id') > 0) ? "" : mxResources.get('noVariableSelected') + "\n";
+				break;
+			case 'vswitch':
+				d = (a.value.getAttribute('variable') !== "") ? "" : mxResources.get('noVariableSelected') + "\n";
+				break;
+			case 'database':
+				d = (a.value.getAttribute('database_id') > 0) ? "" : mxResources.get('noDatabaseSelected') + "\n";
+				break;
+			case 'set':
+			case 'math':
+				d = (a.value.getAttribute('variable_id') > 0) ? "" : mxResources.get('noVariableSelected') + "\n";
+				break;
+			case 'gotoc':
+				d = (a.value.getAttribute('extension') !== "") ? "" : mxResources.get('noExtensionSelected') + "\n";
+				break;
+			case 'system':
+			case 'agi':
+				d = (a.value.getAttribute('command') !== "") ? "" : mxResources.get('noCommandSelected') + "\n";
+				break;
+			case 'gotoif':
+				d = (a.value.getAttribute('condition') !== "") ? "" : mxResources.get('noConditionSelected') + "\n";
+				break;
+			case 'saydigits':
+				d = (a.value.getAttribute('digits') !== "") ? "" : mxResources.get('noDigitsSelected') + "\n";
+				break;
+			case 'saynumber':
+				d = (a.value.getAttribute('number') !== "") ? "" : mxResources.get('noNumberSelected') + "\n";
+				break;
+			case 'sayphonetic':
+				d = (a.value.getAttribute('text') !== "") ? "" : mxResources.get('noTextSelected') + "\n";
+				break;
+			case 'record':
+				d = (a.value.getAttribute('filename') !== "") ? "" : mxResources.get('noFileSelected') + "\n";
+				break;
+			case 'goal':
+				d = (a.value.getAttribute('goalname') !== "") ? "" : mxResources.get('noGoalSelected') + "\n";
+				break;
+			case 'ext_dial':
+				d = (a.value.getAttribute('phone') !== "") ? "" : mxResources.get('noIdentifierSelected') + "\n";
+				break;
+			case 'dial':
+				d = (a.value.getAttribute('sip_id') > 0) ? "" : mxResources.get('noIdentifierSelected') + "\n";
+				break;
+			case 'queue':
+				d = (a.value.getAttribute('queue_id') > 0) ? "" : mxResources.get('noQueueSelected') + "\n";
+				break;
+			case 'callback':
+				d = (a.value.getAttribute('list_id') > 0) ? "" : mxResources.get('noListSelected') + "\n";
+				break;
+			case 'gotoiftime':
+				d = (a.value.getAttribute('interval_id') > 0) ? "" : mxResources.get('noIntervalSelected') + "\n";
+				break;
+			case 'gotoifmultitime':
+				d = (a.value.getAttribute('interval_id') != "") ? "" : mxResources.get('noIntervalSelected') + "\n";
+				break;
+			case 'voicemail':
+				d = (a.value.getAttribute('context') !== "") ? "" : mxResources.get('noContextSelected') + "\n";
+				d += (a.value.getAttribute('boxnumber') !== "") ? "" : mxResources.get('noBoxNumberSelected') + "\n";
+				break;
+			case 'subproject':
+				d = (a.value.getAttribute('project_id') > 0) ? "" : mxResources.get('noProjectSelected') + "\n";
+				break;
+			case 'tts':
+				d = (a.value.getAttribute('text') !== "") ? "" : mxResources.get('noTextSelected') + "\n";
+				break;
+			case 'ispeechtts':
+				d = (a.value.getAttribute('text') !== "") ? "" : mxResources.get('noTextSelected') + "\n";
+				d += (a.value.getAttribute('key') !== "") ? "" : mxResources.get('noKeySelected') + "\n";
+				break;
+			case 'ispeechasr':
+				d = (a.value.getAttribute('key') !== "") ? "" : mxResources.get('noKeySelected') + "\n";
+				break;
+		}
+	}
+
+	if (graph.model.isEdge(a)) {
+		var z = graph.model.getCell(a.source.getId());
+		switch (z.value.nodeName) {
+			case 'background':
+				var patt = /^[0-9]{1,45}$|^[i]{1}$|^[t]{1}|^[#]{1}|^[*]{1}$/;
+				d = d + ((patt.test(String(a.getValue()))) ? "" : mxResources.get('numberOrInvalidOrTimeout') + "\n");
+				break;
+			case 'menu':
+				var patt = /^[0-9]{1,45}$|^[-]{1}$|^[i]{1}$|^[t]{1}|^[#]{1}|^[*]{1}$/;
+				var str = String(a.getValue());
+				var res = str.split(",");
+				res.forEach(function(entry) {
+					d = d + ((patt.test(entry)) ? "" : mxResources.get('numberOrAll') + "\n");
+				});
+				break;
+			case 'getdigits':
+				var patt = /^(x|i|-)$/;
+				var str = String(a.getValue());
+				d = d + ((patt.test(str)) ? "" : mxResources.get('numberOrInvalidOrDefault') + "\n");
+				break;
+			case 'gotoif':
+			case 'gotoiftime':
+			case 'gotoifmultitime':
+				var patt = /^(true){1}$|^(false){1}$/;
+				d = d + ((patt.test(String(a.getValue()))) ? "" : mxResources.get('trueOrFalse') + "\n");
+				break;
+
+		}
+	}
+	// -----------------------------------------------------------------
+
+
+	graph.isCellCollapsed(a) && !c && (d = d + ((mxResources.get(graph.containsValidationErrorsResource) || graph.containsValidationErrorsResource) + "\n"));
+	d = graph.model.isEdge(a) ?
+		d + (graph.getEdgeValidationError(a, graph.model.getTerminal(a, true), graph.model.getTerminal(a, false)) || "") : d + (graph.getCellValidationError(a) || "");
+	e = graph.validateCell(a, b);
+	e != null && (d = d + e);
+	graph.model.getParent(a) == null && graph.view.validate();
+	return d.length > 0 || !c ? d : null
+};
+EditorUi.prototype.validateBlock = function(blockName) {
+	var graph = this.editor.graph;
+	var parent = graph.getDefaultParent();
+	var count = 0;
+	// var model = graph.getModel();
+	//We can also use model.getChildren(parent)
+	parent.children.forEach(function(n) {
+		if (graph.model.isVertex(n) && n.value.nodeName == blockName) {
+			count++;
+		}
+	});
+	return count > 1 ? false : true;
+}
+EditorUi.prototype.publish = function(name) {
+	var editor = this.editor;
+
+	if (name != null) {
+		var response = this.validate();
+		if (response === 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 {
+			editor.setStatus('Error publishing project: ');
+		}
+	} 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/square/js/Graph.js b/public/assets/plugins/square/js/Graph.js
new file mode 100644
index 0000000..46f34e4
--- /dev/null
+++ b/public/assets/plugins/square/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/square/js/Menus.js b/public/assets/plugins/square/js/Menus.js
new file mode 100644
index 0000000..bc0cc25
--- /dev/null
+++ b/public/assets/plugins/square/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/square/js/Shapes.js b/public/assets/plugins/square/js/Shapes.js
new file mode 100644
index 0000000..42e13ca
--- /dev/null
+++ b/public/assets/plugins/square/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/square/js/Sidebar.js b/public/assets/plugins/square/js/Sidebar.js
new file mode 100644
index 0000000..3c4f47e
--- /dev/null
+++ b/public/assets/plugins/square/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/square/js/Toolbar.js b/public/assets/plugins/square/js/Toolbar.js
new file mode 100644
index 0000000..7eab562
--- /dev/null
+++ b/public/assets/plugins/square/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/square/js/custom.js b/public/assets/plugins/square/js/custom.js
new file mode 100644
index 0000000..aa0e243
--- /dev/null
+++ b/public/assets/plugins/square/js/custom.js
@@ -0,0 +1,283 @@
+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/square/stencils';
+var SHAPES_PATH = '/assets/plugins/square/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/square/templates';
+
+// Directory for i18 files and basename for main i18n file
+var RESOURCES_PATH = '/assets/plugins/square/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';
+console.log('custom', localStorage.getItem("NG_TRANSLATE_LANG_KEY"));
+switch (localStorage.getItem("NG_TRANSLATE_LANG_KEY")) {
+	case 'en_EN':
+		mxLanguage = 'en';
+		break;
+	case 'it':
+		mxLanguage = 'it';
+		break;
+	default:
+		mxLanguage = 'en';
+}
+console.log('mxLanguage', mxLanguage);
+
+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/square/resources/dia.txt b/public/assets/plugins/square/resources/dia.txt
new file mode 100644
index 0000000..b1ee61b
--- /dev/null
+++ b/public/assets/plugins/square/resources/dia.txt
@@ -0,0 +1,256 @@
+# *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
+entry=Entry
+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/square/resources/dia_am.txt b/public/assets/plugins/square/resources/dia_am.txt
new file mode 100644
index 0000000..1a9df74
--- /dev/null
+++ b/public/assets/plugins/square/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/square/resources/dia_ar.txt b/public/assets/plugins/square/resources/dia_ar.txt
new file mode 100644
index 0000000..9e46f2b
--- /dev/null
+++ b/public/assets/plugins/square/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/square/resources/dia_bg.txt b/public/assets/plugins/square/resources/dia_bg.txt
new file mode 100644
index 0000000..1a9df74
--- /dev/null
+++ b/public/assets/plugins/square/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/square/resources/dia_bn.txt b/public/assets/plugins/square/resources/dia_bn.txt
new file mode 100644
index 0000000..1a9df74
--- /dev/null
+++ b/public/assets/plugins/square/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/square/resources/dia_bs.txt b/public/assets/plugins/square/resources/dia_bs.txt
new file mode 100644
index 0000000..f44bba0
--- /dev/null
+++ b/public/assets/plugins/square/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/square/resources/dia_ca.txt b/public/assets/plugins/square/resources/dia_ca.txt
new file mode 100644
index 0000000..cc01565
--- /dev/null
+++ b/public/assets/plugins/square/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/square/resources/dia_cs.txt b/public/assets/plugins/square/resources/dia_cs.txt
new file mode 100644
index 0000000..5da8f9e
--- /dev/null
+++ b/public/assets/plugins/square/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/square/resources/dia_da.txt b/public/assets/plugins/square/resources/dia_da.txt
new file mode 100644
index 0000000..abb59a8
--- /dev/null
+++ b/public/assets/plugins/square/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/square/resources/dia_de.txt b/public/assets/plugins/square/resources/dia_de.txt
new file mode 100644
index 0000000..335335d
--- /dev/null
+++ b/public/assets/plugins/square/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/square/resources/dia_el.txt b/public/assets/plugins/square/resources/dia_el.txt
new file mode 100644
index 0000000..c2d41fb
--- /dev/null
+++ b/public/assets/plugins/square/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/square/resources/dia_es-AR.txt b/public/assets/plugins/square/resources/dia_es-AR.txt
new file mode 100644
index 0000000..747b9a9
--- /dev/null
+++ b/public/assets/plugins/square/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/square/resources/dia_es.txt b/public/assets/plugins/square/resources/dia_es.txt
new file mode 100644
index 0000000..0029331
--- /dev/null
+++ b/public/assets/plugins/square/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/square/resources/dia_et.txt b/public/assets/plugins/square/resources/dia_et.txt
new file mode 100644
index 0000000..1a9df74
--- /dev/null
+++ b/public/assets/plugins/square/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/square/resources/dia_fa.txt b/public/assets/plugins/square/resources/dia_fa.txt
new file mode 100644
index 0000000..1a9df74
--- /dev/null
+++ b/public/assets/plugins/square/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/square/resources/dia_fi.txt b/public/assets/plugins/square/resources/dia_fi.txt
new file mode 100644
index 0000000..693f99b
--- /dev/null
+++ b/public/assets/plugins/square/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/square/resources/dia_fil.txt b/public/assets/plugins/square/resources/dia_fil.txt
new file mode 100644
index 0000000..1a9df74
--- /dev/null
+++ b/public/assets/plugins/square/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/square/resources/dia_fr.txt b/public/assets/plugins/square/resources/dia_fr.txt
new file mode 100644
index 0000000..704f1d8
--- /dev/null
+++ b/public/assets/plugins/square/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/square/resources/dia_gu.txt b/public/assets/plugins/square/resources/dia_gu.txt
new file mode 100644
index 0000000..1a9df74
--- /dev/null
+++ b/public/assets/plugins/square/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/square/resources/dia_he.txt b/public/assets/plugins/square/resources/dia_he.txt
new file mode 100644
index 0000000..1a9df74
--- /dev/null
+++ b/public/assets/plugins/square/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/square/resources/dia_hi.txt b/public/assets/plugins/square/resources/dia_hi.txt
new file mode 100644
index 0000000..1a9df74
--- /dev/null
+++ b/public/assets/plugins/square/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/square/resources/dia_hr.txt b/public/assets/plugins/square/resources/dia_hr.txt
new file mode 100644
index 0000000..1a9df74
--- /dev/null
+++ b/public/assets/plugins/square/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/square/resources/dia_hu.txt b/public/assets/plugins/square/resources/dia_hu.txt
new file mode 100644
index 0000000..40fb543
--- /dev/null
+++ b/public/assets/plugins/square/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/square/resources/dia_id.txt b/public/assets/plugins/square/resources/dia_id.txt
new file mode 100644
index 0000000..9366284
--- /dev/null
+++ b/public/assets/plugins/square/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/square/resources/dia_it.txt b/public/assets/plugins/square/resources/dia_it.txt
new file mode 100644
index 0000000..049f9c2
--- /dev/null
+++ b/public/assets/plugins/square/resources/dia_it.txt
@@ -0,0 +1,396 @@
+# *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
+question=Question
+Type=Type
+Host=Host
+Username=Username
+Password=Password
+To=To
+Subject=Subject
+Body=Body
+Zendesk=Zendesk
+Summary=Summary
+Text=Text
+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/square/resources/dia_ja.txt b/public/assets/plugins/square/resources/dia_ja.txt
new file mode 100644
index 0000000..2ec7078
--- /dev/null
+++ b/public/assets/plugins/square/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/square/resources/dia_kn.txt b/public/assets/plugins/square/resources/dia_kn.txt
new file mode 100644
index 0000000..1a9df74
--- /dev/null
+++ b/public/assets/plugins/square/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/square/resources/dia_ko.txt b/public/assets/plugins/square/resources/dia_ko.txt
new file mode 100644
index 0000000..d68dde6
--- /dev/null
+++ b/public/assets/plugins/square/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/square/resources/dia_lt.txt b/public/assets/plugins/square/resources/dia_lt.txt
new file mode 100644
index 0000000..cea8074
--- /dev/null
+++ b/public/assets/plugins/square/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/square/resources/dia_lv.txt b/public/assets/plugins/square/resources/dia_lv.txt
new file mode 100644
index 0000000..1a9df74
--- /dev/null
+++ b/public/assets/plugins/square/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/square/resources/dia_ml.txt b/public/assets/plugins/square/resources/dia_ml.txt
new file mode 100644
index 0000000..1a9df74
--- /dev/null
+++ b/public/assets/plugins/square/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/square/resources/dia_mr.txt b/public/assets/plugins/square/resources/dia_mr.txt
new file mode 100644
index 0000000..1a9df74
--- /dev/null
+++ b/public/assets/plugins/square/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/square/resources/dia_ms.txt b/public/assets/plugins/square/resources/dia_ms.txt
new file mode 100644
index 0000000..1a9df74
--- /dev/null
+++ b/public/assets/plugins/square/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/square/resources/dia_nl.txt b/public/assets/plugins/square/resources/dia_nl.txt
new file mode 100644
index 0000000..0d64cf2
--- /dev/null
+++ b/public/assets/plugins/square/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/square/resources/dia_no.txt b/public/assets/plugins/square/resources/dia_no.txt
new file mode 100644
index 0000000..d9be511
--- /dev/null
+++ b/public/assets/plugins/square/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/square/resources/dia_pl.txt b/public/assets/plugins/square/resources/dia_pl.txt
new file mode 100644
index 0000000..e87be75
--- /dev/null
+++ b/public/assets/plugins/square/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/square/resources/dia_pt-br.txt b/public/assets/plugins/square/resources/dia_pt-br.txt
new file mode 100644
index 0000000..4e739c0
--- /dev/null
+++ b/public/assets/plugins/square/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/square/resources/dia_pt.txt b/public/assets/plugins/square/resources/dia_pt.txt
new file mode 100644
index 0000000..4e69edc
--- /dev/null
+++ b/public/assets/plugins/square/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/square/resources/dia_ro.txt b/public/assets/plugins/square/resources/dia_ro.txt
new file mode 100644
index 0000000..d5da7d1
--- /dev/null
+++ b/public/assets/plugins/square/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/square/resources/dia_ru.txt b/public/assets/plugins/square/resources/dia_ru.txt
new file mode 100644
index 0000000..ff1334e
--- /dev/null
+++ b/public/assets/plugins/square/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/square/resources/dia_sk.txt b/public/assets/plugins/square/resources/dia_sk.txt
new file mode 100644
index 0000000..1a9df74
--- /dev/null
+++ b/public/assets/plugins/square/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/square/resources/dia_sl.txt b/public/assets/plugins/square/resources/dia_sl.txt
new file mode 100644
index 0000000..1a9df74
--- /dev/null
+++ b/public/assets/plugins/square/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/square/resources/dia_sr.txt b/public/assets/plugins/square/resources/dia_sr.txt
new file mode 100644
index 0000000..4c14276
--- /dev/null
+++ b/public/assets/plugins/square/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/square/resources/dia_sv.txt b/public/assets/plugins/square/resources/dia_sv.txt
new file mode 100644
index 0000000..489cb16
--- /dev/null
+++ b/public/assets/plugins/square/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/square/resources/dia_sw.txt b/public/assets/plugins/square/resources/dia_sw.txt
new file mode 100644
index 0000000..1a9df74
--- /dev/null
+++ b/public/assets/plugins/square/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/square/resources/dia_ta.txt b/public/assets/plugins/square/resources/dia_ta.txt
new file mode 100644
index 0000000..1a9df74
--- /dev/null
+++ b/public/assets/plugins/square/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/square/resources/dia_te.txt b/public/assets/plugins/square/resources/dia_te.txt
new file mode 100644
index 0000000..1a9df74
--- /dev/null
+++ b/public/assets/plugins/square/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/square/resources/dia_th.txt b/public/assets/plugins/square/resources/dia_th.txt
new file mode 100644
index 0000000..1edf3cc
--- /dev/null
+++ b/public/assets/plugins/square/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/square/resources/dia_tr.txt b/public/assets/plugins/square/resources/dia_tr.txt
new file mode 100644
index 0000000..10ec67e
--- /dev/null
+++ b/public/assets/plugins/square/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/square/resources/dia_uk.txt b/public/assets/plugins/square/resources/dia_uk.txt
new file mode 100644
index 0000000..5e827ff
--- /dev/null
+++ b/public/assets/plugins/square/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/square/resources/dia_zh.txt b/public/assets/plugins/square/resources/dia_zh.txt
new file mode 100644
index 0000000..1f6add8
--- /dev/null
+++ b/public/assets/plugins/square/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/square/resources/help_it.html b/public/assets/plugins/square/resources/help_it.html
new file mode 100644
index 0000000..c87692f
--- /dev/null
+++ b/public/assets/plugins/square/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/square/stencils/call_management/answer_128x128.png b/public/assets/plugins/square/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/square/stencils/call_management/callback_128x128.png b/public/assets/plugins/square/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/square/stencils/call_management/dial_128x128.png b/public/assets/plugins/square/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/square/stencils/call_management/ext_dial_128x128.png b/public/assets/plugins/square/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/square/stencils/call_management/hangup_128x128.png b/public/assets/plugins/square/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/square/stencils/call_management/queue_128x128.png b/public/assets/plugins/square/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/square/stencils/call_management/voicemail_128x128.png b/public/assets/plugins/square/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/square/stencils/callflow/gotoc_128x128.png b/public/assets/plugins/square/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/square/stencils/callflow/gotoif_128x128.png b/public/assets/plugins/square/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/square/stencils/callflow/gotoifmultitime_128x128.png b/public/assets/plugins/square/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/square/stencils/callflow/gotoiftime_128x128.png b/public/assets/plugins/square/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/square/stencils/callflow/vswitch_128x128.png b/public/assets/plugins/square/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/square/stencils/entry/end_128x128.png b/public/assets/plugins/square/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/square/stencils/entry/finally_128x128.png b/public/assets/plugins/square/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/square/stencils/entry/start_128x128.png b/public/assets/plugins/square/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/square/stencils/general.xml b/public/assets/plugins/square/stencils/general.xml
new file mode 100644
index 0000000..137e5f5
--- /dev/null
+++ b/public/assets/plugins/square/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/square/stencils/general/agi_128x128.png b/public/assets/plugins/square/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/square/stencils/general/custom_app_128x128.png b/public/assets/plugins/square/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/square/stencils/general/noop_128x128.png b/public/assets/plugins/square/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/square/stencils/general/subproject_128x128.png b/public/assets/plugins/square/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/square/stencils/general/system_128x128.png b/public/assets/plugins/square/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/square/stencils/integration_server/asr_128x128.png b/public/assets/plugins/square/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/square/stencils/integration_server/database_128x128.png b/public/assets/plugins/square/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/square/stencils/integration_server/ispeechasr_128x128.png b/public/assets/plugins/square/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/square/stencils/playback/background_128x128.png b/public/assets/plugins/square/stencils/playback/background_128x128.png
new file mode 100644
index 0000000000000000000000000000000000000000..ab99232d6f3dced7ae0b21594ffba1ee08912bbc
GIT binary patch
literal 6874
zcmd6L)mPPx^Y!N(x<R^2LJ*`=y1PL^y1Vlb2T4gmq&;*u(hZ01l9KLj>G(b0zv6u_
z_RLyyvu7^$tUdEhT~!VXoeUiS04xQ0Y0dvK^nXA_{x8BsO-BF#UD{SkN?k!pibmbd
z*~-?z5&-0}ekFTr6U-A2tc^N+s54Bavpi^TM9ODxm;cF#K5`0H`aEYzT+J_yL>Co_
zs{5ANtjmV^4QuWvR8*p45E`8#rYs)e&(VI0f49O+_s^=U)ZU_30k<&kz17EYQh*sm
z3pT|r2gDoH>Ef<$t@`_zI4;@&WN9b@AK=o|oIA<fX#=ekH|FCe_DsAm#sIJXV}t4g
zl?I5R+-X4vuV+#TtZ$S6XwMWNOeK~Q?M6HN`Tk9Ua+Y)&Eb*N=3B5UII?Zq?m+E8h
zZqS3jnHuR;ZP>?Ix#ZuGDPuoeiHFIr^8J$%aFe1h5uf~%oU_Zb7{-XQpO7v6__BUr
z0O52q4E|0+!*k49y;BJeNqb=N?EHYfcg8iL#?W0fKv=F$`n|kT3P)@+qcXX*H4!&7
zE2}R>{(X<&vT|JNfW@9gv_KC7;QwItnLs`9Px3dS#i{<qsi~g1H*Bwa|Kc;U+FwX5
z+Ml;CxHczX5;3q3ODPK<^i|n_@^^K71|2r<gh4h2IMBnD59u$Wz%~ZR=H&4ZLQ?Ci
zkRmV5uB&^0f1eB%o!8WzoHz;+^1pe4+#P;YTJ+7bAGqEqa?Ahxrm(ztIkTLiBsGn7
z)8$?{`ju)ki1JQH-+0HAYDjG-`d;$7n8afkv4^K_MG_`XH;BiD)YEx%-ii6hf<hXY
zZckw2NevPidc%A@1-i7y>6#n_6qZ9y#j_rXBx69e8N_8GH@2r5vbV2wucqr<*M#GQ
z`J9$q!d&S?KclWJVph@8y1{S0qj+Q^*FmW`kcqm81VDQ0X#Ntos0dRuRPVuGzGK%0
zlWd3Vm|!u38B8!1uuHp*)KSR9@dc2Vx)fZnzaZ*$^Sa<KBS@JLd_?%M&YK!cgNma;
zOO}spD~0@>)B>Z1#(R($J(w=XhnZ9{B=kFhK6XWjVzyf`*%A(~_?i?`w)>=IF?9<9
zmekhd*`zQ@@H-C5xlk-q)>I@&cee{q8?I^yF<faw(ueyC(tMBHy6zo?KVb(NPWQz6
zJ470b(BOR<B2)}hdQ*9DVpL?pPkBzwZ?kkN@+i}>U*y8SqiwSxN935Ml3>KJG6LMx
z@V@u`<-JK}rJNBQ6{+l_o}(OAZ?5o^`s_@`s@WIB9Vqy)GUC~Kbj^-x*cLDrG8QzB
z?J2Max=1%NT|iAfUyz+hD+wCO=VOGUj|O7b3(tMp$W}4W!g1j4=WqP+0-0V=UoZm!
zv8W&^8vHu621GGQu!Q_4rQ){~jG2s>xc#Wy(nz_WsW1}RZM+oRkx0*8Y%^-tBmpVS
zx1<Tn@>BVk(`1^2CEq-PJ+iJ7l^Kr`e+}VTfP8tIqx_TnzkO5=RMN;z)m%uDj!LRc
zbNlX=>=tpEs8~RzDN=%_jpoT+AM6Kv`2HXp$7ubIn0erb0fQd>JPSX~?H3rcGtC)8
zr+i?Ef5DUMz34p}QtsCrut9KMwPud&MrcoVPZFKVlq{z*r$LSOMfIj-ACsaFgA{`?
z157h#8dPwlNY4{mC}%#?ROeYIw1l+8Oex2oi!#l<&v1RV-+rxN$zTcDA=v@%knLy<
zOJRnZ4x(CEa1N6UkTjB<Y4hl`Y2UGAXs2r<YZvP575kN5>O|{g=s1^lXqlJZms*xO
z>ey>Rvg0)Pb>h`0^w#nMB?8Q_1LBS-PBS+J2X>eLKzWsU>3EZEDJJ))Qm1F9ujdJD
zPiH??3Fh=oUd|3rmQD&)@K&nKc+C^p=-FgV1rBRl`EmYE)fr{q&5sLLg~n-HcdAy6
z$5bYq`mfZtjJ4og%lo}=*KS8|S8Z1aaC}yO-g$_9@WzTnejnlyLW#VBJQFS(UK37^
z`4=;bq=XEKjE&chr^Q*B_lCpB;fuXL9MQUmYlvsj(QS-?&yz!izk>6GJ7kPv4AH7}
z>|v~CcYIg!O8-g%BPuLK1}2l&SIq$D>UFEI%-C^f4Jbn_tI%E1rLLeX|6P7mezwTG
zh`3l@e^7nDGB=xSZ(t6A$Jy;!Hx5^>oQAchiL3?2KRcqNOBKVBBUB@B;#A|z1{eoi
znF5L|iVRgl-V3p2>I}DR$9Ud&8SVH_-&aKEMfdKcjyP8mRi;%&7-o&~rjKM9@O$^F
z%*SputT_(;I)EK_Oau%{4TNlI99;}*P5jvVd?vVSx%qR$v-haEvA%JkwGWbh(qq&u
zdK7YZ_ek(~{lIcRep_)9uwQhPvOB-ee{i<mIr{1V@X-jE*ms#^ThZ`W)4FgCzO#{0
z*W+LiU}+M%(}=W<6v(G1z{WyfA@U1?b${GwYv8~oB57bdmT1zr+dQYHcfs4h<Hd`o
zcce>^^OBp&P0YoXYmd8$V~_6OU-Rkk2(*szS2k0Y8uchwbMQS@&(v9tYAU-py!d)|
zgXk}*EE&)<3tmI|OB}-}^p=QWRo|wr+GJx#<}kXJ=$B%m+U8qIwSL9{Mrzf-3AC+Q
zw?a*@mREtY+u}0ivh_zbBP8d{v;Gfz@dYgf$wi_H?n-}?`Cz9BMroq7CK#niAGp9=
zH&)8l;g(dRnPX97cH@i|Ox9VrENI+ehJyNnNP^FF+!_fsHZ>!gC(%rO-J1_zn7vJ%
zT0`Srl>f=c79178eNTOPeVs4OFXM@s|65&t$*Js%brudKYtzmtrpc};p6v6VJFM={
z(W?j_^(0xfbiFF44Ro69JnCN$rR?SHx#pkh=KLJ*m-LRz<~<4Qh$`7BKA&}V)W}!L
zf8lBB_Jps-rpA7aZO=I7J6XQ2N!9Z&=xxcb-41xycs<O|x27Gy-74tm?wn@62xDtv
z>tSnb@N*E+uKd(d=Wk)K-!O-6CF9yxcB1h2gWi(f>59Y>?Fy$hq2`|st)RW+UuR`A
zWzKUx^E_wM3-z}1*G{Xa!6Gn7`i<Qw+v1~BmdV=5^UI@wJ(fKy&N}usrOy{)t@&rR
zqrc&P{~i(_a8SZfBCuts4((j*Yy`?(o67N=lKA4N6+XJ12xpxwWxP+n;pa|Qiu;;3
zou}5R_VO}Uvu^%t;PXI6Ajh4l9!5n$6QP~qw9sPmD&H*C+G-HpzO;3Oz1&EAvKZCJ
z68GBOq|1`pnf#fsBI}9wBHW(39$uSYmYNgB^T#23TjOi{QTvDOxc(c{GM&+Tt?exn
zU))+fE^9}2@by0FEmaB`Ii9%g+ujdt6eSxCtj>uRb==sG&kH^5-DFXnlL&aP>^=06
z2lH31W_tgAoqIB9M8QXiaJq65YyRQ6*SFHv%6+T5Hn933F#A0FGN&KDl%*2rMCC>y
z#Cy!We8qe?)sA;M_}kbm$X87NF7=_wO&L<Y@$KZtkFCJ1c^JEo(1Y@|gH`UnUZ1hI
z2!G%U+!@ySPq|+ut^>C-^|}4JU}+?z>e$#*HB3#!|JSphRm)xMQihcCXXn<nz7Fz?
zp`iF6<A2@TQUe3)@we8$t*u`Hgw(4iJnSix|7<0ii~MJI0KmZiA3#8QCJ6xGepHZ_
z(DnhH7@~O)$`A#JVW2H4^boy4HBB(V#g)#>l|^OA6)5Hy6`&vXp`eT(VW#r#^Axc5
z$lPiggMQs)-ohhA39DwNi$vAHq@yuFrNzA|x0qO-e@=N=@jw*|y3%WR4-9;*JUpzt
zb!zuJ`%@MdyV}w8lR#l4n8OxQDOBky4ia~xVFs81`Ek%tYZVU^4Be*q-u9@7@c%_g
z9vg~U^0>C7JiA={yUU6mJ^u2I@cB}~E^@A}e?)NK6PhOaD$^A&JpJe$eFyOhw-1-+
z*>YHNiet97H+zAu0m@G^dkmRynd$uUkBadpvaHw+`P6X^C{1($EA;V8DfobjCr|BP
z-1MLWEe~BY=U7+%f31l<G*8Wc#e%Dae0!BUm?^U6-Oq{+5UQq@ifxJu-<83#zXsU1
z6`R%-wqF*7xZDnN-__t1TcEzCi>6FjZyC9vuU!B?xChp8wStRgr=>$$ET-x}Tff-e
zdPU_e5{pO&;B!UlAJ4@8<~c{X1fYB7qa%$t9SJY)_wKX2LPNdJ%*9TJ`vg$kdtJH<
z?Q<NPF!=_gm@u<GfMNs$kU&glB`4yZ@Y`KCLI@mlHVuYonz;#45!+7g*!8Qe3l4@a
z4v42uLKs1z{|alxVW<IsINLy&+)U<F{8XNl^Nnbg>Gij~7E+QH=jV~@nQtP65D~#+
z-C@PyUhPQ>7L3_%lgNN};6$pnzJM2z%F$VRN_&q3(Z}6u0%e98ys4JI16UDZGaEnT
z_QySg3WU6nkQ8MMkwF*r5|TL>|1~I;_&Ag38kF}`chxrHG`htZN!peu9KxrTDMwzJ
zrlR!_>t5oW6wv%?;O9F6o(U+j+L_sh(SLz*{y9JUHi-y?iZMQe_1*eLcnE0Dg-k8h
zyym1^SRegV;1*I9oxBek!zZH444)QAgWma}Xi3!kJz2!{x7a^>N0ClP!rTi$(V9wN
zPGkbXqEy_`etjPQ@Zt?@wdWlg8_Z3t+Y%qGqmBs5%6xqA2|bx?b_*Mq4=>`M>NGqQ
zzS{&(f}ng%{8Mnab53&}b<y1*3I0~Q7ua;`4+?);I(dQ{(Ta#qloE!t^i<F0hyAik
z>gB_51PX7<HK;pfq+nD1{(bx;0F)ov6wm5yY>J3&Vw)j9CS|Ygo!lkq()c^%Ke`w8
zOrO~|UOUbr#$Ip6Q<IcU{cImEa)80W$9Q+CT7`j-S41Lr&Ac}UA#Hp6syDv_B+|>6
z^iTOpLrl(sTfN(IhEL*#G|+hH_xN$&6Q!rp2~AB;R~@wGeZs+IMux#>J0d?SVgYec
z7g3pV)ToI4tI%Fd{g~?0-qk#$8^41|(Ta03ya<n9tP#r}iM#{9svAFD1k8*DV#J%6
zxQP`J6+4#~2#S5+`_o!EQ9v+u;>814+BH8jfr~&U3InpTS|36cAbpwlOcm~2hS<C<
z*HN7__l78qodYKoCCz@nI4VZ7bHANwZqz$Z@ffY+1wfi0RZh>5UOFe<_CHVJ4-goe
zWcj;li?>;YF!R*&yU(e{!&bz{f-x{@1t<YYVCSK{=6dw}Z#6;2@f3o~0v|1xZhRGF
zw#SzJYqs+cY&%o8MT3|vrma3VbuNYYfHl0DS2govY4Cc1hIcEk0Mg-eSg!X0q8eU<
z3riXMj018Uf<UC>&$9K(z<_MrBJl4o$3a+t=Nih<`R@;YsS827f-^tV(02nIUHiIK
zs)8C1^R#UE(dq9GHiDoy6I;kL#Q1exkk*u`;HA6==f^csR}to_z2-^q4WYR9>sm*>
zljq&QjtdHWgAFn22?rpNd#>S0&mRj2KJ*ek9jSzM2W*w~_e4;KlnmJ7m=I8xvKNIh
zlqts=F)c9wV@pypEwZ?FyC(MnA`PuhC}?}np8G+-U70myJI<GOq}JpqecfAd7>L9h
z`+;z_WgU)yNPT+$RUeb{Mad7dD0H74mmPDinuDc6&>{-+k|+5`5|WDPEm<h!eoGzH
zl{j*I_-FbGb+3VB?tCCWHuQGm{NEICiONT{DBD^#ysUo|n;;Tu4nE$Y*`EQ=yTTJH
z{x{KN5=cm1nV~~02bd&^&p}E~2~Y}?Yi#}#6}_*lcTKiadzph}N5*oH0XJAatZ5)g
zi~3%}(Gq(BbkIad(Ag0*>iR!QfwEOzmWuI2pB`INGVE*tTw;%GhB<Pei}+U_o9to{
zh7W?6UUE8*qLsf|Ih{LI?n*V!%9uA30iZfyK;k?y!l&83|GJf)GlalA#M$XiUX8#<
zPd=EcGfPbsKbC-pDV$w?gQ~+j*R)bkzI1?D@dmi3*HYB@O9230^pn3EAF>TZ;*2fM
z?egH~A$$uM^i^bJQu$Pz?{L}Q$npq-T@ftMsH?njsF`H@X$!lf^%M~z+b|N%$^V%3
zI#n^dLSU+ZtY0|*koZzun}VW~P+5(Q(?VT1@n?H*%Q<WSBjU+Jfv&fF>s#gppe48o
ziR+^sPMTfqp_d&X--wN&r4!4va#-VHPXD?6D6h4o{+nI;@)1X>0Gt^&ADC3F{EwY_
z(Lc?A10$~$j}^j%^|_OxBBn=9@2nV+hDV?wZ}H4A1O<1a++6IS=mQeei>n36c1O0>
zmNChG)e2!!bP`MF#0cs&XTxa6EtTCSZiz_t*7E*Jn^g7>D#5`foY(~y#2-J8A#K;+
zwz?gI!11Z4I(!3$GZ@U+9*0U$L%2rCiZw~K+S8|WlxbG#+jJ_hefCD5CzN{PG*g_(
z^jhaC)46J3DBFQJayCXjXKIXKB*3>EaM3?)(0q%?H`(!RR^ykP7ikp$rVy&{N{lZ+
zR7EF@40s_M<CPX+hB71iH^JoVtI1iK;{e8*<&=TAqT3yjz(q%?fUDJxK-B$6kMfR0
z#r4}O{Z3gnHhBkyKim<aQ4!w}HDgB^44c@J5QD@7S&WJ$v=`O$5TMV}Vn4uL2PD`d
zFPo=(3jw}*JC1~X3!t|)K=H+Kud<e;9p@VfeF_a}8!T)Z2AXsFX$@$JZYpChmoYUf
zkQoPenJB!Wv@fj(Z<rRDoD}r8gZ=%kE>_f^y>P(#bgZId7Kq6-!-I=(b^M#;r`v-6
zG*Gos6))alO69zX8~OY^q1ZWf13D}+WujSdmzbx>Ne=uJX=#@7Yf=$j9d43eK?pIV
z;Us#v^A-ozgEArgG7Upi;;>Fv;d^9MPy8ZZ`)=|&EMZ!5r50=YK9#qs;OCbGRXvee
z>YsM1CMzBeDC`)RdSEb=kxfF<LI;=1{MtDDx{CZ^JB{kpSS$$q6AM00%d`FL`ao=O
zM|W}Q;(KChh+sk{-}fXII@5==N!i;LHP{-3An}3%$aWKrM)x15iF<U6LBRRuHDv-l
zG$cfG5fI(|&)v(wR{>6W_2+-@jziTH=b92_IULXDYN*0}da$=qY}z=Mi^i<4%xF<c
zo|Vos7X4sPVJ|)5tAntAp$;ZbUHPKDi-H}r<R|6J)^-nRD((r-A)cUtO)URAw1BHR
zOzRr1)^AETRdON_3tX~wyEca2;{8sRHR*rLFj|4P4Lc*|uLw{`2t|wJcE5`LJ#HBJ
ztW~RUG@c*c>NW3KA`>%rrFH8EdvBSK^I!{b?5Svs)95HYtifol;kziy%QAz%w3mRq
z$JwHm@>pQhiAjM@fuA9&7^pS6a=d9$+Zm1g2M84qq<YH%thfHfV#W^fQ!E=nKN$WB
zxoBxj8*C@vw&gDBz?LlOd-6X@-}_D?q!#^$_zIgwLkI5JiYE+p!<rKd*%>=|m1(`X
zz$T~d-1AMxU|ucHFU*{y(aA)S&K`W_gO(JHzQqw+P_KEG=8QG=qGl8AE5w+o7{5l0
z@V!|4ToWH9xTS|sVOWgohE5m69ihfwudm($o4dGiZT0$1tH1B#oc+ny_CQEzgGiM~
z>DiqE5!g48>$dP}WDI&im0iij=Cg7YjQ4ZhcIQR(gi*Q*^EKzU8qPweDvJ{ThKQXr
z%6g9EaN3^MAQ~y9c47<_j@KhLT0PxtrQiTogtEH|pB96@2uH*2PO}Qj4XWJnwWI=N
z*;n|^^|fZ6S{AEt0?#O(+rYhil1w4#*2J!qWkG6=G&8?Mgz?CL^$z<(p-kAl6Q9aJ
zo1=2;WsC@sp6PX*R7}?$9s2m)A0xDoW8+vLX_*Rc^QIw~{D7Av$?tvlr_Hss90XvO
z++d~}W48xr4cviyK#A@BCHdZdJLRo^TJN8?p?>nK?QRIq7|xKl#?EjedzOjB4*b%l
zc#ErCad#_i1M2D)Zn8q+K(AtHiVxiGBXP!`z3KEOoXn(*u8A>_k~?DEA3EEcgb1fJ
zJ^A*cIE6=ipAe43<gvf<FST3~gPvw>B{*E)^ko(iq$3h$QqBKbZN7dtd=y-<RFw1c
z(*}7f!Q)db@>)qHoTuvwV!VxZzNv2e50sJuNO7==hRmt@zzOaj-`q%uo=%}+;b8)(
zDp>2dB(f}LgY8cDn4gxB;(o8*H~gi5u-tA@?cj<&UZ#Gf`NVg3_tUk%`U3<tzFXcA
zkt0OnZZvWd89E1-FO{zCtNWuiQ=WV8-{0E1)RREi%O*95lX)dfmIbqKnIQj5G({Fj
zE)Qi3y6Bdq29^y_i%IjYa<Hl<4UdeZ!B%;L2zxbSc+KuGK{$dkhGC7tK2=-ds{GUC
zep)p?nDigFDE@0Q0<f&b*Hq1Mb(oA}b67gS3y)Qc){dV#8ePT1Sb|{wn^5ZcMTsGE
zbL8`TkkZHZx~9e4CvM%$*F{7HLVDsV;)S1gVBR+IdT5DbQjf!)Ax^zf0drXJRZhho
zF2zoNG43)CbDp+q`?%Enb^ijZEy&ac0&={-$m8P9X)LU~?~L$|Yra3B%-YD31-+%D
zRYoWW-L3VX+pp{9uE_KmOV0P`qDm$b1Me|cYv6WS3K?{5brL@eKQ>%{&Zr*7q03V{
zDmzD^W&QR|uHb_#W5_#bRiH5bH$^LiOf>uL;xd3HB9jeL0+<Yu38E7K+uwg%ejo(i
zf2NlU216;_8jcIVPzL*LW_94Z)Od2cHc)L5OM!$AxD77Wrl14K<q3KJ-Ne{}1~;1j
zIVN5=0%l;4)_TN<1^84e8wW-L1h*X)m5>0Xxj~KW|950BI6%{+xQ?XVkN=(vfP##w
Kbfu)p*Z%`GED}-x

literal 0
HcmV?d00001

diff --git a/public/assets/plugins/square/stencils/playback/getdigits_128x128.png b/public/assets/plugins/square/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/square/stencils/playback/ispeechtts_128x128.png b/public/assets/plugins/square/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/square/stencils/playback/menu_128x128.png b/public/assets/plugins/square/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/square/stencils/playback/playback_128x128.png b/public/assets/plugins/square/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/square/stencils/playback/saydigits_128x128.png b/public/assets/plugins/square/stencils/playback/saydigits_128x128.png
new file mode 100644
index 0000000000000000000000000000000000000000..3b7d945398e18eaf30830720cad4cd92f76e3414
GIT binary patch
literal 6105
zcmbtY<x|uF*Zu9XbR*p&ARyf!9RkwbozmU0ND4>@(y*j7QWE0Quyl7LAV>>Hv%Efk
zz&rEIJRi=zU(Vbw_s*Sj&Ib)O1zapjEC2v-l@#T){&nbofPwa}_DWce005TUJ6Tx`
zC0SW|4No__ch0r|pop87?x#b%K!(^Db>?a^O=qzE4R1j$;e;!GX2u#h0V^BM+mh7@
z$)PgD#bW3&vRHLFun@f}GQhwfJpy4eyv2D#Nb-4ffco$C>zB8WYU^}<5*H!Y`F?xr
z_u~`*3+Or660aJNYSv&#yu7v>=zq!m2M(agK~V$&_tv(eNtR9rXswjFARn2}r$6S{
z;LX1rP$Qt$7!t{s754k-R5s-mkum`7nF3zZN@m1+J|8x`B}!3&$z|n#VznlJVa=0G
zKU~SHcHj3a>@L_!o#LV)N^Djky)iapEY*W-nChY=I4y-BE&d$x5S->#Pz_@mBQ1D9
zvker4rD6lo3^Po@uA;;9EZTijDb8toV5x$VkbYM4`bcx=FHGRILX#Z3qH+fJ$2Mja
zDtmiUJ}3;<pP|U!BeJTJn2E62vxyh(VFH5h><o!DKFy_nAYGaoSelyZnJ40S+WVW7
z1A`+eY~YVOe|UdR<Vz>yb1i2qav7;{0M)Ebg2o*Vtgk^1#`w^KHLh%=1h9h*ayY&}
z2qJF?P|8r0<J8l;y}eBbODt&VO->w!i3VRi1l=5nDK7=UoDi2=Wu7I5L|>}QS97bW
zD>AcQ{dB)oiGQN~8AfxXYh=D_Njs#z8-FWvSx)Xf4C&!-T9e6_Vi+XkMeXT4JnO`{
zXG5n5&2}Po@Sy{V4-v6kPJzyy@Vh1l0j1T56Dim|sZ0W>A&0C={Oa9_=9}xMrYFly
z-b<2kk`f+U-q*a@L!aX=Y!cQnv%0}V$>`n%XiZRBZZy&^Qelw(CT6fS0S3wxJuN%f
zBpI(EoO~x@*8-OX%w&PRh*#Ndrh!f=^-LITxl73%&jh01E#Ura6-Cy9SPUg~Qy?>(
z9s^(VIb{jjJ6W`33LETtdcQ$3tZ;@xe-?_j5s}HnMtC(5ZwoxjDVOmDq&8$<7I;nC
zmeYMl!Ij;fJe_<^9?r^5Gard-`6?4NsJq*p{|A9u1X-{0mW)523F<<R!lvF0budW>
zCVuzCCM$&ACNg}Vo)iPy@`a@$_)}bL%4bC$tq-#ds*32-A59dZlQDNV&|(TLGs&?N
zUNHlFbiMuT1J!+LR+T(4+%=h;qdueDc0?D1%KeTOV|AR1QqI(ZxH(B2J$hD$^&E@X
zi#dy$M^4muh%Sn)Tz62bzX_TvMJ;g))k4DS_(R0U%`a#EKPcC6PNVUAz0Qb&2}55Z
zF_1W+fMi^lEd8@4%w~wB3|LyxK)IZenmLylhhPAMPY$&RG!;euW`{6?U?kS356_Cu
zBTZOVi;*H_RdK2WXPQ!rq~e2jxHs(blM3_Ur@SFT8&H5iTU>Bj@CPxKP-V@cOs&N<
zxwy23EYD=mbkCUcPj5>pwZtnhbufMSzJ&+o-zDF@No2NXC1XLP8Z+s?SYQ*Pzc$Hd
zaic$F>QoG^2rhl_xRtoYL@jz>2sREcuG1=fvlZD>(38fXI`xJ}g~zyF=TF^F+y0kt
z{h4H$%$f4F3a3G(7jIwiM}ASTo@s6JX%byVU1p(C5Gq2S=G$kwJl%(1D%mpG2JMpX
zf_Eu*wTESKA}t3oY;1Uj$r0o&<fl6Px<7Po*m88Tb<lLa=<byVR-Ws|>*naXRd#4w
zSKe0IR=VgqX$KV~Y6|HlX-w#E6o*QOSmA{v9#Ws={uDv{TAhOms0c6!q`#w{+@H#v
zo}Ip2Abxi;EA~~Suz&J=c6hRKQnW^(R&~aAfz(0Y0X7vntYa6*)0n9{%K57#F<K3p
zsAJ!$_H{g=HsvIE?c4XU@A#LBf$VS{I2K$Dt`y?(sPVXa_wmjTHx`XO!aITnZ4GTE
z`b~6wG!@PY4vf5l5|xrez>)vEn~J~{x0$nvQ*bZDzK3^+f62vjj9AczTUDrr=a?^I
zjCu@W*FJVPR{v}Km&}FHg*0|tREB)Md~tsrQ!j6yXN_&nuGg!ODo9n0-kKg=4NY}p
z^<nkt63Y@~sruXRy4$t+*>opk>!995$36R&;o7y6D0r6mMrhKb3wpL}c`sUwS`2=o
zTA~$#8R79Vq|BzwR4syC^i{6z@b{erpDSOp-Qelln)u@QzTM0bw_4KLtlAh;*r-7E
z2+UZ>uTOR1<973g%V6H`{G*PEkU?2Q#J1+)pF!=3)IGyfkzckyKX3W;9k#W6YgugX
z56V97G3%B%jJUbEC%(VDW4j%{uDJ@?FFVZmwXiSr`*gE&^vM|zq!+eu>ar-XqZg`s
z?#?^N>L9P7&&?#v)+&0V8T&3)xa0*f9xm1zX<%4>x7gN?W^Mvf@@9@B=~m5~pJ#M0
z+zGb`1qhQ~xG-cW_$o{leJa9JfG1uha>jQEZTNS1huS9ut5~VXj(S(CI|m$T<m#@*
zwO0K(`1Ahe3KA@%A`{Xx3*JCoAxmHuWh7-<H*#pIv)I~|KZtK2&3pSv{U;-h`T#S6
znNBTq0&{!T^NSW(+qYE3b7_@k)m}{94Am|7bbxCwsq}kkdYOchm-0%wVE##pS(e0e
z3+zf%E?zM2m7R)xv@Pvu?pWNI<2bX;OM4gr8zx_rsfdvXs>mY)pJs}KL;c9l<M@~T
z-9PV4So|zq+anW^Dt{F}mL8V&2Al*41h}1BpC^&A{Ci!2>6x5MO*YOI8`EwXmgycD
zKAa1N9d@^8SYJu*^<`dZ>-pAB8|$_@dVhO5kabdY;$3)Xnh$ijUDiLeTJRxuB(3G7
zHazX@s8_62G~sXU_UT>!nECPjM|jSW;PL8ZeWreJY2WvfhMf@Bmdjxw!3~`dzIG8G
zFSjh~rF@Q7jvkJd=0In0omzvAreGW6{pNWrJ9&@(s$-=UF8yWwlQrq(=W9GVBwBMF
z+F^U?d8bt~Rc`bC3;d_ki{IWYT)M8Ggp20~WnVd-a4g-s!Ynq9ACdRQPPk65@Hg>x
zX#7pcv=<&Z4p*WB|K5GN!$*%okHM3tJ#ch)bP%rgXssr6O%qI{Qxfw$ehoWa&SB5K
z65`8NPJCZHU98@zjzrGaZ(8Re3=uh@+&7l`*fpiCB#x%jqD$%Pg0r+6>tPK0a`rJ!
z3L{DBlC)wKUJbv}&MO*bN@k+U>?hd8`F!-eeSexPx224ij0f#)k8kY9?H|Aig14sS
zJLC7-;om1rJlnm`8%B1Y=^N-T*NU3C9DD4)yB*ppOE*KT&r6hbTse&|h~Dj8!D!FO
zh5gp{?)s_1g=*Jx{TiR<AB<bjpP|RNUbsrOrTXmkul;D}yVl!4taF7HoE4lG4)iX=
zR6|{9J*h<nj`&tDSPrJ(geQZI=AK~zl14X~cdec(LDgFyj#E>&L$??5IsHZNR4$$E
ziuU#U&HcoMLXo|0`JI1N22>L}2s$$#;g_Y$BN1PZ%zf0N)Ww7I9s}*Z-+Wxok##e4
zYv1VapvoBvOA0gp+r1-;Kx`&m+c(<VKLIG27Y~GZQx^YZC8oQgp%(yPKl=|rKz1(q
zKk@lmNlseFA9QSD>}H}*vd-7Bvb~s?*XOb=>dOgdtQbPoDyc;M##A|Lt`V*gr9&I=
zB@Fn3ZiH#(zgdd$d=rEz$HXQ>kj6Y4-88w`=R>*ov+u*U@eu|7MvHx-Jxu&Q*Mn$*
zZ?7887&LAR8!<Xuar*l0YWZdHdJYGhx)oD0$w-^MiE<Z;lrVu9AO=J#O9|hvgZ%-F
z45<4R9Q6z!-~??Q1z~T3=uN;qOV_0TsI8F5##0U`I@BE#!+ygUzz4R72*x{F09v4j
zi9R>P4fOvGDq8`&55=2b5n=!F21DPP>pS`d=^Z-^vFM($#L7tD0f6bX%x}pciLwFp
z>vFG+15Gy?=LKji(fgh4-zZ&yn(#;Gn7fk>!EflK7GbqYa4&{3HC%oa$U4!Yg*pw8
zox^u9*PTuPQzb|3sK-Wdv-@Ky)0+ZP=o@qCy0SE?mYnrM*~(;9x;PR$;oeH620HiO
z8!Eq&n64Lvm;&<6cdc_OtFFU9!7SgJs+u^ykDV^nDxhwOS%L>B1Xhko8vdHBYa}@e
zl;n<tdV>IFq<d0(&b5`n;!NW6E)@Dw0BYqG`&67O4ncP;e>M*aeP0#_nYIQMEFfMt
z+<oma^LHY~D{28Ovq~@kd7rx1RiYG^3X`F4!1*#niiAL#=#O4;Bsw*poOd*aG)j2q
zZxA3Fsska|_rU-huHMiS#2{61fozLA*gE0YHR(}Y_oBgj5D88R3g8ahukbpO59JG6
zMJGR#qXkG<`<1JwYwKG8sAZ)8qvBPcCe=AaonGs#&_e$0AEK%zrz4KOEB+@QP}jhH
z(j?(!)AMj|MHJG4bQE&;(K|pA0-2W5&{<MBBW)En=>_4mQdx4+i|P{aKfB1m0=%1S
z=0Kz1W$%knAJjqaXy6S_{#znN2_O?Zz?kHFf>To~echR3$d{NVNP*>hui-AsIfM=z
zJP6nB39ndB!oL;WZQdE_N}mBe@@lw}$#hb(J;PQ=T`H38ilG%137{a=o@V>WC-Vt^
z@7$3!2@TDs>p^l#x-K$_O0_2kSR6vy{XNn5Iw&jqJ{R9^XhP}wX$O9@6F?*!!I^ZW
z*T~bRq4CtaQ8Q;Xv_th{|GduX@0kTZtBcH(b;#JkHJ49DoRa(H$1OddJN1i$(Xn7Q
zll?wpD7$tS9{O2Nur!D4?LvB0`{BNwtn?+)4Zp>O1y;W4ynT&tkthB30P7PjVBqn^
z&vYm+Y=gr=J0xJ}-%UjHaLQI7R-RHs#PF~!X0Q#cCm#z!BSTWrmej?7d^uzo*~LAY
z<}Pd<1(3=hRqhNddvGIfgW{x7DMQGp2g<0Cs59e;z$}gB5<0^Bg1dYi<=T$Z^G)>_
zaQ^$-7BJw0jkmcg-vx+%p|g0_J5Xy>Nbfze|K74#m16b!bN9TCaKzl|(yHLOM4ES>
zCPWl<cY+raa?<KD1B_lnt&gS3X$GEnF3-zzr$%DYvYmILT$2;>Y)}C4DFO5|y38lA
zwXgTwD|fJd^<4KT1<rwCw?9*!cfwOQiFK^lo7QEPtzxMn&?FvTXfiEae%l+UAP08P
z*t=ciP?$Y#=q!(=M#;zbe~KvhQ>>O@(+7G0hqxT>sC%jBIVONq8T-lNAq%)o3XmFl
zXvf~25SHmqY1JUO{$d?4NobZGC;mtdbnP)_65#+P(5<mUd?|7)gXj~<;%x<WTpcJj
z_b~viB}mkw1>7-622`jJQw#UTI&^t`b>Sb{OSZ<D$N-J%SEynrkYMR3^zRXTenW(q
zI9?BlSg0Oj`WDCtW4U)9=l39wkS2Auf8@z=!hxTprX~jZ*i~qNdp^Q>8T;jAecX>(
zoNI};Mp2N>Mg$NLwZWiRi+pB6@P7S1;f2!0keKJ?myW_xRs~)b*LnwR>L104@?SV%
ze|E(=;^;~h*_dX)1qdEgu>*tOeA4KXj5pv*kO7^A7Cr+;-cEfG*A)fB!7X?jEPCI0
zYxS+Nv5`pWb^QF}M`fx&zItFYFf0^xlo78VW<kWl-(2ivW^SnO#}47{zF^#g9JzkX
zIio^>#46?LA%}M2vKwXIs&RFeNJ?7282a(uqotR~dG#8nlOk=v46%!39xKFPR0O$E
z$Iw<ZIlY?0nod=`vOJ>m>wD4%72&&9SA2L)ZpALDDoLL}RwciEV#MIQN`?!kNb{ae
z0q2{sv6!Meuv(M6*}@uM^6pBJD`H4`O)d3{G#x0q27z<(5l5SV_**I!-(Iv;b!MP|
zQJ>_jjQhz+4>dVmWb}>+kqdRIcX*AZVv4sZqC=Ll?w6J|m2pEUo!aHjodOhOgbt>Z
z&Ika6aQA5nEWrv=zE6=agl4lebFG?xzW@U+h*RQR?a{AzV1RI<`E*Y4elB-@`<SJ5
z3@NSTjch`(haYzC14h5hg}Qn4O#w-Y8T(Knj1JU{Og|&bHE{zHBQnv9QJ#maT?^6>
zFTeQV$wr&juGoTk^9X3EZ*#Aex3b^J+ll8T#Ycj&^7~sNk!H;q<4YS)4HzZ4V7xVK
z#1{<;xwXuR!t-nTwIFMXn%m&qg)I1FKY-8sAy*ft>u-!x)xlUwv&Jh<)gY8zYwbGz
zC>2d~vS8YX1fNv{x9zyiMIyl)HBpQu#?wM{*D19}00{7eBa;xKe{YsXo7f|D;}=V?
z-CRZzzJ=)<AZ=lrxE=|Gn_@+f3##|zCzj`pjxtH74v~-6A-^&;0;ztHHn~Y(Zi+wg
z<|r5#vU3P<322)5-+2YYgy}n8ey$1|SrJp<PR^_r^YT)K|J|~}FuB_iL{?D&4z?R2
zQ>A8M)Sm^6rBVm4JUFC?0RyJKimi_My7$T?J^mn*><D>xTe815=F>SHlHpfV$3Lt{
zx#POb7RmoWzf7YkW0?n4>pnVEmv?wwnJx08s<v#kNJs#YB2ecQ>|FH?1}kv6;ytBw
zF4JtP-2Clh_e&cORwu~Sxv~}7pTxaAVWd9Zxk#8Ce;rBR^B6T3_@IRol{x64p`}5=
zl_W39(Dw?t3Bp08Nr9TNzh&(*Yy45o))whkea>NV5*Fm6>p>l+lP#r_vhn_2>?mj!
z9q?a~$9XSFZ7u`aE5`nlF;jK0ps)A$hME;aEV?&R73Vg47>O9l+ghJ!CQFelcp?Ck
zmH2`vx`m#a3-;-_Z~3t$3<CP9w@slr$N_LsjQj&3%gBxOJ4!^TU1?j0ov$ifyd!q1
zER?jsRRUQ1W3IZP{}f4|HOB|{GFI}qXGe+!z5062&+OsZCz64>*@qwh_Luu3j{??>
z^$%DrSCctG!EOKE^*5&da3Lj}dZFLu&KJ53u@bElU5vsCv46-fbjb)!t9gs6jfHe7
zLjhnT4f2dX_2Rni+Fj?9_mA@c`=%Tj(afvp49IK}L7HyQ?a%L`JDFx*8ufiwBb3=X
z{lh3@NRaWxEHBD53H`P*!fHDJ`movPwe}92jw#%)3_2#zck?5?BNGmYMnmJl5As2{
z0AD+ub;7)<;7Oi}T-)-T=;?R6oW!}Q8|P;+1J-st673R{JdtxfqfaZsJB#XkG`ti8
zkJELAVc2!1T5?<_a;LEFgmnid^J3We&!oJ>C<fT`#`3&bw3F^6HVIAA0*ss!HhgQ3
z-#iG0<O}X6kG3cUlF%0>TnMnnGWpC)nwg%mGZ4lM7Y1=LAC&dvaYvgJC>V|3)$I-c
zbXz4!V^7;9XzgSA*h|jY&*+FzK>HVGm6>>$h}(r@y5=eH3%y`rRE?_^9%|O-DtUG;
znEmoNN<n%#kvHw|Y`nZsN~i<^vw-q858^?4TiFo(FX|P!%QDJ(9jj~)Xs_RYz%u-o
z`yTEu)+W8tAP0HGvea;^NrL-8(3y_fyDq8QhrBo4h%`;GUB2>4vlt*1QHy1%U0=;<
zHlUH>i=Hetf&x_E*&-MSp8=wvv@Xi9)R-|>YzROa-_wU6dGTAG{x=;`;0*)}6w((#
zMFwv0tSXG=z}gD!P1Hn~K)UyaJ3DEqR$F9(4+_yh*!e4bz#<U0aC46^w5xATY`DqM
z9*gw{f3hOrPFUuomyGp@a4C>YMA{kwY}v3>Kf-vO(#)`Pt{E^lvG*)$T}h5PMU5fK
zzKoho(hvlw44^nzGADR^b#VC=+Y^vChQ4Dbx?SHO^BzQ$LzUs7?xC7J5Q{-Q+u5MT
z_a^xSrv_CYKM$~=9rx2ozHA?#g>vVxR56ZDOLpFLml{9JB*M6NwW%9GQkWP@x1V&$
xF#CQe<9H?o0E2VzU#lqpn@RX@+y?Rq)OGTR#G?E9Z<zp~B(Ek{D`WBg{{VpAXCeRq

literal 0
HcmV?d00001

diff --git a/public/assets/plugins/square/stencils/playback/saynumber_128x128.png b/public/assets/plugins/square/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/square/stencils/playback/sayphonetic_128x128.png b/public/assets/plugins/square/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/square/stencils/playback/tts_128x128.png b/public/assets/plugins/square/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/square/stencils/recording/record_128x128.png b/public/assets/plugins/square/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/square/stencils/stats/goal_128x128.png b/public/assets/plugins/square/stencils/stats/goal_128x128.png
new file mode 100644
index 0000000000000000000000000000000000000000..bbce88942a2a5e670ac2b0698582671f7a492069
GIT binary patch
literal 5807
zcmcIn^;gsnu>I`P9m3KLN=iwGOLwQzodSZS#3J3@DItxNgwo;C{iVAFq-%-g`TmFZ
z&YU~<oH=u5ewlO6+$c?T1w3p@Yybf8loVyP|1s=;fr<Vv_eole006eEgN%%(l8g+!
zrn{@HgR>0)DB|U%d+U<Slfl<Vow=J#(iv_3bhMzAyzWp;dx<@A0#<o9XG2yeB#Xuv
z9f_&W%xc+f&q~ZuWQd6gIR;@dD&xu%k*1CQroO%vdxdyXU!(JuybQR__ugN77^eVO
zK@4CE{AvK&tjQREb!+>3;1$n#2Y@aMLlFerTHA^yS-b3EwNNubelpMGb2A+9#x)o0
zJy2_e8p@v)^ym3hCW(Vs1%UNV0b;aoGh*BshTkEGlT-_2v+|SKtjL+Hc(dt;EBVwP
z`uBqF{Vg>pE*rwcXBE;LBQwTQK9UVnU6%N#CK0B_T%bPsr@9ta7qE;$3LnvJ`~(Y9
zaDZ^e85VyR(cw8(o&KpL=hS^Lw6G*#fX%Ev)C{(V1&Ap$$#N>HWbnkby;P;LvxD%%
z3JL}?6ghiER#f9N;nw@sF~Yqpfd9SiI}*+0|I(u%i&MWBr>1)6h`FBkuM=_#I*=6B
z9Zx&wd|MOwQnC5mOBoB?@71}0YPKdpqfUD^F_66x0qk&<I~yqp?BIax|2`akCU5Xn
z%21Sjt*?(jAkx8-^V<586GuU!{x^@G?+(RP7JUnx;8&Yv?j`Stzg3s7<W^HxWM*+}
zxgk_zo@uv&Xzujho9$ZA4r%PhAf&I#$v+LF_P%LamClDU4ifR9^>!Vdb>Tj+V^9QU
zJCWFX(t#v~h*__uKo?E~-IIfW(n`n)wBP|E9Sds6A*+(OaX8VEzkP0cw%FjiA{{3!
z;kDrt<I5gOi@vmuUBk-i0TU-;d@4k5g3<DzL%JctAcGAoe<?ytlqq^zPOxzzenT+%
zPROn~9xIr|9A^Q)vd2^tgA)2e7=5W*$qnBa)u2bf?Zpa;j5&!oO3H>nW-vV_fffU0
z3A%#}dLo52PCdQ%AQ^Tr<5wS63gwW{M3VRTH6hA{?&XwA1Om`?nOB7#lQ!jaKT+^x
zwkJ;~#mIx%cxdKA@hmtp(LVR|xV>p7R1YERQ`waE;WtK`?^W2)zoYgi?ZhJJnb=@M
zrMC_ZKA?wS;#e?QD1wutBa_k;d9|Zv8PyaqrsIqi!V|G}xX>fMT4a*r#B#g@`04rv
zIDc37r&?C>M)1^Rz8>`)<*_BcBvKi0G#{&by#RHl7R1X*;Of=4JgVnfz*)#y&^mUa
z#)o%PZ05RwT78VsT_|cvTBzn@#bS=&aU0*xeA+43a8JVt`aI5v{fPo!Au*A-fxz47
zAQ}1>O<2vSZ>7OfiiRrX%+xP)U*Zz}#^jepD*{c0k<0H8We|=;diLX6(tS)7meFRW
zNLo>xD#4wm)F!Qn`V{=B;3`@5<xz6p5Ro;=SD-E0Kh-}<Ts2Tdt0+@@AyqaywIRzr
z(LLQg;v!kOlu}!w0!tUmlmADsU;cgKy?p#jJ2o;_c#08=0n<FY5dE!jKC3JJDNC1P
zV1<9_<41%f0t>C^%U7^baB-dXSNYA*-ooBgMztw<UR7SBdfoH7Et`Q?%04VIEM_eE
z+Fz$ZrI*S~Z$iH*Sk1IHc{YhIp)Ik}C<ql{O!FVGT%8_tTq)VG*nHk4-v#ed?&=K7
z;D%ZZVp?1C4wJ*lTgXp!-{`gL-m&NCX6vHse$(48_p7|ni_y!`bFJ*uv8qH=+Ejkf
zbJF=-7_TLym!LUeuwEP}6<~=U5Pw8{lDj1W-&^?)CZH<7D3I<zJ$W#dIXydlHBaJj
zGAsUF<m<rX#q988<)mnhK&{%0*F41Dz`kHAa9G#YkGC;XZ}jzENqo3EEMC{HOa1$J
zY;Dqs|LTvQV?PP56#Y0mbUUy+)H{>{K0IkY?cT@Td*el-bB25hp+R3op9z-_uMelf
zUB)dSub@Pu<Pvav^V3yT;D*Q4+1Say57n-hZ|Ke92lp`&K~Ekvp&H)5{2^o1W2m;j
z#_q@J_r~|6FW+BE;Y5dJ$mPow57e>r@%6jc*yQYba0FDLR@LaQ>eJQGR5w;1Ri7@h
zE}|}0|M*jfSe=_qcQUg2+!yb-Z`U$hyLuAVktMMnnDF!gBU`4t4?RLXf*@W!-V**2
z{_#~nnRS_odI+Z|N3P!R&z)G$8!yvc|7k=`OmR&AZsv$<Eu=Q9Ho~M}R3Lk#z(~lu
zUu`~ayLtV?VBVkn<IahIK^b_+w${=4pw2|f{<~9=J)5nxP0#+Lww50)3%>?FXaDUr
z?U6hRxx0HHdAPb~M~vUr+yoqy9cApz9|-+9-RK&9b_N9Lh0UG1%?oYmh3XjG_y*bR
z<una=ScKVIMenpC9U_HGm`L#PuvZ~|LHRx6o9)d!gb?y(u4AcIt-Gx=Iwm)wO(FrJ
z1f~y+846wsQ$@)|_zE5IH}S7yI)&DKIzI*4#rmsSs>+Ohs@8D!J=V<CTZwM1IzK%B
za(9F3FRdya&^rrWM_VR~eJRQeVOe``-&AM5xhr=V(*Vg+PS)6BrqTHQ68@4-J#YeR
zd)ED%Hdx22RMmZPg=WQ0T*DO2HTU#4_kKd@&(icVNhJ@J<#fUPlO)qDNd|MAN;Gah
zFyD=>s$IAZ?P%^;^qAxLOY2v51%&Ka{9z^{??uo=o*4PHlI-p4N4EaPyc+1)x;JL^
zws83s8jn=HR*Wk>D(&+<@fGlOy|B7SAY=U}U4H4AuNRxFoh#O-T{A4wKW2Eoo`2VA
zi#WsnPWoUV&7q_3RXc5@*XsD`$Md0#lcE#f{A1Ic-v`8!!I9;>Cy67Z_BHjp)2_~X
z#acz<H?2LMeQR-<abMy(a*hT6u3Xh;8u*v?|14?P31Dlv8Ws{<*A3wRCF1Gfnq{?^
z&(+G+%hl5C=PaRHYuMT3Z*6qYJcn&7_i>==uhKHN!IHtrs?-w0Dz7f7_J5r^LHp@>
zr&Tjmu5&)~Z%(HdemKluxvZT8OXPpfzHvO^T6}ORFkk=sgnTe^!gJyv*udYR@i8XT
znSbIsS`PQSzE8d<zzD;Lz?Y*vbaZpH7q0%;T217VDi}|vB<}uKtl)Ghhco*|h(B8;
z{!8(6u|}5$5;<4DVU-7e2hR!QxwA09sVQwGbu^h4T})pSoTXh~3t~KwwTp047)eNf
zODkUC(Xf|#QPD6{G80y2H^C{v@2UUEYs+}4Eor=D{PX_y`1(Qg!C?oX|K_w@SIqve
zj-M08?!P`=G>q)NFfcS&sueZ;@b}|^17c{iEZr2oHYZuudE+!bFM7X!Q$Tx0F6_O!
ze?LGKEL6Le>)rS~_h{6D@d6{l<<jMCTZ-rYz-s$1{#*TZ_!@U$;aTCu*WZ0h1!{pV
zwC>cR0>}I-m#l|V9YiOCjb`pazHi^(W!|^CtA4KDjQX3BvK_cRpa0rN^j`JK*|zAw
zV8F~<LMRZ~=bGPjt@>LnzLT&k^Qq&ibZI2y`>~m)dYFcUf8LXy?a#Zor5qX8cdozI
z2Rf;8hJq4;%&vQOWZ>|Pgj>5tJG*B9CG+x;2!G1_-&=|0rufbS0JsVM7oc>FGYA0S
z5-G__>H2{FnmEK7D-hLskN(KN&a$%NUL#lRCt``@XINkkXO<?CV#Fqj(7X$_W(ZEy
zWR4`EXJlq%UQvLdVljSY9VWO#*;2-gxFcf0))uDrofjNmTJwzU__fxyF5Y=4^lNP~
z&&k`*)>O^gXgkkWq3fjbdsS6s)se_0_c7)W#ENZ$a@k|~qZ|ka=nFOn{R?3<+|$l9
z00M;Tbf29VVg3J?_|SZeN*0Zn@X`SWkrPbGV)>A6V?bAB$7Wp)xknXQDQ7iMSPx*b
z0hg}Ku9s@^D!{txfz0FQ90t%0u?T%|3uz@3RN@xP6p=+t&zX`DDA6{ga!&C|C_n_z
z6pTl#STKPI!$~jXzsJbGMeNvpXOXnE<Rt{EpUQ^l!Y&LraM9sPoKJ5Kzxx81D3MPF
zDPr#b@fCNB<_szse{rBUl(Zct+Xe{3oslLuY;_J<@c1B*FO#dFHUSSlfZr4-_^eOH
z{fi)?vWkG<$+Zyxh$f2GmapOkVy`zzzSu@?+qQ+{p#Y;@NiDrsUFLYe%9Ybss&@28
zp%F?R9DsZ^uD?q<BqiL%O<+{2@eza$0xo}bNn9XnD4wT4Z%6hD=XZ|XXazBV<EIg0
zIhVufZ@E{39e6W+a>B0heD;Ju-5viuEl-PYMqWR8TNXzgA4ZN&@gLzNA8>X@PFQkK
zK+bP5H=NTDTJw0BL0kaZ=slBBfmSGp2`Jw5Dy8<=*k*==1BJ0kPcDkVx?)Ha)+zR{
zY%ZIbKq0(%Oo{Pq`*BNygQPAdGfhe-JpzLO5d0;~TAW>0m)&QEYTIo_7YD`bhTVB5
zzexJtMY?a0dntdrok7vVfD(^siT;pE`Rm2&rM!)&Ai{hhrT?abcmWMCiX9NSa`8UE
zx)`N#Sl<ravzs|HDDZ}IrNIU*#wh4oehpvM1%rNKv$rQ9X|Cq)$uSHBpzD)Wd^&`u
zE?#;lJ3na7QrT}>xIySMzd9leQKPpkFvI%*_{iDZ_|{{4GK9g|D<ZfM+OuIEUSpk&
za^B^2UPijOvg2|9b}cbK|6cyRV{NjswzYtY2Y}K>KG%t>A%=|DB+gllf1K)#etM)4
z{(<6!pgOcCzaSyXMdwim$Q1xg7+9N$lU7awUJ>m<V!mU!6M_17y({xkZGQH@sT&Mv
zKT%(r$3!>(!j0n;nQ*<Y1Ifb%QE@@m9TCFFWsOkl9eZe+P9n(+Hi^`EAvRJqE&z00
zlaSKW)}?te$%P$D<rtfovxNe@B>&#eV9e3@fU)EHv;kEb)S29p>c_Sm4*tS7*?e`e
z$?<B$RI;q`XPSU!;o}sFE^>W4Z*``)iaIp<VezQPe>9mh@35N0ly~PEjHj=hu(a;*
z<2)G{sj)SvR{3)t!CJo^zgzr-?6q|;{6dUP!@{X<@xDiat;o5wj!_f?x7&Xg`l2-Q
z!pE}F>j&e~X}UMEJrfKQ0|?DwrCzHVLpTJV)`|m-vEIrVilCTx>vGY>!L-aT(@3>o
zr5D($ip|<?G|0Rb?ey+?$$*j!lW1O`b(ye{+@vD!R`a50;wBk?=@8#yjvat{m#4?e
zZoqahLHKBy*{&fEq;20YaKbZD%&|~Og=0>Nb{6)3@K&CZvaSE7?&b}d;Pl6x=y^U5
z*Z{_BMZ4sJj0An&LYI-2l3@^2@sHelOW@Mi2;vj+<8p`P9eJ{Dt${T;Bx)PA9wZ-p
zIk7d|bGQixx@S@Q>XQvb5uT$pa>}QVj%rhmvVZPqaYE48$HXI(o@GkKfA@^Aq5>-P
ziaNeGV)V4ox+5oLzW$8WYc3oJQZ{Vc+sa{E1SS&K4F6|#F#k0UY9eO)CJ8Q61OIEW
zlo|B%DtI2S?DV++v3Fg(0LWaNty!XUh|pn_f1v#re+odTa>{>^w4*0JM4nMSX^3^5
z^E<NO|AJuWk$llZ<z|j_&uLhIi%7`E=(aMi>S>@M;t}CSt!yX~rxo-Tdao1f=j952
zQK-t%25iiQ)TK3cm4J^>UnBsi%XbG*6`Pa!sdDbeD#61Pln)xeA_(Tt9p-<kkMm>h
z1<D}$=-}pJ{|(Vdw1u1Wg;^CyiAhFh{V824Pv~l6rvpaSVf2P~OuGsGMUa7+7qmh(
zP3|`ahN7KV(Q8bZ`-`qbr&?VNObunQG>PEGNCB5M<mz{AIY9YOzd@ZlBIY28H~%PS
zsw8OEaSp5o_thy|x{FfFe`4L`*Z6|Cg|2AGdvwU2GGhub0~_sc*_@x2);-oP!5T!x
zonWAx(QWoS^RycP;BdKM`vxT*m6f55bcYoegm#|WaX#3cm)~*t{ypHOR^HHFqZ>%|
zGCA22PZbkt!|>n#$W(w(joJhN{iW=efd^mK<6PndGx0GlBTxXs=dlaq8%y&RxNukE
zwyT@~^$XUn!3<y$S)3=HyYTgPU_g*xD6Rwhc#Gx>BOMUgrjw&|KY*($lxyc^s6B#>
z0W^mpmf!C^{Xu(OWGwC89#CUXPxWtZ?zEi4UX5P`B3I0vrM+W26P<8@tvwPQfNxi|
zzh%b{%FBiQG0gVGL_R3Y`!eA|t3};ArG8jguX@9e(0k(PZ;%XGedz5$QYXHgi)%Gt
zewu|FhV+yavOq_Z+;fFn2HH)m^EIFifI&`dYoTj&_B(ly(4>#7UJiRXiEAF%Q0H;d
zvU*>V{baJB+L`P`xt&8+%&?X?tnlCkHYgX8zTWDUZ%}4c&sJk<&La$a4zoT_1<m#X
z>n2R9kvsp6ugK>_M?n-Zp~mn>_t5=(uh0-U!=Y^-dsx1R_CDmX@<?d`P=heKM8usu
zTPRSKLi5(k0B~({O~x&I>!P>iy*U<rOZB(V*!;R%f_LKWNi9vzu5Kr;sc)|WIhWUP
z@*zDt`d=5^PPfE4!owVnp@-1ETZQjOPLEO}<1S|<sx$zlxZTqR*Ge4rt7z6S|Kes4
zN>rJsX#*N2VWV08Q|&a?^fm$e(BuJyf2<kb=ABhHc0`fIc3C&04jB69qIqQ@aV0Ix
zjxgVoA2<WXWyD*kuj4As3F)`UH%<N>xxN-Wu6D~R*I<FFhq!6O0ZI>SJgLCWsxFY_
zc;qwQT7if9tXJH#@&RP4R)o2MxJS<zgm$e9xF~1R?vC%;aAYpN0j3WTFMg{XzqeJk
zK@tqt&Ub=BqyQtc4{|!63Ff|Ki#;P5(1Y7;wqA!1@;yD=hbiQgH3WumEB0&pBh*7J
z*W;-}o~z^hI#f4I6l`Rl_7YZt+wxo7=gEYgL`majqoxgm?8F1HP@tp^>&;fzr|6ZV
z&-fls52;oPNevNS7jVCrBU^wa_}sC?M*s97jjZ%F@DAuc@Fw2Y&3+QhJhzCw50Rj_
z#)H2MG2e6;RtrECT|fV+GHawbe+M~y9rc$0L?Nv|gU@KXc$NE8?R%@)Q%QK&CZE@4
z(BQEzZdKxoLt=H7mb+=wQLrK<3od2@GgQ{)Od`q^#a!|&9b>`m-F{i2Hwi%nL}bXs
zjm{WkK75IdjS4G5m_J()?wG|wHSdI$z+I@OZy3(im>>XE7_oSGJC?2z_!w1v!)A8;
zXP!D$Kx^j%C-Czt3;B2ylZQ@A1)@Mr+M%Zi0;~eCQ#4HB9D7<9tEh^BU0?7o8$<4s
z{c^^@1kir^>Gp{=jY&N)DJ55nBE>=+lLuyYSF_6D0^ShoSn5Fl;<j(~V-SEcimjd<
z2Z%DBS+K<c;`&n!)6ihDwGPgWXfSz8<?3NDlyUw|^CB3^#LJ>@1ENoIqFi<c6((g8
zS2X~Mg933Mnt@40)hNApfZ|T}Z$Tr#p7~pUB`5HIx9%}$JSKTL|1p!|pJM=&<kV$r
IrOm(m51K*vb^rhX

literal 0
HcmV?d00001

diff --git a/public/assets/plugins/square/stencils/stats/queuelog_128x128.png b/public/assets/plugins/square/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/square/stencils/variable/math_128x128.png b/public/assets/plugins/square/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/square/stencils/variable/set_128x128.png b/public/assets/plugins/square/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/square/templates/images/aws1.png b/public/assets/plugins/square/templates/images/aws1.png
new file mode 100644
index 0000000000000000000000000000000000000000..3c6243f40d5fd94d5914bb4a4af344440e755b75
GIT binary patch
literal 14950
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
Tx1S4590kZqDM?m|8wLFb256pf

literal 0
HcmV?d00001

diff --git a/public/assets/plugins/square/templates/images/bpmn1.png b/public/assets/plugins/square/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/square/templates/images/compare1.png b/public/assets/plugins/square/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/square/templates/images/flowchart1.png b/public/assets/plugins/square/templates/images/flowchart1.png
new file mode 100644
index 0000000000000000000000000000000000000000..7cfa3c7c42c316da901b5c374ef51c30a650df64
GIT binary patch
literal 13007
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
RS0n%c002ovPDHLkV1g*}R`37-

literal 0
HcmV?d00001

diff --git a/public/assets/plugins/square/templates/images/flowchart2.png b/public/assets/plugins/square/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/square/templates/images/gantt1.png b/public/assets/plugins/square/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/square/templates/images/lean1.png b/public/assets/plugins/square/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/square/templates/images/mindmap1.png b/public/assets/plugins/square/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/square/templates/images/orgchart1.png b/public/assets/plugins/square/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/square/templates/images/orgchart2.png b/public/assets/plugins/square/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/square/templates/images/package1.png b/public/assets/plugins/square/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/square/templates/images/pid1.png b/public/assets/plugins/square/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/square/templates/images/plcladder1.png b/public/assets/plugins/square/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/square/templates/images/seqdiag1.png b/public/assets/plugins/square/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/square/templates/images/sitemap1.png b/public/assets/plugins/square/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/square/templates/images/socnet1.png b/public/assets/plugins/square/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/square/templates/images/stardelta.png b/public/assets/plugins/square/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/square/templates/images/statemachine1.png b/public/assets/plugins/square/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/square/templates/images/uml1.png b/public/assets/plugins/square/templates/images/uml1.png
new file mode 100644
index 0000000000000000000000000000000000000000..ffe977f2df9f5a48ef8cb0b20efc55fa866fcbf4
GIT binary patch
literal 6388
zcmaJ`byQUCzMi2$Is_#gx|tc85pd`R9l9A{q+x)OQlwM5B?JXjN~94arBk{@x=TR1
zE`H~H=iEQ;clTO*zp<X@`Q^LTyVj0)tf@pobe{+S0FbCC%Oh^buG=@50Q>g4$dFWj
zJKV!47+|zro?<+aZYY3^wTmSRq~e6MK_O5`Yj4+Xlq3Lv4YJcQz!+$#!>nAK1dx9)
z0$xt&TQ&e7`N#{6v~oaUK$a*QJ7+1Dz4|5=ke#&@i@t~kL<22{vb9t8aYJeQXzEz`
zI9N$ovpkXpNqWI<1)NYAB*@Fj(b*m5CB^cWF6?&xXB*4{`U`?_kYf3lQwAE3L2@o`
zD3FK%gx?Ax3IT~i1)xI0Vq#)^AVCNe0)_~Jp@RHSF_@4b3<3fD`(e4Y=4SmAhLBhM
zx2@Zi6pJkegNA{@o}Qipo<agHZZ=@3goMN&4M9QvTLizmw=)Lm#qaFS`nQ5S%H7J%
z4vn#MaR&WSL|VE$!$`5*dit*roY4P~b$0)Enr;&Y_Clh;PyxuFkp2d0X#D?BC#V0Q
z-7yH%fBpSGh23?$(I_wi<?iy#&FZ#rPg(z%Lc`?TP)Ll6n~sZ%<KJ0)Z0mw?akq6r
zgXFYDK>Bvh)-Imzf1x!rU@Fe;7^JfmN=06Z<(4mCXJ-u)mynf^5rK${iO35<p$brO
zQBjD3gq)ZHR9;+6Oi=M}uDpxYGbfZY=5Ma`f4LI>$o<m@PUu_9@+dbu50tf{n~M|Z
zuYh58|LlwCKkEIPYyHo@i2WlMeCrJOPg(z0ng8Cp?VUf<|1|CG;y-PVa=z_#x7()P
z%Vl%8JrEX;)pZp5OCxVab1!<+u2*VDdp>?CjIK!cx&GaIwcYyr=y<Iw=jLK`YGQbE
zy5j1`r;XvF)z#JU=FEk!@w>~73o{M-{kbzkwQnOFJL)r*<_40zjbA?1n46p1-{0@<
z?!39V@hCA4005}3Rpe!KyrzGcys}(`kYd8K^4`a6NjA*3Uf-DijAF3$$KlHNtY4d5
z)x9ssq>|#uz1dJ(apj%UKuuP)f3#(u9|_Aanxzh@(iq{=<;t(!tFXEQjs=uWDSYd{
z^CM$!#Id&FvTOA@Tu>yY@Kh>h>B8V^tmE+vT$HxN3;c6V=>-YtvV(whya*Yv``oai
zp^9@YY`infKX{Oyfo!?4A9M2bn6dMiF76z_j1+I#pJK9RbM)%$kPSsItyWB2yqtEq
zJ8cEep$Oqt+%y>atuQq4YDZ>>XL+C>&s>nFs(aTyqinLFq&iiXk>cGHvig$~S(Y~o
zxorgv3%c?Pl~OhIB6Zg2`Ez5S<&dFuK4j10{bPvP<ZBxs#rr$SgzTOyWfSraHCQ-W
zj!xn{c_+_8qjlHdzk~F63x0Ean@#20p$a(l*SpC1TybWf0rb9?GE>T~2w{26kr=;W
z#t<tg3&>$_vzYaTiyJTz_pMbA-GTEd>Y;>4{Z9+OeZLTjf`4v~JRUcu3XBklRh453
zBpeE62et3bHGP0O>Ffyxx(V^|KK%0e^<v{j#5RXWERaxIQL=3Oi33#>RGKXEa^483
zZblemPs-M_6s^cKkoLPc+Q?E~Bt$Tzyy2b96W@^~dZNkpHEeFFjB#&zS>uvw3390#
ztby*B6N7`QHb78VqduhVG<*M}-5W9-$u_!ZJI0qiA`B}K?8WEn$wVQo9pmIO3PMlF
zdV9?LVOEY>MKM-Id?bP$vm&Mi7h(Q7JEl$p1f!}2w#f!{_qFck8UYhfi<b<N*>#;X
zX2lElP*;LU_yI{yGZNB;Mbj}CGw(!9nzz4)Ua_!#7qZ9qfV5Nv=3?3Bz?ORi>g8gA
z0WnJ7{Nz?Z)*N~(h>VEwPrar^Rfi=fy7X1<gqK*XZ?o&0u7>b6UmiyWO^d|>B2esn
z#P<Q8U5;2{c1)CDxw&a|Lp3Gb{$@!IDwPTM=Bu+EWnpW(=!IIT%CICU=RF5^#c3y5
z{VFQ;RONb{MP?(bNb|Q#<wdWcrf(;l6b+u<;k9VuH;M%sI+osnuiK9$vAWQEk*65#
zCT23`@h%BmG{#(R>dinN{v1s9-N1g;vn!E6PaFzyN3Rpbyj8pu$Xx5>96a3Py_o4V
zdOj0-SaH@sO8e^Sa?n#P$|9)@?aRjq({hid=qeP(Dya(dH#tk3xZ15ty*@s7{TAIB
zE|)Fb6;5@|5UWMr-FsaMJUevd{W&=ssU+$1z+MxCmhsh~rc(sz;@e<=O4k^W%N%a`
zVO5*se4AQr+&7Zug2b)My~Aw0gX81<^Yc2kQz3-~{GXo$18V_M9}WDey{1JpN}l{2
zM+d$=Mpx0M`*Dy<uDopWYrw)0-w!CVFSiPNt_b_-`n?y$)%OV3;mcW*W@WQ7-~0)B
zJ;=xFk)rk_&)`ijT)MH8RiX<(L;6H*mywa$K}OB&VGPrkDCQet))1vyY&DvXOySBz
z5$f+e@7i15&?qtxE~L;8(F)thP@MkyVP@Y~5%5(K$xxPw3y+#F1FP>Y$jWLEf1^qh
zg3JD*8%*wy0(LoGUrtVjjl`SUA<uRnV!qNAt(c^XE@cUSaQfPLH$7<Y@Db2@!bCI1
zeaI%g-CjIo?1z-!H5MH~kQKpccFp<=U(uHM-qlLoL101_xZd%n-_nDb(|WF#v3q+{
z?ZbVlTsVqYoatC9wud=YU=zbxdo9almV?U7PG)|M#PPmeQcYl+63G=8Kw-n5N;xgS
z0GR0>@9H5gEZ;Y>A(Z4x8>6NlMpM+=+4wmArEX>Mgy2+gbJ|c@aMyQNO-lHXb~E1u
zLEFC2WxqCEKn<*i2f&)+qWN&oWTk54XAMmyd*+?7$hc%J3jWubRfgH`Wwy?Z;bxf~
z{sb@+HQpD-58r%bEhm4B7KNu^&DXUaUgNRqZcX3C)D}9qpWuS(V^@-ECax9{Kd@L^
zaZ|B!rWA(ID@S+14$xUOPO5ScYb_5P+6b_=74@uAkpc&F5hbF|0Uq{JObwjkv(Hdl
zUCIM0Uytni6hPTq7<$!k`{5p(U>v3FtXd+rejnlTBwL*;evpN{3AL-Xk<DVV-NEbf
z8XGuY2juAbxw=|g`>C`jEyCCC<yD!XpXVKiD7ezJaK(=v<g-U{9Ru#f+t5x6iTe2j
z3Qa>JUhPaw)M?sc<$;^erVlJz<faU(jSNP@l0MSz>Meczl^x`pl0YIjV||1aum3*o
zlT2Zyr~)GQo|nZVQ~(Uk2#?swMK@bky6<%B2lxlebjn~WiPW~tlI1Pwyea-jom-eJ
zIr332-^g^}Ihum!$a7$Y>y_<=yU)~kSj7l|B}q6vRz!GR$u5VrrS&fQ;x%g{-`J}j
zO%Wx6PH)o7$@Jqy=AX%2&yy*X=z?~qDdC}R#wjxw{$B+TWc61G684+SGKLR}q9B@a
z5oEjUjZ5CYcIkRdJEokQZqjT_zcK`1e470(NARlY%$R4g-nA#|eaac93yTykt$`7G
z0Of=5@TL`A_c^^XdBi<>+J4*>oZT?Jzm$}LeI|Y{+}u3oodRxz$z!PLnC!;F-A%W8
zcJK_12PL`D{nzLc_kmw67N@;usW5XCTeCTdiD%egNkbwlqi?Xsh%mkWL^;uewGq7C
zrP1rgo%gum<!Zcfbz>mTl9AUk<D0duqg6A!@bAeytzdz7N_#M}SVB{Vd5`6{aL48t
zk0LnVdF<9UNLK&N$de9VJoga~qCIJ=Iw3|0K)|ba5)PF2KHd@f-Vpevo@tu2-Wk}X
z=YNSsPEJA50ci}*cz`I5uxMUAWgH-%D#jkV%zG+M{cHt7WSceT!K3G&^Q~t6_)PAn
zs1czuKJM5_eNQU<^rWQkUM-K}YpIV+cn1y_%4$)NWgZuNhyxri)HV(nX^xUtv9l&U
ziO>J$R%c`QK06yY%yII-XOjoRSuGK&ySILzv%R?mXL!W#7d9EwPv(|>$b&6y7}G)X
zgKTc(AhC9j4Di-2c+fBns!D9qtp3Xg2t}%s+oT{PC@w|50@GFQyB>UtGky;HET@o9
zV=ihxg$Tnp$bA5iEgUk&ZndsVkcVi$m0SkuOawGf*37dJ_W$CRQ^|a<yTMlMWXQC<
z^99ZW6zq}@7N=SNQE0V`bDcc1lV4(%W+$&i>tp<~><TB&?%o4N;}p63F4HllQ%oHr
zTIVTr+%xuyKjatn1ROba!DOUVV3(EN@s9ZCYxJ6q+MMvZE@Hu_X>H0LwI43-K_lJd
z({s%#jVg6;Z`6B}w2_Fy$kkKa8m;#V)|Nhy17KyfG2TH~uP2$XX3{pdA$rjY(anZ*
zOZz>-R-@4=qG&M_$~Ax^*{J6^yYP9DxmC=J4$q7tJLrQ$)Qb;0IKyu_rH_}kR7zjG
z*&a_~lqWW?78=BNYt*Y~YTT~OVKo)2^m`Cz{7QrtZgCVE5Rsnskx-T;92wyoHA6Yw
z%v#6@*564nV;0%%47faFiAz;J!7vmUe-{=wW!4EBgvI1O9pC7pF$z6my`t^c`Ayn&
z0|WV)=}l)hEI5lbiDp6AE)OSwhRH({6JYDkn|Ap4)0P`45SR>L$ctY)^m}HmqpLSd
zX!C@x<k}@*vK_yFbkDPW6L1uZJ=I0oXYg?~8%U`~Nql}ChpHRBR#dEg*MRKLs58q!
z52v%M-8{l;wG0XMjz*L3;+0SB4bl?LNxvajUb${r*a`Y}^%6|O8oij_-=W&mA{FA2
zF;P?Vs=VRRAlAYDdG!qzyW?{!)RQ3HFIIEz$)^op9Lg@XunX((1K7a3C*}=e9gnj`
zcxHZQbd;whuSgxol&fASNANc8C|V_Oj0l_0?K)Hp{5V3uWbu6%UOV+{QXI*_E9<82
zA0><OF4#oVsM%Z;yZGGgT<R2kgkxQ+T9pvFP+(xLSDRrRI@;F*v@OlsOmpD1N*sS$
z4$gb<V<(%UD><d$#FKj*+~L`w*Ee-8Rk%H!O)Ufhdhj%S^2d*EDDB5<LrbrVb@J6#
zEZ0`9PY$ZB4R%`4Zx=601z(?A^#!ygafxf)m(1+3Od?U!@Wql)3$iol?lu}Ylqpbo
zH#Sq8op*Y%BVU>3sH5!js)U}Ka;eaw$74gHZF0+-dLi#+Q;iC;(;dvu${I~+JUA}N
zNT48dBtJYFhM{DjCs5Abm-S-|m-ZWxN#P$)<sPCSZPKnft_TRHTRfJ8@1211Y4O#6
zo(!Fcoap<*5$s}$G@-an?_BPTzazB{7Gh>iolxmr?T-5OhBg0{TEx7+M3aeqiqe)L
z*yr^ZcPyM?Wd}R15KF<)`*9>^aRQ5?MHT1Xa7i|qf^QF@Af>*(M9NKRL)yt{HPux(
zVqDjWB>zcdf6Cl4yhvfQPh5A9UQaxCWZRt%T0Do%%35Tpq-`wVnl{8`pU*;9o>+>t
zucxu+G7r%!9!pqlC71*H$H4OXP$Ul37fRj*Ht@757SW8cFOQvhUn_C%gyl+(_}Whu
z^IWJjj`=L=va#w&rBh8(rr2v|0al(67HP>B#rK$`XdSOlL#=Z{j0Aghtqfn7Qcv;3
zy_IIuErT>qG<KAE_6Z;nlyMT=B@`&y;aZjCV+$x1h^$&jar38IzHrFHBj1F>#?+pP
zl^0*RmkxG993b4CHa=NljQtq#&~yh8a<Odx=F;4Kr{OMBzxpg8g!0?KB(7ix6#0>V
zT@n#^Eo9>@_^Vo*-TJLzW=o^ZRA}NTuS5s1BCI*2W>N<*Y-o?<34)}GUe!naUJQlf
zVBrSRTuJ^GWnbogza-;yP!XKXeb;N2M4jAnk$_5pl#unq7m)*A4aRr{Z*TL!LoHj*
zC@u%0@p>AT2R*BIT~!Eb?2BV$`saVydP@(6bf*fc0`latYv;-GCk1xgY_zMYP0op!
zzexDf0(*`3*I(>MmJ5`++K$b(TV@S+%rlv&CbipVJvUU8RM4gjPYy^SG(aMFDHh^`
zR3B3=t&m|a7}KOtwFiFhvZO1J_{2z@7eNkbbXnjbFOAlGM*Q-736s&~^cUv$`PWv6
z2#Dpy_X+Ndq>X&)l>&_PukxL%q|np{y_sYy_9G!L>OMDzFY~l$VX*=N*E(@m>;u}|
zhH61Jobaz-0Ww=%l7ft{eUeiWvWkS~h{!E7=?G1H5v|=`pU?AbgZ)|4c%otzj2NFf
z+4ww<nM~*2h|dn`ZDAurdlKQesc58nc7D!DhK85Ms`?mLR*snL&|A{seX1v;(ZA`l
zAof>QWb)TF#_CRUx6zIPH+3Y&a}8<nPXwtowFS*Hf0P_YClMuFakJ~_{fw}%8ycjG
zurdP0QZ$g82=jTC>`ug2@8FdfPe{x<Jyh9n&6ap${FF*>5;VHwGpv@6vp-ZeoEgd?
zPlv!=v=HVZIh);SyIe(ZbJ&%1TI;(lj;wF9L;2RYFWFbavuIvDlTiyKqnfWPw-Trn
zP=9u&N;DMT%%)6}Z}0|JOugoCXskF|u(n16uL7nl_Y53I>(XlQD@30B5gMx{x}EOT
zI`T>05(_KAY4uQrB7@-OfPYd}9*2&cehPLXRgY8EtN_+N^F8Ho)fS&=at%hl<nJR1
z-m78<xIpi`eWVX_cfu2a(Z1`it>Hz%*xjA(U#Q${J;YVjMDpD~9F43+T?!^#_x-M^
zPHN3xVE|y2l@Bl&!dw!EmBwiR;olUlONJ#iXwTj;V(9ZJu0xi19X>%8u~O^V#WD+O
zaA`W$3SI!E6T;G{o!{(mKXO-mFPT%F`1}1%HLrfaV?V<Pj;nE|hvcJq!HN&k3VU>v
zR4dhVixyw53QoV#r+6cnu;wJtu!}KUfSee?W>@(A){OOa592S2g*T1{>`EHW4|(yt
z8DpX{16G)(KRCMG1IamW>_LMJtAo3ipGMX6)*-SWttQgYpVmR%<=TzKUjsQ|V9%rC
z<sgcNq7M6K@5>Ue102g|@&;{UG@c_`49k=^pYCpRvsS8`IS|GP3xP!1G=d0BT%EQI
zD?2%V{q&_GpleCv{IZr%L-FjW!K0A%%_qdDuu;gVs;)!Yrf&($stm}xs69t6VJ69l
zh+~?kY4*eufGopOqX@G8P@iLJMtCQ&6r*12i$zX%24znwm!9<ZY7`<qZtx;dk)Y*|
z>V)P`;cED?$eV90^R^`EEOIF<Wn<?#1vwOO6p%)4wEU2bu`wOfTgip9nGXWOpPma;
za;yV~?^=`^r1z?~CP|!`f|#GBFE6Uaa4WpVZBeI8dE4c!;+zm==`2gr*1=ym!X1}l
zH@MEC5sy1on@az2?Gq+}DEci7Qf_r`TcvDrBH*(o`qx3oB@AqAGJ*{zNvDQx!LqiR
zOC3?+t~(ka$jb1B(E+#dE`q|1dP4Wb<Y??Z7a$fZep`Gscab^&eq@6*+W<2`?P(Rm
zJQXMjk-DiUtc*sqh-uM%8sAiEBn_svJv}Kn=8%1;UI>!q40tt@EWZUegT+*<Hzi-{
z{qW}M%WAib1uT5CC!mn>BcXM-&=~#hZ2ZPvB?o1>l*K=AZwdjGcWjS(%;iT+;GR|W
zbqKyW;_vT0Fqz8O3-0?KnMLfm`r1XyKTbcQ2=g#c*m~ren*6Thf&+O()e6MIIO36^
z=9r0oZ=Ew1x1odjp;Xe?a?m9mE3^0Idfg}LiR_Ku!1>d}xb89Tmg|>_woUgYRF3e!
zMLfV}K~bMNywD{?sBY(}Vy9Bz-Co4nHh%@`7**<TNB~=n^HVtm?=eOP%^iQh;D}1n
zyw5kpf<jonLxkFstiXv@uIqIHh?gR~4+lz8h_|%M5~JQ@+llRalucqseO}B@tc$!O
z^`rbnF3g*gm6v}Px7^AUfW(Z-t<M2StOtB*qzIh7b-MPjr=)AL!u2v#W%6OdqzFO*
z1}KtIrgj5wT(K==IIk3Y>KYVho<-*t$p);f+|4p+dC$|W6LPq~4ewd2)&{YMPQ;+N
zGHrwG9!TFoRI_*TnQ4HF^Ws}}k)YDmshzyzx8#R2DvX-L7n6}o42e>j(UkbPUAbWa
zm)0{^(`L37hR(gudrq!JL1g+3SC0VPw^z<sj<ZLA<wsb=fI0^lE)j>9{h$93DhitN
JpJXip{|C;)!fOBk

literal 0
HcmV?d00001

diff --git a/public/assets/plugins/square/templates/images/usecase1.png b/public/assets/plugins/square/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/square/templates/images/venn1.png b/public/assets/plugins/square/templates/images/venn1.png
new file mode 100644
index 0000000000000000000000000000000000000000..c1c2df6a5c763ecdf4a9b964cb5bb8cb3760285c
GIT binary patch
literal 9761
zcmV++Cf?bJP)<h;3K|Lk000e1NJLTq0058x004{#0ssI295A;J00009a7bBm000XT
z000XT0n*)m`~UzT07*naRCt`_ed&{2$C2MJv+5mv_Z*lLAOI3PaPSgEg4D$zslBLO
zDYPqDq1Br5M#y1@9rj267v3+9{ooH94qNM8uegV`y10@h9wH@@A_b8INa7%F&VBXy
z`W;p253gr10A>a=gYH3-`VkmnX1c4g>-RFNDl0RKL<F6NhzP($D?f<BaHi6lti)3_
zGuN<7AvF`#GAa=gA%PIUB$~uiHm6P5!(fg^3OrhJc9neB^8ilUvI2t8mBw#IN+BXF
zHx(vHYj!r8oHUb@c5aTAmQ<s`trjN<St}wS5@u1#dY;YYq*TJdfEpRmqoe-Nknj7v
z(zvxk)Bz!{19g@#D{@6ln@lV;&P)gAmh5!XsU}WL9<jqpGlLmSNMA`nDue)5U@feL
zH3l|v5EXSal1cXU(Sad<v_A)S(pQQIZ)-%vS^~ffzyOVznc&PBbM~yBnsO@@H;!Eq
z#Y{>e6*TQ7{VLM_V=as^*2X}nbyO%M!^7CS*FSI|H$Lt%r!N)}VqRaCEu&+E*(<|m
zr|0W$U2eWNC(|uI;;eE!S3@%hfI!+`SM@8vs*$Jme*nP(#v)E&lE}4<VXt*?Q0^Pg
z4i6Rpb#=cthFF^pp8$>d`Nli%*b^tbiHU3&dP<SwKx-_IHGmBUhpu5UNf5`eF%7L-
zLqqoNyEFIQSJ=H<U)}G`qXUGk44Iht_{F8yFU9BTe#m*(b6o{)Ka^=V+fWE0Ahj+Q
zhzz1A_DyYnK6vyt_t5SVw2Mv9CL#oYC;=)bPlm6(=AAi{4+76|;CWz9wE^kNwkjf)
zMFb#%I8LId<~YsUZqtuEQo8RxUnz8mwwofXO#(qo{N}l(m(M33hI#GheTNvZHdUhz
z+HoNeF$8GEuwi|-SNrr{esEuzw3jOG8my%jj5z@+@4OSe^iuZ1g#t7CK9qvBvMrL<
z6%otii69J{Nm3md!DEk=9)38Zb*i&BGq-J@Fe_jJU{73F`pN0=!?5UPbH0XHSm`WJ
z*F%^HgwP-k8hgCTQ+Mb?`vw5DEY<SstR-dvDre3#fBfUZxpM`_f$w8wChMMvDKSKd
zq96>HMn?FFC;C6}2?v0+*siK=hp-jJnpvp+;CSu5TG7cCd<|>R`4#7eAb=SygCwXO
zDOUgBaBi@#EX%)2$E9AWRDSrw+;4tURtlL6tVI_V#v4jWU`7}=qNsA`o&FcT&_6bY
z)Jkt%)wWF7@@!#Ves}g?&T`}p<bAdCRILU9#Arm4iRXWBU;NlTyFeO%0CR7?X@2m7
z!CFlh3IJg3trD`m$`67CrCLuuIq<|29?>>twXG4BvQ?=yp8fUG`}MwjA*%%D7IL);
zOfZCIBe*v^_a~1IdyJ{?JX<<;tdPyZabV1?77zfy3~R$iWA4C#+*iI*9vIlFdE5eF
z>Gbfy#KPYk3v2FB!B@s~d#>6lL<1E?gH!K*`NVe)v;xlNMJ(;G4crg{kWy$iXEPc3
z>Q{#j9^4XVn<Xq|>$Q{9|8!D2r2&^<Zkcsi7i6u;vU~c(o&WN8BT?h7aXs3f5kqt<
z4fZ-<Mv_#csQ&cR!=L+{k~J5&YhY7^Spk#$<gKaaE@q3R60AsXDHZ^bSd(Gz*T1~~
z#eeMgGof~qpm}FG+&5AX+l!o~OO9r(w($7lBY*TqdSxxQA#O~V6)@TFy)pItRH?6&
zv!+McN-~^%?S)Ug^1WQH7y~4hNJUY!Ki@nsUJ%Q@$QeLNMb+x;(W66O`HHg%&Te2j
zQ{DRB8&l6umHWy$)0=ErYciaD^@WFC`Cc|(iUlMBkcf3%_iR0T=EE9sPf8AmF>bLq
z^y;fq&psQc+wBdp5n<K}6Mpj6)bmrNzH-(iy|%;vmgg<+*lVBo#rHD#Qey3DO%k!5
z>z=J=FHF@)?eqq0Ge|jeN~Ph~UYq^?_YL#LdyjPqvsRetwUg67x{&KD<$9AXSZgz^
zPQ82oi+`WX6%)ILlPTrwRK=g1t&!%Q<;*P>2VQ(}`o$N)EbDW&HeptTna)lu{^Lof
z)K~1i<vRdC1RmSz>BB$yn?5fa1MAIFBGz%e_vZD|QV(-xt(VUifB3_x<Hu=z&ek9-
zb(vIZjlceN%PsYzH`#&^BM!scpZi~<A`z>NH(MkYPWJe;L_v#GCl9DPh4fG`@B7Z*
z|NYYJEHSUS9$bqs5Q%yA&83Dn>{2hz)d0v!;?mHI|M$S+bmaOZH`o;lpvbnk@ZMAl
zlJw|@5)q{aqA2*zcS2*<6!BWZtOyfcesAu*Mt|OC(_N4Dc44i}u=CzK2jBmd<Vvuc
zayyB@QJ9HxAI>&<a{&T?tVJd>bm7AM&weIE*Bi#G2onJl%`Vn{^Z^$N8Pg+P!fPNx
znv!b$&X@lw=Vgs-;h7Q<$8k<C>7Wsi>cz<nfEc54x%>++%wM{6y<xmY!vwJZ{7yB=
z3~<-aw6+NnNgNt_^|{^6TBMz=`Uy#FqOzxFVu<O<&j$j8s3;PD|NG%}hjy#td_;)o
z-HVm?YvsJhYpsxb03zbCx^(HzlW!nX*rYMMssX@Z%tZd&VzXzJEH#V+=guv@@dmCo
zj8_OFB9kP~oebS<&i1A;1PDlgvDbf8Buchz0Ypf7XBS11c#|&IorhTKdY*dWg=VWo
zt2`hp!G1!(vGYq4amm-{%|#Tf6_4Drr}thyZN2ObSBC3B0L@Y{nVH2_@2);X;5hwr
zbJf>h2VHUbwh1F5W0IH78$XljUG*Z0Ek@sZKCiU7$zc{@?Od!vlB65qo*jXRD9>|V
zd#xFU#GF1^jAivYadB}XEO<SuULxX>zI<W)!w-y?!FJWF-58)rDv38&Y2gNY?puab
z$%?bH)nmu793;s|12<t`yO=nB_SOYG+yEq!Fb3a!wFogCS-*-vITKZZO?p+w+WQcG
z^UcuO)Dp0W5Mg?ualVoDosD8$Zz%+tX{kPT>3w*aj>OUkpc#vi(`?4u4m#^LNCd81
zn3!l>yqGQ*+w0n6mzojh80gKt7pxc;xpVLIHERj$PKij6nB3`F-02j9j)KTflIYkm
zX@~VOiA~;{h39E&dsJ#7G6n<ZPI%gpo149^f<UpFYZ7{U=|QgRoH^5qA}}+6iTTD%
zm~m9^9igWXfhJyD8l1T#j(5Xl_=<-{+UX<fzCi$HsV7c7h``jFAD={^b#7syap3~e
zMaSuxFy>6}+Cvem;ZL3|hE2n2V-cCyVP!;!NE7?oag}z~pP~qokX~pQko4*U3lMq6
zBxlY5(11O^Xtm??tPxMW8-<Cp9#M>qJZ1#E{^9A+#18AwB)1g@8gZzY%YJSsTU^`d
z37FMV3%6O@yIv0w(pp`*6p3)y3a6Ud(P;)lPl8z@DbHRe?QU!j1t|Nuf}3$z6}?O&
z4kv00ig>18ag<t9gVL0RdZJ9+yVDp%ptU<U7gVcyx)Ron>+ntPM7xG`0;^OCwM9|-
zh7;I5gX2VG#R4$aJ}|Pc9<{896`^$uK9ht-1(C_S)Y;UdPJsX@<u#kN$w{85#4&la
z{PW&}SOsTkCKt6V^9@CeZ4xDMVr^nAfY8LAcCwDUf&C!BKs7?!)6*E>8e=9W^;Fdm
z>)sVqAPjG5))i|v@klKv+g|y0gH_^69|CSfy=h^tfQe*!n&+FsO7$#X1X#eU&a3V{
z{{kWo62hh)iCY5!z|0E^TnR}rx-}Fc>2_%4`*!al?fq~1lMQr$AQpaoiI}@*28a+E
zz}ofZxfK|Z)Vi+7BFh^-w5uS<l^=F+Tt&dlwVG}wirseVZKoPfK?J2qEI{p(;WQSF
zm;fk;;sETBSP+q{n-@ti@LCO`Zar4gKDc2KxnU>Db<=_mv>c*)B_mIS0CHVK5v?jk
z(6IwIW~bHCp=CuK9|~cnu-RCezEB<+w}!lI5kS~%D#uNtMid0|mrwVP?RC7o_Hrg}
zX)mK4ca4umghbr1)m8s2L5z^KqSQt&Ga}C(J9f|D;Qiy{)n>Ecy3AY&0stpwW<EJK
z78&!#`SW{9r2*g9%uFOe&b`5IWOEV%fKQ|oA>EBfml3s^mrwli%<D_cx-@iKt5Lah
z;upoi-P(0Th?Snd^j;E00P6D-WA{9K?^9on0z-WDm=Rztn?$<1Ng^w-RyN{`C^qK%
zr%qXsUtGTY=ETI~d-r-uP1ftKQVT&aQL8Nk!R2c8j{g3IAjoJvQLF7KmA>`KPh$CS
z<R;;W=rmBY<AjModzr%E?*8!uj-Ok&e7ZDzThy$v(nI@?#9=cI1F<#^n}F=vdq}&!
zF<3ivTr8!rY~5TMS&$WMJQmj4e|7lqu59+)($bNkp|L_?AqWob+I6{F{p8r#RK2d5
zAKkq>OcG6GL_T}lZH`i6%=RkwTn`qZ|MJiCxl+HiT?uOA<%kJp5JN1)LI7fz$ZC&G
zj8vmU*50`jA&TRBzw;M+TJ?x^mvX#>SS7*H-S9F#Ha@b@8mSX2{mKkuQcnbo!AhR_
z%E#_>(E{BK^;&^lj)^vA*@;dB5o<uqNhCyMlQfGB>pn3n^}D(!tAI$_HCr}*VH~F)
zfzrSjW70Ay636LJ(zJ%Qut{=LMO3cuok(~0RAEKh)$8Tu&u~?_ri~h5+s!q73PrfF
zALVM930H(Cy7I))H81WQ5+dGm=<E(d0L6)RyXxx{fU(Wma65?zU|-pu4ZH!;P#MHG
z9VT@{D3(pQDsLH5r3#63-n9*Zq8>eO1%#Md*}Pc0-XwPY?v$?j)ipo7R*xtRp;LnH
z8{X}M2*#LVQI|cL2*h!EFvlJMARtDV?-Q}B`4Y5!GX&C<E<%~E@OCXzL=cFDn0EED
zD{n^{v9ACo>Cuz|0D!f&Sk$|6WE+N{dzCMcpj8@(0bb@w5j#){Y(+wwRBf{+t-7=t
z5(bDOBnH;P0>mH<cHv~;=E=*GpQlWYU5_0Q8Q28ILPR9v2#C?6`HSsZXLevfkCrq|
z#h_k2VIi<ZSRM*k6#+#K2{n^&+AdAmr5RKfsnOstQi){&39eMIU5UhjNV?G@W!bel
zpZI-}A4X|}OZ}YBXfLKH?{Vt4?Mc1>AOUD(M30sn50OP?Rk%?PK>$ib2F8=zfDI}i
z*rf|HGeL_r9az^gvm#bt56(5Nko2EdxTAK?x`iyEF(<WCc0wC2CE2lLV81PXLY0|4
zAhy=5n93f4NaQ$rbW{%%{jyV?H|VulOhiC%9EQbQF#A)wki^I5GYKnkNPBSF=VR?7
zoV7P6a@{usXeb8?3ZhVTgE_f)Dv2i>#Ut_PLz&S*zX-Bo6Z8yiLPSXtl}g^wkXG6q
zFPO=SxNgtv$V3F<I4l;k)2A*>{CqaP=#;1T#!*iDuwv8dyxVRbS5CAvScxw9Qptt?
zFaF?_+J!^)p-*RT+mr1BiM0vccw@gKNRnt|q%WJ*0NviNUZ0QPdA*=wB33C@Omnkm
zKe+tU`QQw>aI!@%joRr+7U}G{vj7&xQ{sryT3JVqnTfZXQ->NuPv&nQ%ann{T6=5v
z)I?;hwR`tEfCg}2D3d$gwD4~2G?v;x*X4S3@yvziCaZ73g`3MkfFy}?#lZ86N!*!(
ziYp+6#CO=X6&pEn#m75l>izocBhB5PFWiy!JhAa6d}v*RwSnikciaI$3s5d*cIWD6
zV`TIVT-Dt}s#pY^JNL`e6VD}1;O6p>Wk;$AxtV66T%4c8`q7ERM9Y^lq**z*(Rr^0
zax9M4E1^0T0*f5El988_3-2z?e8Io_-r^`=q(jGATY?Z#6g9`k3nL>)(~SUi?=UA(
zbgLpMMXcj;tGV>XTYvTL#6M6Du2T?eSMnZGUthCtB$jonV-Zo%jOw)(5n8QCM2rz*
zHjb_b#AaO~x~^UcL@Wx*ZDgarj(_v)+}o|#kkWR?rwt;q#v}(1`pmFarwgGYyK_H2
zTT5hscHAlotmpFN#Cz|Y{ky~q{9MUeBe=ReK$<aM9BBC2avWN^&g&;onwAzD^?FMw
zCL&|3c9f&p^PI)S#`y03T+X{LJ%==sth;W|m=V#U98dkqe0XtT>1&1icIW%7iFl`m
zNC2|7k;!;Rjvzf=A%Yd;bJ>Iam0wjQ@6yg$#dOlreCqTIr>B3YbH0PTU8j<Rh_K_<
z`bSC=XUVxPm7HLVl>2h|yl;%v4o8vkeTRs|it9P9tFPBHD^k$b(Hn)CN~&t?E@WH(
zz47`V$A=#*@3wZQIAcZ-G>#k@+_ft`gwtqmDCtwTXOI1=CSGybOV?ebAxetq?Gyia
zvGTHCD8tCLinSU<Y)m*f-kiCVTPsIQM6y{oJ%mat=&oXjmZQ_IYLSr?eA-Nmgc0$e
zOh*1Te0y=O`Q*Tz772I%$tIB&vpRZIqg}L(0T7W0#&;F(DmH?6Q|EX$2@zo?7Wwtt
z-@a6PC6n(HV{f=#7i*9$RQiXJ#B0XnSS!ZZB(c_}UuF5v8Y*N3S!FzD4b58<7Qz;J
z&;1dd{=xjaEV|o%Vj)5lRrl>H-hMllZ%JxTwgLh8i90;BYM`!$4FDp{AhExG=YLLz
zzwtADc9TWriIg?X;k`|z)p`rXm2iR^j3$vJC7*EJa$_UG0c)k;c+d0s@6Mkf(Os>b
zMns{t^65`|t13>l#bqKZ*gIN2T&gu9>8_HIFwwE&|9d7n;ro5oCYyh&7=v7Cad2!s
zCEFydAg7JL*2K1n_e#m}ey%S3aN#{hx7Llqj8<#$z=86?gIIM5*{ae-5P*O8VAhE$
zwrffzVja!L-~Fel)^B{jyd|~(fJm97Il8~@xJtIYJR*gpFT-0>uhlSCirRag&cC$y
z0khi;&Pb%GlzQqZ@9MMVt7=VIk>P>zXGR;1AW>b=G7;;#eEQ6b7pp(_vs-5?ZNysk
zb91A&+a%uJ#?gutoy6OgdaZ6G@3=oOr`}omu;ZKwvjoB7Ll5=u+lQ;~)Vb;rOIIIH
z9vT?sxzMg#LU)@&h;>|^nmBoS`ul#aEZe>eg@}_l9@#rz=vP~h2o{h}Q8}wSaJDSs
z`_8lBiK+S$^G(rzRjWi4#|wjl`Okk|UDxQ<gaLrKp8w^;PSU8Nb3ykaq7*f2m3Pkm
zt<Gk)Z_Jik)1ak&hZ@A!f20jTB*{RQl<Giyx&X?O$=LtXcqfVyaA(%}1ccVcPd{DC
z=dZuA>RKb78pi!&15b_DYK^#4hLK1JbmH_sBwoPeY&2NuHYz>*T`vKGNKC@H(#-C=
zOcHJ0m2O4KZj$kw8zyw8!z6O$&)N+_e9;qL?O!UV2>Rwv5=1F!HfN6>-F4^?*1D`}
zjS)##jGw=E=wN2H5zEa-nu=J*;R_dDn{AzNoxI3K#?ZzIJDMGbn3JGIir1!%h~p?3
z**iTrPI0suPr4P#aoCr2ZfFdND2|N?9L<hqt;x~6-eX}Pd3Il+OQ)(+%+AeBX2MKC
zFui|&-|zjNTJc_ABiou5CDp`6qw$xo)GO|=cT>?s!i=C%{l(k=6*;2y+7Tf~H>YOB
zSTR<Ni5tyusaDuCl0>nS&E&^NY<z7!N&+R2zV}|=71R=?H#mW{AQ#bCftB89vJrvS
zT&cEdjVK7>Lf(xc>o^=Iwp8$nh3mbMZ82gpeL?0w^&NGbZ5D@1kChkld3@_z{R0E*
z-QTyi%}I|Za=F~Ue$ds8xdhw49Y{nJ)0qp;C2otMH+(5rYXEVxDc0(2CO5V#X@#s5
zyUscfmetIQ2Od~*Ty4yH3lITmiHCEfH)Lx?U}j>XQqgY&@nSUy!z7AK7@2fYwpRP%
zK~1~$mulyUwzD%6A~L3`b@H{Z^$!eeaE`N4Rjl+rz7H<X{g1blD)jNzZ=n*g+Tn%S
zi@!SkmrgFX!3`B{Y0~TurP|&W0f=Pd3mZkC9n+|co_wQVO>*6h0|H`+N3xRfH*)e`
zBZjr2)N(+h1qd6T(f|+wx9C3?j`n4;Te=Z7J-%xgQ~UbYM-Cm@_@2d$c8*MBMef)=
z_>CiRTw64>bv+}3#Rr#v40ls+ZC@X6tr#Q5rvJFX8;Ov_Dp#7i^T8UiwpZzyfXF68
zS-W|*(4G-s+x?3bNpH5_7)q$=MlUtaL)I?hvUXoYWNjl!Du4XP!|N<GR^tX+{gktV
zdxxGm5=mnrA=>;JM8rCp=4Q{$2d5k-+sP_y*MJB~%!U5RyB?~t(#xB(RJVq6Cg*!Q
zQ0K=&GVC0asfD1*ys5$r!c4~0L@HnX>ga<H(kAX!ys>X4<?Nol!{2&PykM?nH+^*p
z5iBlDzDREOW7bnWEA&m>^T?v>J4r00ltd#r*%`J{uu$N{zi3|CjFJg6h2fIxHva6-
z#_qp=Gi+fqgkhPpy`uyF?qNM-CTpQhuWH{&8WF8%X=!@CdCGAzT~x0X5Fv?mCO>=d
z=!dyJH>!>o+24vKym?rN$NFtM-3XgZ8}6f-DF|i<2jf5g^O3vm+WftxoArLCob4JY
z|NBoB9>`8q>w)m~2lcBV%$S^g!|E8aLj_vXa4;d2z4xxd;e8?kv(q)&G`ON$$6GU?
zwfE7fxsDr+5AV6h`PR2~jgN2Xmf0-~B@>B=pUwa2r$)ZKZ;2WUfdTW{E=Oh#gLtNL
zTs!_ws24y)iLf%QgT>kd<GJGf544UPX(&bUHhsj~g9w!7x8kYm3#<zfm??^?L^FTz
z2mQ}HQ!W&wd-pi62$V)JPt7iT??iCA)$eCAx?KT=mS1BXho>grKX(4F+-%{7tNEJ*
z5v;H=$)MA?YnLwOv#}8pVb=}n_3-4$%=EOUlvO)*sQ|%5@*gt~kK{^X69P%<W=oPd
zistw4S5H4ZxMvS7J1Dl+_V#?t>9x)<;cKVopTFoVpfBTT1&D~Gw}m?V_KAPE+<eV-
z^4-%gB3Q67HcP?&VlvjBCFK}n+k+s&N*SWY<RqOrlW8=x)^;VuziVJn!$wcbU61!4
zFg8-GV2p&}VyP5-_Os>39?L1U)eF*Bu>Eq<D^EwgUVZs={Z})7olBmpGyx(>Y<~In
zUxZGL(fPV9Y5unrHr9I58qdYI4Y<DVCkEGg;L_s!juS>vc<~}%zMKgHrM0A<_3ki7
zppcUNVc)+Uco-5(7*%q)`hySVKJ%Hrav9rFtSgP*<S9;D)qtg?%B$xZ$7bC{Tkx}9
zeR1NAQ~yn6{hK^VS&ft@0U04NNruAFoEb0cT*f!T*4lLkAw6Q(It+s7@@1Zw@EQ%x
z45c;|9=v5i2@p5HfABs*!^8E%hcicymUr!9VB3myrR|$Pc1zO}QrhaZ>f4uU?=59t
ze*euAbI)b6WrC%v@<p~N-}3(iWQDA?O5&o9MshM-a(&OWV6#a-&@ydNs};`7(A1Q(
zwB#fSGm}!XauUD20ZGd~h>*3`TBCK<asK3yfAiqyznCo+6xwM~H^2PZ&>OpHQE8dB
ze4+TML&Z<oB%D824_kq$)nZP_0WmXE`(O-hKjFG90w4iI$O6_1#AqZ%o%HAIV2(>U
zPie<k#72lV?X^owp+u3ZwYO(aGCm$vtBtuinw!)0x{hN75D_s85jK&fpPrbJ2t>qM
z10+f%`MmA#*F!_v*YVxA6^aFG5@AIhTB>${uoTO*rO%PJIyk(iOqOavTn&PymegZz
zS(OM|uz-o^`UkG9ha!Mw7>BISChyylPbHsozN@tsu(1*+LfcE-A`%gaV?~rLm87pP
z*}p$-G+LF4R4QDra}cOFW@}kwRsQX&o|daXTEH?Jt&Q*7Tn?p@DwW)PUOSEg1!4We
zsk1orSyHNliGdv>Yz0hItJmfli`G+2T*^D;g4`xHNlX~qR-6Q}Z6yd37@@?%O8cf%
zMNkCIa5a1l-{FkIp5tnzz$`*WBsK!Fbn~e{L;^^X0MJBEJ}<?h?Ac?CF=3blfwWq-
z)uJ$@B!Mw7M$+O^N<nKV1<!-$aVEpQ?|Ponn$trmV<e6(h*>SP7ENN5vtdoYEu!;;
z0jM-8p>6r>i<QK-Pf18Q8I5d)QmdFIQOc@#>U0)JH4g+462OYYB1i-z9pLF2w0*=7
zV_*ybO{9IFGMTnjOqFSMjKC_(K){MUlq5;j4$J0LLDl1WJ*bzQ(#<RjuR(_i69|Ep
z8cRkDfh4^bV0l+$ui_{DOLS$sEol=gm1b8;f^|LAe|a<oz|}`7?R<8+TFB)W%gTGN
z<AaDo6V`)zsaWcuq@C6<0SMKgDztW;__dz1_7Gh8%`HzVzD`P6|5xjQi9-o%K@H2#
zaYsb!id(iG)<GLD1b+)45RxDcI@@Ze2_pb##jW1G7Gq}-#$jh0?23jNW4c(3@}mQR
zgvm#NFx#W|xZDDCytZLi2<wpoGQEI~4@Fl9Q%dc8#g8?r1<0zc!mR*-9PM<r&8}>m
z9o1neZwO{)%_5S7$x0bFr4<O)SW;xoa(E|oz7+2U@U++22D`Ek%Xv9j|Gut{gP4Lw
z(5y6-R)f0-O=4Ivfa-h|0zc<RL6j+En3<TwN*u*IA{HR<oE|3(0Fd|dkR95GrB8-f
zIsVe|(F3D%m*>2!7l*OqIp^OwKQKNpduevhJ$tON%281eIi7RJgLfp|zmHEuH0ivb
zM@MI}P7_7|P|lVWI_dG;s6!$XoAOY3^p4Siv4P8{E>{<-Cw_in-@W^+v6Y#MpYvxg
z&bAsY)@&1-E9Lec-b<?M#Rdi9u#?Z^JKJoB2}>WPQm*8XW3fYvdsZAa!_fnyj_ch0
z@ZCW@*mL(DrBxV&#erh8)^uFQB*rAB&|fggPV5m0WW*G7q2L!f+j6G~qw5&k%m4rd
z$4Nv%R5oFGCttU9-H9Bx%|Jv7{e{##W{R0K3xJqRVhRHVu|h=Y0t9G(?KX@xrEJOf
zeRSfWc?F%H!vx~E&R}kEsj=kfwbO*U0h`!%j)__AYbTSK)!zy_cG9r{h{#wolp6xW
ziskK=E4Ut=--o49H)Ex-BuRF3D@N_Fv<ho}yF>C=jP;FmywxsjoCyH-?%GS{x7Xic
zVLkG8_wPohogJMgER}E1u01)OGaIHee_TPJ#3p@S->$x0=;#E7t`J5fkV3vNRv3%o
zsDtMFqXHsIOtQCcuj4u$_k(w3G}CG9;ON05-q~raHy{wUe9!1T-Dtc!-g+Vc2X`OL
zP-e$=V?6=_C6e^Hefx&@;iKZMPvgA?`Uduu_k~gTTV)lAD30U12k*{gGgdlZ)VW(j
znQp%x+V@Zrb=_;%QxJ$F&I7kS(53dfMHn*!IJEcBkUtce=(prZGYxIqU)sNCbdNx~
zVOqLqtgKkab&l>o+G@49o7ZOd4hVz<NB18k?m(8wn&{^B<3s{^_|Av>bYE=akG+x+
zD74}3-0pk!-qR)ZLU#!RiIq$y^Xc0^9R$J0Udf2bM)q?DKBx2+YXWWs-5tc#GCX$Z
zu_5ncK9ezVD{0+XzVq<@!y?^MFLa$SkU(75{r$tg9|j?*k1b&qRvZ00hkmEqpRwy^
ziixe*dk@@uWZ+1%)%;lQ$(XnmwH_UNbkEqH4koIs-B<UTUO}p7UwY(A8JjUMA2Y*9
zpvXpJ-q=(3KeYp=wL3x>k%*Lvr7zw0rDnbPF*A%pLNR^u{x5nN57PDXwjDB1sbPHJ
zt_L35{aCG8Q@leVI^6~{x5Czw`=8vmdtWykQET+r?G9Fu>e&~MesO<xe>46#OlC~n
zjG7M)KKR4~Pjq!<cvYu6&_{}N>e7z>#%I1!Fono|w2#Wtb^N}}zAruUCE0;{j#m2J
zv7V4tTN7I<mcIF!Z|YDdl6*utW8%<;yY#NFKlXJ$<L|)Kb*1Z_>E=p*#8&M1@c1*2
zJtKj96gf-TDoN=ZkA9<6D(%eFb*1+m>*-3D#Mau|ci;ZaN56>xvBV!C&X_nfVHxFT
z9(!hJaA?P-t`&64seD6NYnl1N#D#Ca`t7D_W^~4^bD3iAfSH3h7<ESf^wB>Z92o3u
zz~Lrw%Lv0VXS4IO-+txW)5&z+%l9m21Og)ngF6d%e(lk(<qP>+!WM2VVL&@7w%Kfc
z=auiASUQo<<{`MXB3%zAHZV~uIy!pv4?p>b+SA?kKW%_pOc+**2U`5}*iV0U_Gj?m
zE5AonjX=cIN?KXT{_cU_edNd^xVdVF9T4f36NdKv0wB=&%jduQo9|w3UCw24EPQK|
z+nG3#B#NTDig$hC{x1v<4X3WcTk8w$3BppO<}nWA=ih$*l?$(gD$KYU654s%nApO$
z;#P@EkMDo{(L;~2=36ysU4tGX46Cfo)XdaRPyF=Vxp%E&eaGJ!+S0^{lqz5R2Sy%v
z{NUq#eSNsqW^grni?9?c&+@s;=YD?b=cg7<#T@&tuSl&?DxeccGg}f#qBzP@_R!#=
z$L@S=d}MsJFg=1^Bn+!&H2@bUF24T3>nG<=R+Fl7l&f4OP8X9mbN)o_QhzXFViSvz
zKBw=<@R5i1KQufvjOEbE9#O0n^eAB|R?}9kR!>|!aeU(VM17)R8?0C>ty#C10PS)d
z8-14cD+vHBtg$9B2@DFlu&1!+$oP@F$M4P+a_x3@&^@>%^fX~9QcY^xCBgjS{F%u!
z=jP8%)+Q@aC6Y);n3>yUh1be9CkVt^YsHEc7WUXHd*!j>*zJS2?;qY@E|=36TCppd
z*PHkV5SAjPt(`^*0Ek-A?9%My;^bsya=t!a2`ja*X2_5tY1cCagGtC5>%b{^g_2*|
vmESd59vvx<43-A9*UlJD?Q4%ymE!*cp}X#O3znx500000NkvXXu0mjf?f?Ji

literal 0
HcmV?d00001

diff --git a/public/assets/plugins/square/templates/images/wf1.png b/public/assets/plugins/square/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/square/templates/xml/aws1.xml b/public/assets/plugins/square/templates/xml/aws1.xml
new file mode 100644
index 0000000..9e03520
--- /dev/null
+++ b/public/assets/plugins/square/templates/xml/aws1.xml
@@ -0,0 +1 @@
\ No newline at end of file
diff --git a/public/assets/plugins/square/templates/xml/bpmn1.xml b/public/assets/plugins/square/templates/xml/bpmn1.xml
new file mode 100644
index 0000000..33ee552
--- /dev/null
+++ b/public/assets/plugins/square/templates/xml/bpmn1.xml
@@ -0,0 +1 @@
\ No newline at end of file
diff --git a/public/assets/plugins/square/templates/xml/compare1.xml b/public/assets/plugins/square/templates/xml/compare1.xml
new file mode 100644
index 0000000..8b3a001
--- /dev/null
+++ b/public/assets/plugins/square/templates/xml/compare1.xml
@@ -0,0 +1 @@
\ No newline at end of file
diff --git a/public/assets/plugins/square/templates/xml/flowchart1.xml b/public/assets/plugins/square/templates/xml/flowchart1.xml
new file mode 100644
index 0000000..81959c0
--- /dev/null
+++ b/public/assets/plugins/square/templates/xml/flowchart1.xml
@@ -0,0 +1 @@
\ No newline at end of file
diff --git a/public/assets/plugins/square/templates/xml/flowchart2.xml b/public/assets/plugins/square/templates/xml/flowchart2.xml
new file mode 100644
index 0000000..5e53264
--- /dev/null
+++ b/public/assets/plugins/square/templates/xml/flowchart2.xml
@@ -0,0 +1 @@
\ No newline at end of file
diff --git a/public/assets/plugins/square/templates/xml/gantt1.xml b/public/assets/plugins/square/templates/xml/gantt1.xml
new file mode 100644
index 0000000..0c2d0bd
--- /dev/null
+++ b/public/assets/plugins/square/templates/xml/gantt1.xml
@@ -0,0 +1 @@
\ No newline at end of file
diff --git a/public/assets/plugins/square/templates/xml/lean1.xml b/public/assets/plugins/square/templates/xml/lean1.xml
new file mode 100644
index 0000000..bc7b3ad
--- /dev/null
+++ b/public/assets/plugins/square/templates/xml/lean1.xml
@@ -0,0 +1 @@
\ No newline at end of file
diff --git a/public/assets/plugins/square/templates/xml/mindmap1.xml b/public/assets/plugins/square/templates/xml/mindmap1.xml
new file mode 100644
index 0000000..a3fc6b7
--- /dev/null
+++ b/public/assets/plugins/square/templates/xml/mindmap1.xml
@@ -0,0 +1 @@
\ No newline at end of file
diff --git a/public/assets/plugins/square/templates/xml/orgchart1.xml b/public/assets/plugins/square/templates/xml/orgchart1.xml
new file mode 100644
index 0000000..df46b8b
--- /dev/null
+++ b/public/assets/plugins/square/templates/xml/orgchart1.xml
@@ -0,0 +1 @@
\ No newline at end of file
diff --git a/public/assets/plugins/square/templates/xml/orgchart2.xml b/public/assets/plugins/square/templates/xml/orgchart2.xml
new file mode 100644
index 0000000..b829c2d
--- /dev/null
+++ b/public/assets/plugins/square/templates/xml/orgchart2.xml
@@ -0,0 +1 @@
\ No newline at end of file
diff --git a/public/assets/plugins/square/templates/xml/package1.xml b/public/assets/plugins/square/templates/xml/package1.xml
new file mode 100644
index 0000000..1fa6cdf
--- /dev/null
+++ b/public/assets/plugins/square/templates/xml/package1.xml
@@ -0,0 +1 @@
\ No newline at end of file
diff --git a/public/assets/plugins/square/templates/xml/pid1.xml b/public/assets/plugins/square/templates/xml/pid1.xml
new file mode 100644
index 0000000..bfac4da
--- /dev/null
+++ b/public/assets/plugins/square/templates/xml/pid1.xml
@@ -0,0 +1 @@
\ No newline at end of file
diff --git a/public/assets/plugins/square/templates/xml/plcladder1.xml b/public/assets/plugins/square/templates/xml/plcladder1.xml
new file mode 100644
index 0000000..d23e8a2
--- /dev/null
+++ b/public/assets/plugins/square/templates/xml/plcladder1.xml
@@ -0,0 +1 @@
\ No newline at end of file
diff --git a/public/assets/plugins/square/templates/xml/seqdiag1.xml b/public/assets/plugins/square/templates/xml/seqdiag1.xml
new file mode 100644
index 0000000..130ac37
--- /dev/null
+++ b/public/assets/plugins/square/templates/xml/seqdiag1.xml
@@ -0,0 +1 @@
\ No newline at end of file
diff --git a/public/assets/plugins/square/templates/xml/sitemap1.xml b/public/assets/plugins/square/templates/xml/sitemap1.xml
new file mode 100644
index 0000000..93048cc
--- /dev/null
+++ b/public/assets/plugins/square/templates/xml/sitemap1.xml
@@ -0,0 +1 @@
\ No newline at end of file
diff --git a/public/assets/plugins/square/templates/xml/socnet1.xml b/public/assets/plugins/square/templates/xml/socnet1.xml
new file mode 100644
index 0000000..1d2cf4c
--- /dev/null
+++ b/public/assets/plugins/square/templates/xml/socnet1.xml
@@ -0,0 +1 @@
\ No newline at end of file
diff --git a/public/assets/plugins/square/templates/xml/stardelta.xml b/public/assets/plugins/square/templates/xml/stardelta.xml
new file mode 100644
index 0000000..4dba8e2
--- /dev/null
+++ b/public/assets/plugins/square/templates/xml/stardelta.xml
@@ -0,0 +1 @@
\ No newline at end of file
diff --git a/public/assets/plugins/square/templates/xml/statemachine1.xml b/public/assets/plugins/square/templates/xml/statemachine1.xml
new file mode 100644
index 0000000..1804865
--- /dev/null
+++ b/public/assets/plugins/square/templates/xml/statemachine1.xml
@@ -0,0 +1 @@
\ No newline at end of file
diff --git a/public/assets/plugins/square/templates/xml/uml1.xml b/public/assets/plugins/square/templates/xml/uml1.xml
new file mode 100644
index 0000000..e4b6887
--- /dev/null
+++ b/public/assets/plugins/square/templates/xml/uml1.xml
@@ -0,0 +1 @@
\ No newline at end of file
diff --git a/public/assets/plugins/square/templates/xml/usecase1.xml b/public/assets/plugins/square/templates/xml/usecase1.xml
new file mode 100644
index 0000000..26192cd
--- /dev/null
+++ b/public/assets/plugins/square/templates/xml/usecase1.xml
@@ -0,0 +1 @@
\ No newline at end of file
diff --git a/public/assets/plugins/square/templates/xml/venn1.xml b/public/assets/plugins/square/templates/xml/venn1.xml
new file mode 100644
index 0000000..c0a0610
--- /dev/null
+++ b/public/assets/plugins/square/templates/xml/venn1.xml
@@ -0,0 +1 @@
\ No newline at end of file
diff --git a/public/assets/plugins/square/templates/xml/wf1.xml b/public/assets/plugins/square/templates/xml/wf1.xml
new file mode 100644
index 0000000..8d72685
--- /dev/null
+++ b/public/assets/plugins/square/templates/xml/wf1.xml
@@ -0,0 +1 @@
\ 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
index f72df49..28d5d1a 100644
--- a/public/bower_components/angular-bootstrap/ui-bootstrap-tpls.js
+++ b/public/bower_components/angular-bootstrap/ui-bootstrap-tpls.js
@@ -1,18 +1,23 @@
 /*
- * angular-ui-bootstrap
- * http://angular-ui.github.io/bootstrap/
+* angular-ui-bootstrap
+* http://angular-ui.github.io/bootstrap/
 
- * Version: 0.14.3 - 2015-10-23
- * License: MIT
- */
+* Version: 1.0.3 - 2016-01-11
+* License: MIT
 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) {
+        if (!scope.$eval(attrs.uibCollapse)) {
+          element.addClass('in')
+            .addClass('collapse')
+            .css({height: 'auto'});
+        }
+
         function expand() {
           element.removeClass('collapse')
             .addClass('collapsing')
@@ -24,7 +29,7 @@ angular.module('ui.bootstrap.collapse', [])
               addClass: 'in',
               easing: 'ease',
               to: { height: element[0].scrollHeight + 'px' }
-            }).start().finally(expandDone);
+            }).start()['finally'](expandDone);
           } else {
             $animate.addClass(element, 'in', {
               to: { height: element[0].scrollHeight + 'px' }
@@ -59,7 +64,7 @@ angular.module('ui.bootstrap.collapse', [])
             $animateCss(element, {
               removeClass: 'in',
               to: {height: '0'}
-            }).start().finally(collapseDone);
+            }).start()['finally'](collapseDone);
           } else {
             $animate.removeClass(element, 'in', {
               to: {height: '0'}
@@ -84,89 +89,6 @@ angular.module('ui.bootstrap.collapse', [])
     };
   }]);
 
-/* 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', {
@@ -207,7 +129,6 @@ angular.module('ui.bootstrap.accordion', ['ui.bootstrap.collapse'])
       this.groups.splice(index, 1);
     }
   };
-
 }])
 
 // The accordion directive simply sets up the directive controller
@@ -218,7 +139,7 @@ angular.module('ui.bootstrap.accordion', ['ui.bootstrap.collapse'])
     controllerAs: 'accordion',
     transclude: true,
     templateUrl: function(element, attrs) {
-      return attrs.templateUrl || 'template/accordion/accordion.html';
+      return attrs.templateUrl || 'uib/template/accordion/accordion.html';
     }
   };
 })
@@ -230,7 +151,7 @@ angular.module('ui.bootstrap.accordion', ['ui.bootstrap.collapse'])
     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';
+      return attrs.templateUrl || 'uib/template/accordion/accordion-group.html';
     },
     scope: {
       heading: '@',               // Interpolate the heading attribute onto this scope
@@ -246,7 +167,7 @@ angular.module('ui.bootstrap.accordion', ['ui.bootstrap.collapse'])
       accordionCtrl.addGroup(scope);
 
       scope.openClass = attrs.openClass || 'panel-open';
-      scope.panelClass = attrs.panelClass;
+      scope.panelClass = attrs.panelClass || 'panel-default';
       scope.$watch('isOpen', function(value) {
         element.toggleClass(scope.openClass, !!value);
         if (value) {
@@ -285,9 +206,8 @@ angular.module('ui.bootstrap.accordion', ['ui.bootstrap.collapse'])
 // You must provide the property on the accordion-group controller that will hold the transcluded element
 .directive('uibAccordionTransclude', function() {
   return {
-    require: ['?^uibAccordionGroup', '?^accordionGroup'],
+    require: '^uibAccordionGroup',
     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('');
@@ -298,125 +218,6 @@ angular.module('ui.bootstrap.accordion', ['ui.bootstrap.collapse'])
   };
 });
 
-/* 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) {
@@ -437,7 +238,7 @@ angular.module('ui.bootstrap.alert', [])
     controller: 'UibAlertController',
     controllerAs: 'alert',
     templateUrl: function(element, attrs) {
-      return attrs.templateUrl || 'template/alert/alert.html';
+      return attrs.templateUrl || 'uib/template/alert/alert.html';
     },
     transclude: true,
     replace: true,
@@ -448,44 +249,6 @@ angular.module('ui.bootstrap.alert', [])
   };
 });
 
-/* 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', {
@@ -498,13 +261,14 @@ angular.module('ui.bootstrap.buttons', [])
   this.toggleEvent = buttonConfig.toggleEvent || 'click';
 }])
 
-.directive('uibBtnRadio', function() {
+.directive('uibBtnRadio', ['$parse', function($parse) {
   return {
     require: ['uibBtnRadio', 'ngModel'],
     controller: 'UibButtonsController',
     controllerAs: 'buttons',
     link: function(scope, element, attrs, ctrls) {
       var buttonsCtrl = ctrls[0], ngModelCtrl = ctrls[1];
+      var uncheckableExpr = $parse(attrs.uibUncheckable);
 
       element.find('input').css({display: 'none'});
 
@@ -528,9 +292,15 @@ angular.module('ui.bootstrap.buttons', [])
           });
         }
       });
+
+      if (attrs.uibUncheckable) {
+        scope.$watch(uncheckableExpr, function(uncheckable) {
+          attrs.$set('uncheckable', uncheckable ? '' : null);
+        });
+      }
     }
   };
-})
+}])
 
 .directive('uibBtnCheckbox', function() {
   return {
@@ -574,139 +344,98 @@ angular.module('ui.bootstrap.buttons', [])
   };
 });
 
-/* 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)));
-        };
+angular.module('ui.bootstrap.carousel', [])
 
-        //ui->model
-        element.bind(buttonsCtrl.toggleEvent, function() {
-          if (attrs.disabled) {
-            return;
-          }
+.controller('UibCarouselController', ['$scope', '$element', '$interval', '$timeout', '$animate', function($scope, $element, $interval, $timeout, $animate) {
+  var self = this,
+    slides = self.slides = $scope.slides = [],
+    SLIDE_DIRECTION = 'uib-slideDirection',
+    currentIndex = -1,
+    currentInterval, isPlaying, bufferedTransitions = [];
+  self.currentSlide = null;
 
-          var isActive = element.hasClass(buttonsCtrl.activeClass);
+  var destroyed = false;
 
-          if (!isActive || angular.isDefined(attrs.uncheckable)) {
-            scope.$apply(function() {
-              ngModelCtrl.$setViewValue(isActive ? null : scope.$eval(attrs.btnRadio));
-              ngModelCtrl.$render();
-            });
-          }
-        });
+  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) {
+      if ($scope.$currentTransition) {
+        $scope.$currentTransition = null;
       }
-    };
-  }])
-
-  .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];
+      self.select(slides[slides.length - 1]);
+      if (slides.length === 1) {
+        $scope.play();
+      }
+    } else {
+      slide.active = false;
+    }
+  };
 
-        element.find('input').css({display: 'none'});
+  self.getCurrentIndex = function() {
+    if (self.currentSlide && angular.isDefined(self.currentSlide.index)) {
+      return +self.currentSlide.index;
+    }
+    return currentIndex;
+  };
 
-        function getTrueValue() {
-          return getCheckboxValue(attrs.btnCheckboxTrue, true);
-        }
+  self.next = $scope.next = function() {
+    var newIndex = (self.getCurrentIndex() + 1) % slides.length;
 
-        function getFalseValue() {
-          return getCheckboxValue(attrs.btnCheckboxFalse, false);
-        }
+    if (newIndex === 0 && $scope.noWrap()) {
+      $scope.pause();
+      return;
+    }
 
-        function getCheckboxValue(attributeValue, defaultValue) {
-          var val = scope.$eval(attributeValue);
-          return angular.isDefined(val) ? val : defaultValue;
-        }
+    return self.select(getSlideByIndex(newIndex), 'next');
+  };
 
-        //model -> UI
-        ngModelCtrl.$render = function() {
-          element.toggleClass(buttonsCtrl.activeClass, angular.equals(ngModelCtrl.$modelValue, getTrueValue()));
-        };
+  self.prev = $scope.prev = function() {
+    var newIndex = self.getCurrentIndex() - 1 < 0 ? slides.length - 1 : self.getCurrentIndex() - 1;
 
-        //ui->model
-        element.bind(buttonsCtrl.toggleEvent, function() {
-          if (attrs.disabled) {
-            return;
-          }
+    if ($scope.noWrap() && newIndex === slides.length - 1) {
+      $scope.pause();
+      return;
+    }
 
-          scope.$apply(function() {
-            ngModelCtrl.$setViewValue(element.hasClass(buttonsCtrl.activeClass) ? getFalseValue() : getTrueValue());
-            ngModelCtrl.$render();
-          });
-        });
+    return self.select(getSlideByIndex(newIndex), 'prev');
+  };
 
-        //accessibility
-        element.on('keypress', function(e) {
-          if (attrs.disabled || e.which !== 32 || $document[0].activeElement !== element[0]) {
-            return;
-          }
+  self.removeSlide = function(slide) {
+    if (angular.isDefined(slide.index)) {
+      slides.sort(function(a, b) {
+        return +a.index > +b.index;
+      });
+    }
 
-          scope.$apply(function() {
-            ngModelCtrl.$setViewValue(element.hasClass(buttonsCtrl.activeClass) ? getFalseValue() : getTrueValue());
-            ngModelCtrl.$render();
-          });
-        });
+    var bufferedIndex = bufferedTransitions.indexOf(slide);
+    if (bufferedIndex !== -1) {
+      bufferedTransitions.splice(bufferedIndex, 1);
+    }
+    //get the index of the slide inside the carousel
+    var index = slides.indexOf(slide);
+    slides.splice(index, 1);
+    $timeout(function() {
+      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--;
       }
-    };
-  }]);
-
-
-/**
- * @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;
+    //clean the currentSlide when no more slide
+    if (slides.length === 0) {
+      self.currentSlide = null;
+      clearBufferedTransitions();
+    }
+  };
 
-  var destroyed = false;
   /* direction: "prev" or "next" */
   self.select = $scope.select = function(nextSlide, direction) {
     var nextIndex = $scope.indexOfSlide(nextSlide);
@@ -717,101 +446,114 @@ angular.module('ui.bootstrap.carousel', [])
     //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);
+    } else if (nextSlide && nextSlide !== self.currentSlide && $scope.$currentTransition) {
+      bufferedTransitions.push(nextSlide);
+      nextSlide.active = false;
     }
   };
 
-  function goNext(slide, index, direction) {
-    // Scope has been destroyed, stop here.
-    if (destroyed) { return; }
+  /* Allow outside people to call indexOf on slides array */
+  $scope.indexOfSlide = function(slide) {
+    return angular.isDefined(slide.index) ? +slide.index : slides.indexOf(slide);
+  };
 
-    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.isActive = function(slide) {
+    return self.currentSlide === slide;
+  };
 
-      $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;
-        });
-      }
+  $scope.pause = function() {
+    if (!$scope.noPause) {
+      isPlaying = false;
+      resetTimer();
     }
+  };
 
-    self.currentSlide = slide;
-    currentIndex = index;
-
-    //every time you change slides, reset the timer
-    restartTimer();
-  }
+  $scope.play = function() {
+    if (!isPlaying) {
+      isPlaying = true;
+      restartTimer();
+    }
+  };
 
   $scope.$on('$destroy', function() {
     destroyed = true;
+    resetTimer();
+  });
+
+  $scope.$watch('noTransition', function(noTransition) {
+    $animate.enabled($element, !noTransition);
   });
 
+  $scope.$watch('interval', restartTimer);
+
+  $scope.$watchCollection('slides', resetTransition);
+
+  function clearBufferedTransitions() {
+    while (bufferedTransitions.length) {
+      bufferedTransitions.shift();
+    }
+  }
+
   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) {
+    for (var i = 0, l = slides.length; i < l; ++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);
-  };
+  function goNext(slide, index, direction) {
+    if (destroyed) { return; }
 
-  $scope.next = function() {
-    var newIndex = (self.getCurrentIndex() + 1) % slides.length;
+    angular.extend(slide, {direction: direction, active: true});
+    angular.extend(self.currentSlide || {}, {direction: direction, active: false});
+    if ($animate.enabled($element) && !$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);
+      }
 
-    if (newIndex === 0 && $scope.noWrap()) {
-      $scope.pause();
-      return;
+      $scope.$currentTransition = true;
+      $animate.on('addClass', slide.$element, function(element, phase) {
+        if (phase === 'close') {
+          $scope.$currentTransition = null;
+          $animate.off('addClass', element);
+          if (bufferedTransitions.length) {
+            var nextSlide = bufferedTransitions.pop();
+            var nextIndex = $scope.indexOfSlide(nextSlide);
+            var nextDirection = nextIndex > self.getCurrentIndex() ? 'next' : 'prev';
+            clearBufferedTransitions();
+
+            goNext(nextSlide, nextIndex, nextDirection);
+          }
+        }
+      });
     }
 
-    return self.select(getSlideByIndex(newIndex), 'next');
-  };
+    self.currentSlide = slide;
+    currentIndex = index;
 
-  $scope.prev = function() {
-    var newIndex = self.getCurrentIndex() - 1 < 0 ? slides.length - 1 : self.getCurrentIndex() - 1;
+    //every time you change slides, reset the timer
+    restartTimer();
+  }
 
-    if ($scope.noWrap() && newIndex === slides.length - 1) {
-      $scope.pause();
-      return;
+  function resetTimer() {
+    if (currentInterval) {
+      $interval.cancel(currentInterval);
+      currentInterval = null;
     }
+  }
 
-    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 resetTransition(slides) {
+    if (!slides.length) {
+      $scope.$currentTransition = null;
+      clearBufferedTransitions();
+    }
+  }
 
   function restartTimer() {
     resetTimer();
@@ -821,13 +563,6 @@ angular.module('ui.bootstrap.carousel', [])
     }
   }
 
-  function resetTimer() {
-    if (currentInterval) {
-      $interval.cancel(currentInterval);
-      currentInterval = null;
-    }
-  }
-
   function timerFn() {
     var interval = +$scope.interval;
     if (isPlaying && !isNaN(interval) && interval > 0 && slides.length) {
@@ -836,118 +571,16 @@ angular.module('ui.bootstrap.carousel', [])
       $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() {
+.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';
+      return attrs.templateUrl || 'uib/template/carousel/carousel.html';
     },
     scope: {
       interval: '=',
@@ -956,58 +589,15 @@ angular.module('ui.bootstrap.carousel', [])
       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';
+      return attrs.templateUrl || 'uib/template/carousel/slide.html';
     },
     scope: {
       active: '=?',
@@ -1030,16 +620,9 @@ function CarouselDemoCtrl($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');
-  }
+.animation('.item', ['$animateCss',
+function($animateCss) {
+  var SLIDE_DIRECTION = 'uib-slideDirection';
 
   function removeClass(element, className, callback) {
     element.removeClass(className);
@@ -1050,56 +633,35 @@ function ($injector, $animate) {
 
   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)) {
+      if (className === 'active') {
         var stopped = false;
         var direction = element.data(SLIDE_DIRECTION);
-        var directionClass = direction == 'next' ? 'left' : 'right';
+        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();
-          });
-        }
+        $animateCss(element, {addClass: directionClass})
+          .start()
+          .done(removeClassFn);
 
-        return function () {
+        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)) {
+      if (className === 'active') {
         var stopped = false;
         var direction = element.data(SLIDE_DIRECTION);
-        var directionClass = direction == 'next' ? 'left' : 'right';
+        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();
-          });
-        }
+        $animateCss(element, {addClass: directionClass})
+          .start()
+          .done(removeClassFn);
+
         return function() {
           stopped = true;
         };
@@ -1109,80 +671,6 @@ function ($injector, $animate) {
   };
 }]);
 
-/* 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) {
@@ -1197,86 +685,117 @@ angular.module('ui.bootstrap.dateparser', [])
 
     this.parsers = {};
 
-    formatCodeToRegex = {
-      'yyyy': {
+    formatCodeToRegex = [
+      {
+        key: 'yyyy',
         regex: '\\d{4}',
         apply: function(value) { this.year = +value; }
       },
-      'yy': {
+      {
+        key: 'yy',
         regex: '\\d{2}',
         apply: function(value) { this.year = +value + 2000; }
       },
-      'y': {
+      {
+        key: 'y',
         regex: '\\d{1,4}',
         apply: function(value) { this.year = +value; }
       },
-      'MMMM': {
+      {
+        key: 'M!',
+        regex: '0?[1-9]|1[0-2]',
+        apply: function(value) { this.month = value - 1; }
+      },
+      {
+        key: 'MMMM',
         regex: $locale.DATETIME_FORMATS.MONTH.join('|'),
         apply: function(value) { this.month = $locale.DATETIME_FORMATS.MONTH.indexOf(value); }
       },
-      'MMM': {
+      {
+        key: 'MMM',
         regex: $locale.DATETIME_FORMATS.SHORTMONTH.join('|'),
         apply: function(value) { this.month = $locale.DATETIME_FORMATS.SHORTMONTH.indexOf(value); }
       },
-      'MM': {
+      {
+        key: 'MM',
         regex: '0[1-9]|1[0-2]',
         apply: function(value) { this.month = value - 1; }
       },
-      'M': {
+      {
+        key: 'M',
         regex: '[1-9]|1[0-2]',
         apply: function(value) { this.month = value - 1; }
       },
-      'dd': {
+      {
+        key: 'd!',
+        regex: '[0-2]?[0-9]{1}|3[0-1]{1}',
+        apply: function(value) { this.date = +value; }
+      },
+      {
+        key: 'dd',
         regex: '[0-2][0-9]{1}|3[0-1]{1}',
         apply: function(value) { this.date = +value; }
       },
-      'd': {
+      {
+        key: 'd',
         regex: '[1-2]?[0-9]{1}|3[0-1]{1}',
         apply: function(value) { this.date = +value; }
       },
-      'EEEE': {
+      {
+        key: 'EEEE',
         regex: $locale.DATETIME_FORMATS.DAY.join('|')
       },
-      'EEE': {
+      {
+        key: 'EEE',
         regex: $locale.DATETIME_FORMATS.SHORTDAY.join('|')
       },
-      'HH': {
+      {
+        key: 'HH',
         regex: '(?:0|1)[0-9]|2[0-3]',
         apply: function(value) { this.hours = +value; }
       },
-      'hh': {
+      {
+        key: 'hh',
         regex: '0[0-9]|1[0-2]',
         apply: function(value) { this.hours = +value; }
       },
-      'H': {
+      {
+        key: 'H',
         regex: '1?[0-9]|2[0-3]',
         apply: function(value) { this.hours = +value; }
       },
-      'h': {
+      {
+        key: 'h',
         regex: '[0-9]|1[0-2]',
         apply: function(value) { this.hours = +value; }
       },
-      'mm': {
+      {
+        key: 'mm',
         regex: '[0-5][0-9]',
         apply: function(value) { this.minutes = +value; }
       },
-      'm': {
+      {
+        key: 'm',
         regex: '[0-9]|[1-5][0-9]',
         apply: function(value) { this.minutes = +value; }
       },
-      'sss': {
+      {
+        key: 'sss',
         regex: '[0-9][0-9][0-9]',
         apply: function(value) { this.milliseconds = +value; }
       },
-      'ss': {
+      {
+        key: 'ss',
         regex: '[0-5][0-9]',
         apply: function(value) { this.seconds = +value; }
       },
-      's': {
+      {
+        key: 's',
         regex: '[0-9]|[1-5][0-9]',
         apply: function(value) { this.seconds = +value; }
       },
-      'a': {
+      {
+        key: 'a',
         regex: $locale.DATETIME_FORMATS.AMPMS.join('|'),
         apply: function(value) {
           if (this.hours === 12) {
@@ -1287,8 +806,44 @@ angular.module('ui.bootstrap.dateparser', [])
             this.hours += 12;
           }
         }
+      },
+      {
+        key: 'Z',
+        regex: '[+-]\\d{4}',
+        apply: function(value) {
+          var matches = value.match(/([+-])(\d{2})(\d{2})/),
+            sign = matches[1],
+            hours = matches[2],
+            minutes = matches[3];
+          this.hours += toInt(sign + hours);
+          this.minutes += toInt(sign + minutes);
+        }
+      },
+      {
+        key: 'ww',
+        regex: '[0-4][0-9]|5[0-3]'
+      },
+      {
+        key: 'w',
+        regex: '[0-9]|[1-4][0-9]|5[0-3]'
+      },
+      {
+        key: 'GGGG',
+        regex: $locale.DATETIME_FORMATS.ERANAMES.join('|').replace(/\s/g, '\\s')
+      },
+      {
+        key: 'GGG',
+        regex: $locale.DATETIME_FORMATS.ERAS.join('|')
+      },
+      {
+        key: 'GG',
+        regex: $locale.DATETIME_FORMATS.ERAS.join('|')
+      },
+      {
+        key: 'G',
+        regex: $locale.DATETIME_FORMATS.ERAS.join('|')
       }
-    };
+    ];
   };
 
   this.init();
@@ -1296,21 +851,54 @@ angular.module('ui.bootstrap.dateparser', [])
   function createParser(format) {
     var map = [], regex = format.split('');
 
-    angular.forEach(formatCodeToRegex, function(data, code) {
-      var index = format.indexOf(code);
+    // check for literal values
+    var quoteIndex = format.indexOf('\'');
+    if (quoteIndex > -1) {
+      var inLiteral = false;
+      format = format.split('');
+      for (var i = quoteIndex; i < format.length; i++) {
+        if (inLiteral) {
+          if (format[i] === '\'') {
+            if (i + 1 < format.length && format[i+1] === '\'') { // escaped single quote
+              format[i+1] = '$';
+              regex[i+1] = '';
+            } else { // end of literal
+              regex[i] = '';
+              inLiteral = false;
+            }
+          }
+          format[i] = '$';
+        } else {
+          if (format[i] === '\'') { // start of literal
+            format[i] = '$';
+            regex[i] = '';
+            inLiteral = true;
+          }
+        }
+      }
+
+      format = format.join('');
+    }
+
+    angular.forEach(formatCodeToRegex, function(data) {
+      var index = format.indexOf(data.key);
 
       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++) {
+        for (var i = index + 1, n = index + data.key.length; i < n; i++) {
           regex[i] = '';
           format[i] = '$';
         }
         format = format.join('');
 
-        map.push({ index: index, apply: data.apply });
+        map.push({
+          index: index,
+          apply: data.apply,
+          matcher: data.regex
+        });
       }
     });
 
@@ -1339,8 +927,8 @@ angular.module('ui.bootstrap.dateparser', [])
     var parser = this.parsers[format],
         regex = parser.regex,
         map = parser.map,
-        results = input.match(regex);
-
+        results = input.match(regex),
+        tzOffset = false;
     if (results && results.length) {
       var fields, dt;
       if (angular.isDate(baseDate) && !isNaN(baseDate.getTime())) {
@@ -1361,22 +949,32 @@ angular.module('ui.bootstrap.dateparser', [])
       }
 
       for (var i = 1, n = results.length; i < n; i++) {
-        var mapper = map[i-1];
+        var mapper = map[i - 1];
+        if (mapper.matcher === 'Z') {
+          tzOffset = true;
+        }
+
         if (mapper.apply) {
           mapper.apply.call(fields, results[i]);
         }
       }
 
+      var datesetter = tzOffset ? Date.prototype.setUTCFullYear :
+        Date.prototype.setFullYear;
+      var timesetter = tzOffset ? Date.prototype.setUTCHours :
+        Date.prototype.setHours;
+
       if (isValid(fields.year, fields.month, fields.date)) {
-        if (angular.isDate(baseDate) && !isNaN(baseDate.getTime())) {
+        if (angular.isDate(baseDate) && !isNaN(baseDate.getTime()) && !tzOffset) {
           dt = new Date(baseDate);
-          dt.setFullYear(fields.year, fields.month, fields.date,
-            fields.hours, fields.minutes, fields.seconds,
-            fields.milliseconds || 0);
+          datesetter.call(dt, fields.year, fields.month, fields.date);
+          timesetter.call(dt, fields.hours, fields.minutes,
+            fields.seconds, fields.milliseconds);
         } else {
-          dt = new Date(fields.year, fields.month, fields.date,
-            fields.hours, fields.minutes, fields.seconds,
-            fields.milliseconds || 0);
+          dt = new Date(0);
+          datesetter.call(dt, fields.year, fields.month, fields.date);
+          timesetter.call(dt, fields.hours || 0, fields.minutes || 0,
+            fields.seconds || 0, fields.milliseconds || 0);
         }
       }
 
@@ -1392,7 +990,7 @@ angular.module('ui.bootstrap.dateparser', [])
     }
 
     if (month === 1 && date > 28) {
-      return date === 29 && ((year % 4 === 0 && year % 100 !== 0) || year % 400 === 0);
+      return date === 29 && (year % 4 === 0 && year % 100 !== 0 || year % 400 === 0);
     }
 
     if (month === 3 || month === 5 || month === 8 || month === 10) {
@@ -1401,188 +999,674 @@ angular.module('ui.bootstrap.dateparser', [])
 
     return true;
   }
-}]);
 
-/* Deprecated dateparser below */
+  function toInt(str) {
+    return parseInt(str, 10);
+  }
+
+  this.toTimezone = toTimezone;
+  this.fromTimezone = fromTimezone;
+  this.timezoneToOffset = timezoneToOffset;
+  this.addDateMinutes = addDateMinutes;
+  this.convertTimezoneToLocal = convertTimezoneToLocal;
+  
+  function toTimezone(date, timezone) {
+    return date && timezone ? convertTimezoneToLocal(date, timezone) : date;
+  }
 
-angular.module('ui.bootstrap.dateparser')
+  function fromTimezone(date, timezone) {
+    return date && timezone ? convertTimezoneToLocal(date, timezone, true) : date;
+  }
 
-.value('$dateParserSuppressWarning', false)
+  //https://github.com/angular/angular.js/blob/4daafd3dbe6a80d578f5a31df1bb99c77559543e/src/Angular.js#L1207
+  function timezoneToOffset(timezone, fallback) {
+    var requestedTimezoneOffset = Date.parse('Jan 01, 1970 00:00:00 ' + timezone) / 60000;
+    return isNaN(requestedTimezoneOffset) ? fallback : requestedTimezoneOffset;
+  }
 
-.service('dateParser', ['$log', '$dateParserSuppressWarning', 'uibDateParser', function($log, $dateParserSuppressWarning, uibDateParser) {
-  if (!$dateParserSuppressWarning) {
-    $log.warn('dateParser is now deprecated. Use uibDateParser instead.');
+  function addDateMinutes(date, minutes) {
+    date = new Date(date.getTime());
+    date.setMinutes(date.getMinutes() + minutes);
+    return date;
   }
 
-  angular.extend(this, uibDateParser);
+  function convertTimezoneToLocal(date, timezone, reverse) {
+    reverse = reverse ? -1 : 1;
+    var timezoneOffset = timezoneToOffset(timezone, date.getTimezoneOffset());
+    return addDateMinutes(date, reverse * (timezoneOffset - date.getTimezoneOffset()));
+  }
 }]);
 
+// Avoiding use of ng-class as it creates a lot of watchers when a class is to be applied to
+// at most one element.
+angular.module('ui.bootstrap.isClass', [])
+.directive('uibIsClass', [
+         '$animate',
+function ($animate) {
+  //                    11111111          22222222
+  var ON_REGEXP = /^\s*([\s\S]+?)\s+on\s+([\s\S]+?)\s*$/;
+  //                    11111111           22222222
+  var IS_REGEXP = /^\s*([\s\S]+?)\s+for\s+([\s\S]+?)\s*$/;
+
+  var dataPerTracked = {};
+
+  return {
+    restrict: 'A',
+    compile: function (tElement, tAttrs) {
+      var linkedScopes = [];
+      var instances = [];
+      var expToData = {};
+      var lastActivated = null;
+      var onExpMatches = tAttrs.uibIsClass.match(ON_REGEXP);
+      var onExp = onExpMatches[2];
+      var expsStr = onExpMatches[1];
+      var exps = expsStr.split(',');
+
+      return linkFn;
+
+      function linkFn(scope, element, attrs) {
+        linkedScopes.push(scope);
+        instances.push({
+          scope: scope,
+          element: element
+        });
+
+        exps.forEach(function (exp, k) {
+          addForExp(exp, scope);
+        });
+
+        scope.$on('$destroy', removeScope);
+      }
+
+      function addForExp(exp, scope) {
+        var matches = exp.match(IS_REGEXP);
+        var clazz = scope.$eval(matches[1]);
+        var compareWithExp = matches[2];
+        var data = expToData[exp];
+        if (!data) {
+          var watchFn = function (compareWithVal) {
+            var newActivated = null;
+            instances.some(function (instance) {
+              var thisVal = instance.scope.$eval(onExp);
+              if (thisVal === compareWithVal) {
+                newActivated = instance;
+                return true;
+              }
+            });
+            if (data.lastActivated !== newActivated) {
+              if (data.lastActivated) {
+                $animate.removeClass(data.lastActivated.element, clazz);
+              }
+              if (newActivated) {
+                $animate.addClass(newActivated.element, clazz);
+              }
+              data.lastActivated = newActivated;
+            }
+          };
+          expToData[exp] = data = {
+            lastActivated: null,
+            scope: scope,
+            watchFn: watchFn,
+            compareWithExp: compareWithExp,
+            watcher: scope.$watch(compareWithExp, watchFn)
+          };
+        }
+        data.watchFn(scope.$eval(compareWithExp));
+      }
+
+      function removeScope(e) {
+        var removedScope = e.targetScope;
+        var index = linkedScopes.indexOf(removedScope);
+        linkedScopes.splice(index, 1);
+        instances.splice(index, 1);
+        if (linkedScopes.length) {
+          var newWatchScope = linkedScopes[0];
+          angular.forEach(expToData, function (data) {
+            if (data.scope === removedScope) {
+              data.watcher = newWatchScope.$watch(data.compareWithExp, data.watchFn);
+              data.scope = newWatchScope;
+            }
+          });
+        }
+        else {
+          expToData = {};
+        }
+      }
+    }
+  };
+}]);
 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,
+ * A set of utility methods for working with the DOM.
+ * It is meant to be used where we need to absolute-position elements in
+ * relation to another element (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
+     * Used by scrollbarWidth() function to cache scrollbar's width.
+     * Do not access this variable directly, use scrollbarWidth() instead.
      */
-    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;
+    var SCROLLBAR_WIDTH;
+    var OVERFLOW_REGEX = {
+      normal: /(auto|scroll)/,
+      hidden: /(auto|scroll|hidden)/
+    };
+    var PLACEMENT_REGEX = {
+      auto: /\s?auto?\s?/i,
+      primary: /^(top|bottom|left|right)$/,
+      secondary: /^(top|bottom|left|right|center)$/,
+      vertical: /^(top|bottom)$/
     };
 
     return {
+
+      /**
+       * Provides a raw DOM element from a jQuery/jQLite element.
+       *
+       * @param {element} elem - The element to convert.
+       *
+       * @returns {element} A HTML element.
+       */
+      getRawNode: function(elem) {
+        return elem[0] || elem;
+      },
+
+      /**
+       * Provides a parsed number for a style property.  Strips
+       * units and casts invalid numbers to 0.
+       *
+       * @param {string} value - The style value to parse.
+       *
+       * @returns {number} A valid number.
+       */
+      parseStyle: function(value) {
+        value = parseFloat(value);
+        return isFinite(value) ? value : 0;
+      },
+
+      /**
+       * Provides the closest positioned ancestor.
+       *
+       * @param {element} element - The element to get the offest parent for.
+       *
+       * @returns {element} The closest positioned ancestor.
+       */
+      offsetParent: function(elem) {
+        elem = this.getRawNode(elem);
+
+        var offsetParent = elem.offsetParent || $document[0].documentElement;
+
+        function isStaticPositioned(el) {
+          return ($window.getComputedStyle(el).position || 'static') === 'static';
+        }
+
+        while (offsetParent && offsetParent !== $document[0].documentElement && isStaticPositioned(offsetParent)) {
+          offsetParent = offsetParent.offsetParent;
+        }
+
+        return offsetParent || $document[0].documentElement;
+      },
+
+      /**
+       * Provides the scrollbar width, concept from TWBS measureScrollbar()
+       * function in https://github.com/twbs/bootstrap/blob/master/js/modal.js
+       *
+       * @returns {number} The width of the browser scollbar.
+       */
+      scrollbarWidth: function() {
+        if (angular.isUndefined(SCROLLBAR_WIDTH)) {
+          var scrollElem = angular.element('<div style="position: absolute; top: -9999px; width: 50px; height: 50px; overflow: scroll;"></div>');
+          $document.find('body').append(scrollElem);
+          SCROLLBAR_WIDTH = scrollElem[0].offsetWidth - scrollElem[0].clientWidth;
+          SCROLLBAR_WIDTH = isFinite(SCROLLBAR_WIDTH) ? SCROLLBAR_WIDTH : 0;
+          scrollElem.remove();
+        }
+
+        return SCROLLBAR_WIDTH;
+      },
+
+      /**
+       * Provides the closest scrollable ancestor.
+       * A port of the jQuery UI scrollParent method:
+       * https://github.com/jquery/jquery-ui/blob/master/ui/scroll-parent.js
+       *
+       * @param {element} elem - The element to find the scroll parent of.
+       * @param {boolean=} [includeHidden=false] - Should scroll style of 'hidden' be considered,
+       *   default is false.
+       *
+       * @returns {element} A HTML element.
+       */
+      scrollParent: function(elem, includeHidden) {
+        elem = this.getRawNode(elem);
+
+        var overflowRegex = includeHidden ? OVERFLOW_REGEX.hidden : OVERFLOW_REGEX.normal;
+        var documentEl = $document[0].documentElement;
+        var elemStyle = $window.getComputedStyle(elem);
+        var excludeStatic = elemStyle.position === 'absolute';
+        var scrollParent = elem.parentElement || documentEl;
+
+        if (scrollParent === documentEl || elemStyle.position === 'fixed') {
+          return documentEl;
+        }
+
+        while (scrollParent.parentElement && scrollParent !== documentEl) {
+          var spStyle = $window.getComputedStyle(scrollParent);
+          if (excludeStatic && spStyle.position !== 'static') {
+            excludeStatic = false;
+          }
+
+          if (!excludeStatic && overflowRegex.test(spStyle.overflow + spStyle.overflowY + spStyle.overflowX)) {
+            break;
+          }
+          scrollParent = scrollParent.parentElement;
+        }
+
+        return scrollParent;
+      },
+
       /**
        * Provides read-only equivalent of jQuery's position function:
-       * http://api.jquery.com/position/
+       * http://api.jquery.com/position/ - distance to closest positioned
+       * ancestor.  Does not account for margins by default like jQuery position.
+       *
+       * @param {element} elem - The element to caclulate the position on.
+       * @param {boolean=} [includeMargins=false] - Should margins be accounted
+       * for, default is false.
+       *
+       * @returns {object} An object with the following properties:
+       *   <ul>
+       *     <li>**width**: the width of the element</li>
+       *     <li>**height**: the height of the element</li>
+       *     <li>**top**: distance to top edge of offset parent</li>
+       *     <li>**left**: distance to left edge of offset parent</li>
+       *   </ul>
        */
-      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;
+      position: function(elem, includeMagins) {
+        elem = this.getRawNode(elem);
+
+        var elemOffset = this.offset(elem);
+        if (includeMagins) {
+          var elemStyle = $window.getComputedStyle(elem);
+          elemOffset.top -= this.parseStyle(elemStyle.marginTop);
+          elemOffset.left -= this.parseStyle(elemStyle.marginLeft);
+        }
+        var parent = this.offsetParent(elem);
+        var parentOffset = {top: 0, left: 0};
+
+        if (parent !== $document[0].documentElement) {
+          parentOffset = this.offset(parent);
+          parentOffset.top += parent.clientTop - parent.scrollTop;
+          parentOffset.left += parent.clientLeft - parent.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
+          width: Math.round(angular.isNumber(elemOffset.width) ? elemOffset.width : elem.offsetWidth),
+          height: Math.round(angular.isNumber(elemOffset.height) ? elemOffset.height : elem.offsetHeight),
+          top: Math.round(elemOffset.top - parentOffset.top),
+          left: Math.round(elemOffset.left - parentOffset.left)
         };
       },
 
       /**
        * Provides read-only equivalent of jQuery's offset function:
-       * http://api.jquery.com/offset/
+       * http://api.jquery.com/offset/ - distance to viewport.  Does
+       * not account for borders, margins, or padding on the body
+       * element.
+       *
+       * @param {element} elem - The element to calculate the offset on.
+       *
+       * @returns {object} An object with the following properties:
+       *   <ul>
+       *     <li>**width**: the width of the element</li>
+       *     <li>**height**: the height of the element</li>
+       *     <li>**top**: distance to top edge of viewport</li>
+       *     <li>**right**: distance to bottom edge of viewport</li>
+       *   </ul>
        */
-      offset: function(element) {
-        var boundingClientRect = element[0].getBoundingClientRect();
+      offset: function(elem) {
+        elem = this.getRawNode(elem);
+
+        var elemBCR = elem.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)
+          width: Math.round(angular.isNumber(elemBCR.width) ? elemBCR.width : elem.offsetWidth),
+          height: Math.round(angular.isNumber(elemBCR.height) ? elemBCR.height : elem.offsetHeight),
+          top: Math.round(elemBCR.top + ($window.pageYOffset || $document[0].documentElement.scrollTop)),
+          left: Math.round(elemBCR.left + ($window.pageXOffset || $document[0].documentElement.scrollLeft))
         };
       },
 
       /**
-       * Provides coordinates for the targetEl in relation to hostEl
+       * Provides offset distance to the closest scrollable ancestor
+       * or viewport.  Accounts for border and scrollbar width.
+       *
+       * Right and bottom dimensions represent the distance to the
+       * respective edge of the viewport element.  If the element
+       * edge extends beyond the viewport, a negative value will be
+       * reported.
+       *
+       * @param {element} elem - The element to get the viewport offset for.
+       * @param {boolean=} [useDocument=false] - Should the viewport be the document element instead
+       * of the first scrollable element, default is false.
+       * @param {boolean=} [includePadding=true] - Should the padding on the offset parent element
+       * be accounted for, default is true.
+       *
+       * @returns {object} An object with the following properties:
+       *   <ul>
+       *     <li>**top**: distance to the top content edge of viewport element</li>
+       *     <li>**bottom**: distance to the bottom content edge of viewport element</li>
+       *     <li>**left**: distance to the left content edge of viewport element</li>
+       *     <li>**right**: distance to the right content edge of viewport element</li>
+       *   </ul>
        */
-      positionElements: function(hostEl, targetEl, positionStr, appendToBody) {
-        var positionStrParts = positionStr.split('-');
-        var pos0 = positionStrParts[0], pos1 = positionStrParts[1] || 'center';
+      viewportOffset: function(elem, useDocument, includePadding) {
+        elem = this.getRawNode(elem);
+        includePadding = includePadding !== false ? true : false;
 
-        var hostElPos,
-          targetElWidth,
-          targetElHeight,
-          targetElPos;
+        var elemBCR = elem.getBoundingClientRect();
+        var offsetBCR = {top: 0, left: 0, bottom: 0, right: 0};
 
-        hostElPos = appendToBody ? this.offset(hostEl) : this.position(hostEl);
+        var offsetParent = useDocument ? $document[0].documentElement : this.scrollParent(elem);
+        var offsetParentBCR = offsetParent.getBoundingClientRect();
 
-        targetElWidth = targetEl.prop('offsetWidth');
-        targetElHeight = targetEl.prop('offsetHeight');
+        offsetBCR.top = offsetParentBCR.top + offsetParent.clientTop;
+        offsetBCR.left = offsetParentBCR.left + offsetParent.clientLeft;
+        if (offsetParent === $document[0].documentElement) {
+          offsetBCR.top += $window.pageYOffset;
+          offsetBCR.left += $window.pageXOffset;
+        }
+        offsetBCR.bottom = offsetBCR.top + offsetParent.clientHeight;
+        offsetBCR.right = offsetBCR.left + offsetParent.clientWidth;
 
-        var shiftWidth = {
-          center: function() {
-            return hostElPos.left + hostElPos.width / 2 - targetElWidth / 2;
-          },
-          left: function() {
-            return hostElPos.left;
-          },
-          right: function() {
-            return hostElPos.left + hostElPos.width;
-          }
+        if (includePadding) {
+          var offsetParentStyle = $window.getComputedStyle(offsetParent);
+          offsetBCR.top += this.parseStyle(offsetParentStyle.paddingTop);
+          offsetBCR.bottom -= this.parseStyle(offsetParentStyle.paddingBottom);
+          offsetBCR.left += this.parseStyle(offsetParentStyle.paddingLeft);
+          offsetBCR.right -= this.parseStyle(offsetParentStyle.paddingRight);
+        }
+
+        return {
+          top: Math.round(elemBCR.top - offsetBCR.top),
+          bottom: Math.round(offsetBCR.bottom - elemBCR.bottom),
+          left: Math.round(elemBCR.left - offsetBCR.left),
+          right: Math.round(offsetBCR.right - elemBCR.right)
         };
+      },
 
-        var shiftHeight = {
-          center: function() {
-            return hostElPos.top + hostElPos.height / 2 - targetElHeight / 2;
-          },
-          top: function() {
-            return hostElPos.top;
-          },
-          bottom: function() {
-            return hostElPos.top + hostElPos.height;
+      /**
+       * Provides an array of placement values parsed from a placement string.
+       * Along with the 'auto' indicator, supported placement strings are:
+       *   <ul>
+       *     <li>top: element on top, horizontally centered on host element.</li>
+       *     <li>top-left: element on top, left edge aligned with host element left edge.</li>
+       *     <li>top-right: element on top, lerightft edge aligned with host element right edge.</li>
+       *     <li>bottom: element on bottom, horizontally centered on host element.</li>
+       *     <li>bottom-left: element on bottom, left edge aligned with host element left edge.</li>
+       *     <li>bottom-right: element on bottom, right edge aligned with host element right edge.</li>
+       *     <li>left: element on left, vertically centered on host element.</li>
+       *     <li>left-top: element on left, top edge aligned with host element top edge.</li>
+       *     <li>left-bottom: element on left, bottom edge aligned with host element bottom edge.</li>
+       *     <li>right: element on right, vertically centered on host element.</li>
+       *     <li>right-top: element on right, top edge aligned with host element top edge.</li>
+       *     <li>right-bottom: element on right, bottom edge aligned with host element bottom edge.</li>
+       *   </ul>
+       * A placement string with an 'auto' indicator is expected to be
+       * space separated from the placement, i.e: 'auto bottom-left'  If
+       * the primary and secondary placement values do not match 'top,
+       * bottom, left, right' then 'top' will be the primary placement and
+       * 'center' will be the secondary placement.  If 'auto' is passed, true
+       * will be returned as the 3rd value of the array.
+       *
+       * @param {string} placement - The placement string to parse.
+       *
+       * @returns {array} An array with the following values
+       * <ul>
+       *   <li>**[0]**: The primary placement.</li>
+       *   <li>**[1]**: The secondary placement.</li>
+       *   <li>**[2]**: If auto is passed: true, else undefined.</li>
+       * </ul>
+       */
+      parsePlacement: function(placement) {
+        var autoPlace = PLACEMENT_REGEX.auto.test(placement);
+        if (autoPlace) {
+          placement = placement.replace(PLACEMENT_REGEX.auto, '');
+        }
+
+        placement = placement.split('-');
+
+        placement[0] = placement[0] || 'top';
+        if (!PLACEMENT_REGEX.primary.test(placement[0])) {
+          placement[0] = 'top';
+        }
+
+        placement[1] = placement[1] || 'center';
+        if (!PLACEMENT_REGEX.secondary.test(placement[1])) {
+          placement[1] = 'center';
+        }
+
+        if (autoPlace) {
+          placement[2] = true;
+        } else {
+          placement[2] = false;
+        }
+
+        return placement;
+      },
+
+      /**
+       * Provides coordinates for an element to be positioned relative to
+       * another element.  Passing 'auto' as part of the placement parameter
+       * will enable smart placement - where the element fits. i.e:
+       * 'auto left-top' will check to see if there is enough space to the left
+       * of the hostElem to fit the targetElem, if not place right (same for secondary
+       * top placement).  Available space is calculated using the viewportOffset
+       * function.
+       *
+       * @param {element} hostElem - The element to position against.
+       * @param {element} targetElem - The element to position.
+       * @param {string=} [placement=top] - The placement for the targetElem,
+       *   default is 'top'. 'center' is assumed as secondary placement for
+       *   'top', 'left', 'right', and 'bottom' placements.  Available placements are:
+       *   <ul>
+       *     <li>top</li>
+       *     <li>top-right</li>
+       *     <li>top-left</li>
+       *     <li>bottom</li>
+       *     <li>bottom-left</li>
+       *     <li>bottom-right</li>
+       *     <li>left</li>
+       *     <li>left-top</li>
+       *     <li>left-bottom</li>
+       *     <li>right</li>
+       *     <li>right-top</li>
+       *     <li>right-bottom</li>
+       *   </ul>
+       * @param {boolean=} [appendToBody=false] - Should the top and left values returned
+       *   be calculated from the body element, default is false.
+       *
+       * @returns {object} An object with the following properties:
+       *   <ul>
+       *     <li>**top**: Value for targetElem top.</li>
+       *     <li>**left**: Value for targetElem left.</li>
+       *     <li>**placement**: The resolved placement.</li>
+       *   </ul>
+       */
+      positionElements: function(hostElem, targetElem, placement, appendToBody) {
+        hostElem = this.getRawNode(hostElem);
+        targetElem = this.getRawNode(targetElem);
+
+        // need to read from prop to support tests.
+        var targetWidth = angular.isDefined(targetElem.offsetWidth) ? targetElem.offsetWidth : targetElem.prop('offsetWidth');
+        var targetHeight = angular.isDefined(targetElem.offsetHeight) ? targetElem.offsetHeight : targetElem.prop('offsetHeight');
+
+        placement = this.parsePlacement(placement);
+
+        var hostElemPos = appendToBody ? this.offset(hostElem) : this.position(hostElem);
+        var targetElemPos = {top: 0, left: 0, placement: ''};
+
+        if (placement[2]) {
+          var viewportOffset = this.viewportOffset(hostElem);
+
+          var targetElemStyle = $window.getComputedStyle(targetElem);
+          var adjustedSize = {
+            width: targetWidth + Math.round(Math.abs(this.parseStyle(targetElemStyle.marginLeft) + this.parseStyle(targetElemStyle.marginRight))),
+            height: targetHeight + Math.round(Math.abs(this.parseStyle(targetElemStyle.marginTop) + this.parseStyle(targetElemStyle.marginBottom)))
+          };
+
+          placement[0] = placement[0] === 'top' && adjustedSize.height > viewportOffset.top && adjustedSize.height <= viewportOffset.bottom ? 'bottom' :
+                         placement[0] === 'bottom' && adjustedSize.height > viewportOffset.bottom && adjustedSize.height <= viewportOffset.top ? 'top' :
+                         placement[0] === 'left' && adjustedSize.width > viewportOffset.left && adjustedSize.width <= viewportOffset.right ? 'right' :
+                         placement[0] === 'right' && adjustedSize.width > viewportOffset.right && adjustedSize.width <= viewportOffset.left ? 'left' :
+                         placement[0];
+
+          placement[1] = placement[1] === 'top' && adjustedSize.height - hostElemPos.height > viewportOffset.bottom && adjustedSize.height - hostElemPos.height <= viewportOffset.top ? 'bottom' :
+                         placement[1] === 'bottom' && adjustedSize.height - hostElemPos.height > viewportOffset.top && adjustedSize.height - hostElemPos.height <= viewportOffset.bottom ? 'top' :
+                         placement[1] === 'left' && adjustedSize.width - hostElemPos.width > viewportOffset.right && adjustedSize.width - hostElemPos.width <= viewportOffset.left ? 'right' :
+                         placement[1] === 'right' && adjustedSize.width - hostElemPos.width > viewportOffset.left && adjustedSize.width - hostElemPos.width <= viewportOffset.right ? 'left' :
+                         placement[1];
+
+          if (placement[1] === 'center') {
+            if (PLACEMENT_REGEX.vertical.test(placement[0])) {
+              var xOverflow = hostElemPos.width / 2 - targetWidth / 2;
+              if (viewportOffset.left + xOverflow < 0 && adjustedSize.width - hostElemPos.width <= viewportOffset.right) {
+                placement[1] = 'left';
+              } else if (viewportOffset.right + xOverflow < 0 && adjustedSize.width - hostElemPos.width <= viewportOffset.left) {
+                placement[1] = 'right';
+              }
+            } else {
+              var yOverflow = hostElemPos.height / 2 - adjustedSize.height / 2;
+              if (viewportOffset.top + yOverflow < 0 && adjustedSize.height - hostElemPos.height <= viewportOffset.bottom) {
+                placement[1] = 'top';
+              } else if (viewportOffset.bottom + yOverflow < 0 && adjustedSize.height - hostElemPos.height <= viewportOffset.top) {
+                placement[1] = 'bottom';
+              }
+            }
           }
-        };
+        }
 
-        switch (pos0) {
-          case 'right':
-            targetElPos = {
-              top: shiftHeight[pos1](),
-              left: shiftWidth[pos0]()
-            };
+        switch (placement[0]) {
+          case 'top':
+            targetElemPos.top = hostElemPos.top - targetHeight;
+            break;
+          case 'bottom':
+            targetElemPos.top = hostElemPos.top + hostElemPos.height;
             break;
           case 'left':
-            targetElPos = {
-              top: shiftHeight[pos1](),
-              left: hostElPos.left - targetElWidth
-            };
+            targetElemPos.left = hostElemPos.left - targetWidth;
+            break;
+          case 'right':
+            targetElemPos.left = hostElemPos.left + hostElemPos.width;
+            break;
+        }
+
+        switch (placement[1]) {
+          case 'top':
+            targetElemPos.top = hostElemPos.top;
             break;
           case 'bottom':
-            targetElPos = {
-              top: shiftHeight[pos0](),
-              left: shiftWidth[pos1]()
-            };
+            targetElemPos.top = hostElemPos.top + hostElemPos.height - targetHeight;
             break;
-          default:
-            targetElPos = {
-              top: hostElPos.top - targetElHeight,
-              left: shiftWidth[pos1]()
-            };
+          case 'left':
+            targetElemPos.left = hostElemPos.left;
+            break;
+          case 'right':
+            targetElemPos.left = hostElemPos.left + hostElemPos.width - targetWidth;
+            break;
+          case 'center':
+            if (PLACEMENT_REGEX.vertical.test(placement[0])) {
+              targetElemPos.left = hostElemPos.left + hostElemPos.width / 2 - targetWidth / 2;
+            } else {
+              targetElemPos.top = hostElemPos.top + hostElemPos.height / 2 - targetHeight / 2;
+            }
             break;
         }
 
-        return targetElPos;
-      }
-    };
-  }]);
+        targetElemPos.top = Math.round(targetElemPos.top);
+        targetElemPos.left = Math.round(targetElemPos.left);
+        targetElemPos.placement = placement[1] === 'center' ? placement[0] : placement[0] + '-' + placement[1];
+
+        return targetElemPos;
+      },
 
-/* Deprecated position below */
+      /**
+      * Provides a way for positioning tooltip & dropdown
+      * arrows when using placement options beyond the standard
+      * left, right, top, or bottom.
+      *
+      * @param {element} elem - The tooltip/dropdown element.
+      * @param {string} placement - The placement for the elem.
+      */
+      positionArrow: function(elem, placement) {
+        elem = this.getRawNode(elem);
+
+        var isTooltip = true;
+
+        var innerElem = elem.querySelector('.tooltip-inner');
+        if (!innerElem) {
+          isTooltip = false;
+          innerElem = elem.querySelector('.popover-inner');
+        }
+        if (!innerElem) {
+          return;
+        }
 
-angular.module('ui.bootstrap.position')
+        var arrowElem = isTooltip ? elem.querySelector('.tooltip-arrow') : elem.querySelector('.arrow');
+        if (!arrowElem) {
+          return;
+        }
 
-.value('$positionSuppressWarning', false)
+        placement = this.parsePlacement(placement);
+        if (placement[1] === 'center') {
+          // no adjustment necessary - just reset styles
+          angular.element(arrowElem).css({top: '', bottom: '', right: '', left: '', margin: ''});
+          return;
+        }
 
-.service('$position', ['$log', '$positionSuppressWarning', '$uibPosition', function($log, $positionSuppressWarning, $uibPosition) {
-  if (!$positionSuppressWarning) {
-    $log.warn('$position is now deprecated. Use $uibPosition instead.');
-  }
+        var borderProp = 'border-' + placement[0] + '-width';
+        var borderWidth = $window.getComputedStyle(arrowElem)[borderProp];
 
-  angular.extend(this, $uibPosition);
-}]);
+        var borderRadiusProp = 'border-';
+        if (PLACEMENT_REGEX.vertical.test(placement[0])) {
+          borderRadiusProp += placement[0] + '-' + placement[1];
+        } else {
+          borderRadiusProp += placement[1] + '-' + placement[0];
+        }
+        borderRadiusProp += '-radius';
+        var borderRadius = $window.getComputedStyle(isTooltip ? innerElem : elem)[borderRadiusProp];
 
-angular.module('ui.bootstrap.datepicker', ['ui.bootstrap.dateparser', 'ui.bootstrap.position'])
+        var arrowCss = {
+          top: 'auto',
+          bottom: 'auto',
+          left: 'auto',
+          right: 'auto',
+          margin: 0
+        };
+
+        switch (placement[0]) {
+          case 'top':
+            arrowCss.bottom = isTooltip ? '0' : '-' + borderWidth;
+            break;
+          case 'bottom':
+            arrowCss.top = isTooltip ? '0' : '-' + borderWidth;
+            break;
+          case 'left':
+            arrowCss.right = isTooltip ? '0' : '-' + borderWidth;
+            break;
+          case 'right':
+            arrowCss.left = isTooltip ? '0' : '-' + borderWidth;
+            break;
+        }
+
+        arrowCss[placement[1]] = borderRadius;
+
+        angular.element(arrowElem).css(arrowCss);
+      }
+    };
+  }]);
+
+angular.module('ui.bootstrap.datepicker', ['ui.bootstrap.dateparser', 'ui.bootstrap.isClass', 'ui.bootstrap.position'])
 
 .value('$datepickerSuppressError', false)
 
@@ -1598,49 +1682,56 @@ angular.module('ui.bootstrap.datepicker', ['ui.bootstrap.dateparser', 'ui.bootst
   maxMode: 'year',
   showWeeks: true,
   startingDay: 0,
-  yearRange: 20,
+  yearRows: 4,
+  yearColumns: 5,
   minDate: null,
   maxDate: null,
-  shortcutPropagation: false
+  shortcutPropagation: false,
+  ngModelOptions: {}
 })
 
-.controller('UibDatepickerController', ['$scope', '$attrs', '$parse', '$interpolate', '$log', 'dateFilter', 'uibDatepickerConfig', '$datepickerSuppressError', function($scope, $attrs, $parse, $interpolate, $log, dateFilter, datepickerConfig, $datepickerSuppressError) {
+.controller('UibDatepickerController', ['$scope', '$attrs', '$parse', '$interpolate', '$log', 'dateFilter', 'uibDatepickerConfig', '$datepickerSuppressError', 'uibDateParser',
+  function($scope, $attrs, $parse, $interpolate, $log, dateFilter, datepickerConfig, $datepickerSuppressError, dateParser) {
   var self = this,
-      ngModelCtrl = { $setViewValue: angular.noop }; // nullModelCtrl;
+      ngModelCtrl = { $setViewValue: angular.noop }, // nullModelCtrl;
+      ngModelOptions = {};
 
   // 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];
+  // Interpolated configuration attributes
+  angular.forEach(['formatDay', 'formatMonth', 'formatYear', 'formatDayHeader', 'formatDayTitle', 'formatMonthTitle'], function(key) {
+    self[key] = angular.isDefined($attrs[key]) ? $interpolate($attrs[key])($scope.$parent) : datepickerConfig[key];
+  });
+
+  // Evaled configuration attributes
+  angular.forEach(['showWeeks', 'startingDay', 'yearRows', 'yearColumns', 'shortcutPropagation'], function(key) {
+    self[key] = angular.isDefined($attrs[key]) ? $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;
+      $scope.$parent.$watch($attrs[key], function(value) {
+        self[key] = value ? angular.isDate(value) ? dateParser.fromTimezone(new Date(value), ngModelOptions.timezone) : new Date(dateFilter(value, 'medium')) : null;
         self.refreshView();
       });
     } else {
-      self[key] = datepickerConfig[key] ? new Date(datepickerConfig[key]) : null;
+      self[key] = datepickerConfig[key] ? dateParser.fromTimezone(new Date(datepickerConfig[key]), ngModelOptions.timezone) : 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.$parent.$watch($attrs[key], function(value) {
+        self[key] = $scope[key] = angular.isDefined(value) ? value : $attrs[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];
+      self[key] = $scope[key] = datepickerConfig[key] || null;
     }
   });
 
@@ -1648,10 +1739,10 @@ angular.module('ui.bootstrap.datepicker', ['ui.bootstrap.dateparser', 'ui.bootst
   $scope.uniqueId = 'datepicker-' + $scope.$id + '-' + Math.floor(Math.random() * 10000);
 
   if (angular.isDefined($attrs.initDate)) {
-    this.activeDate = $scope.$parent.$eval($attrs.initDate) || new Date();
+    this.activeDate = dateParser.fromTimezone($scope.$parent.$eval($attrs.initDate), ngModelOptions.timezone) || new Date();
     $scope.$parent.$watch($attrs.initDate, function(initDate) {
       if (initDate && (ngModelCtrl.$isEmpty(ngModelCtrl.$modelValue) || ngModelCtrl.$invalid)) {
-        self.activeDate = initDate;
+        self.activeDate = dateParser.fromTimezone(initDate, ngModelOptions.timezone);
         self.refreshView();
       }
     });
@@ -1659,6 +1750,14 @@ angular.module('ui.bootstrap.datepicker', ['ui.bootstrap.dateparser', 'ui.bootst
     this.activeDate = new Date();
   }
 
+  $scope.disabled = angular.isDefined($attrs.disabled) || false;
+  if (angular.isDefined($attrs.ngDisabled)) {
+    $scope.$parent.$watch($attrs.ngDisabled, function(disabled) {
+      $scope.disabled = disabled;
+      self.refreshView();
+    });
+  }
+
   $scope.isActive = function(dateObject) {
     if (self.compare(dateObject.date, self.activeDate) === 0) {
       $scope.activeDateId = dateObject.uid;
@@ -1669,6 +1768,11 @@ angular.module('ui.bootstrap.datepicker', ['ui.bootstrap.dateparser', 'ui.bootst
 
   this.init = function(ngModelCtrl_) {
     ngModelCtrl = ngModelCtrl_;
+    ngModelOptions = ngModelCtrl_.$options || datepickerConfig.ngModelOptions;
+
+    if (ngModelCtrl.$modelValue) {
+      this.activeDate = ngModelCtrl.$modelValue;
+    }
 
     ngModelCtrl.$render = function() {
       self.render();
@@ -1681,9 +1785,9 @@ angular.module('ui.bootstrap.datepicker', ['ui.bootstrap.dateparser', 'ui.bootst
           isValid = !isNaN(date);
 
       if (isValid) {
-        this.activeDate = date;
+        this.activeDate = dateParser.fromTimezone(date, ngModelOptions.timezone);
       } 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.');
+        $log.error('Datepicker directive: "ng-model" value must be a Date object');
       }
     }
     this.refreshView();
@@ -1691,27 +1795,47 @@ angular.module('ui.bootstrap.datepicker', ['ui.bootstrap.dateparser', 'ui.bootst
 
   this.refreshView = function() {
     if (this.element) {
+      $scope.selectedDt = null;
       this._refreshView();
+      if ($scope.activeDt) {
+        $scope.activeDateId = $scope.activeDt.uid;
+      }
 
       var date = ngModelCtrl.$viewValue ? new Date(ngModelCtrl.$viewValue) : null;
-      ngModelCtrl.$setValidity('dateDisabled', !date || (this.element && !this.isDisabled(date)));
+      date = dateParser.fromTimezone(date, ngModelOptions.timezone);
+      ngModelCtrl.$setValidity('dateDisabled', !date ||
+        this.element && !this.isDisabled(date));
     }
   };
 
   this.createDateObject = function(date, format) {
     var model = ngModelCtrl.$viewValue ? new Date(ngModelCtrl.$viewValue) : null;
-    return {
+    model = dateParser.fromTimezone(model, ngModelOptions.timezone);
+    var dt = {
       date: date,
-      label: dateFilter(date, format),
+      label: dateFilter(date, format.replace(/d!/, 'dd')).replace(/M!/, 'MM'),
       selected: model && this.compare(date, model) === 0,
       disabled: this.isDisabled(date),
       current: this.compare(date, new Date()) === 0,
-      customClass: this.customClass(date)
+      customClass: this.customClass(date) || null
     };
+
+    if (model && this.compare(date, model) === 0) {
+      $scope.selectedDt = dt;
+    }
+
+    if (self.activeDate && this.compare(dt.date, self.activeDate) === 0) {
+      $scope.activeDt = dt;
+    }
+
+    return dt;
   };
 
   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})));
+    return $scope.disabled ||
+      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) {
@@ -1729,8 +1853,9 @@ angular.module('ui.bootstrap.datepicker', ['ui.bootstrap.dateparser', 'ui.bootst
 
   $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);
+      var dt = ngModelCtrl.$viewValue ? dateParser.fromTimezone(new Date(ngModelCtrl.$viewValue), ngModelOptions.timezone) : new Date(0, 0, 0, 0, 0, 0, 0);
       dt.setFullYear(date.getFullYear(), date.getMonth(), date.getDate());
+      dt = dateParser.toTimezone(dt, ngModelOptions.timezone);
       ngModelCtrl.$setViewValue(dt);
       ngModelCtrl.$render();
     } else {
@@ -1749,7 +1874,8 @@ angular.module('ui.bootstrap.datepicker', ['ui.bootstrap.dateparser', 'ui.bootst
   $scope.toggleMode = function(direction) {
     direction = direction || 1;
 
-    if (($scope.datepickerMode === self.maxMode && direction === 1) || ($scope.datepickerMode === self.minMode && direction === -1)) {
+    if ($scope.datepickerMode === self.maxMode && direction === 1 ||
+      $scope.datepickerMode === self.minMode && direction === -1) {
       return;
     }
 
@@ -1769,7 +1895,7 @@ angular.module('ui.bootstrap.datepicker', ['ui.bootstrap.dateparser', 'ui.bootst
   $scope.keydown = function(evt) {
     var key = $scope.keys[evt.which];
 
-    if (!key || evt.shiftKey || evt.altKey) {
+    if (!key || evt.shiftKey || evt.altKey || $scope.disabled) {
       return;
     }
 
@@ -1798,7 +1924,8 @@ angular.module('ui.bootstrap.datepicker', ['ui.bootstrap.dateparser', 'ui.bootst
   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];
+    return month === 1 && year % 4 === 0 &&
+      (year % 100 !== 0 || year % 400 === 0) ? 29 : DAYS_IN_MONTH[month];
   }
 
   this.init = function(ctrl) {
@@ -1825,14 +1952,15 @@ angular.module('ui.bootstrap.datepicker', ['ui.bootstrap.dateparser', 'ui.bootst
     firstDayOfMonth.setFullYear(year, month, 1);
 
     var difference = this.startingDay - firstDayOfMonth.getDay(),
-      numDisplayedFromPreviousMonth = (difference > 0) ? 7 - difference : - difference,
+      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
+    // 42 is the number of days on a six-week calendar
     var days = this.getDates(firstDate, 42);
     for (var i = 0; i < 42; i ++) {
       days[i] = angular.extend(this.createDateObject(days[i], this.formatDay), {
@@ -1864,7 +1992,11 @@ angular.module('ui.bootstrap.datepicker', ['ui.bootstrap.dateparser', 'ui.bootst
   };
 
   this.compare = function(date1, date2) {
-    return (new Date(date1.getFullYear(), date1.getMonth(), date1.getDate()) - new Date(date2.getFullYear(), date2.getMonth(), date2.getDate()));
+    var _date1 = new Date(date1.getFullYear(), date1.getMonth(), date1.getDate());
+    var _date2 = new Date(date2.getFullYear(), date2.getMonth(), date2.getDate());
+    _date1.setFullYear(date1.getFullYear());
+    _date2.setFullYear(date2.getFullYear());
+    return _date1 - _date2;
   };
 
   function getISO8601WeekNumber(date) {
@@ -1880,11 +2012,11 @@ angular.module('ui.bootstrap.datepicker', ['ui.bootstrap.dateparser', 'ui.bootst
     var date = this.activeDate.getDate();
 
     if (key === 'left') {
-      date = date - 1;   // up
+      date = date - 1;
     } else if (key === 'up') {
-      date = date - 7;   // down
+      date = date - 7;
     } else if (key === 'right') {
-      date = date + 1;   // down
+      date = date + 1;
     } else if (key === 'down') {
       date = date + 7;
     } else if (key === 'pageup' || key === 'pagedown') {
@@ -1927,18 +2059,22 @@ angular.module('ui.bootstrap.datepicker', ['ui.bootstrap.dateparser', 'ui.bootst
   };
 
   this.compare = function(date1, date2) {
-    return new Date(date1.getFullYear(), date1.getMonth()) - new Date(date2.getFullYear(), date2.getMonth());
+    var _date1 = new Date(date1.getFullYear(), date1.getMonth());
+    var _date2 = new Date(date2.getFullYear(), date2.getMonth());
+    _date1.setFullYear(date1.getFullYear());
+    _date2.setFullYear(date2.getFullYear());
+    return _date1 - _date2;
   };
 
   this.handleKeyDown = function(key, evt) {
     var date = this.activeDate.getMonth();
 
     if (key === 'left') {
-      date = date - 1;   // up
+      date = date - 1;
     } else if (key === 'up') {
-      date = date - 3;   // down
+      date = date - 3;
     } else if (key === 'right') {
-      date = date + 1;   // down
+      date = date + 1;
     } else if (key === 'down') {
       date = date + 3;
     } else if (key === 'pageup' || key === 'pagedown') {
@@ -1954,7 +2090,7 @@ angular.module('ui.bootstrap.datepicker', ['ui.bootstrap.dateparser', 'ui.bootst
 }])
 
 .controller('UibYearpickerController', ['$scope', '$element', 'dateFilter', function(scope, $element, dateFilter) {
-  var range;
+  var columns, range;
   this.element = $element;
 
   function getStartingYear(year) {
@@ -1962,7 +2098,8 @@ angular.module('ui.bootstrap.datepicker', ['ui.bootstrap.dateparser', 'ui.bootst
   }
 
   this.yearpickerInit = function() {
-    range = this.yearRange;
+    columns = this.yearColumns;
+    range = this.yearRows * columns;
     this.step = { years: range };
   };
 
@@ -1978,7 +2115,8 @@ angular.module('ui.bootstrap.datepicker', ['ui.bootstrap.dateparser', 'ui.bootst
     }
 
     scope.title = [years[0].label, years[range - 1].label].join(' - ');
-    scope.rows = this.split(years, 5);
+    scope.rows = this.split(years, columns);
+    scope.columns = columns;
   };
 
   this.compare = function(date1, date2) {
@@ -1989,15 +2127,15 @@ angular.module('ui.bootstrap.datepicker', ['ui.bootstrap.dateparser', 'ui.bootst
     var date = this.activeDate.getFullYear();
 
     if (key === 'left') {
-      date = date - 1;   // up
+      date = date - 1;
     } else if (key === 'up') {
-      date = date - 5;   // down
+      date = date - columns;
     } else if (key === 'right') {
-      date = date + 1;   // down
+      date = date + 1;
     } else if (key === 'down') {
-      date = date + 5;
+      date = date + columns;
     } else if (key === 'pageup' || key === 'pagedown') {
-      date += (key === 'pageup' ? - 1 : 1) * this.step.years;
+      date += (key === 'pageup' ? - 1 : 1) * range;
     } else if (key === 'home') {
       date = getStartingYear(this.activeDate.getFullYear());
     } else if (key === 'end') {
@@ -2011,7 +2149,7 @@ angular.module('ui.bootstrap.datepicker', ['ui.bootstrap.dateparser', 'ui.bootst
   return {
     replace: true,
     templateUrl: function(element, attrs) {
-      return attrs.templateUrl || 'template/datepicker/datepicker.html';
+      return attrs.templateUrl || 'uib/template/datepicker/datepicker.html';
     },
     scope: {
       datepickerMode: '=?',
@@ -2034,12 +2172,12 @@ angular.module('ui.bootstrap.datepicker', ['ui.bootstrap.dateparser', 'ui.bootst
   return {
     replace: true,
     templateUrl: function(element, attrs) {
-      return attrs.templateUrl || 'template/datepicker/day.html';
+      return attrs.templateUrl || 'uib/template/datepicker/day.html';
     },
-    require: ['^?uibDatepicker', 'uibDaypicker', '^?datepicker'],
+    require: ['^uibDatepicker', 'uibDaypicker'],
     controller: 'UibDaypickerController',
     link: function(scope, element, attrs, ctrls) {
-      var datepickerCtrl = ctrls[0] || ctrls[2],
+      var datepickerCtrl = ctrls[0],
         daypickerCtrl = ctrls[1];
 
       daypickerCtrl.init(datepickerCtrl);
@@ -2051,12 +2189,12 @@ angular.module('ui.bootstrap.datepicker', ['ui.bootstrap.dateparser', 'ui.bootst
   return {
     replace: true,
     templateUrl: function(element, attrs) {
-      return attrs.templateUrl || 'template/datepicker/month.html';
+      return attrs.templateUrl || 'uib/template/datepicker/month.html';
     },
-    require: ['^?uibDatepicker', 'uibMonthpicker', '^?datepicker'],
+    require: ['^uibDatepicker', 'uibMonthpicker'],
     controller: 'UibMonthpickerController',
     link: function(scope, element, attrs, ctrls) {
-      var datepickerCtrl = ctrls[0] || ctrls[2],
+      var datepickerCtrl = ctrls[0],
         monthpickerCtrl = ctrls[1];
 
       monthpickerCtrl.init(datepickerCtrl);
@@ -2068,12 +2206,12 @@ angular.module('ui.bootstrap.datepicker', ['ui.bootstrap.dateparser', 'ui.bootst
   return {
     replace: true,
     templateUrl: function(element, attrs) {
-      return attrs.templateUrl || 'template/datepicker/year.html';
+      return attrs.templateUrl || 'uib/template/datepicker/year.html';
     },
-    require: ['^?uibDatepicker', 'uibYearpicker', '^?datepicker'],
+    require: ['^uibDatepicker', 'uibYearpicker'],
     controller: 'UibYearpickerController',
     link: function(scope, element, attrs, ctrls) {
-      var ctrl = ctrls[0] || ctrls[2];
+      var ctrl = ctrls[0];
       angular.extend(ctrl, ctrls[1]);
       ctrl.yearpickerInit();
 
@@ -2084,8 +2222,8 @@ angular.module('ui.bootstrap.datepicker', ['ui.bootstrap.dateparser', 'ui.bootst
 
 .constant('uibDatepickerPopupConfig', {
   datepickerPopup: 'yyyy-MM-dd',
-  datepickerPopupTemplateUrl: 'template/datepicker/popup.html',
-  datepickerTemplateUrl: 'template/datepicker/datepicker.html',
+  datepickerPopupTemplateUrl: 'uib/template/datepicker/popup.html',
+  datepickerTemplateUrl: 'uib/template/datepicker/datepicker.html',
   html5Types: {
     date: 'yyyy-MM-dd',
     'datetime-local': 'yyyy-MM-ddTHH:mm:ss.sss',
@@ -2097,27 +2235,30 @@ angular.module('ui.bootstrap.datepicker', ['ui.bootstrap.dateparser', 'ui.bootst
   closeOnDateSelection: true,
   appendToBody: false,
   showButtonBar: true,
-  onOpenFocus: true
+  onOpenFocus: true,
+  altInputFormats: []
 })
 
-.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) {
+.controller('UibDatepickerPopupController', ['$scope', '$element', '$attrs', '$compile', '$parse', '$document', '$rootScope', '$uibPosition', 'dateFilter', 'uibDateParser', 'uibDatepickerPopupConfig', '$timeout', 'uibDatepickerConfig',
+function(scope, element, attrs, $compile, $parse, $document, $rootScope, $position, dateFilter, dateParser, datepickerPopupConfig, $timeout, datepickerConfig) {
   var self = this;
   var cache = {},
     isHtml5DateInput = false;
   var dateFormat, closeOnDateSelection, appendToBody, onOpenFocus,
     datepickerPopupTemplateUrl, datepickerTemplateUrl, popupEl, datepickerEl,
-    ngModel, $popup;
+    ngModel, ngModelOptions, $popup, altInputFormats;
 
   scope.watchData = {};
 
   this.init = function(_ngModel_) {
     ngModel = _ngModel_;
+    ngModelOptions = _ngModel_.$options || datepickerConfig.ngModelOptions;
     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;
+    altInputFormats = angular.isDefined(attrs.altInputFormats) ? scope.$parent.$eval(attrs.altInputFormats) : datepickerPopupConfig.altInputFormats;
 
     scope.showButtonBar = angular.isDefined(attrs.showButtonBar) ? scope.$parent.$eval(attrs.showButtonBar) : datepickerPopupConfig.showButtonBar;
 
@@ -2125,7 +2266,7 @@ function(scope, element, attrs, $compile, $parse, $document, $rootScope, $positi
       dateFormat = datepickerPopupConfig.html5Types[attrs.type];
       isHtml5DateInput = true;
     } else {
-      dateFormat = attrs.datepickerPopup || attrs.uibDatepickerPopup || datepickerPopupConfig.datepickerPopup;
+      dateFormat = attrs.uibDatepickerPopup || datepickerPopupConfig.datepickerPopup;
       attrs.$observe('uibDatepickerPopup', function(value, oldValue) {
           var newDateFormat = value || datepickerPopupConfig.datepickerPopup;
           // Invalidate the $modelValue to ensure that formatters re-run
@@ -2145,14 +2286,17 @@ function(scope, element, attrs, $compile, $parse, $document, $rootScope, $positi
       throw new Error('uibDatepickerPopup must have a date format specified.');
     }
 
-    if (isHtml5DateInput && attrs.datepickerPopup) {
+    if (isHtml5DateInput && attrs.uibDatepickerPopup) {
       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>');
+    scope.ngModelOptions = angular.copy(ngModelOptions);
+    scope.ngModelOptions.timezone = null;
     popupEl.attr({
       'ng-model': 'date',
+      'ng-model-options': 'ngModelOptions',
       'ng-change': 'dateSelection(date)',
       'template-url': datepickerPopupTemplateUrl
     });
@@ -2171,7 +2315,7 @@ function(scope, element, attrs, $compile, $parse, $document, $rootScope, $positi
     if (attrs.datepickerOptions) {
       var options = scope.$parent.$eval(attrs.datepickerOptions);
       if (options && options.initDate) {
-        scope.initDate = options.initDate;
+        scope.initDate = dateParser.fromTimezone(options.initDate, ngModelOptions.timezone);
         datepickerEl.attr('init-date', 'initDate');
         delete options.initDate;
       }
@@ -2180,35 +2324,63 @@ function(scope, element, attrs, $compile, $parse, $document, $rootScope, $positi
       });
     }
 
-    angular.forEach(['minMode', 'maxMode', 'minDate', 'maxDate', 'datepickerMode', 'initDate', 'shortcutPropagation'], function(key) {
+    angular.forEach(['minMode', 'maxMode'], function(key) {
       if (attrs[key]) {
-        var getAttribute = $parse(attrs[key]);
-        scope.$parent.$watch(getAttribute, function(value) {
+        scope.$parent.$watch(function() { return attrs[key]; }, function(value) {
           scope.watchData[key] = value;
-          if (key === 'minDate' || key === 'maxDate') {
-            cache[key] = new Date(value);
-          }
         });
         datepickerEl.attr(cameltoDash(key), 'watchData.' + key);
+      }
+    });
+
+    angular.forEach(['datepickerMode', 'shortcutPropagation'], function(key) {
+      if (attrs[key]) {
+        var getAttribute = $parse(attrs[key]);
+        var propConfig = {
+          get: function() {
+            return getAttribute(scope.$parent);
+          }
+        };
+
+        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);
-            }
-          });
+          propConfig.set = function(v) {
+            setAttribute(scope.$parent, v);
+          };
         }
+
+        Object.defineProperty(scope.watchData, key, propConfig);
+      }
+    });
+
+    angular.forEach(['minDate', 'maxDate', 'initDate'], function(key) {
+      if (attrs[key]) {
+        var getAttribute = $parse(attrs[key]);
+
+        scope.$parent.$watch(getAttribute, function(value) {
+          if (key === 'minDate' || key === 'maxDate') {
+            cache[key] = angular.isDate(value) ? dateParser.fromTimezone(new Date(value), ngModelOptions.timezone) : new Date(dateFilter(value, 'medium'));
+          }
+
+          scope.watchData[key] = cache[key] || dateParser.fromTimezone(new Date(value), ngModelOptions.timezone);
+        });
+
+        datepickerEl.attr(cameltoDash(key), 'watchData.' + key);
       }
     });
+
     if (attrs.dateDisabled) {
       datepickerEl.attr('date-disabled', 'dateDisabled({ date: date, mode: mode })');
     }
 
-    if (attrs.showWeeks) {
-      datepickerEl.attr('show-weeks', attrs.showWeeks);
-    }
+    angular.forEach(['formatDay', 'formatMonth', 'formatYear', 'formatDayHeader', 'formatDayTitle', 'formatMonthTitle', 'showWeeks', 'startingDay', 'yearRows', 'yearColumns'], function(key) {
+      if (angular.isDefined(attrs[key])) {
+        datepickerEl.attr(cameltoDash(key), attrs[key]);
+      }
+    });
 
     if (attrs.customClass) {
       datepickerEl.attr('custom-class', 'customClass({ date: date, mode: mode })');
@@ -2220,19 +2392,26 @@ function(scope, element, attrs, $compile, $parse, $document, $rootScope, $positi
       ngModel.$validators.date = validator;
       ngModel.$parsers.unshift(parseDate);
       ngModel.$formatters.push(function(value) {
-        scope.date = value;
-        return ngModel.$isEmpty(value) ? value : dateFilter(value, dateFormat);
+        if (ngModel.$isEmpty(value)) {
+          scope.date = value;
+          return value;
+        }
+        scope.date = dateParser.fromTimezone(value, ngModelOptions.timezone);
+        dateFormat = dateFormat.replace(/M!/, 'MM')
+          .replace(/d!/, 'dd');
+
+        return dateFilter(scope.date, dateFormat);
       });
     } else {
       ngModel.$formatters.push(function(value) {
-        scope.date = value;
+        scope.date = dateParser.fromTimezone(value, ngModelOptions.timezone);
         return value;
       });
     }
 
     // Detect changes in the view from the text box
     ngModel.$viewChangeListeners.push(function() {
-      scope.date = dateParser.parse(ngModel.$viewValue, dateFormat, scope.date);
+      scope.date = parseDateString(ngModel.$viewValue);
     });
 
     element.bind('keydown', inputKeydownBind);
@@ -2271,12 +2450,12 @@ function(scope, element, attrs, $compile, $parse, $document, $rootScope, $positi
       date = new Date();
     }
 
-    return ((scope.watchData.minDate && scope.compare(date, cache.minDate) < 0) ||
-      (scope.watchData.maxDate && scope.compare(date, cache.maxDate) > 0));
+    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()));
+    return new Date(date1.getFullYear(), date1.getMonth(), date1.getDate()) - new Date(date2.getFullYear(), date2.getMonth(), date2.getDate());
   };
 
   // Inner change
@@ -2296,6 +2475,7 @@ function(scope, element, attrs, $compile, $parse, $document, $rootScope, $positi
 
   scope.keydown = function(evt) {
     if (evt.which === 27) {
+      evt.stopPropagation();
       scope.isOpen = false;
       element[0].focus();
     }
@@ -2319,17 +2499,28 @@ function(scope, element, attrs, $compile, $parse, $document, $rootScope, $positi
     element[0].focus();
   };
 
+  scope.disabled = angular.isDefined(attrs.disabled) || false;
+  if (attrs.ngDisabled) {
+    scope.$parent.$watch($parse(attrs.ngDisabled), function(disabled) {
+      scope.disabled = disabled;
+    });
+  }
+
   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');
+      if (!scope.disabled) {
+        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);
+        $timeout(function() {
+          if (onOpenFocus) {
+            scope.$broadcast('uib:datepicker.focus');
+          }
+          $document.bind('click', documentClickBind);
+        }, 0, false);
+      } else {
+        scope.isOpen = false;
+      }
     } else {
       $document.unbind('click', documentClickBind);
     }
@@ -2339,6 +2530,19 @@ function(scope, element, attrs, $compile, $parse, $document, $rootScope, $positi
     return string.replace(/([A-Z])/g, function($1) { return '-' + $1.toLowerCase(); });
   }
 
+  function parseDateString(viewValue) {
+    var date = dateParser.parse(viewValue, dateFormat, scope.date);
+    if (isNaN(date)) {
+      for (var i = 0; i < altInputFormats.length; i++) {
+        date = dateParser.parse(viewValue, altInputFormats[i], scope.date);
+        if (!isNaN(date)) {
+          return date;
+        }
+      }
+    }
+    return date;
+  }
+
   function parseDate(viewValue) {
     if (angular.isNumber(viewValue)) {
       // presumably timestamp to date object
@@ -2347,18 +2551,20 @@ function(scope, element, attrs, $compile, $parse, $document, $rootScope, $positi
 
     if (!viewValue) {
       return null;
-    } else if (angular.isDate(viewValue) && !isNaN(viewValue)) {
+    }
+
+    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;
+    }
+
+    if (angular.isString(viewValue)) {
+      var date = parseDateString(viewValue);
+      if (!isNaN(date)) {
+        return dateParser.toTimezone(date, ngModelOptions.timezone);
       }
-    } else {
-      return undefined;
     }
+
+    return ngModel.$options && ngModel.$options.allowInvalid ? viewValue : undefined;
   }
 
   function validator(modelValue, viewValue) {
@@ -2371,19 +2577,27 @@ function(scope, element, attrs, $compile, $parse, $document, $rootScope, $positi
     if (angular.isNumber(value)) {
       value = new Date(value);
     }
+
     if (!value) {
       return true;
-    } else if (angular.isDate(value) && !isNaN(value)) {
+    }
+
+    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;
     }
+
+    if (angular.isString(value)) {
+      return !isNaN(parseDateString(viewValue));
+    }
+
+    return false;
   }
 
   function documentClickBind(event) {
+    if (!scope.isOpen && scope.disabled) {
+      return;
+    }
+
     var popup = $popup[0];
     var dpContainsTarget = element[0].contains(event.target);
     // The popup node may not be an element node
@@ -2440,338 +2654,37 @@ function(scope, element, attrs, $compile, $parse, $document, $rootScope, $positi
     replace: true,
     transclude: true,
     templateUrl: function(element, attrs) {
-      return attrs.templateUrl || 'template/datepicker/popup.html';
+      return attrs.templateUrl || 'uib/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.module('ui.bootstrap.debounce', [])
+/**
+ * A helper, internal service that debounces a function
+ */
+  .factory('$$debounce', ['$timeout', function($timeout) {
+    return function(callback, debounceTime) {
+      var timeoutPromise;
 
-  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];
+      return function() {
+        var self = this;
+        var args = Array.prototype.slice.call(arguments);
+        if (timeoutPromise) {
+          $timeout.cancel(timeoutPromise);
         }
-      });
-    } 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)
+        timeoutPromise = $timeout(function() {
+          callback.apply(self, args);
+        }, debounceTime);
+      };
     };
-  };
-
-  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', {
+  appendToOpenClass: 'uib-dropdown-open',
   openClass: 'open'
 })
 
@@ -2780,8 +2693,8 @@ angular.module('ui.bootstrap.dropdown', ['ui.bootstrap.position'])
 
   this.open = function(dropdownScope) {
     if (!openScope) {
-      $document.bind('click', closeDropdown);
-      $document.bind('keydown', keybindFilter);
+      $document.on('click', closeDropdown);
+      $document.on('keydown', keybindFilter);
     }
 
     if (openScope && openScope !== dropdownScope) {
@@ -2794,8 +2707,8 @@ angular.module('ui.bootstrap.dropdown', ['ui.bootstrap.position'])
   this.close = function(dropdownScope) {
     if (openScope === dropdownScope) {
       openScope = null;
-      $document.unbind('click', closeDropdown);
-      $document.unbind('keydown', keybindFilter);
+      $document.off('click', closeDropdown);
+      $document.off('keydown', keybindFilter);
     }
   };
 
@@ -2804,7 +2717,9 @@ angular.module('ui.bootstrap.dropdown', ['ui.bootstrap.position'])
     // unbound this event handler. So check openScope before proceeding.
     if (!openScope) { return; }
 
-    if (evt && openScope.getAutoClose() === 'disabled')  { return ; }
+    if (evt && openScope.getAutoClose() === 'disabled') { return; }
+
+    if (evt && evt.which === 3) { return; }
 
     var toggleElement = openScope.getToggleElement();
     if (evt && toggleElement && toggleElement[0].contains(evt.target)) {
@@ -2828,7 +2743,7 @@ angular.module('ui.bootstrap.dropdown', ['ui.bootstrap.position'])
     if (evt.which === 27) {
       openScope.focusToggleElement();
       closeDropdown();
-    } else if (openScope.isKeynavEnabled() && /(38|40)/.test(evt.which) && openScope.isOpen) {
+    } else if (openScope.isKeynavEnabled() && [38, 40].indexOf(evt.which) !== -1 && openScope.isOpen) {
       evt.preventDefault();
       evt.stopPropagation();
       openScope.focusDropdownEntry(evt.which);
@@ -2840,14 +2755,16 @@ angular.module('ui.bootstrap.dropdown', ['ui.bootstrap.position'])
   var self = this,
     scope = $scope.$new(), // create a child scope so we are not polluting original one
     templateScope,
+    appendToOpenClass = dropdownConfig.appendToOpenClass,
     openClass = dropdownConfig.openClass,
     getIsOpen,
     setIsOpen = angular.noop,
     toggleInvoker = $attrs.onToggle ? $parse($attrs.onToggle) : angular.noop,
     appendToBody = false,
-    keynavEnabled =false,
-    selectedOption = null;
-
+    appendTo = null,
+    keynavEnabled = false,
+    selectedOption = null,
+    body = $document.find('body');
 
   $element.addClass('dropdown');
 
@@ -2861,11 +2778,22 @@ angular.module('ui.bootstrap.dropdown', ['ui.bootstrap.position'])
       });
     }
 
+    if (angular.isDefined($attrs.dropdownAppendTo)) {
+      var appendToEl = $parse($attrs.dropdownAppendTo)(scope);
+      if (appendToEl) {
+        appendTo = angular.element(appendToEl);
+      }
+    }
+
     appendToBody = angular.isDefined($attrs.dropdownAppendToBody);
-    keynavEnabled = angular.isDefined($attrs.uibKeyboardNav);
+    keynavEnabled = angular.isDefined($attrs.keyboardNav);
 
-    if (appendToBody && self.dropdownMenu) {
-      $document.find('body').append(self.dropdownMenu);
+    if (appendToBody && !appendTo) {
+      appendTo = body;
+    }
+
+    if (appendTo && self.dropdownMenu) {
+      appendTo.append(self.dropdownMenu);
       $element.on('$destroy', function handleDestroyEvent() {
         self.dropdownMenu.remove();
       });
@@ -2899,21 +2827,21 @@ angular.module('ui.bootstrap.dropdown', ['ui.bootstrap.position'])
 
   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'));
+      angular.element(self.dropdownMenu).find('a') :
+      $element.find('ul').eq(0).find('a');
 
     switch (keyCode) {
-      case (40): {
+      case 40: {
         if (!angular.isNumber(self.selectedOption)) {
           self.selectedOption = 0;
         } else {
-          self.selectedOption = (self.selectedOption === elems.length - 1 ?
+          self.selectedOption = self.selectedOption === elems.length - 1 ?
             self.selectedOption :
-            self.selectedOption + 1);
+            self.selectedOption + 1;
         }
         break;
       }
-      case (38): {
+      case 38: {
         if (!angular.isNumber(self.selectedOption)) {
           self.selectedOption = elems.length - 1;
         } else {
@@ -2937,26 +2865,47 @@ angular.module('ui.bootstrap.dropdown', ['ui.bootstrap.position'])
   };
 
   scope.$watch('isOpen', function(isOpen, wasOpen) {
-    if (appendToBody && self.dropdownMenu) {
-      var pos = $position.positionElements($element, self.dropdownMenu, 'bottom-left', true);
-      var css = {
+    if (appendTo && self.dropdownMenu) {
+      var pos = $position.positionElements($element, self.dropdownMenu, 'bottom-left', true),
+        css,
+        rightalign;
+
+      css = {
         top: pos.top + 'px',
         display: isOpen ? 'block' : 'none'
       };
 
-      var rightalign = self.dropdownMenu.hasClass('dropdown-menu-right');
+      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';
+        css.right = window.innerWidth -
+          (pos.left + $element.prop('offsetWidth')) + 'px';
+      }
+
+      // Need to adjust our positioning to be relative to the appendTo container
+      // if it's not the body element
+      if (!appendToBody) {
+        var appendOffset = $position.offset(appendTo);
+
+        css.top = pos.top - appendOffset.top + 'px';
+
+        if (!rightalign) {
+          css.left = pos.left - appendOffset.left + 'px';
+        } else {
+          css.right = window.innerWidth -
+            (pos.left - appendOffset.left + $element.prop('offsetWidth')) + 'px';
+        }
       }
 
       self.dropdownMenu.css(css);
     }
 
-    $animate[isOpen ? 'addClass' : 'removeClass']($element, openClass).then(function() {
+    var openContainer = appendTo ? appendTo : $element;
+
+    $animate[isOpen ? 'addClass' : 'removeClass'](openContainer, appendTo ? appendToOpenClass : openClass).then(function() {
       if (angular.isDefined(isOpen) && isOpen !== wasOpen) {
         toggleInvoker($scope, { open: !!isOpen });
       }
@@ -3000,11 +2949,6 @@ angular.module('ui.bootstrap.dropdown', ['ui.bootstrap.position'])
       scope.isOpen = false;
     }
   });
-
-  var offDestroy = $scope.$on('$destroy', function() {
-    scope.$destroy();
-  });
-  scope.$on('$destroy', offDestroy);
 }])
 
 .directive('uibDropdown', function() {
@@ -3018,7 +2962,7 @@ angular.module('ui.bootstrap.dropdown', ['ui.bootstrap.position'])
 
 .directive('uibDropdownMenu', function() {
   return {
-    restrict: 'AC',
+    restrict: 'A',
     require: '?^uibDropdown',
     link: function(scope, element, attrs, dropdownCtrl) {
       if (!dropdownCtrl || angular.isDefined(attrs.dropdownNested)) {
@@ -3039,45 +2983,6 @@ angular.module('ui.bootstrap.dropdown', ['ui.bootstrap.position'])
   };
 })
 
-.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',
@@ -3115,319 +3020,6 @@ angular.module('ui.bootstrap.dropdown', ['ui.bootstrap.position'])
   };
 });
 
-/* 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
@@ -3447,7 +3039,7 @@ angular.module('ui.bootstrap.stackedMap', [])
           },
           get: function(key) {
             for (var i = 0; i < stack.length; i++) {
-              if (key == stack[i].key) {
+              if (key === stack[i].key) {
                 return stack[i];
               }
             }
@@ -3465,7 +3057,7 @@ angular.module('ui.bootstrap.stackedMap', [])
           remove: function(key) {
             var idx = -1;
             for (var i = 0; i < stack.length; i++) {
-              if (key == stack[i].key) {
+              if (key === stack[i].key) {
                 idx = i;
                 break;
               }
@@ -3539,20 +3131,59 @@ angular.module('ui.bootstrap.modal', ['ui.bootstrap.stackedMap'])
   })
 
 /**
- * A helper directive for the $modal service. It creates a backdrop element.
+ * Pluggable resolve mechanism for the modal resolve resolution
+ * Supports UI Router's $resolve service
  */
-  .directive('uibModalBackdrop', [
-           '$animate', '$injector', '$uibModalStack',
-  function($animate ,  $injector,   $modalStack) {
-    var $animateCss = null;
+  .provider('$uibResolve', function() {
+    var resolve = this;
+    this.resolver = null;
 
-    if ($injector.has('$animateCss')) {
-      $animateCss = $injector.get('$animateCss');
-    }
+    this.setResolver = function(resolver) {
+      this.resolver = resolver;
+    };
+
+    this.$get = ['$injector', '$q', function($injector, $q) {
+      var resolver = resolve.resolver ? $injector.get(resolve.resolver) : null;
+      return {
+        resolve: function(invocables, locals, parent, self) {
+          if (resolver) {
+            return resolver.resolve(invocables, locals, parent, self);
+          }
+
+          var promises = [];
+
+          angular.forEach(invocables, function(value) {
+            if (angular.isFunction(value) || angular.isArray(value)) {
+              promises.push($q.resolve($injector.invoke(value)));
+            } else if (angular.isString(value)) {
+              promises.push($q.resolve($injector.get(value)));
+            } else {
+              promises.push($q.resolve(value));
+            }
+          });
+
+          return $q.all(promises).then(function(resolves) {
+            var resolveObj = {};
+            var resolveIter = 0;
+            angular.forEach(invocables, function(value, key) {
+              resolveObj[key] = resolves[resolveIter++];
+            });
+
+            return resolveObj;
+          });
+        }
+      };
+    }];
+  })
 
+/**
+ * A helper directive for the $modal service. It creates a backdrop element.
+ */
+  .directive('uibModalBackdrop', ['$animateCss', '$injector', '$uibModalStack',
+  function($animateCss, $injector, $modalStack) {
     return {
       replace: true,
-      templateUrl: 'template/modal/backdrop.html',
+      templateUrl: 'uib/template/modal/backdrop.html',
       compile: function(tElement, tAttrs) {
         tElement.addClass(tAttrs.backdropClass);
         return linkFn;
@@ -3560,41 +3191,27 @@ angular.module('ui.bootstrap.modal', ['ui.bootstrap.stackedMap'])
     };
 
     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);
-        }
+        $animateCss(element, {
+          addClass: attrs.modalInClass
+        }).start();
 
         scope.$on($modalStack.NOW_CLOSING_EVENT, function(e, setIsAsync) {
           var done = setIsAsync();
-          if ($animateCss) {
+          if (scope.modalOptions.animation) {
             $animateCss(element, {
               removeClass: attrs.modalInClass
             }).start().then(done);
           } else {
-            $animate.removeClass(element, attrs.modalInClass).then(done);
+            done();
           }
         });
       }
     }
   }])
 
-  .directive('uibModalWindow', [
-           '$uibModalStack', '$q', '$animate', '$injector',
-  function($modalStack ,  $q ,  $animate,   $injector) {
-    var $animateCss = null;
-
-    if ($injector.has('$animateCss')) {
-      $animateCss = $injector.get('$animateCss');
-    }
-
+  .directive('uibModalWindow', ['$uibModalStack', '$q', '$animate', '$animateCss', '$document',
+  function($modalStack, $q, $animate, $animateCss, $document) {
     return {
       scope: {
         index: '@'
@@ -3602,7 +3219,7 @@ angular.module('ui.bootstrap.modal', ['ui.bootstrap.stackedMap'])
       replace: true,
       transclude: true,
       templateUrl: function(tElement, tAttrs) {
-        return tAttrs.templateUrl || 'template/modal/window.html';
+        return tAttrs.templateUrl || 'uib/template/modal/window.html';
       },
       link: function(scope, element, attrs) {
         element.addClass(attrs.windowClass || '');
@@ -3611,7 +3228,9 @@ angular.module('ui.bootstrap.modal', ['ui.bootstrap.stackedMap'])
 
         scope.close = function(evt) {
           var modal = $modalStack.getTop();
-          if (modal && modal.value.backdrop && modal.value.backdrop !== 'static' && (evt.target === evt.currentTarget)) {
+          if (modal && modal.value.backdrop &&
+            modal.value.backdrop !== 'static' &&
+            evt.target === evt.currentTarget) {
             evt.preventDefault();
             evt.stopPropagation();
             $modalStack.dismiss(modal.key, 'backdrop click');
@@ -3631,7 +3250,7 @@ angular.module('ui.bootstrap.modal', ['ui.bootstrap.stackedMap'])
         // 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') {
+          if (value === 'true') {
             modalRenderDeferObj.resolve();
           }
         });
@@ -3640,13 +3259,9 @@ angular.module('ui.bootstrap.modal', ['ui.bootstrap.stackedMap'])
           var animationPromise = null;
 
           if (attrs.modalInClass) {
-            if ($animateCss) {
-              animationPromise = $animateCss(element, {
-                addClass: attrs.modalInClass
-              }).start();
-            } else {
-              animationPromise = $animate.addClass(element, attrs.modalInClass);
-            }
+            animationPromise = $animateCss(element, {
+              addClass: attrs.modalInClass
+            }).start();
 
             scope.$on($modalStack.NOW_CLOSING_EVENT, function(e, setIsAsync) {
               var done = setIsAsync();
@@ -3662,19 +3277,25 @@ angular.module('ui.bootstrap.modal', ['ui.bootstrap.stackedMap'])

           $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 something within the freshly-opened modal already has focus (perhaps via a
+             * directive that causes focus). then no need to try and focus anything.
              */
-            if (inputWithAutofocus) {
-              inputWithAutofocus.focus();
-            } else {
-              element[0].focus();
+            if (!($document[0].activeElement && element[0].contains($document[0].activeElement))) {
+              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();
+              }
             }
           });
 
@@ -3700,32 +3321,18 @@ angular.module('ui.bootstrap.modal', ['ui.bootstrap.stackedMap'])
 
   .directive('uibModalTransclude', function() {
     return {
-      link: function($scope, $element, $attrs, controller, $transclude) {
-        $transclude($scope.$parent, function(clone) {
-          $element.empty();
-          $element.append(clone);
+      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');
-      }
-
+  .factory('$uibModalStack', ['$animate', '$animateCss', '$document',
+    '$compile', '$rootScope', '$q', '$$multiMap', '$$stackedMap',
+    function($animate, $animateCss, $document, $compile, $rootScope, $q, $$multiMap, $$stackedMap) {
       var OPENED_MODAL_CLASS = 'modal-open';
 
       var backdropDomEl, backdropScope;
@@ -3760,8 +3367,8 @@ angular.module('ui.bootstrap.modal', ['ui.bootstrap.stackedMap'])
       });
 
       function removeModalWindow(modalInstance, elementToReceiveFocus) {
-        var body = $document.find('body').eq(0);
         var modalWindow = openedWindows.get(modalInstance).value;
+        var appendToElement = modalWindow.appendTo;
 
         //clean up the stack
         openedWindows.remove(modalInstance);
@@ -3769,7 +3376,7 @@ angular.module('ui.bootstrap.modal', ['ui.bootstrap.stackedMap'])
         removeAfterAnimate(modalWindow.modalDomEl, modalWindow.modalScope, function() {
           var modalBodyClass = modalWindow.openedClass || OPENED_MODAL_CLASS;
           openedClasses.remove(modalBodyClass, modalInstance);
-          body.toggleClass(modalBodyClass, openedClasses.hasKey(modalBodyClass));
+          appendToElement.toggleClass(modalBodyClass, openedClasses.hasKey(modalBodyClass));
           toggleTopWindowClass(true);
         });
         checkRemoveBackdrop();
@@ -3777,8 +3384,8 @@ angular.module('ui.bootstrap.modal', ['ui.bootstrap.stackedMap'])
         //move focus to specified element if available, or else to body
         if (elementToReceiveFocus && elementToReceiveFocus.focus) {
           elementToReceiveFocus.focus();
-        } else {
-          body.focus();
+        } else if (appendToElement.focus) {
+          appendToElement.focus();
         }
       }
 
@@ -3794,7 +3401,7 @@ angular.module('ui.bootstrap.modal', ['ui.bootstrap.stackedMap'])
 
       function checkRemoveBackdrop() {
         //remove backdrop if no longer needed
-        if (backdropDomEl && backdropIndex() == -1) {
+        if (backdropDomEl && backdropIndex() === -1) {
           var backdropScopeRef = backdropScope;
           removeAfterAnimate(backdropDomEl, backdropScope, function() {
             backdropScopeRef = null;
@@ -3804,7 +3411,7 @@ angular.module('ui.bootstrap.modal', ['ui.bootstrap.stackedMap'])
         }
       }
 
-      function removeAfterAnimate(domEl, scope, done) {
+      function removeAfterAnimate(domEl, scope, done, closedDeferred) {
         var asyncDeferred;
         var asyncPromise = null;
         var setIsAsync = function() {
@@ -3830,15 +3437,15 @@ angular.module('ui.bootstrap.modal', ['ui.bootstrap.stackedMap'])
           }
           afterAnimating.done = true;
 
-          if ($animateCss) {
-            $animateCss(domEl, {
-              event: 'leave'
-            }).start().then(function() {
-              domEl.remove();
-            });
-          } else {
-            $animate.leave(domEl);
-          }
+          $animateCss(domEl, {
+            event: 'leave'
+          }).start().then(function() {
+            domEl.remove();
+            if (closedDeferred) {
+              closedDeferred.resolve();
+            }
+          });
+
           scope.$destroy();
           if (done) {
             done();
@@ -3846,19 +3453,27 @@ angular.module('ui.bootstrap.modal', ['ui.bootstrap.stackedMap'])
         }
       }
 
-      $document.bind('keydown', function(evt) {
+      $document.on('keydown', keydownListener);
+
+      $rootScope.$on('$destroy', function() {
+        $document.off('keydown', keydownListener);
+      });
+
+      function keydownListener(evt) {
         if (evt.isDefaultPrevented()) {
           return evt;
         }
 
         var modal = openedWindows.top();
-        if (modal && modal.value.keyboard) {
+        if (modal) {
           switch (evt.which) {
             case 27: {
-              evt.preventDefault();
-              $rootScope.$apply(function() {
-                $modalStack.dismiss(modal.key, 'escape key press');
-              });
+              if (modal.value.keyboard) {
+                evt.preventDefault();
+                $rootScope.$apply(function() {
+                  $modalStack.dismiss(modal.key, 'escape key press');
+                });
+              }
               break;
             }
             case 9: {
@@ -3882,7 +3497,7 @@ angular.module('ui.bootstrap.modal', ['ui.bootstrap.stackedMap'])
             }
           }
         }
-      });
+      }
 
       $modalStack.open = function(modalInstance, modal) {
         var modalOpener = $document[0].activeElement,
@@ -3893,28 +3508,36 @@ angular.module('ui.bootstrap.modal', ['ui.bootstrap.stackedMap'])
         openedWindows.add(modalInstance, {
           deferred: modal.deferred,
           renderDeferred: modal.renderDeferred,
+          closedDeferred: modal.closedDeferred,
           modalScope: modal.scope,
           backdrop: modal.backdrop,
           keyboard: modal.keyboard,
           openedClass: modal.openedClass,
-          windowTopClass: modal.windowTopClass
+          windowTopClass: modal.windowTopClass,
+          animation: modal.animation,
+          appendTo: modal.appendTo
         });
 
         openedClasses.put(modalBodyClass, modalInstance);
 
-        var body = $document.find('body').eq(0),
+        var appendToElement = modal.appendTo,
             currBackdropIndex = backdropIndex();
 
+        if (!appendToElement.length) {
+          throw new Error('appendTo element not found. Make sure that the element passed is in DOM.');
+        }
+
         if (currBackdropIndex >= 0 && !backdropDomEl) {
           backdropScope = $rootScope.$new(true);
+          backdropScope.modalOptions = modal;
           backdropScope.index = currBackdropIndex;
-          var angularBackgroundDomEl = angular.element('<div uib-modal-backdrop="modal-backdrop"></div>');
-          angularBackgroundDomEl.attr('backdrop-class', modal.backdropClass);
+          backdropDomEl = angular.element('<div uib-modal-backdrop="modal-backdrop"></div>');
+          backdropDomEl.attr('backdrop-class', modal.backdropClass);
           if (modal.animation) {
-            angularBackgroundDomEl.attr('modal-animation', 'true');
+            backdropDomEl.attr('modal-animation', 'true');
           }
-          backdropDomEl = $compile(angularBackgroundDomEl)(backdropScope);
-          body.append(backdropDomEl);
+          $compile(backdropDomEl)(backdropScope);
+          $animate.enter(backdropDomEl, appendToElement);
         }
 
         var angularDomEl = angular.element('<div uib-modal-window="modal-window"></div>');
@@ -3930,11 +3553,14 @@ angular.module('ui.bootstrap.modal', ['ui.bootstrap.stackedMap'])
           angularDomEl.attr('modal-animation', 'true');
         }
 
-        var modalDomEl = $compile(angularDomEl)(modal.scope);
-        openedWindows.top().value.modalDomEl = modalDomEl;
+        $animate.enter(angularDomEl, appendToElement)
+          .then(function() {
+            $compile(angularDomEl)(modal.scope);
+            $animate.addClass(appendToElement, modalBodyClass);
+          });
+
+        openedWindows.top().value.modalDomEl = angularDomEl;
         openedWindows.top().value.modalOpener = modalOpener;
-        body.append(modalDomEl);
-        body.addClass(modalBodyClass);
 
         $modalStack.clearFocusListCache();
       };
@@ -4000,14 +3626,14 @@ angular.module('ui.bootstrap.modal', ['ui.bootstrap.stackedMap'])
 
       $modalStack.isFocusInFirstItem = function(evt) {
         if (focusableElementList.length > 0) {
-          return (evt.target || evt.srcElement) == focusableElementList[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 (evt.target || evt.srcElement) === focusableElementList[focusableElementList.length - 1];
         }
         return false;
       };
@@ -4038,27 +3664,14 @@ angular.module('ui.bootstrap.modal', ['ui.bootstrap.stackedMap'])
         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) {
+      $get: ['$rootScope', '$q', '$document', '$templateRequest', '$controller', '$uibResolve', '$uibModalStack',
+        function ($rootScope, $q, $document, $templateRequest, $controller, $uibResolve, $modalStack) {
           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;
+              $templateRequest(angular.isFunction(options.templateUrl) ?
+                options.templateUrl() : options.templateUrl);
           }
 
           var promiseChain = null;
@@ -4069,12 +3682,14 @@ angular.module('ui.bootstrap.modal', ['ui.bootstrap.stackedMap'])
           $modal.open = function(modalOptions) {
             var modalResultDeferred = $q.defer();
             var modalOpenedDeferred = $q.defer();
+            var modalClosedDeferred = $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,
+              closed: modalClosedDeferred.promise,
               rendered: modalRenderDeferred.promise,
               close: function (result) {
                 return $modalStack.close(modalInstance, result);
@@ -4087,6 +3702,7 @@ angular.module('ui.bootstrap.modal', ['ui.bootstrap.stackedMap'])
             //merge and clean up options
             modalOptions = angular.extend({}, $modalProvider.options, modalOptions);
             modalOptions.resolve = modalOptions.resolve || {};
+            modalOptions.appendTo = modalOptions.appendTo || $document.find('body').eq(0);
 
             //verify options
             if (!modalOptions.template && !modalOptions.templateUrl) {
@@ -4094,7 +3710,7 @@ angular.module('ui.bootstrap.modal', ['ui.bootstrap.stackedMap'])
             }
 
             var templateAndResolvePromise =
-              $q.all([getTemplatePromise(modalOptions)].concat(getResolvePromises(modalOptions.resolve)));
+              $q.all([getTemplatePromise(modalOptions), $uibResolve.resolve(modalOptions.resolve, {}, null, null)]);
 
             function resolveWithTemplate() {
               return templateAndResolvePromise;
@@ -4108,8 +3724,9 @@ angular.module('ui.bootstrap.modal', ['ui.bootstrap.stackedMap'])
             samePromise = promiseChain = $q.all([promiseChain])
               .then(resolveWithTemplate, resolveWithTemplate)
               .then(function resolveSuccess(tplAndVars) {
+                var providedScope = modalOptions.scope || $rootScope;
 
-                var modalScope = (modalOptions.scope || $rootScope).$new();
+                var modalScope = providedScope.$new();
                 modalScope.$close = modalInstance.close;
                 modalScope.$dismiss = modalInstance.dismiss;
 
@@ -4120,29 +3737,21 @@ angular.module('ui.bootstrap.modal', ['ui.bootstrap.stackedMap'])
                 });
 
                 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++];
+                  angular.forEach(tplAndVars[1], function(value, key) {
+                    ctrlLocals[key] = value;
                   });
 
                   ctrlInstance = $controller(modalOptions.controller, ctrlLocals);
                   if (modalOptions.controllerAs) {
                     if (modalOptions.bindToController) {
-                      angular.extend(ctrlInstance, modalScope);
+                      ctrlInstance.$close = modalScope.$close;
+                      ctrlInstance.$dismiss = modalScope.$dismiss;
+                      angular.extend(ctrlInstance, providedScope);
                     }
 
                     modalScope[modalOptions.controllerAs] = ctrlInstance;
@@ -4153,6 +3762,7 @@ angular.module('ui.bootstrap.modal', ['ui.bootstrap.stackedMap'])
                   scope: modalScope,
                   deferred: modalResultDeferred,
                   renderDeferred: modalRenderDeferred,
+                  closedDeferred: modalClosedDeferred,
                   content: tplAndVars[0],
                   animation: modalOptions.animation,
                   backdrop: modalOptions.backdrop,
@@ -4162,15 +3772,15 @@ angular.module('ui.bootstrap.modal', ['ui.bootstrap.stackedMap'])
                   windowClass: modalOptions.windowClass,
                   windowTemplateUrl: modalOptions.windowTemplateUrl,
                   size: modalOptions.size,
-                  openedClass: modalOptions.openedClass
+                  openedClass: modalOptions.openedClass,
+                  appendTo: modalOptions.appendTo
                 });
                 modalOpenedDeferred.resolve(true);
 
             }, function resolveError(reason) {
               modalOpenedDeferred.reject(reason);
               modalResultDeferred.reject(reason);
-            })
-            .finally(function() {
+            })['finally'](function() {
               if (promiseChain === samePromise) {
                 promiseChain = null;
               }
@@ -4187,429 +3797,98 @@ angular.module('ui.bootstrap.modal', ['ui.bootstrap.stackedMap'])
     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;
-        }
-      };
+angular.module('ui.bootstrap.paging', [])
+/**
+ * Helper internal service for generating common controller code between the
+ * pager and pagination components
+ */
+.factory('uibPaging', ['$parse', function($parse) {
+  return {
+    create: function(ctrl, $scope, $attrs) {
+      ctrl.setNumPages = $attrs.numPages ? $parse($attrs.numPages).assign : angular.noop;
+      ctrl.ngModelCtrl = { $setViewValue: angular.noop }; // nullModelCtrl
 
-      function linkFn(scope, element, attrs) {
-        if (!$modalSuppressWarning) {
-          $log.warn('modal-backdrop is now deprecated. Use uib-modal-backdrop instead.');
-        }
-        element.addClass('modal-backdrop');
+      ctrl.init = function(ngModelCtrl, config) {
+        ctrl.ngModelCtrl = ngModelCtrl;
+        ctrl.config = config;
 
-        if (attrs.modalInClass) {
-          if ($animateCss) {
-            $animateCss(element, {
-              addClass: attrs.modalInClass
-            }).start();
-          } else {
-            $animate.addClass(element, attrs.modalInClass);
-          }
+        ngModelCtrl.$render = function() {
+          ctrl.render();
+        };
 
-          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);
-            }
+        if ($attrs.itemsPerPage) {
+          $scope.$parent.$watch($parse($attrs.itemsPerPage), function(value) {
+            ctrl.itemsPerPage = parseInt(value, 10);
+            $scope.totalPages = ctrl.calculateTotalPages();
+            ctrl.updatePage();
           });
+        } else {
+          ctrl.itemsPerPage = config.itemsPerPage;
         }
-      }
-    }])
 
-  .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.');
+        $scope.$watch('totalItems', function(newTotal, oldTotal) {
+          if (angular.isDefined(newTotal) || newTotal !== oldTotal) {
+            $scope.totalPages = ctrl.calculateTotalPages();
+            ctrl.updatePage();
           }
-          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);
-          }
-        }
+      ctrl.calculateTotalPages = function() {
+        var totalPages = ctrl.itemsPerPage < 1 ? 1 : Math.ceil($scope.totalItems / ctrl.itemsPerPage);
+        return Math.max(totalPages || 0, 1);
       };
-    }])
-
-  .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);
+      ctrl.render = function() {
+        $scope.page = parseInt(ctrl.ngModelCtrl.$viewValue, 10) || 1;
+      };
 
-    this.$get = ['$injector', '$log', '$modalSuppressWarning',
-      function ($injector, $log, $modalSuppressWarning) {
-        if (!$modalSuppressWarning) {
-          $log.warn('$modal is now deprecated. Use $uibModal instead.');
+      $scope.selectPage = function(page, evt) {
+        if (evt) {
+          evt.preventDefault();
         }
 
-        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);
+        var clickAllowed = !$scope.ngDisabled || !evt;
+        if (clickAllowed && $scope.page !== page && page > 0 && page <= $scope.totalPages) {
+          if (evt && evt.target) {
+            evt.target.blur();
           }
+          ctrl.ngModelCtrl.$setViewValue(page);
+          ctrl.ngModelCtrl.$render();
         }
+      };
 
-        // Add page number links
-        for (var number = startPage; number <= endPage; number++) {
-          var page = makePage(number, number, number === currentPage);
-          pages.push(page);
-        }
+      $scope.getText = function(key) {
+        return $scope[key + 'Text'] || ctrl.config[key + 'Text'];
+      };
 
-        // Add links to move between page sets
-        if (isMaxSized && ! rotate) {
-          if (startPage > 1) {
-            var previousPageSet = makePage(startPage - 1, '...', false);
-            pages.unshift(previousPageSet);
-          }
+      $scope.noPrevious = function() {
+        return $scope.page === 1;
+      };
 
-          if (endPage < totalPages) {
-            var nextPageSet = makePage(endPage + 1, '...', false);
-            pages.push(nextPageSet);
-          }
-        }
+      $scope.noNext = function() {
+        return $scope.page === $scope.totalPages;
+      };
 
-        return pages;
-      }
+      ctrl.updatePage = function() {
+        ctrl.setNumPages($scope.$parent, $scope.totalPages); // Readonly variable
 
-      var originalRender = paginationCtrl.render;
-      paginationCtrl.render = function() {
-        originalRender();
-        if (scope.page > 0 && scope.page <= scope.totalPages) {
-          scope.pages = getPages(scope.page, scope.totalPages);
+        if ($scope.page > $scope.totalPages) {
+          $scope.selectPage($scope.totalPages);
+        } else {
+          ctrl.ngModelCtrl.$render();
         }
       };
     }
   };
+}]);
+
+angular.module('ui.bootstrap.pager', ['ui.bootstrap.paging'])
+
+.controller('UibPagerController', ['$scope', '$attrs', 'uibPaging', 'uibPagerConfig', function($scope, $attrs, uibPaging, uibPagerConfig) {
+  $scope.align = angular.isDefined($attrs.align) ? $scope.$parent.$eval($attrs.align) : uibPagerConfig.align;
+
+  uibPaging.create(this, $scope, $attrs);
 }])
 
 .constant('uibPagerConfig', {
@@ -4619,9 +3898,8 @@ angular.module('ui.bootstrap.pagination', [])
   align: true
 })
 
-.directive('uibPager', ['uibPagerConfig', function(pagerConfig) {
+.directive('uibPager', ['uibPagerConfig', function(uibPagerConfig) {
   return {
-    restrict: 'EA',
     scope: {
       totalItems: '=',
       previousText: '@',
@@ -4629,247 +3907,171 @@ angular.module('ui.bootstrap.pagination', [])
       ngDisabled: '='
     },
     require: ['uibPager', '?ngModel'],
-    controller: 'UibPaginationController',
-    controllerAs: 'pagination',
+    controller: 'UibPagerController',
+    controllerAs: 'pager',
     templateUrl: function(element, attrs) {
-      return attrs.templateUrl || 'template/pagination/pager.html';
+      return attrs.templateUrl || 'uib/template/pager/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
+        return; // do nothing if no ng-model
       }
 
-      scope.align = angular.isDefined(attrs.align) ? scope.$parent.$eval(attrs.align) : pagerConfig.align;
-      paginationCtrl.init(ngModelCtrl, pagerConfig);
+      paginationCtrl.init(ngModelCtrl, uibPagerConfig);
     }
   };
 }]);
 
-/* 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.');
+angular.module('ui.bootstrap.pagination', ['ui.bootstrap.paging'])
+.controller('UibPaginationController', ['$scope', '$attrs', '$parse', 'uibPaging', 'uibPaginationConfig', function($scope, $attrs, $parse, uibPaging, uibPaginationConfig) {
+  var ctrl = this;
+  // Setup configuration parameters
+  var maxSize = angular.isDefined($attrs.maxSize) ? $scope.$parent.$eval($attrs.maxSize) : uibPaginationConfig.maxSize,
+    rotate = angular.isDefined($attrs.rotate) ? $scope.$parent.$eval($attrs.rotate) : uibPaginationConfig.rotate,
+    forceEllipses = angular.isDefined($attrs.forceEllipses) ? $scope.$parent.$eval($attrs.forceEllipses) : uibPaginationConfig.forceEllipses,
+    boundaryLinkNumbers = angular.isDefined($attrs.boundaryLinkNumbers) ? $scope.$parent.$eval($attrs.boundaryLinkNumbers) : uibPaginationConfig.boundaryLinkNumbers;
+  $scope.boundaryLinks = angular.isDefined($attrs.boundaryLinks) ? $scope.$parent.$eval($attrs.boundaryLinks) : uibPaginationConfig.boundaryLinks;
+  $scope.directionLinks = angular.isDefined($attrs.directionLinks) ? $scope.$parent.$eval($attrs.directionLinks) : uibPaginationConfig.directionLinks;
+
+  uibPaging.create(this, $scope, $attrs);
+
+  if ($attrs.maxSize) {
+    $scope.$parent.$watch($parse($attrs.maxSize), function(value) {
+      maxSize = parseInt(value, 10);
+      ctrl.render();
+    });
   }
 
-  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();
+  // Create page object used in template
+  function makePage(number, text, isActive) {
+    return {
+      number: number,
+      text: text,
+      active: isActive
     };
+  }
 
-    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;
-    }
+  function getPages(currentPage, totalPages) {
+    var pages = [];
 
-    $scope.$watch('totalItems', function() {
-      $scope.totalPages = self.calculateTotalPages();
-    });
+    // Default page limits
+    var startPage = 1, endPage = totalPages;
+    var isMaxSized = angular.isDefined(maxSize) && maxSize < totalPages;
 
-    $scope.$watch('totalPages', function(value) {
-      setNumPages($scope.$parent, value); // Readonly variable
+    // 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;
 
-      if ( $scope.page > value ) {
-        $scope.selectPage(value);
+        // Adjust if limit is exceeded
+        if (endPage > totalPages) {
+          endPage = totalPages;
+          startPage = endPage - maxSize + 1;
+        }
       } 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();
-    }
+        // Visible pages are paginated with maxSize
+        startPage = (Math.ceil(currentPage / maxSize) - 1) * maxSize + 1;
 
-    var clickAllowed = !$scope.ngDisabled || !evt;
-    if (clickAllowed && $scope.page !== page && page > 0 && page <= $scope.totalPages) {
-      if (evt && evt.target) {
-        evt.target.blur();
+        // Adjust last page if limit is exceeded
+        endPage = Math.min(startPage + maxSize - 1, totalPages);
       }
-      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();
-        });
-      }
+    // Add page number links
+    for (var number = startPage; number <= endPage; number++) {
+      var page = makePage(number, number, number === currentPage);
+      pages.push(page);
+    }
 
-      // Create page object used in template
-      function makePage(number, text, isActive) {
-        return {
-          number: number,
-          text: text,
-          active: isActive
-        };
+    // Add links to move between page sets
+    if (isMaxSized && maxSize > 0 && (!rotate || forceEllipses || boundaryLinkNumbers)) {
+      if (startPage > 1) {
+        if (!boundaryLinkNumbers || startPage > 3) { //need ellipsis for all options unless range is too close to beginning
+        var previousPageSet = makePage(startPage - 1, '...', false);
+        pages.unshift(previousPageSet);
       }
-
-      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);
+        if (boundaryLinkNumbers) {
+          if (startPage === 3) { //need to replace ellipsis when the buttons would be sequential
+            var secondPageLink = makePage(2, '2', false);
+            pages.unshift(secondPageLink);
           }
+          //add the first page
+          var firstPageLink = makePage(1, '1', false);
+          pages.unshift(firstPageLink);
         }
+      }
 
-        // 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);
+      if (endPage < totalPages) {
+        if (!boundaryLinkNumbers || endPage < totalPages - 2) { //need ellipsis for all options unless range is too close to end
+        var nextPageSet = makePage(endPage + 1, '...', false);
+        pages.push(nextPageSet);
+      }
+        if (boundaryLinkNumbers) {
+          if (endPage === totalPages - 2) { //need to replace ellipsis when the buttons would be sequential
+            var secondToLastPageLink = makePage(totalPages - 1, totalPages - 1, false);
+            pages.push(secondToLastPageLink);
           }
+          //add the last page
+          var lastPageLink = makePage(totalPages, totalPages, false);
+          pages.push(lastPageLink);
         }
-
-        return pages;
       }
+    }
+    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);
-        }
-      };
+  var originalRender = this.render;
+  this.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) {
+.constant('uibPaginationConfig', {
+  itemsPerPage: 10,
+  boundaryLinks: false,
+  boundaryLinkNumbers: false,
+  directionLinks: true,
+  firstText: 'First',
+  previousText: 'Previous',
+  nextText: 'Next',
+  lastText: 'Last',
+  rotate: true,
+  forceEllipses: false
+})
+
+.directive('uibPagination', ['$parse', 'uibPaginationConfig', function($parse, uibPaginationConfig) {
   return {
-    restrict: 'EA',
     scope: {
       totalItems: '=',
+      firstText: '@',
       previousText: '@',
       nextText: '@',
-      ngDisabled: '='
+      lastText: '@',
+      ngDisabled:'='
     },
-    require: ['pager', '?ngModel'],
-    controller: 'PaginationController',
+    require: ['uibPagination', '?ngModel'],
+    controller: 'UibPaginationController',
     controllerAs: 'pagination',
     templateUrl: function(element, attrs) {
-      return attrs.templateUrl || 'template/pagination/pager.html';
+      return attrs.templateUrl || 'uib/template/pagination/pagination.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);
+      paginationCtrl.init(ngModelCtrl, uibPaginationConfig);
     }
   };
 }]);
@@ -4889,6 +4091,7 @@ angular.module('ui.bootstrap.tooltip', ['ui.bootstrap.position', 'ui.bootstrap.s
   // The default options tooltip and popover.
   var defaultOptions = {
     placement: 'top',
+    placementClassPrefix: '',
     animation: true,
     popupDelay: 0,
     popupCloseDelay: 0,
@@ -4899,6 +4102,7 @@ angular.module('ui.bootstrap.tooltip', ['ui.bootstrap.position', 'ui.bootstrap.s
   var triggerMap = {
     'mouseenter': 'mouseleave',
     'click': 'click',
+    'outsideClick': 'outsideClick',
     'focus': 'blur',
     'none': ''
   };
@@ -4929,7 +4133,7 @@ angular.module('ui.bootstrap.tooltip', ['ui.bootstrap.position', 'ui.bootstrap.s
   };
 
   /**
-   * This is a helper function for translating camel-case to snake-case.
+   * This is a helper function for translating camel-case to snake_case.
    */
   function snake_case(name) {
     var regexp = /[A-Z]/g;
@@ -4945,7 +4149,13 @@ angular.module('ui.bootstrap.tooltip', ['ui.bootstrap.position', 'ui.bootstrap.s
    */
   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) {
+    $document.on('keypress', keypressListener);
+
+    $rootScope.$on('$destroy', function() {
+      $document.off('keypress', keypressListener);
+    });
+
+    function keypressListener(e) {
       if (e.which === 27) {
         var last = openedTooltips.top();
         if (last) {
@@ -4954,7 +4164,7 @@ angular.module('ui.bootstrap.tooltip', ['ui.bootstrap.position', 'ui.bootstrap.s
           last = null;
         }
       }
-    });
+    }
 
     return function $tooltip(ttType, prefix, defaultTriggerShow, options) {
       options = angular.extend({}, defaultOptions, globalOptions, options);
@@ -5033,11 +4243,32 @@ angular.module('ui.bootstrap.tooltip', ['ui.bootstrap.position', 'ui.bootstrap.s
                   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);
+                  var ttPosition = $position.positionElements(element, tooltip, ttScope.placement, appendToBody);
+                  tooltip.css({ top: ttPosition.top + 'px', left: ttPosition.left + 'px', visibility: 'visible' });
+
+                  // If the placement class is prefixed, still need
+                  // to remove the TWBS standard class.
+                  if (options.placementClassPrefix) {
+                    tooltip.removeClass('top bottom left right');
+                  }
+
+                  tooltip.removeClass(
+                    options.placementClassPrefix + 'top ' +
+                    options.placementClassPrefix + 'top-left ' +
+                    options.placementClassPrefix + 'top-right ' +
+                    options.placementClassPrefix + 'bottom ' +
+                    options.placementClassPrefix + 'bottom-left ' +
+                    options.placementClassPrefix + 'bottom-right ' +
+                    options.placementClassPrefix + 'left ' +
+                    options.placementClassPrefix + 'left-top ' +
+                    options.placementClassPrefix + 'left-bottom ' +
+                    options.placementClassPrefix + 'right ' +
+                    options.placementClassPrefix + 'right-top ' +
+                    options.placementClassPrefix + 'right-bottom');
+
+                  var placement = ttPosition.placement.split('-');
+                  tooltip.addClass(placement[0], options.placementClassPrefix + ttPosition.placement);
+                  $position.positionArrow(tooltip, ttPosition.placement);
 
                   positionTimeout = null;
                 }, 0, false);
@@ -5128,9 +4359,6 @@ angular.module('ui.bootstrap.tooltip', ['ui.bootstrap.position', 'ui.bootstrap.s
 
             // Hide the tooltip popup element.
             function hide() {
-              cancelShow();
-              cancelHide();
-
               if (!ttScope) {
                 return;
               }
@@ -5183,9 +4411,10 @@ angular.module('ui.bootstrap.tooltip', ['ui.bootstrap.position', 'ui.bootstrap.s
             }
 
             function removeTooltip() {
+              cancelShow();
+              cancelHide();
               unregisterObservers();
 
-              transitionTimeout = null;
               if (tooltip) {
                 tooltip.remove();
                 tooltip = null;
@@ -5197,9 +4426,9 @@ angular.module('ui.bootstrap.tooltip', ['ui.bootstrap.position', 'ui.bootstrap.s
             }
 
             /**
-             * Set the inital scope values. Once
+             * Set the initial scope values. Once
              * the tooltip is created, the observers
-             * will be added to keep things in synch.
+             * will be added to keep things in sync.
              */
             function prepareTooltip() {
               ttScope.title = attrs[prefix + 'Title'];
@@ -5243,11 +4472,9 @@ angular.module('ui.bootstrap.tooltip', ['ui.bootstrap.position', 'ui.bootstrap.s
 
             if (isOpenParse) {
               scope.$watch(isOpenParse, function(val) {
-                /*jshint -W018 */
                 if (ttScope && !val === ttScope.isOpen) {
                   toggleTooltipBind();
                 }
-                /*jshint +W018 */
               });
             }
 
@@ -5318,14 +4545,32 @@ angular.module('ui.bootstrap.tooltip', ['ui.bootstrap.position', 'ui.bootstrap.s
               }
             }
 
+            // hide tooltips/popovers for outsideClick trigger
+            function bodyHideTooltipBind(e) {
+              if (!ttScope || !ttScope.isOpen || !tooltip) {
+                return;
+              }
+              // make sure the tooltip/popover link or tool tooltip/popover itself were not clicked
+              if (!element[0].contains(e.target) && !tooltip[0].contains(e.target)) {
+                hideTooltipBind();
+              }
+            }
+
             var unregisterTriggers = function() {
               triggers.show.forEach(function(trigger) {
-                element.unbind(trigger, showTooltipBind);
+                if (trigger === 'outsideClick') {
+                  element.off('click', toggleTooltipBind);
+                } else {
+                  element.off(trigger, showTooltipBind);
+                  element.off(trigger, toggleTooltipBind);
+                }
               });
               triggers.hide.forEach(function(trigger) {
-                trigger.split(' ').forEach(function(hideTrigger) {
-                  element[0].removeEventListener(hideTrigger, hideTooltipBind);
-                });
+                if (trigger === 'outsideClick') {
+                  $document.off('click', bodyHideTooltipBind);
+                } else {
+                  element.off(trigger, hideTooltipBind);
+                }
               });
             };
 
@@ -5337,14 +4582,14 @@ angular.module('ui.bootstrap.tooltip', ['ui.bootstrap.position', 'ui.bootstrap.s
 
               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);
+                  if (trigger === 'outsideClick') {
+                    element.on('click', toggleTooltipBind);
+                    $document.on('click', bodyHideTooltipBind);
+                  } else if (trigger === triggers.hide[idx]) {
+                    element.on(trigger, toggleTooltipBind);
                   } else if (trigger) {
-                    element[0].addEventListener(trigger, showTooltipBind);
-                    triggers.hide[idx].split(' ').forEach(function(trigger) {
-                      element[0].addEventListener(trigger, hideTooltipBind);
-                    });
+                    element.on(trigger, showTooltipBind);
+                    element.on(triggers.hide[idx], hideTooltipBind);
                   }
 
                   element.on('keypress', function(e) {
@@ -5361,7 +4606,14 @@ angular.module('ui.bootstrap.tooltip', ['ui.bootstrap.position', 'ui.bootstrap.s
             var animation = scope.$eval(attrs[prefix + 'Animation']);
             ttScope.animation = angular.isDefined(animation) ? !!animation : options.animation;
 
-            var appendToBodyVal = scope.$eval(attrs[prefix + 'AppendToBody']);
+            var appendToBodyVal;
+            var appendKey = prefix + 'AppendToBody';
+            if (appendKey in attrs && attrs[appendKey] === undefined) {
+              appendToBodyVal = true;
+            } else {
+              appendToBodyVal = scope.$eval(attrs[appendKey]);
+            }
+
             appendToBody = angular.isDefined(appendToBodyVal) ? appendToBodyVal : appendToBody;
 
             // if a tooltip is attached to <body> we need to remove it on
@@ -5377,8 +4629,6 @@ angular.module('ui.bootstrap.tooltip', ['ui.bootstrap.position', 'ui.bootstrap.s
 
             // Make sure tooltip is destroyed and removed.
             scope.$on('$destroy', function onDestroyTooltip() {
-              cancelShow();
-              cancelHide();
               unregisterTriggers();
               removeTooltip();
               openedTooltips.remove(ttScope);
@@ -5394,7 +4644,7 @@ angular.module('ui.bootstrap.tooltip', ['ui.bootstrap.position', 'ui.bootstrap.s
 // This is mostly ngInclude code but with a custom scope
 .directive('uibTooltipTemplateTransclude', [
          '$animate', '$sce', '$compile', '$templateRequest',
-function ($animate ,  $sce ,  $compile ,  $templateRequest) {
+function ($animate, $sce, $compile, $templateRequest) {
   return {
     link: function(scope, elem, attrs) {
       var origScope = scope.$eval(attrs.tooltipTemplateTranscludeScope);
@@ -5466,12 +4716,20 @@ function ($animate ,  $sce ,  $compile ,  $templateRequest) {
  * They must not be animated as they're expected to be present on the tooltip on
  * initialization.
  */
-.directive('uibTooltipClasses', function() {
+.directive('uibTooltipClasses', ['$uibPosition', function($uibPosition) {
   return {
     restrict: 'A',
     link: function(scope, element, attrs) {
+      // need to set the primary position so the
+      // arrow has space during position measure.
+      // tooltip.positionTooltip()
       if (scope.placement) {
-        element.addClass(scope.placement);
+        // // There are no top-left etc... classes
+        // // in TWBS, so we need the primary position.
+        var position = $uibPosition.parsePlacement(scope.placement);
+        element.addClass(position[0]);
+      } else {
+        element.addClass('top');
       }
 
       if (scope.popupClass) {
@@ -5483,16 +4741,13 @@ function ($animate ,  $sce ,  $compile ,  $templateRequest) {
       }
     }
   };
-})
+}])
 
 .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');
-    }
+    templateUrl: 'uib/template/tooltip/tooltip-popup.html'
   };
 })
 
@@ -5505,10 +4760,7 @@ function ($animate ,  $sce ,  $compile ,  $templateRequest) {
     replace: true,
     scope: { contentExp: '&', placement: '@', popupClass: '@', animation: '&', isOpen: '&',
       originScope: '&' },
-    templateUrl: 'template/tooltip/tooltip-template-popup.html',
-    link: function(scope, element) {
-      element.addClass('tooltip');
-    }
+    templateUrl: 'uib/template/tooltip/tooltip-template-popup.html'
   };
 })
 
@@ -5522,10 +4774,7 @@ function ($animate ,  $sce ,  $compile ,  $templateRequest) {
   return {
     replace: true,
     scope: { contentExp: '&', placement: '@', popupClass: '@', animation: '&', isOpen: '&' },
-    templateUrl: 'template/tooltip/tooltip-html-popup.html',
-    link: function(scope, element) {
-      element.addClass('tooltip');
-    }
+    templateUrl: 'uib/template/tooltip/tooltip-html-popup.html'
   };
 })
 
@@ -5535,179 +4784,6 @@ function ($animate ,  $sce ,  $compile ,  $templateRequest) {
   });
 }]);
 
-/* 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
@@ -5720,10 +4796,7 @@ angular.module('ui.bootstrap.popover', ['ui.bootstrap.tooltip'])
     replace: true,
     scope: { title: '@', contentExp: '&', placement: '@', popupClass: '@', animation: '&', isOpen: '&',
       originScope: '&' },
-    templateUrl: 'template/popover/popover-template.html',
-    link: function(scope, element) {
-      element.addClass('popover');
-    }
+    templateUrl: 'uib/template/popover/popover-template.html'
   };
 })
 
@@ -5737,10 +4810,7 @@ angular.module('ui.bootstrap.popover', ['ui.bootstrap.tooltip'])
   return {
     replace: true,
     scope: { contentExp: '&', title: '@', placement: '@', popupClass: '@', animation: '&', isOpen: '&' },
-    templateUrl: 'template/popover/popover-html.html',
-    link: function(scope, element) {
-      element.addClass('popover');
-    }
+    templateUrl: 'uib/template/popover/popover-html.html'
   };
 })
 
@@ -5754,10 +4824,7 @@ angular.module('ui.bootstrap.popover', ['ui.bootstrap.tooltip'])
   return {
     replace: true,
     scope: { title: '@', content: '@', placement: '@', popupClass: '@', animation: '&', isOpen: '&' },
-    templateUrl: 'template/popover/popover.html',
-    link: function(scope, element) {
-      element.addClass('popover');
-    }
+    templateUrl: 'uib/template/popover/popover.html'
   };
 })
 
@@ -5765,75 +4832,6 @@ angular.module('ui.bootstrap.popover', ['ui.bootstrap.tooltip'])
   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', {
@@ -5903,7 +4901,7 @@ angular.module('ui.bootstrap.progressbar', [])
     scope: {
       max: '=?'
     },
-    templateUrl: 'template/progressbar/progress.html'
+    templateUrl: 'uib/template/progressbar/progress.html'
   };
 })
 
@@ -5916,7 +4914,7 @@ angular.module('ui.bootstrap.progressbar', [])
       value: '=',
       type: '@'
     },
-    templateUrl: 'template/progressbar/bar.html',
+    templateUrl: 'uib/template/progressbar/bar.html',
     link: function(scope, element, attrs, progressCtrl) {
       progressCtrl.addBar(scope, element, attrs);
     }
@@ -5933,132 +4931,13 @@ angular.module('ui.bootstrap.progressbar', [])
       max: '=?',
       type: '@'
     },
-    templateUrl: 'template/progressbar/progressbar.html',
+    templateUrl: 'uib/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', {
@@ -6069,7 +4948,7 @@ angular.module('ui.bootstrap.rating', [])
 })
 
 .controller('UibRatingController', ['$scope', '$attrs', 'uibRatingConfig', function($scope, $attrs, ratingConfig) {
-  var ngModelCtrl  = { $setViewValue: angular.noop };
+  var ngModelCtrl = { $setViewValue: angular.noop };
 
   this.init = function(ngModelCtrl_) {
     ngModelCtrl = ngModelCtrl_;
@@ -6079,12 +4958,13 @@ angular.module('ui.bootstrap.rating', [])
       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 ;
+    var tmpTitles = angular.isDefined($attrs.titles) ? $scope.$parent.$eval($attrs.titles) : ratingConfig.titles ;
     this.titles = angular.isArray(tmpTitles) && tmpTitles.length > 0 ?
       tmpTitles : ratingConfig.titles;
 
@@ -6104,9 +4984,9 @@ angular.module('ui.bootstrap.rating', [])
   this.getTitle = function(index) {
     if (index >= this.titles.length) {
       return index + 1;
-    } else {
-      return this.titles[index];
     }
+
+    return this.titles[index];
   };
 
   $scope.rate = function(value) {
@@ -6150,7 +5030,7 @@ angular.module('ui.bootstrap.rating', [])
       onLeave: '&'
     },
     controller: 'UibRatingController',
-    templateUrl: 'template/rating/rating.html',
+    templateUrl: 'uib/template/rating/rating.html',
     replace: true,
     link: function(scope, element, attrs, ctrls) {
       var ratingCtrl = ctrls[0], ngModelCtrl = ctrls[1];
@@ -6159,53 +5039,6 @@ angular.module('ui.bootstrap.rating', [])
   };
 });
 
-/* 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) {
@@ -6246,7 +5079,7 @@ angular.module('ui.bootstrap.tabs', [])
     //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;
+      var newActiveIndex = index === tabs.length - 1 ? index - 1 : index + 1;
       ctrl.select(tabs[newActiveIndex]);
     }
     tabs.splice(index, 1);
@@ -6258,46 +5091,15 @@ angular.module('ui.bootstrap.tabs', [])
   });
 }])
 
-/**
- * @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',
+    templateUrl: 'uib/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;
@@ -6305,92 +5107,11 @@ angular.module('ui.bootstrap.tabs', [])
   };
 })
 
-/**
- * @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',
+    templateUrl: 'uib/template/tabs/tab.html',
     transclude: true,
     scope: {
       active: '=?',
@@ -6402,6 +5123,7 @@ angular.module('ui.bootstrap.tabs', [])
     controller: function() {
       //Empty controller so other directives can require being 'under' a tab
     },
+    controllerAs: 'tab',
     link: function(scope, elm, attrs, tabsetCtrl, transclude) {
       scope.$watch('active', function(active) {
         if (active) {
@@ -6437,7 +5159,7 @@ angular.module('ui.bootstrap.tabs', [])
 .directive('uibTabHeadingTransclude', function() {
   return {
     restrict: 'A',
-    require: ['?^uibTab', '?^tab'], // TODO: change to '^uibTab' after deprecation removal
+    require: '^uibTab',
     link: function(scope, elm) {
       scope.$watch('headingElement', function updateHeadingElement(heading) {
         if (heading) {
@@ -6452,7 +5174,7 @@ angular.module('ui.bootstrap.tabs', [])
 .directive('uibTabContentTransclude', function() {
   return {
     restrict: 'A',
-    require: ['?^uibTabset', '?^tabset'], // TODO: change to '^uibTabset' after deprecation removal
+    require: '^uibTabset',
     link: function(scope, elm, attrs) {
       var tab = scope.$eval(attrs.uibTabContentTransclude);
 
@@ -6473,15 +5195,9 @@ angular.module('ui.bootstrap.tabs', [])
 
   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'
@@ -6489,165 +5205,20 @@ angular.module('ui.bootstrap.tabs', [])
   }
 });
 
-/* 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,
+  secondStep: 1,
   showMeridian: true,
+  showSeconds: false,
   meridians: null,
   readonlyInput: false,
   mousewheel: true,
   arrowkeys: true,
-  showSpinners: true
+  showSpinners: true,
+  templateUrl: 'uib/template/timepicker/timepicker.html'
 })
 
 .controller('UibTimepickerController', ['$scope', '$element', '$attrs', '$parse', '$log', '$locale', 'uibTimepickerConfig', function($scope, $element, $attrs, $parse, $log, $locale, timepickerConfig) {
@@ -6667,33 +5238,35 @@ angular.module('ui.bootstrap.timepicker', [])
     });
 
     var hoursInputEl = inputs.eq(0),
-        minutesInputEl = inputs.eq(1);
+        minutesInputEl = inputs.eq(1),
+        secondsInputEl = inputs.eq(2);
 
     var mousewheel = angular.isDefined($attrs.mousewheel) ? $scope.$parent.$eval($attrs.mousewheel) : timepickerConfig.mousewheel;
+
     if (mousewheel) {
-      this.setupMousewheelEvents(hoursInputEl, minutesInputEl);
+      this.setupMousewheelEvents(hoursInputEl, minutesInputEl, secondsInputEl);
     }
 
     var arrowkeys = angular.isDefined($attrs.arrowkeys) ? $scope.$parent.$eval($attrs.arrowkeys) : timepickerConfig.arrowkeys;
     if (arrowkeys) {
-      this.setupArrowkeyEvents(hoursInputEl, minutesInputEl);
+      this.setupArrowkeyEvents(hoursInputEl, minutesInputEl, secondsInputEl);
     }
 
     $scope.readonlyInput = angular.isDefined($attrs.readonlyInput) ? $scope.$parent.$eval($attrs.readonlyInput) : timepickerConfig.readonlyInput;
-    this.setupInputEvents(hoursInputEl, minutesInputEl);
+    this.setupInputEvents(hoursInputEl, minutesInputEl, secondsInputEl);
   };
 
   var hourStep = timepickerConfig.hourStep;
   if ($attrs.hourStep) {
     $scope.$parent.$watch($parse($attrs.hourStep), function(value) {
-      hourStep = parseInt(value, 10);
+      hourStep = +value;
     });
   }
 
   var minuteStep = timepickerConfig.minuteStep;
   if ($attrs.minuteStep) {
     $scope.$parent.$watch($parse($attrs.minuteStep), function(value) {
-      minuteStep = parseInt(value, 10);
+      minuteStep = +value;
     });
   }
 
@@ -6709,38 +5282,71 @@ angular.module('ui.bootstrap.timepicker', [])
     max = isNaN(dt) ? undefined : dt;
   });
 
+  var disabled = false;
+  if ($attrs.ngDisabled) {
+    $scope.$parent.$watch($parse($attrs.ngDisabled), function(value) {
+      disabled = value;
+    });
+  }
+
   $scope.noIncrementHours = function() {
     var incrementedSelected = addMinutes(selected, hourStep * 60);
-    return incrementedSelected > max ||
-      (incrementedSelected < selected && incrementedSelected < min);
+    return disabled || incrementedSelected > max ||
+      incrementedSelected < selected && incrementedSelected < min;
   };
 
   $scope.noDecrementHours = function() {
     var decrementedSelected = addMinutes(selected, -hourStep * 60);
-    return decrementedSelected < min ||
-      (decrementedSelected > selected && decrementedSelected > max);
+    return disabled || decrementedSelected < min ||
+      decrementedSelected > selected && decrementedSelected > max;
   };
 
   $scope.noIncrementMinutes = function() {
     var incrementedSelected = addMinutes(selected, minuteStep);
-    return incrementedSelected > max ||
-      (incrementedSelected < selected && incrementedSelected < min);
+    return disabled || incrementedSelected > max ||
+      incrementedSelected < selected && incrementedSelected < min;
   };
 
   $scope.noDecrementMinutes = function() {
     var decrementedSelected = addMinutes(selected, -minuteStep);
-    return decrementedSelected < min ||
-      (decrementedSelected > selected && decrementedSelected > max);
+    return disabled || decrementedSelected < min ||
+      decrementedSelected > selected && decrementedSelected > max;
+  };
+
+  $scope.noIncrementSeconds = function() {
+    var incrementedSelected = addSeconds(selected, secondStep);
+    return disabled || incrementedSelected > max ||
+      incrementedSelected < selected && incrementedSelected < min;
+  };
+
+  $scope.noDecrementSeconds = function() {
+    var decrementedSelected = addSeconds(selected, -secondStep);
+    return disabled || 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;
+    if (selected.getHours() < 12) {
+      return disabled || addMinutes(selected, 12 * 60) > max;
     }
+
+    return disabled || addMinutes(selected, -12 * 60) < min;
   };
 
+  var secondStep = timepickerConfig.secondStep;
+  if ($attrs.secondStep) {
+    $scope.$parent.$watch($parse($attrs.secondStep), function(value) {
+      secondStep = +value;
+    });
+  }
+
+  $scope.showSeconds = timepickerConfig.showSeconds;
+  if ($attrs.showSeconds) {
+    $scope.$parent.$watch($parse($attrs.showSeconds), function(value) {
+      $scope.showSeconds = !!value;
+    });
+  }
+
   // 12H / 24H mode
   $scope.showMeridian = timepickerConfig.showMeridian;
   if ($attrs.showMeridian) {
@@ -6762,8 +5368,9 @@ angular.module('ui.bootstrap.timepicker', [])
 
   // 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);
+    var hours = +$scope.hours;
+    var valid = $scope.showMeridian ? hours > 0 && hours < 13 :
+      hours >= 0 && hours < 24;
     if (!valid) {
       return undefined;
     }
@@ -6780,88 +5387,135 @@ angular.module('ui.bootstrap.timepicker', [])
   }
 
   function getMinutesFromTemplate() {
-    var minutes = parseInt($scope.minutes, 10);
-    return (minutes >= 0 && minutes < 60) ? minutes : undefined;
+    var minutes = +$scope.minutes;
+    return minutes >= 0 && minutes < 60 ? minutes : undefined;
+  }
+
+  function getSecondsFromTemplate() {
+    var seconds = +$scope.seconds;
+    return seconds >= 0 && seconds < 60 ? seconds : undefined;
   }
 
   function pad(value) {
-    return (angular.isDefined(value) && value.toString().length < 2) ? '0' + value : value.toString();
+    if (value === null) {
+      return '';
+    }
+
+    return angular.isDefined(value) && value.toString().length < 2 ?
+      '0' + value : value.toString();
   }
 
   // Respond on mousewheel spin
-  this.setupMousewheelEvents = function(hoursInputEl, minutesInputEl) {
+  this.setupMousewheelEvents = function(hoursInputEl, minutesInputEl, secondsInputEl) {
     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);
+      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());
+      if (!disabled) {
+        $scope.$apply(isScrollingUp(e) ? $scope.incrementHours() : $scope.decrementHours());
+      }
       e.preventDefault();
     });
 
     minutesInputEl.bind('mousewheel wheel', function(e) {
-      $scope.$apply(isScrollingUp(e) ? $scope.incrementMinutes() : $scope.decrementMinutes());
+      if (!disabled) {
+        $scope.$apply(isScrollingUp(e) ? $scope.incrementMinutes() : $scope.decrementMinutes());
+      }
       e.preventDefault();
     });
 
+     secondsInputEl.bind('mousewheel wheel', function(e) {
+      if (!disabled) {
+        $scope.$apply(isScrollingUp(e) ? $scope.incrementSeconds() : $scope.decrementSeconds());
+      }
+      e.preventDefault();
+    });
   };
 
   // Respond on up/down arrowkeys
-  this.setupArrowkeyEvents = function(hoursInputEl, minutesInputEl) {
+  this.setupArrowkeyEvents = function(hoursInputEl, minutesInputEl, secondsInputEl) {
     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();
+      if (!disabled) {
+        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();
+      if (!disabled) {
+        if (e.which === 38) { // up
+          e.preventDefault();
+          $scope.incrementMinutes();
+          $scope.$apply();
+        } else if (e.which === 40) { // down
+          e.preventDefault();
+          $scope.decrementMinutes();
+          $scope.$apply();
+        }
+      }
+    });
+
+    secondsInputEl.bind('keydown', function(e) {
+      if (!disabled) {
+        if (e.which === 38) { // up
+          e.preventDefault();
+          $scope.incrementSeconds();
+          $scope.$apply();
+        } else if (e.which === 40) { // down
+          e.preventDefault();
+          $scope.decrementSeconds();
+          $scope.$apply();
+        }
       }
     });
   };
 
-  this.setupInputEvents = function(hoursInputEl, minutesInputEl) {
+  this.setupInputEvents = function(hoursInputEl, minutesInputEl, secondsInputEl) {
     if ($scope.readonlyInput) {
       $scope.updateHours = angular.noop;
       $scope.updateMinutes = angular.noop;
+      $scope.updateSeconds = angular.noop;
       return;
     }
 
-    var invalidate = function(invalidHours, invalidMinutes) {
+    var invalidate = function(invalidHours, invalidMinutes, invalidSeconds) {
       ngModelCtrl.$setViewValue(null);
       ngModelCtrl.$setValidity('time', false);
       if (angular.isDefined(invalidHours)) {
         $scope.invalidHours = invalidHours;
       }
+
       if (angular.isDefined(invalidMinutes)) {
         $scope.invalidMinutes = invalidMinutes;
       }
+
+      if (angular.isDefined(invalidSeconds)) {
+        $scope.invalidSeconds = invalidSeconds;
+      }
     };
 
     $scope.updateHours = function() {
       var hours = getHoursFromTemplate(),
         minutes = getMinutesFromTemplate();
 
+      ngModelCtrl.$setDirty();
+
       if (angular.isDefined(hours) && angular.isDefined(minutes)) {
         selected.setHours(hours);
+        selected.setMinutes(minutes);
         if (selected < min || selected > max) {
           invalidate(true);
         } else {
@@ -6873,7 +5527,10 @@ angular.module('ui.bootstrap.timepicker', [])
     };
 
     hoursInputEl.bind('blur', function(e) {
-      if (!$scope.invalidHours && $scope.hours < 10) {
+      ngModelCtrl.$setTouched();
+      if ($scope.hours === null || $scope.hours === '') {
+        invalidate(true);
+      } else if (!$scope.invalidHours && $scope.hours < 10) {
         $scope.$apply(function() {
           $scope.hours = pad($scope.hours);
         });
@@ -6884,7 +5541,10 @@ angular.module('ui.bootstrap.timepicker', [])
       var minutes = getMinutesFromTemplate(),
         hours = getHoursFromTemplate();
 
+      ngModelCtrl.$setDirty();
+
       if (angular.isDefined(minutes) && angular.isDefined(hours)) {
+        selected.setHours(hours);
         selected.setMinutes(minutes);
         if (selected < min || selected > max) {
           invalidate(undefined, true);
@@ -6897,13 +5557,37 @@ angular.module('ui.bootstrap.timepicker', [])
     };
 
     minutesInputEl.bind('blur', function(e) {
-      if (!$scope.invalidMinutes && $scope.minutes < 10) {
+      ngModelCtrl.$setTouched();
+      if ($scope.minutes === null) {
+        invalidate(undefined, true);
+      } else if (!$scope.invalidMinutes && $scope.minutes < 10) {
         $scope.$apply(function() {
           $scope.minutes = pad($scope.minutes);
         });
       }
     });
 
+    $scope.updateSeconds = function() {
+      var seconds = getSecondsFromTemplate();
+
+      ngModelCtrl.$setDirty();
+
+      if (angular.isDefined(seconds)) {
+        selected.setSeconds(seconds);
+        refresh('s');
+      } else {
+        invalidate(undefined, undefined, true);
+      }
+    };
+
+    secondsInputEl.bind('blur', function(e) {
+      if (!$scope.invalidSeconds && $scope.seconds < 10) {
+        $scope.$apply( function() {
+          $scope.seconds = pad($scope.seconds);
+        });
+      }
+    });
+
   };
 
   this.render = function() {
@@ -6939,32 +5623,51 @@ angular.module('ui.bootstrap.timepicker', [])
     ngModelCtrl.$setValidity('time', true);
     $scope.invalidHours = false;
     $scope.invalidMinutes = false;
+    $scope.invalidSeconds = false;
   }
 
   function updateTemplate(keyboardChange) {
-    var hours = selected.getHours(), minutes = selected.getMinutes();
+    if (!ngModelCtrl.$modelValue) {
+      $scope.hours = null;
+      $scope.minutes = null;
+      $scope.seconds = null;
+      $scope.meridian = meridians[0];
+    } else {
+      var hours = selected.getHours(),
+        minutes = selected.getMinutes(),
+        seconds = selected.getSeconds();
 
-    if ($scope.showMeridian) {
-      hours = (hours === 0 || hours === 12) ? 12 : hours % 12; // Convert 24 to 12 hour system
-    }
+      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];
 
-    $scope.hours = keyboardChange === 'h' ? hours : pad(hours);
-    if (keyboardChange !== 'm') {
-      $scope.minutes = pad(minutes);
+      if (keyboardChange !== 's') {
+        $scope.seconds = pad(seconds);
+      }
+      $scope.meridian = selected.getHours() < 12 ? meridians[0] : meridians[1];
     }
-    $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 addSecondsToSelected(seconds) {
+    selected = addSeconds(selected, seconds);
+    refresh();
   }
 
-  function addMinutesToSelected(minutes) {
-    selected = addMinutes(selected, minutes);
-    refresh();
+  function addMinutes(selected, minutes) {
+    return addSeconds(selected, minutes*60);
+  }
+
+  function addSeconds(date, seconds) {
+    var dt = new Date(date.getTime() + seconds * 1000);
+    var newDate = new Date(date);
+    newDate.setHours(dt.getHours(), dt.getMinutes(), dt.getSeconds());
+    return newDate;
   }
 
   $scope.showSpinners = angular.isDefined($attrs.showSpinners) ?
@@ -6972,89 +5675,69 @@ angular.module('ui.bootstrap.timepicker', [])
 
   $scope.incrementHours = function() {
     if (!$scope.noIncrementHours()) {
-      addMinutesToSelected(hourStep * 60);
+      addSecondsToSelected(hourStep * 60 * 60);
     }
   };
 
   $scope.decrementHours = function() {
     if (!$scope.noDecrementHours()) {
-      addMinutesToSelected(-hourStep * 60);
+      addSecondsToSelected(-hourStep * 60 * 60);
     }
   };
 
   $scope.incrementMinutes = function() {
     if (!$scope.noIncrementMinutes()) {
-      addMinutesToSelected(minuteStep);
+      addSecondsToSelected(minuteStep * 60);
     }
   };
 
   $scope.decrementMinutes = function() {
     if (!$scope.noDecrementMinutes()) {
-      addMinutesToSelected(-minuteStep);
+      addSecondsToSelected(-minuteStep * 60);
     }
   };
 
-  $scope.toggleMeridian = function() {
-    if (!$scope.noToggleMeridian()) {
-      addMinutesToSelected(12 * 60 * (selected.getHours() < 12 ? 1 : -1));
+  $scope.incrementSeconds = function() {
+    if (!$scope.noIncrementSeconds()) {
+      addSecondsToSelected(secondStep);
     }
   };
-}])
-
-.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'));
-      }
+  $scope.decrementSeconds = function() {
+    if (!$scope.noDecrementSeconds()) {
+      addSecondsToSelected(-secondStep);
     }
   };
-});
-
-/* Deprecated timepicker below */
-
-angular.module('ui.bootstrap.timepicker')
 
-.value('$timepickerSuppressWarning', false)
+  $scope.toggleMeridian = function() {
+    var minutes = getMinutesFromTemplate(),
+        hours = getHoursFromTemplate();
 
-.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.');
-  }
+    if (!$scope.noToggleMeridian()) {
+      if (angular.isDefined(minutes) && angular.isDefined(hours)) {
+        addSecondsToSelected(12 * 60 * (selected.getHours() < 12 ? 60 : -60));
+      } else {
+        $scope.meridian = $scope.meridian === meridians[0] ? meridians[1] : meridians[0];
+      }
+    }
+  };
 
-  angular.extend(this, $controller('UibTimepickerController', {
-    $scope: $scope,
-    $element: $element,
-    $attrs: $attrs
-  }));
+  $scope.blur = function() {
+    ngModelCtrl.$setTouched();
+  };
 }])
 
-.directive('timepicker', ['$log', '$timepickerSuppressWarning', function($log, $timepickerSuppressWarning) {
+.directive('uibTimepicker', ['uibTimepickerConfig', function(uibTimepickerConfig) {
   return {
-    restrict: 'EA',
-    require: ['timepicker', '?^ngModel'],
-    controller: 'TimepickerController',
+    require: ['uibTimepicker', '?^ngModel'],
+    controller: 'UibTimepickerController',
     controllerAs: 'timepicker',
     replace: true,
     scope: {},
     templateUrl: function(element, attrs) {
-      return attrs.templateUrl || 'template/timepicker/timepicker.html';
+      return attrs.templateUrl || uibTimepickerConfig.templateUrl;
     },
     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) {
@@ -7064,7 +5747,7 @@ angular.module('ui.bootstrap.timepicker')
   };
 }]);
 
-angular.module('ui.bootstrap.typeahead', ['ui.bootstrap.position'])
+angular.module('ui.bootstrap.typeahead', ['ui.bootstrap.debounce', 'ui.bootstrap.position'])
 
 /**
  * A helper service that can parse typeahead's syntax (string provided by users)
@@ -7092,8 +5775,8 @@ angular.module('ui.bootstrap.typeahead', ['ui.bootstrap.position'])
     };
   }])
 
-  .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) {
+  .controller('UibTypeaheadController', ['$scope', '$element', '$attrs', '$compile', '$parse', '$q', '$timeout', '$document', '$window', '$rootScope', '$$debounce', '$uibPosition', 'uibTypeaheadParser',
+    function(originalScope, element, attrs, $compile, $parse, $q, $timeout, $document, $window, $rootScope, $$debounce, $position, typeaheadParser) {
     var HOT_KEYS = [9, 13, 27, 38, 40];
     var eventDebounceTime = 200;
     var modelCtrl, ngModelOptions;
@@ -7110,6 +5793,9 @@ angular.module('ui.bootstrap.typeahead', ['ui.bootstrap.position'])
 
     //should it restrict model values to the ones selected from the popup only?
     var isEditable = originalScope.$eval(attrs.typeaheadEditable) !== false;
+    originalScope.$watch(attrs.typeaheadEditable, function (newVal) {
+      isEditable = newVal !== false;
+    });
 
     //binding to a variable that indicates if matches are being retrieved asynchronously
     var isLoadingSetter = $parse(attrs.typeaheadLoading).assign || angular.noop;
@@ -7125,15 +5811,21 @@ angular.module('ui.bootstrap.typeahead', ['ui.bootstrap.position'])
 
     var inputFormatter = attrs.typeaheadInputFormatter ? $parse(attrs.typeaheadInputFormatter) : undefined;
 
-    var appendToBody =  attrs.typeaheadAppendToBody ? originalScope.$eval(attrs.typeaheadAppendToBody) : false;
+    var appendToBody = attrs.typeaheadAppendToBody ? originalScope.$eval(attrs.typeaheadAppendToBody) : false;
 
-    var appendToElementId =  attrs.typeaheadAppendToElementId || false;
+    var appendTo = attrs.typeaheadAppendTo ?
+      originalScope.$eval(attrs.typeaheadAppendTo) : null;
 
     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;
 
+    //binding to a variable that indicates if dropdown is open
+    var isOpenSetter = $parse(attrs.typeaheadIsOpen).assign || angular.noop;
+
+    var showHint = originalScope.$eval(attrs.typeaheadShowHint) || false;
+
     //INTERNAL VARIABLES
 
     //model setter executed upon match selection
@@ -7143,9 +5835,9 @@ angular.module('ui.bootstrap.typeahead', ['ui.bootstrap.position'])
       if (angular.isFunction(parsedModel(originalScope)) &&
         ngModelOptions && ngModelOptions.$options && ngModelOptions.$options.getterSetter) {
         return invokeModelSetter(scope, {$$$p: newValue});
-      } else {
-        return parsedModel.assign(scope, newValue);
       }
+
+      return parsedModel.assign(scope, newValue);
     };
 
     //expressions used by typeahead
@@ -7174,16 +5866,46 @@ angular.module('ui.bootstrap.typeahead', ['ui.bootstrap.position'])
       'aria-owns': popupId
     });
 
+    var inputsContainer, hintInputElem;
+    //add read-only input to show hint
+    if (showHint) {
+      inputsContainer = angular.element('<div></div>');
+      inputsContainer.css('position', 'relative');
+      element.after(inputsContainer);
+      hintInputElem = element.clone();
+      hintInputElem.attr('placeholder', '');
+      hintInputElem.val('');
+      hintInputElem.css({
+        'position': 'absolute',
+        'top': '0px',
+        'left': '0px',
+        'border-color': 'transparent',
+        'box-shadow': 'none',
+        'opacity': 1,
+        'background': 'none 0% 0% / auto repeat scroll padding-box border-box rgb(255, 255, 255)',
+        'color': '#999'
+      });
+      element.css({
+        'position': 'relative',
+        'vertical-align': 'top',
+        'background-color': 'transparent'
+      });
+      inputsContainer.append(hintInputElem);
+      hintInputElem.after(element);
+    }
+
     //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)',
+      select: 'select(activeIdx, evt)',
       'move-in-progress': 'moveInProgress',
       query: 'query',
-      position: 'position'
+      position: 'position',
+      'assign-is-open': 'assignIsOpen(isOpen)',
+      debounce: 'debounceUpdate'
     });
     //custom item template
     if (angular.isDefined(attrs.typeaheadTemplateUrl)) {
@@ -7194,10 +5916,17 @@ angular.module('ui.bootstrap.typeahead', ['ui.bootstrap.position'])
       popUpEl.attr('popup-template-url', attrs.typeaheadPopupTemplateUrl);
     }
 
+    var resetHint = function() {
+      if (showHint) {
+        hintInputElem.val('');
+      }
+    };
+
     var resetMatches = function() {
       scope.matches = [];
       scope.activeIdx = -1;
       element.attr('aria-expanded', false);
+      resetHint();
     };
 
     var getMatchId = function(index) {
@@ -7222,14 +5951,14 @@ angular.module('ui.bootstrap.typeahead', ['ui.bootstrap.position'])
       return false;
     };
 
-    var getMatchesAsync = function(inputValue) {
+    var getMatchesAsync = function(inputValue, evt) {
       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);
+        var onCurrentRequest = inputValue === modelCtrl.$viewValue;
         if (onCurrentRequest && hasFocus) {
           if (matches && matches.length > 0) {
             scope.activeIdx = focusFirst ? 0 : -1;
@@ -7256,7 +5985,23 @@ angular.module('ui.bootstrap.typeahead', ['ui.bootstrap.position'])
 
             //Select the single remaining option if user input matches
             if (selectOnExact && scope.matches.length === 1 && inputIsExactMatch(inputValue, 0)) {
-              scope.select(0);
+              if (angular.isNumber(scope.debounceUpdate) || angular.isObject(scope.debounceUpdate)) {
+                $$debounce(function() {
+                  scope.select(0, evt);
+                }, angular.isNumber(scope.debounceUpdate) ? scope.debounceUpdate : scope.debounceUpdate['default']);
+              } else {
+                scope.select(0, evt);
+              }
+            }
+
+            if (showHint) {
+              var firstLabel = scope.matches[0].label;
+              if (inputValue.length > 0 && firstLabel.slice(0, inputValue.length).toUpperCase() === inputValue.toUpperCase()) {
+                hintInputElem.val(inputValue + firstLabel.slice(inputValue.length));
+              }
+              else {
+                hintInputElem.val('');
+              }
             }
           } else {
             resetMatches();
@@ -7275,12 +6020,20 @@ angular.module('ui.bootstrap.typeahead', ['ui.bootstrap.position'])
 
     // bind events only if appendToBody params exist - performance feature
     if (appendToBody) {
-      angular.element($window).bind('resize', fireRecalculating);
-      $document.find('body').bind('scroll', fireRecalculating);
+      angular.element($window).on('resize', fireRecalculating);
+      $document.find('body').on('scroll', fireRecalculating);
     }
 
-    // Declare the timeout promise var outside the function scope so that stacked calls can be cancelled later
-    var timeoutEventPromise;
+    // Declare the debounced function outside recalculating for
+    // proper debouncing
+    var debouncedRecalculate = $$debounce(function() {
+      // if popup is visible
+      if (scope.matches.length) {
+        recalculatePosition();
+      }
+
+      scope.moveInProgress = false;
+    }, eventDebounceTime);
 
     // Default progress type
     scope.moveInProgress = false;
@@ -7291,20 +6044,7 @@ angular.module('ui.bootstrap.typeahead', ['ui.bootstrap.position'])
         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);
+      debouncedRecalculate();
     }
 
     // recalculate actual position and set new values to scope
@@ -7334,7 +6074,11 @@ angular.module('ui.bootstrap.typeahead', ['ui.bootstrap.position'])
 
     resetMatches();
 
-    scope.select = function(activeIdx) {
+    scope.assignIsOpen = function (isOpen) {
+      isOpenSetter(originalScope, isOpen);
+    };
+
+    scope.select = function(activeIdx, evt) {
       //called from within the $digest() cycle
       var locals = {};
       var model, item;
@@ -7349,7 +6093,8 @@ angular.module('ui.bootstrap.typeahead', ['ui.bootstrap.position'])
       onSelectCallback(originalScope, {
         $item: item,
         $model: model,
-        $label: parserResult.viewMapper(originalScope, locals)
+        $label: parserResult.viewMapper(originalScope, locals),
+        $event: evt
       });
 
       resetMatches();
@@ -7362,7 +6107,7 @@ angular.module('ui.bootstrap.typeahead', ['ui.bootstrap.position'])
     };
 
     //bind keyboard events: arrows up(38) / down(40), enter(13) and tab(9), esc(27)
-    element.bind('keydown', function(evt) {
+    element.on('keydown', function(evt) {
       //typeahead is open and an "interesting" key was pressed
       if (scope.matches.length === 0 || HOT_KEYS.indexOf(evt.which) === -1) {
         return;
@@ -7376,32 +6121,67 @@ angular.module('ui.bootstrap.typeahead', ['ui.bootstrap.position'])
       }
 
       evt.preventDefault();
+      var target;
+      switch (evt.which) {
+        case 9:
+        case 13:
+          scope.$apply(function () {
+            if (angular.isNumber(scope.debounceUpdate) || angular.isObject(scope.debounceUpdate)) {
+              $$debounce(function() {
+                scope.select(scope.activeIdx, evt);
+              }, angular.isNumber(scope.debounceUpdate) ? scope.debounceUpdate : scope.debounceUpdate['default']);
+            } else {
+              scope.select(scope.activeIdx, evt);
+            }
+          });
+          break;
+        case 27:
+          evt.stopPropagation();
 
-      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();
+          break;
+        case 38:
+          scope.activeIdx = (scope.activeIdx > 0 ? scope.activeIdx : scope.matches.length) - 1;
+          scope.$digest();
+          target = popUpEl.find('li')[scope.activeIdx];
+          target.parentNode.scrollTop = target.offsetTop;
+          break;
+        case 40:
+          scope.activeIdx = (scope.activeIdx + 1) % scope.matches.length;
+          scope.$digest();
+          target = popUpEl.find('li')[scope.activeIdx];
+          target.parentNode.scrollTop = target.offsetTop;
+          break;
+      }
+    });
 
-        resetMatches();
-        scope.$digest();
+    element.bind('focus', function (evt) {
+      hasFocus = true;
+      if (minLength === 0 && !modelCtrl.$viewValue) {
+        $timeout(function() {
+          getMatchesAsync(modelCtrl.$viewValue, evt);
+        }, 0);
       }
     });
 
-    element.bind('blur', function() {
+    element.bind('blur', function(evt) {
       if (isSelectOnBlur && scope.matches.length && scope.activeIdx !== -1 && !selected) {
         selected = true;
         scope.$apply(function() {
-          scope.select(scope.activeIdx);
+          if (angular.isObject(scope.debounceUpdate) && angular.isNumber(scope.debounceUpdate.blur)) {
+            $$debounce(function() {
+              scope.select(scope.activeIdx, evt);
+            }, scope.debounceUpdate.blur);
+          } else {
+            scope.select(scope.activeIdx, evt);
+          }
         });
       }
+      if (!isEditable && modelCtrl.$error.editable) {
+        modelCtrl.$viewValue = '';
+        element.val('');
+      }
       hasFocus = false;
       selected = false;
     });
@@ -7418,28 +6198,32 @@ angular.module('ui.bootstrap.typeahead', ['ui.bootstrap.position'])
       }
     };
 
-    $document.bind('click', dismissClickHandler);
+    $document.on('click', dismissClickHandler);
 
     originalScope.$on('$destroy', function() {
-      $document.unbind('click', dismissClickHandler);
-      if (appendToBody || appendToElementId) {
+      $document.off('click', dismissClickHandler);
+      if (appendToBody || appendTo) {
         $popup.remove();
       }
 
       if (appendToBody) {
-        angular.element($window).unbind('resize', fireRecalculating);
-        $document.find('body').unbind('scroll', fireRecalculating);
+        angular.element($window).off('resize', fireRecalculating);
+        $document.find('body').off('scroll', fireRecalculating);
       }
       // Prevent jQuery cache memory leak
       popUpEl.remove();
+
+      if (showHint) {
+          inputsContainer.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 if (appendTo) {
+      angular.element(appendTo).eq(0).append($popup);
     } else {
       element.after($popup);
     }
@@ -7448,6 +6232,8 @@ angular.module('ui.bootstrap.typeahead', ['ui.bootstrap.position'])
       modelCtrl = _modelCtrl;
       ngModelOptions = _ngModelOptions;
 
+      scope.debounceUpdate = modelCtrl.$options && $parse(modelCtrl.$options.debounce)(originalScope);
+
       //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) {
@@ -7468,16 +6254,16 @@ angular.module('ui.bootstrap.typeahead', ['ui.bootstrap.position'])
 
         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;
-          }
         }
+
+        if (!inputValue) {
+          // Reset in case user had typed something previously.
+          modelCtrl.$setValidity('editable', true);
+          return null;
+        }
+
+        modelCtrl.$setValidity('editable', false);
+        return undefined;
       });
 
       modelCtrl.$formatters.push(function(modelValue) {
@@ -7494,16 +6280,16 @@ angular.module('ui.bootstrap.typeahead', ['ui.bootstrap.position'])
         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;
         }
+
+        //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;
       });
     };
   }])
@@ -7518,7 +6304,7 @@ angular.module('ui.bootstrap.typeahead', ['ui.bootstrap.position'])
     };
   })
 
-  .directive('uibTypeaheadPopup', function() {
+  .directive('uibTypeaheadPopup', ['$$debounce', function($$debounce) {
     return {
       scope: {
         matches: '=',
@@ -7526,574 +6312,64 @@ angular.module('ui.bootstrap.typeahead', ['ui.bootstrap.position'])
         active: '=',
         position: '&',
         moveInProgress: '=',
-        select: '&'
+        select: '&',
+        assignIsOpen: '&',
+        debounce: '&'
       },
       replace: true,
       templateUrl: function(element, attrs) {
-        return attrs.popupTemplateUrl || 'template/typeahead/typeahead-popup.html';
+        return attrs.popupTemplateUrl || 'uib/template/typeahead/typeahead-popup.html';
       },
       link: function(scope, element, attrs) {
         scope.templateUrl = attrs.templateUrl;
 
         scope.isOpen = function() {
-          return scope.matches.length > 0;
+          var isDropdownOpen = scope.matches.length > 0;
+          scope.assignIsOpen({ isOpen: isDropdownOpen });
+          return isDropdownOpen;
         };
 
         scope.isActive = function(matchIdx) {
-          return scope.active == 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);
+        scope.selectMatch = function(activeIdx, evt) {
+          var debounce = scope.debounce();
+          if (angular.isNumber(debounce) || angular.isObject(debounce)) {
+            $$debounce(function() {
+              scope.select({activeIdx: activeIdx, evt: evt});
+            }, angular.isNumber(debounce) ? debounce : debounce['default']);
           } 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();
-            }
+            scope.select({activeIdx: activeIdx, evt: evt});
           }
         };
-
-        $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) {
+  .directive('uibTypeaheadMatch', ['$templateRequest', '$compile', '$parse', function($templateRequest, $compile, $parse) {
     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';
+      link: function(scope, element, attrs) {
+        var tplUrl = $parse(attrs.templateUrl)(scope.$parent) || 'uib/template/typeahead/typeahead-match.html';
         $templateRequest(tplUrl).then(function(tplContent) {
-          $compile(tplContent.trim())(scope, function(clonedElement) {
-            element.replaceWith(clonedElement);
-          });
+          var tplEl = angular.element(tplContent.trim());
+          element.replaceWith(tplEl);
+          $compile(tplEl)(scope);
         });
       }
     };
   }])
-  
-  .filter('typeaheadHighlight', ['$sce', '$injector', '$log', '$typeaheadSuppressWarning', function($sce, $injector, $log, $typeaheadSuppressWarning) {
+
+  .filter('uibTypeaheadHighlight', ['$sce', '$injector', '$log', function($sce, $injector, $log) {
     var isSanitizePresent;
     isSanitizePresent = $injector.has('$sanitize');
 
@@ -8108,29 +6384,23 @@ angular.module('ui.bootstrap.typeahead')
     }
 
     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
+      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" +
+angular.module("uib/template/accordion/accordion-group.html", []).run(["$templateCache", function($templateCache) {
+  $templateCache.put("uib/template/accordion/accordion-group.html",
+    "<div class=\"panel\" ng-class=\"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" +
+    "      <div tabindex=\"0\" class=\"accordion-toggle\" ng-click=\"toggleOpen()\" uib-accordion-transclude=\"heading\"><span ng-class=\"{'text-muted': isDisabled}\">{{heading}}</span></div>\n" +
     "    </h4>\n" +
     "  </div>\n" +
     "  <div class=\"panel-collapse collapse\" uib-collapse=\"!isOpen\">\n" +
@@ -8140,13 +6410,13 @@ angular.module("template/accordion/accordion-group.html", []).run(["$templateCac
     "");
 }]);
 
-angular.module("template/accordion/accordion.html", []).run(["$templateCache", function($templateCache) {
-  $templateCache.put("template/accordion/accordion.html",
+angular.module("uib/template/accordion/accordion.html", []).run(["$templateCache", function($templateCache) {
+  $templateCache.put("uib/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",
+angular.module("uib/template/alert/alert.html", []).run(["$templateCache", function($templateCache) {
+  $templateCache.put("uib/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" +
@@ -8157,8 +6427,8 @@ angular.module("template/alert/alert.html", []).run(["$templateCache", function(
     "");
 }]);
 
-angular.module("template/carousel/carousel.html", []).run(["$templateCache", function($templateCache) {
-  $templateCache.put("template/carousel/carousel.html",
+angular.module("uib/template/carousel/carousel.html", []).run(["$templateCache", function($templateCache) {
+  $templateCache.put("uib/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" +
@@ -8177,31 +6447,31 @@ angular.module("template/carousel/carousel.html", []).run(["$templateCache", fun
     "</div>");
 }]);
 
-angular.module("template/carousel/slide.html", []).run(["$templateCache", function($templateCache) {
-  $templateCache.put("template/carousel/slide.html",
+angular.module("uib/template/carousel/slide.html", []).run(["$templateCache", function($templateCache) {
+  $templateCache.put("uib/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" +
+angular.module("uib/template/datepicker/datepicker.html", []).run(["$templateCache", function($templateCache) {
+  $templateCache.put("uib/template/datepicker/datepicker.html",
+    "<div class=\"uib-datepicker\" 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" +
+angular.module("uib/template/datepicker/day.html", []).run(["$templateCache", function($templateCache) {
+  $templateCache.put("uib/template/datepicker/day.html",
+    "<table class=\"uib-daypicker\" 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" +
+    "      <th><button type=\"button\" class=\"btn btn-default btn-sm pull-left uib-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 uib-title\" 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 uib-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" +
@@ -8209,10 +6479,19 @@ angular.module("template/datepicker/day.html", []).run(["$templateCache", functi
     "    </tr>\n" +
     "  </thead>\n" +
     "  <tbody>\n" +
-    "    <tr ng-repeat=\"row in rows track by $index\">\n" +
+    "    <tr class=\"uib-weeks\" 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 ng-repeat=\"dt in row\" class=\"uib-day text-center\" role=\"gridcell\"\n" +
+    "        id=\"{{::dt.uid}}\"\n" +
+    "        ng-class=\"::dt.customClass\">\n" +
+    "        <button type=\"button\" style=\"min-width:100%;\" class=\"btn btn-default btn-sm\"\n" +
+    "          uib-is-class=\"\n" +
+    "            'btn-info' for selectedDt,\n" +
+    "            'active' for activeDt\n" +
+    "            on dt\"\n" +
+    "          ng-click=\"select(dt.date)\"\n" +
+    "          ng-disabled=\"::dt.disabled\"\n" +
+    "          tabindex=\"-1\"><span ng-class=\"::{'text-muted': dt.secondary, 'text-info': dt.current}\">{{::dt.label}}</span></button>\n" +
     "      </td>\n" +
     "    </tr>\n" +
     "  </tbody>\n" +
@@ -8220,20 +6499,29 @@ angular.module("template/datepicker/day.html", []).run(["$templateCache", functi
     "");
 }]);
 
-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" +
+angular.module("uib/template/datepicker/month.html", []).run(["$templateCache", function($templateCache) {
+  $templateCache.put("uib/template/datepicker/month.html",
+    "<table class=\"uib-monthpicker\" 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" +
+    "      <th><button type=\"button\" class=\"btn btn-default btn-sm pull-left uib-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 uib-title\" 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 uib-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" +
+    "    <tr class=\"uib-months\" ng-repeat=\"row in rows track by $index\">\n" +
+    "      <td ng-repeat=\"dt in row\" class=\"uib-month text-center\" role=\"gridcell\"\n" +
+    "        id=\"{{::dt.uid}}\"\n" +
+    "        ng-class=\"::dt.customClass\">\n" +
+    "        <button type=\"button\" style=\"min-width:100%;\" class=\"btn btn-default\"\n" +
+    "          uib-is-class=\"\n" +
+    "            'btn-info' for selectedDt,\n" +
+    "            'active' for activeDt\n" +
+    "            on dt\"\n" +
+    "          ng-click=\"select(dt.date)\"\n" +
+    "          ng-disabled=\"::dt.disabled\"\n" +
+    "          tabindex=\"-1\"><span ng-class=\"::{'text-info': dt.current}\">{{::dt.label}}</span></button>\n" +
     "      </td>\n" +
     "    </tr>\n" +
     "  </tbody>\n" +
@@ -8241,35 +6529,44 @@ angular.module("template/datepicker/month.html", []).run(["$templateCache", func
     "");
 }]);
 
-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" +
+angular.module("uib/template/datepicker/popup.html", []).run(["$templateCache", function($templateCache) {
+  $templateCache.put("uib/template/datepicker/popup.html",
+    "<ul class=\"uib-datepicker-popup 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" +
+    "	<li ng-if=\"showButtonBar\" style=\"padding:10px 9px 2px\" class=\"uib-button-bar\">\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" +
+    "			<button type=\"button\" class=\"btn btn-sm btn-info uib-datepicker-current\" ng-click=\"select('today')\" ng-disabled=\"isDisabled('today')\">{{ getText('current') }}</button>\n" +
+    "			<button type=\"button\" class=\"btn btn-sm btn-danger uib-clear\" 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" +
+    "		<button type=\"button\" class=\"btn btn-sm btn-success pull-right uib-close\" 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" +
+angular.module("uib/template/datepicker/year.html", []).run(["$templateCache", function($templateCache) {
+  $templateCache.put("uib/template/datepicker/year.html",
+    "<table class=\"uib-yearpicker\" 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" +
+    "      <th><button type=\"button\" class=\"btn btn-default btn-sm pull-left uib-left\" ng-click=\"move(-1)\" tabindex=\"-1\"><i class=\"glyphicon glyphicon-chevron-left\"></i></button></th>\n" +
+    "      <th colspan=\"{{::columns - 2}}\"><button id=\"{{::uniqueId}}-title\" role=\"heading\" aria-live=\"assertive\" aria-atomic=\"true\" type=\"button\" class=\"btn btn-default btn-sm uib-title\" 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 uib-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" +
+    "    <tr class=\"uib-years\" ng-repeat=\"row in rows track by $index\">\n" +
+    "      <td ng-repeat=\"dt in row\" class=\"uib-year text-center\" role=\"gridcell\"\n" +
+    "        id=\"{{::dt.uid}}\"\n" +
+    "        ng-class=\"::dt.customClass\">\n" +
+    "        <button type=\"button\" style=\"min-width:100%;\" class=\"btn btn-default\"\n" +
+    "          uib-is-class=\"\n" +
+    "            'btn-info' for selectedDt,\n" +
+    "            'active' for activeDt\n" +
+    "            on dt\"\n" +
+    "          ng-click=\"select(dt.date)\"\n" +
+    "          ng-disabled=\"::dt.disabled\"\n" +
+    "          tabindex=\"-1\"><span ng-class=\"::{'text-info': dt.current}\">{{::dt.label}}</span></button>\n" +
     "      </td>\n" +
     "    </tr>\n" +
     "  </tbody>\n" +
@@ -8277,17 +6574,18 @@ angular.module("template/datepicker/year.html", []).run(["$templateCache", funct
     "");
 }]);
 
-angular.module("template/modal/backdrop.html", []).run(["$templateCache", function($templateCache) {
-  $templateCache.put("template/modal/backdrop.html",
-    "<div uib-modal-animation-class=\"fade\"\n" +
+angular.module("uib/template/modal/backdrop.html", []).run(["$templateCache", function($templateCache) {
+  $templateCache.put("uib/template/modal/backdrop.html",
+    "<div class=\"modal-backdrop\"\n" +
+    "     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",
+angular.module("uib/template/modal/window.html", []).run(["$templateCache", function($templateCache) {
+  $templateCache.put("uib/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" +
@@ -8297,8 +6595,8 @@ angular.module("template/modal/window.html", []).run(["$templateCache", function
     "");
 }]);
 
-angular.module("template/pagination/pager.html", []).run(["$templateCache", function($templateCache) {
-  $templateCache.put("template/pagination/pager.html",
+angular.module("uib/template/pager/pager.html", []).run(["$templateCache", function($templateCache) {
+  $templateCache.put("uib/template/pager/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" +
@@ -8306,8 +6604,8 @@ angular.module("template/pagination/pager.html", []).run(["$templateCache", func
     "");
 }]);
 
-angular.module("template/pagination/pagination.html", []).run(["$templateCache", function($templateCache) {
-  $templateCache.put("template/pagination/pagination.html",
+angular.module("uib/template/pagination/pagination.html", []).run(["$templateCache", function($templateCache) {
+  $templateCache.put("uib/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" +
@@ -8318,9 +6616,9 @@ angular.module("template/pagination/pagination.html", []).run(["$templateCache",
     "");
 }]);
 
-angular.module("template/tooltip/tooltip-html-popup.html", []).run(["$templateCache", function($templateCache) {
-  $templateCache.put("template/tooltip/tooltip-html-popup.html",
-    "<div\n" +
+angular.module("uib/template/tooltip/tooltip-html-popup.html", []).run(["$templateCache", function($templateCache) {
+  $templateCache.put("uib/template/tooltip/tooltip-html-popup.html",
+    "<div class=\"tooltip\"\n" +
     "  tooltip-animation-class=\"fade\"\n" +
     "  uib-tooltip-classes\n" +
     "  ng-class=\"{ in: isOpen() }\">\n" +
@@ -8330,9 +6628,21 @@ angular.module("template/tooltip/tooltip-html-popup.html", []).run(["$templateCa
     "");
 }]);
 
-angular.module("template/tooltip/tooltip-popup.html", []).run(["$templateCache", function($templateCache) {
-  $templateCache.put("template/tooltip/tooltip-popup.html",
-    "<div\n" +
+angular.module("template/tooltip/tooltip-html-unsafe-popup.html", []).run(["$templateCache", function($templateCache) {
+  $templateCache.put("template/tooltip/tooltip-html-unsafe-popup.html",
+    "<div class=\"tooltip\"\n" +
+    "  tooltip-animation-class=\"fade\"\n" +
+    "  tooltip-classes\n" +
+    "  ng-class=\"{ in: isOpen() }\">\n" +
+    "  <div class=\"tooltip-arrow\"></div>\n" +
+    "  <div class=\"tooltip-inner\" bind-html-unsafe=\"content\"></div>\n" +
+    "</div>\n" +
+    "");
+}]);
+
+angular.module("uib/template/tooltip/tooltip-popup.html", []).run(["$templateCache", function($templateCache) {
+  $templateCache.put("uib/template/tooltip/tooltip-popup.html",
+    "<div class=\"tooltip\"\n" +
     "  tooltip-animation-class=\"fade\"\n" +
     "  uib-tooltip-classes\n" +
     "  ng-class=\"{ in: isOpen() }\">\n" +
@@ -8342,9 +6652,9 @@ angular.module("template/tooltip/tooltip-popup.html", []).run(["$templateCache",
     "");
 }]);
 
-angular.module("template/tooltip/tooltip-template-popup.html", []).run(["$templateCache", function($templateCache) {
-  $templateCache.put("template/tooltip/tooltip-template-popup.html",
-    "<div\n" +
+angular.module("uib/template/tooltip/tooltip-template-popup.html", []).run(["$templateCache", function($templateCache) {
+  $templateCache.put("uib/template/tooltip/tooltip-template-popup.html",
+    "<div class=\"tooltip\"\n" +
     "  tooltip-animation-class=\"fade\"\n" +
     "  uib-tooltip-classes\n" +
     "  ng-class=\"{ in: isOpen() }\">\n" +
@@ -8356,9 +6666,10 @@ angular.module("template/tooltip/tooltip-template-popup.html", []).run(["$templa
     "");
 }]);
 
-angular.module("template/popover/popover-html.html", []).run(["$templateCache", function($templateCache) {
-  $templateCache.put("template/popover/popover-html.html",
-    "<div tooltip-animation-class=\"fade\"\n" +
+angular.module("uib/template/popover/popover-html.html", []).run(["$templateCache", function($templateCache) {
+  $templateCache.put("uib/template/popover/popover-html.html",
+    "<div class=\"popover\"\n" +
+    "  tooltip-animation-class=\"fade\"\n" +
     "  uib-tooltip-classes\n" +
     "  ng-class=\"{ in: isOpen() }\">\n" +
     "  <div class=\"arrow\"></div>\n" +
@@ -8371,9 +6682,10 @@ angular.module("template/popover/popover-html.html", []).run(["$templateCache",
     "");
 }]);
 
-angular.module("template/popover/popover-template.html", []).run(["$templateCache", function($templateCache) {
-  $templateCache.put("template/popover/popover-template.html",
-    "<div tooltip-animation-class=\"fade\"\n" +
+angular.module("uib/template/popover/popover-template.html", []).run(["$templateCache", function($templateCache) {
+  $templateCache.put("uib/template/popover/popover-template.html",
+    "<div class=\"popover\"\n" +
+    "  tooltip-animation-class=\"fade\"\n" +
     "  uib-tooltip-classes\n" +
     "  ng-class=\"{ in: isOpen() }\">\n" +
     "  <div class=\"arrow\"></div>\n" +
@@ -8388,9 +6700,10 @@ angular.module("template/popover/popover-template.html", []).run(["$templateCach
     "");
 }]);
 
-angular.module("template/popover/popover.html", []).run(["$templateCache", function($templateCache) {
-  $templateCache.put("template/popover/popover.html",
-    "<div tooltip-animation-class=\"fade\"\n" +
+angular.module("uib/template/popover/popover.html", []).run(["$templateCache", function($templateCache) {
+  $templateCache.put("uib/template/popover/popover.html",
+    "<div class=\"popover\"\n" +
+    "  tooltip-animation-class=\"fade\"\n" +
     "  uib-tooltip-classes\n" +
     "  ng-class=\"{ in: isOpen() }\">\n" +
     "  <div class=\"arrow\"></div>\n" +
@@ -8403,27 +6716,27 @@ angular.module("template/popover/popover.html", []).run(["$templateCache", funct
     "");
 }]);
 
-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("uib/template/progressbar/bar.html", []).run(["$templateCache", function($templateCache) {
+  $templateCache.put("uib/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}}\" ng-transclude></div>\n" +
     "");
 }]);
 
-angular.module("template/progressbar/progress.html", []).run(["$templateCache", function($templateCache) {
-  $templateCache.put("template/progressbar/progress.html",
+angular.module("uib/template/progressbar/progress.html", []).run(["$templateCache", function($templateCache) {
+  $templateCache.put("uib/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",
+angular.module("uib/template/progressbar/progressbar.html", []).run(["$templateCache", function($templateCache) {
+  $templateCache.put("uib/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 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}}\" ng-transclude></div>\n" +
     "</div>\n" +
     "");
 }]);
 
-angular.module("template/rating/rating.html", []).run(["$templateCache", function($templateCache) {
-  $templateCache.put("template/rating/rating.html",
+angular.module("uib/template/rating/rating.html", []).run(["$templateCache", function($templateCache) {
+  $templateCache.put("uib/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" +
@@ -8431,16 +6744,16 @@ angular.module("template/rating/rating.html", []).run(["$templateCache", functio
     "");
 }]);
 
-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" +
+angular.module("uib/template/tabs/tab.html", []).run(["$templateCache", function($templateCache) {
+  $templateCache.put("uib/template/tabs/tab.html",
+    "<li ng-class=\"{active: active, disabled: disabled}\" class=\"uib-tab\">\n" +
+    "  <div ng-click=\"select()\" uib-tab-heading-transclude>{{heading}}</div>\n" +
     "</li>\n" +
     "");
 }]);
 
-angular.module("template/tabs/tabset.html", []).run(["$templateCache", function($templateCache) {
-  $templateCache.put("template/tabs/tabset.html",
+angular.module("uib/template/tabs/tabset.html", []).run(["$templateCache", function($templateCache) {
+  $templateCache.put("uib/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" +
@@ -8454,30 +6767,38 @@ angular.module("template/tabs/tabset.html", []).run(["$templateCache", function(
     "");
 }]);
 
-angular.module("template/timepicker/timepicker.html", []).run(["$templateCache", function($templateCache) {
-  $templateCache.put("template/timepicker/timepicker.html",
-    "<table>\n" +
+angular.module("uib/template/timepicker/timepicker.html", []).run(["$templateCache", function($templateCache) {
+  $templateCache.put("uib/template/timepicker/timepicker.html",
+    "<table class=\"uib-timepicker\">\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 class=\"uib-increment hours\"><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 class=\"uib-increment minutes\"><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=\"showSeconds\">&nbsp;</td>\n" +
+    "      <td ng-show=\"showSeconds\" class=\"uib-increment seconds\"><a ng-click=\"incrementSeconds()\" ng-class=\"{disabled: noIncrementSeconds()}\" class=\"btn btn-link\" ng-disabled=\"noIncrementSeconds()\" 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 class=\"form-group uib-time hours\" ng-class=\"{'has-error': invalidHours}\">\n" +
+    "        <input style=\"width:50px;\" type=\"text\" placeholder=\"HH\" ng-model=\"hours\" ng-change=\"updateHours()\" class=\"form-control text-center\" ng-readonly=\"::readonlyInput\" maxlength=\"2\" tabindex=\"{{::tabindex}}\" ng-disabled=\"noIncrementHours()\" ng-blur=\"blur()\">\n" +
+    "      </td>\n" +
+    "      <td class=\"uib-separator\">:</td>\n" +
+    "      <td class=\"form-group uib-time minutes\" ng-class=\"{'has-error': invalidMinutes}\">\n" +
+    "        <input style=\"width:50px;\" type=\"text\" placeholder=\"MM\" ng-model=\"minutes\" ng-change=\"updateMinutes()\" class=\"form-control text-center\" ng-readonly=\"::readonlyInput\" maxlength=\"2\" tabindex=\"{{::tabindex}}\" ng-disabled=\"noIncrementMinutes()\" ng-blur=\"blur()\">\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 ng-show=\"showSeconds\" class=\"uib-separator\">:</td>\n" +
+    "      <td class=\"form-group uib-time seconds\" ng-class=\"{'has-error': invalidSeconds}\" ng-show=\"showSeconds\">\n" +
+    "        <input style=\"width:50px;\" type=\"text\" ng-model=\"seconds\" ng-change=\"updateSeconds()\" class=\"form-control text-center\" ng-readonly=\"readonlyInput\" maxlength=\"2\" tabindex=\"{{::tabindex}}\" ng-disabled=\"noIncrementSeconds()\" ng-blur=\"blur()\">\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" +
+    "      <td ng-show=\"showMeridian\" class=\"uib-time am-pm\"><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 class=\"uib-decrement hours\"><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 class=\"uib-decrement minutes\"><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=\"showSeconds\">&nbsp;</td>\n" +
+    "      <td ng-show=\"showSeconds\" class=\"uib-decrement seconds\"><a ng-click=\"decrementSeconds()\" ng-class=\"{disabled: noDecrementSeconds()}\" class=\"btn btn-link\" ng-disabled=\"noDecrementSeconds()\" tabindex=\"{{::tabindex}}\"><span class=\"glyphicon glyphicon-chevron-down\"></span></a></td>\n" +
     "      <td ng-show=\"showMeridian\"></td>\n" +
     "    </tr>\n" +
     "  </tbody>\n" +
@@ -8485,19 +6806,20 @@ angular.module("template/timepicker/timepicker.html", []).run(["$templateCache",
     "");
 }]);
 
-angular.module("template/typeahead/typeahead-match.html", []).run(["$templateCache", function($templateCache) {
-  $templateCache.put("template/typeahead/typeahead-match.html",
+angular.module("uib/template/typeahead/typeahead-match.html", []).run(["$templateCache", function($templateCache) {
+  $templateCache.put("uib/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",
+angular.module("uib/template/typeahead/typeahead-popup.html", []).run(["$templateCache", function($templateCache) {
+  $templateCache.put("uib/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" +
+    "    <li ng-repeat=\"match in matches track by $index\" ng-class=\"{active: isActive($index) }\" ng-mouseenter=\"selectActive($index)\" ng-click=\"selectMatch($index, $event)\" 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
+angular.module('ui.bootstrap.carousel').run(function() {!angular.$$csp().noInlineStyle && 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-dashboard-framework/angular-dashboard-framework.css b/public/bower_components/angular-dashboard-framework/angular-dashboard-framework.css
index 601bdf0..e09e847 100644
--- a/public/bower_components/angular-dashboard-framework/angular-dashboard-framework.css
+++ b/public/bower_components/angular-dashboard-framework/angular-dashboard-framework.css
@@ -21,8 +21,6 @@
  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;
 }
@@ -75,9 +73,10 @@ pre.edit {
   filter: FlipH;
   -ms-filter: "FlipH";
 }
+
 /*
  modal dialog in fullscreen
 */
 .dashboard-modal.widget-fullscreen .modal-dialog {
- width: 98%;
+  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
index 334f3cc..9797fcd 100644
--- a/public/bower_components/angular-dashboard-framework/angular-dashboard-framework.js
+++ b/public/bower_components/angular-dashboard-framework/angular-dashboard-framework.js
@@ -29,7 +29,7 @@ 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');
+  .value('adfVersion', '0.11.0');
 
 /*
 * The MIT License
@@ -58,7 +58,7 @@ angular.module('adf', ['adf.provider', 'ui.bootstrap'])
 
 /* global angular */
 angular.module('adf')
-  .directive('adfDashboardColumn', ["$log", "$compile", "adfTemplatePath", "rowTemplate", "dashboard", function ($log, $compile, adfTemplatePath, rowTemplate, dashboard) {
+  .directive('adfDashboardColumn', ["$log", "$compile", "$rootScope", "adfTemplatePath", "rowTemplate", "dashboard", function ($log, $compile, $rootScope, adfTemplatePath, rowTemplate, dashboard) {

     /**
@@ -69,6 +69,7 @@ angular.module('adf')
       // move widget and apply to scope
       $scope.$apply(function(){
         widgets.splice(evt.newIndex, 0, widgets.splice(evt.oldIndex, 1)[0]);
+        $rootScope.$broadcast('adfWidgetMovedInColumn');
       });
     }
 
@@ -79,7 +80,7 @@ angular.module('adf')
       var widget = null;
       for (var i=0; i<column.widgets.length; i++){
         var w = column.widgets[i];
-        if (w.wid === index){
+        if (dashboard.idEquals(w.wid,index)){
           widget = w;
           break;
         }
@@ -96,7 +97,7 @@ angular.module('adf')
         var r = model.rows[i];
         for (var j=0; j<r.columns.length; j++){
           var c = r.columns[j];
-          if ( c.cid === index ){
+          if (dashboard.idEquals(c.cid, index)){
             column = c;
             break;
           } else if (c.rows){
@@ -115,7 +116,7 @@ angular.module('adf')
      */
     function getId(el){
       var id = el.getAttribute('adf-id');
-      return id ? parseInt(id) : -1;
+      return id ? id : '-1';
     }
 
     /**
@@ -134,11 +135,12 @@ angular.module('adf')
         if (widget){
           // add new item and apply to scope
           $scope.$apply(function(){
-			if (!targetColumn.widgets) {
-				targetColumn.widgets = [];
-			}
-			
+      			if (!targetColumn.widgets) {
+      				targetColumn.widgets = [];
+      			}
             targetColumn.widgets.splice(evt.newIndex, 0, widget);
+
+            $rootScope.$broadcast('adfWidgetAddedToColumn');
           });
         } else {
           $log.warn('could not find widget with id ' + wid);
@@ -155,6 +157,7 @@ angular.module('adf')
       // remove old item and apply to scope
       $scope.$apply(function(){
         column.widgets.splice(evt.oldIndex, 1);
+        $rootScope.$broadcast('adfWidgetRemovedFromColumn');
       });
     }
 
@@ -182,7 +185,11 @@ angular.module('adf')
 
       // destroy sortable on column destroy event
       $element.on('$destroy', function () {
-        sortable.destroy();
+        // check sortable element, before calling destroy
+        // see https://github.com/sdorra/angular-dashboard-framework/issues/118
+        if (sortable.el){
+          sortable.destroy();
+        }
       });
     }
 
@@ -192,6 +199,7 @@ angular.module('adf')
       scope: {
         column: '=',
         editMode: '=',
+        continuousEditMode: '=',
         adfModel: '=',
         options: '='
       },
@@ -260,10 +268,12 @@ angular.module('adf')
  * @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.
+ * @param {boolean=} continuousEditMode enable continuous edit mode, to fire add/change/remove
+ *                   events during edit mode not reset it if edit mode is exited.
  */
 
 angular.module('adf')
-  .directive('adfDashboard', ["$rootScope", "$log", "$modal", "dashboard", "adfTemplatePath", function ($rootScope, $log, $modal, dashboard, adfTemplatePath) {
+  .directive('adfDashboard', ["$rootScope", "$log", "$timeout", "$uibModal", "dashboard", "adfTemplatePath", function ($rootScope, $log, $timeout, $uibModal, dashboard, adfTemplatePath) {

     function stringToBoolean(string){
@@ -394,8 +404,9 @@ angular.module('adf')
      *
      * @param dashboard model
      * @param widget to add to model
+     * @param name name of the dashboard
      */
-    function addNewWidgetToModel(model, widget){
+    function addNewWidgetToModel(model, widget, name){
       if (model){
         var column = findFirstWidgetColumn(model);
         if (column){
@@ -403,6 +414,9 @@ angular.module('adf')
             column.widgets = [];
           }
           column.widgets.unshift(widget);
+
+          // broadcast added event
+          $rootScope.$broadcast('adfWidgetAdded', name, model, widget);
         } else {
           $log.error('could not find first widget column');
         }
@@ -411,6 +425,29 @@ angular.module('adf')
       }
     }
 
+    /**
+     * Checks if the edit mode of the widget should be opened immediately.
+     *
+     * @param widget type
+     */
+    function isEditModeImmediate(type){
+      var widget = dashboard.widgets[type];
+      return widget && widget.edit && widget.edit.immediate;
+    }
+
+    /**
+     * Opens the edit mode of the specified widget.
+     *
+     * @param dashboard scope
+     * @param widget
+     */
+    function openEditMode($scope, widget){
+      // wait some time before fire enter edit mode event
+      $timeout(function(){
+        $scope.$broadcast('adfWidgetEnterEditMode', widget);
+      }, 200);
+    }
+
     return {
       replace: true,
       restrict: 'EA',
@@ -420,6 +457,8 @@ angular.module('adf')
         name: '@',
         collapsible: '@',
         editable: '@',
+        editMode: '@',
+        continuousEditMode: '=',
         maximizable: '@',
         adfModel: '=',
         adfWidgetFilter: '='
@@ -473,7 +512,10 @@ angular.module('adf')
         $scope.toggleEditMode = function(){
           $scope.editMode = ! $scope.editMode;
           if ($scope.editMode){
-            $scope.modelCopy = angular.copy($scope.adfModel, {});
+            if (!$scope.continuousEditMode) {
+              $scope.modelCopy = angular.copy($scope.adfModel, {});
+              $rootScope.$broadcast('adfIsEditMode');
+            }
           }
 
           if (!$scope.editMode){
@@ -481,13 +523,19 @@ angular.module('adf')
           }
         };
 
+        $scope.$on('adfToggleEditMode', function() {
+            $scope.toggleEditMode();
+        });
+
         $scope.collapseAll = function(collapseExpandStatus){
-            $rootScope.$broadcast('adfDashboardCollapseExapand',{collapseExpandStatus : collapseExpandStatus});
+          $rootScope.$broadcast('adfDashboardCollapseExpand',{collapseExpandStatus : collapseExpandStatus});
         };
 
         $scope.cancelEditMode = function(){
           $scope.editMode = false;
-          $scope.modelCopy = angular.copy($scope.modelCopy, $scope.adfModel);
+          if (!$scope.continuousEditMode) {
+            $scope.modelCopy = angular.copy($scope.modelCopy, $scope.adfModel);
+          }
           $rootScope.$broadcast('adfDashboardEditsCancelled');
         };
 
@@ -500,12 +548,17 @@ angular.module('adf')
             title: model.title
           };
           editDashboardScope.structures = dashboard.structures;
-          var instance = $modal.open({
+
+          var adfEditTemplatePath = adfTemplatePath + 'dashboard-edit.html';
+          if(model.editTemplateUrl) {
+            adfEditTemplatePath = model.editTemplateUrl;
+          }
+          var instance = $uibModal.open({
             scope: editDashboardScope,
-            templateUrl: adfTemplatePath + 'dashboard-edit.html',
+            templateUrl: adfEditTemplatePath,
             backdrop: 'static'
           });
-          $scope.changeStructure = function(name, structure){
+          editDashboardScope.changeStructure = function(name, structure){
             $log.info('change structure to ' + name);
             changeStructure(model, structure);
           };
@@ -534,22 +587,33 @@ angular.module('adf')
             widgets = dashboard.widgets;
           }
           addScope.widgets = widgets;
+
+          var adfAddTemplatePath = adfTemplatePath + 'widget-add.html';
+          if(model.addTemplateUrl) {
+            adfAddTemplatePath = model.addTemplateUrl;
+          }
+
           var opts = {
             scope: addScope,
-            templateUrl: adfTemplatePath + 'widget-add.html',
+            templateUrl: adfAddTemplatePath,
             backdrop: 'static'
           };
-          var instance = $modal.open(opts);
+
+          var instance = $uibModal.open(opts);
           addScope.addWidget = function(widget){
             var w = {
               type: widget,
               config: createConfiguration(widget)
             };
-            addNewWidgetToModel(model, w);
-            $rootScope.$broadcast('adfWidgetAdded', name, model, w);
+            addNewWidgetToModel(model, w, name);
             // close and destroy
             instance.close();
             addScope.$destroy();
+
+            // check for open edit mode immediately
+            if (isEditModeImmediate(widget)){
+              openEditMode($scope, w);
+            }
           };
           addScope.closeDialog = function(){
             // close and destroy
@@ -557,6 +621,8 @@ angular.module('adf')
             addScope.$destroy();
           };
         };
+
+        $scope.addNewWidgetToModel = addNewWidgetToModel;
       }],
       link: function ($scope, $element, $attr) {
         // pass options to scope
@@ -623,6 +689,11 @@ angular.module('adf.provider', [])
         </div>\n\
       </div>';
 
+    // default apply function of widget.edit.apply
+    var defaultApplyFunction = function(){
+      return true;
+    };
+
    /**
     * @ngdoc method
     * @name adf.dashboardProvider#widget
@@ -638,6 +709,7 @@ angular.module('adf.provider', [])
     *
     *   - `title` - `{string=}` - The title of the widget.
     *   - `description` - `{string=}` - Description of the widget.
+    *   - `collapsed` - `{boolean=}` - true if the widget should be in collapsed state. Default is false.
     *   - `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
@@ -645,6 +717,8 @@ angular.module('adf.provider', [])
     *      if passed as a string.
     *   - `controllerAs` - `{string=}` - A controller alias name. If present the controller will be
     *      published to scope under the `controllerAs` name.
+    *   - `frameless` - `{boolean=}` - false if the widget should be shown in frameless mode. The default is false.
+    *   - `styleClass` - `{object}` - space delimited string or map of classes bound to the widget.
     *   - `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.
@@ -663,18 +737,27 @@ angular.module('adf.provider', [])
     *        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.
+    *      - `controllerAs` - `{string=}` - 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.
+    *      - `immediate` - {boolean} - The widget enters the edit mode immediately after creation. Default is false.
+    *      - `apply` - `{function()=}` - The apply function is called, before the widget is saved.
+    *        The function have to return a boolean or an promise which can be resolved to a boolean.
+    *        The function can use injection.
     *
     * @returns {Object} self
     */
     this.widget = function(name, widget){
-      var w = angular.extend({reload: false}, widget);
+      var w = angular.extend({reload: false, frameless: false}, widget);
       if ( w.edit ){
-        var edit = {reload: true};
+        var edit = {
+          reload: true,
+          immediate: false,
+          apply: defaultApplyFunction
+        };
         angular.extend(edit, w.edit);
         w.edit = edit;
       }
@@ -756,7 +839,7 @@ angular.module('adf.provider', [])
     * Changes the template which is displayed as
     * long as the widget resources are not resolved.
     *
-    * @param {string} loading template
+    * @param {string} template loading template
     *
     * @returns {Object} self
     */
@@ -800,8 +883,24 @@ angular.module('adf.provider', [])
          * columns and widgets in the dashboard.
          */
         id: function(){
-          return ++cid;
-        }
+          return new Date().getTime() + '-' + (++cid);
+        },
+
+        /**
+         * @ngdoc method
+         * @name adf.dashboard#idEqual
+         * @methodOf adf.dashboard
+         * @description
+         *
+         * Checks if the given ids are equal.
+         *
+         * @param {string} id widget or column id
+         * @param {string} other widget or column id
+         */
+         idEquals: function(id, other){
+           // use toString, because old ids are numbers
+           return ((id) && (other)) && (id.toString() === other.toString());
+         }
       };
     };
 
@@ -844,10 +943,11 @@ angular.module('adf')
         row: '=',
         adfModel: '=',
         editMode: '=',
+        continuousEditMode: '=',
         options: '='
       },
       templateUrl: adfTemplatePath + 'dashboard-row.html',
-      link: function ($scope, $element) {
+      link: function($scope, $element) {
         if (angular.isDefined($scope.row.columns) && angular.isArray($scope.row.columns)) {
           $compile(columnTemplate)($scope, function(cloned) {
             $element.append(cloned);
@@ -885,41 +985,41 @@ angular.module('adf')
 
 angular.module('adf')
   .directive('adfWidgetContent', ["$log", "$q", "$sce", "$http", "$templateCache", "$compile", "$controller", "$injector", "dashboard", function($log, $q, $sce, $http, $templateCache,
-    $compile, $controller, $injector, dashboard) {
+          $compile, $controller, $injector, dashboard) {
 
-    function parseUrl(url){
+    function parseUrl(url) {
       var parsedUrl = url;
-      if ( url.indexOf('{widgetsPath}') >= 0 ){
+      if (url.indexOf('{widgetsPath}') >= 0) {
         parsedUrl = url.replace('{widgetsPath}', dashboard.widgetsPath)
-                       .replace('//', '/');
-        if (parsedUrl.indexOf('/') === 0){
+                .replace('//', '/');
+        if (parsedUrl.indexOf('/') === 0) {
           parsedUrl = parsedUrl.substring(1);
         }
       }
       return parsedUrl;
     }
 
-    function getTemplate(widget){
+    function getTemplate(widget) {
       var deferred = $q.defer();
 
-      if ( widget.template ){
+      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){
+        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');
-            });
+               .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');
+               });
         }
       }
 
@@ -972,7 +1072,7 @@ angular.module('adf')
         $element.html(template);
         if (content.controller) {
           var templateCtrl = $controller(content.controller, locals);
-          if (content.controllerAs){
+          if (content.controllerAs) {
             templateScope[content.controllerAs] = templateCtrl;
           }
           $element.children().data('$ngControllerController', templateCtrl);
@@ -989,7 +1089,7 @@ angular.module('adf')
       });
 
       // destroy old scope
-      if (currentScope){
+      if (currentScope) {
         currentScope.$destroy();
       }
 
@@ -1006,10 +1106,10 @@ angular.module('adf')
       },
       link: function($scope, $element) {
         var currentScope = compileWidget($scope, $element, null);
-        $scope.$on('widgetConfigChanged', function(){
+        $scope.$on('widgetConfigChanged', function() {
           currentScope = compileWidget($scope, $element, currentScope);
         });
-        $scope.$on('widgetReload', function(){
+        $scope.$on('widgetReload', function() {
           currentScope = compileWidget($scope, $element, currentScope);
         });
       }
@@ -1044,24 +1144,35 @@ angular.module('adf')

 angular.module('adf')
-  .directive('adfWidget', ["$log", "$modal", "dashboard", "adfTemplatePath", function($log, $modal, dashboard, adfTemplatePath) {
+  .directive('adfWidget', ["$injector", "$q", "$log", "$uibModal", "$rootScope", "dashboard", "adfTemplatePath", function($injector, $q, $log, $uibModal, $rootScope, dashboard, adfTemplatePath) {
 
-    function preLink($scope){
+    function preLink($scope) {
       var definition = $scope.definition;
       if (definition) {
         var w = dashboard.widgets[definition.type];
         if (w) {
           // pass title
-          if (!definition.title){
+          if (!definition.title) {
             definition.title = w.title;
           }
 
           if (!definition.titleTemplateUrl) {
             definition.titleTemplateUrl = adfTemplatePath + 'widget-title.html';
+            if (w.titleTemplateUrl) {
+              definition.titleTemplateUrl = w.titleTemplateUrl;
+            }
+          }
+
+          if (!definition.titleTemplateUrl) {
+            definition.frameless = w.frameless;
+          }
+
+          if (!definition.styleClass) {
+            definition.styleClass = w.styleClass;
           }
 
           // set id for sortable
-          if (!definition.wid){
+          if (!definition.wid) {
             definition.wid = dashboard.id();
           }
 
@@ -1082,9 +1193,9 @@ angular.module('adf')
           $scope.config = config;
 
           // collapse exposed $scope.widgetState property
-         if(!$scope.widgetState){
-             $scope.widgetState ={};
-             $scope.widgetState.isCollapsed= false;
+          if (!$scope.widgetState) {
+            $scope.widgetState = {};
+            $scope.widgetState.isCollapsed= (w.collapsed === true) ? w.collapsed : false;
           }
 
         } else {
@@ -1100,46 +1211,47 @@ angular.module('adf')
       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);
+        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();
-      }
+          $element.remove();
+          $rootScope.$broadcast('adfWidgetRemovedFromColumn');
+        };
+
         $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 {
+          if ($scope.options.enableConfirmDelete) {
+            var deleteScope = $scope.$new();
+            var deleteTemplateUrl = adfTemplatePath + 'widget-delete.html';
+            if (definition.deleteTemplateUrl) {
+              deleteTemplateUrl = definition.deleteTemplateUrl;
+            }
+            var opts = {
+              scope: deleteScope,
+              templateUrl: deleteTemplateUrl,
+              backdrop: 'static'
+            };
+            var instance = $uibModal.open(opts);
+
+            deleteScope.closeDialog = function() {
+              instance.close();
+              deleteScope.$destroy();
+            };
+            deleteScope.deleteDialog = function() {
               deleteWidget();
+              deleteScope.closeDialog();
+            };
+          } else {
+            deleteWidget();
           }
-        }
+        };
 
         // bind reload function
-        $scope.reload = function(){
+        $scope.reload = function() {
           $scope.$broadcast('widgetReload');
         };
 
@@ -1147,28 +1259,74 @@ angular.module('adf')
         $scope.edit = function() {
           var editScope = $scope.$new();
           editScope.definition = angular.copy(definition);
+
+          var adfEditTemplatePath = adfTemplatePath + 'widget-edit.html';
+          if (definition.editTemplateUrl) {
+            adfEditTemplatePath = definition.editTemplateUrl;
+          }
+
           var opts = {
             scope: editScope,
-            templateUrl: adfTemplatePath + 'widget-edit.html',
+            templateUrl: adfEditTemplatePath,
             backdrop: 'static'
           };
 
-          var instance = $modal.open(opts);
+          var instance = $uibModal.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');
+          // TODO create util method
+          function createApplyPromise(result){
+            var promise;
+            if (typeof result === 'boolean'){
+              var deferred = $q.defer();
+              if (result){
+                deferred.resolve();
+              } else {
+                deferred.reject();
+              }
+              promise = deferred.promise;
+            } else {
+              promise = $q.when(result);
             }
-          };
+            return promise;
+          }
+
           editScope.saveDialog = function() {
-            definition.title = editScope.definition.title;
-            angular.extend(definition.config,editScope.definition.config);      
-            editScope.closeDialog();
-         };
+            // clear validation error
+            editScope.validationError = null;
+
+            // build injection locals
+            var widget = $scope.widget;
+            var applyFn = widget.edit.apply;
+            var locals = {
+              widget: widget,
+              definition: editScope.definition,
+              config: editScope.definition.config
+            };
+
+            // invoke apply function and apply if success
+            var result = $injector.invoke(applyFn, applyFn, locals);
+            createApplyPromise(result).then(function(){
+              definition.title = editScope.definition.title;
+              angular.extend(definition.config, editScope.definition.config);
+              if (widget.edit && widget.edit.reload) {
+                // reload content after edit dialog is closed
+                $scope.$broadcast('widgetConfigChanged');
+              }
+              editScope.closeDialog();
+            }, function(err){
+              if (err){
+                editScope.validationError = err;
+              } else {
+                editScope.validationError = 'Validation durring apply failed';
+              }
+            });
+          };
+
         };
       } else {
         $log.debug('widget not found');
@@ -1187,12 +1345,25 @@ angular.module('adf')
         options: '=',
         widgetState: '='
       },
+      controller: ["$scope", function($scope) {
 
-      controller: ["$scope", function ($scope) {
-        
-        $scope.$on("adfDashboardCollapseExapand",function(event,args){
-           $scope.widgetState.isCollapsed = args.collapseExpandStatus;
-         });
+        $scope.$on('adfDashboardCollapseExpand', function(event, args) {
+          $scope.widgetState.isCollapsed = args.collapseExpandStatus;
+        });
+
+        $scope.$on('adfWidgetEnterEditMode', function(event, widget){
+          if (dashboard.idEquals($scope.definition.wid, widget.wid)){
+            $scope.edit();
+          }
+        });
+
+        $scope.widgetClasses = function(w, definition){
+          var classes = definition.styleClass || '';
+          if (!w.frameless || $scope.editMode){
+            classes += ' panel panel-default';
+          }
+          return classes;
+        };
 
         $scope.openFullScreen = function() {
           var definition = $scope.definition;
@@ -1205,15 +1376,14 @@ angular.module('adf')
             windowClass: (definition.fullScreen) ? 'dashboard-modal widget-fullscreen' : 'dashboard-modal'
           };
 
-          var instance = $modal.open(opts);
-          fullScreenScope.closeDialog = function () {
+          var instance = $uibModal.open(opts);
+          fullScreenScope.closeDialog = function() {
             instance.close();
             fullScreenScope.$destroy();
           };
         };
       }],
-
-      compile: function compile(){
+      compile: function() {
 
         /**
          * use pre link, because link of widget-content
@@ -1232,10 +1402,10 @@ angular.module("adf").run(["$templateCache", function($templateCache) {$template
 $templateCache.put("../src/templates/dashboard-row.html","<div class=row ng-class=row.styleClass>  </div> ");
-$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/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 continuous-edit-mode=continuousEditMode> </adf-dashboard-row></div> </div> ");
-$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
\ No newline at end of file
diff --git a/public/bower_components/pdfmake/pdfmake.js b/public/bower_components/pdfmake/pdfmake.js
new file mode 100644
index 0000000..5f2ffb1
--- /dev/null
+++ b/public/bower_components/pdfmake/pdfmake.js
@@ -0,0 +1,68149 @@
+/******/ (function(modules) { // webpackBootstrap
+/******/ 	// The module cache
+/******/ 	var installedModules = {};
+
+/******/ 	// The require function
+/******/ 	function __webpack_require__(moduleId) {
+
+/******/ 		// Check if module is in cache
+/******/ 		if(installedModules[moduleId])
+/******/ 			return installedModules[moduleId].exports;
+
+/******/ 		// Create a new module (and put it into the cache)
+/******/ 		var module = installedModules[moduleId] = {
+/******/ 			exports: {},
+/******/ 			id: moduleId,
+/******/ 			loaded: false
+/******/ 		};
+
+/******/ 		// Execute the module function
+/******/ 		modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
+
+/******/ 		// Flag the module as loaded
+/******/ 		module.loaded = true;
+
+/******/ 		// Return the exports of the module
+/******/ 		return module.exports;
+/******/ 	}
+
+
+/******/ 	// expose the modules object (__webpack_modules__)
+/******/ 	__webpack_require__.m = modules;
+
+/******/ 	// expose the module cache
+/******/ 	__webpack_require__.c = installedModules;
+
+/******/ 	// __webpack_public_path__
+/******/ 	__webpack_require__.p = "";
+
+/******/ 	// Load entry module and return exports
+/******/ 	return __webpack_require__(0);
+/******/ })
+/************************************************************************/
+/******/ ([
+/* 0 */
+/***/ function(module, exports, __webpack_require__) {
+
+	/* WEBPACK VAR INJECTION */(function(global) {module.exports = global["pdfMake"] = __webpack_require__(1);
+	/* WEBPACK VAR INJECTION */}.call(exports, (function() { return this; }())))
+
+/***/ },
+/* 1 */
+/***/ function(module, exports, __webpack_require__) {
+
+	/* WEBPACK VAR INJECTION */(function(Buffer) {/* jslint node: true */
+	/* jslint browser: true */
+	/* global BlobBuilder */
+	'use strict';
+
+	var PdfPrinter = __webpack_require__(6);
+	var FileSaver = __webpack_require__(105);
+	var saveAs = FileSaver.saveAs;
+
+	var defaultClientFonts = {
+		Roboto: {
+			normal: 'Roboto-Regular.ttf',
+			bold: 'Roboto-Medium.ttf',
+			italics: 'Roboto-Italic.ttf',
+			bolditalics: 'Roboto-Italic.ttf'
+		}
+	};
+
+	function Document(docDefinition, fonts, vfs) {
+		this.docDefinition = docDefinition;
+		this.fonts = fonts || defaultClientFonts;
+		this.vfs = vfs;
+	}
+
+	Document.prototype._createDoc = function(options, callback) {
+		var printer = new PdfPrinter(this.fonts);
+		printer.fs.bindFS(this.vfs);
+
+		var doc = printer.createPdfKitDocument(this.docDefinition, options);
+		var chunks = [];
+		var result;
+
+		doc.on('data', function(chunk) {
+			chunks.push(chunk);
+		});
+		doc.on('end', function() {
+			result = Buffer.concat(chunks);
+			callback(result, doc._pdfMakePages);
+		});
+		doc.end();
+	};
+
+	Document.prototype._getPages = function(options, cb){
+	  if (!cb) throw 'getBuffer is an async method and needs a callback argument';
+	  this._createDoc(options, function(ignoreBuffer, pages){
+	    cb(pages);
+	  });
+	};
+
+	Document.prototype.open = function(message) {
+		// we have to open the window immediately and store the reference
+		// otherwise popup blockers will stop us
+		var win = window.open('', '_blank');
+
+		try {
+			this.getDataUrl(function(result) {
+				win.location.href = result;
+			});
+		} catch(e) {
+			win.close();
+			throw e;
+		}
+	};
+
+
+	Document.prototype.print = function() {
+	  this.getDataUrl(function(dataUrl) {
+	    var iFrame = document.createElement('iframe');
+	    iFrame.style.position = 'absolute';
+	    iFrame.style.left = '-99999px';
+	    iFrame.src = dataUrl;
+	    iFrame.onload = function() {
+	      function removeIFrame(){
+	        document.body.removeChild(iFrame);
+	        document.removeEventListener('click', removeIFrame);
+	      }
+	      document.addEventListener('click', removeIFrame, false);
+	    };
+
+	    document.body.appendChild(iFrame);
+	  }, { autoPrint: true });
+	};
+
+	Document.prototype.download = function(defaultFileName, cb) {
+	   if(typeof defaultFileName === "function") {
+	      cb = defaultFileName;
+	      defaultFileName = null;
+	   }
+
+	   defaultFileName = defaultFileName || 'file.pdf';
+	   this.getBuffer(function (result) {
+	       var blob;
+	       try {
+	           blob = new Blob([result], { type: 'application/pdf' });
+	       }
+	       catch (e) {
+	           // Old browser which can't handle it without making it an byte array (ie10) 
+	           if (e.name == "InvalidStateError") {
+	               var byteArray = new Uint8Array(result);
+	               blob = new Blob([byteArray.buffer], { type: 'application/pdf' });
+	           }
+	       }
+	       if (blob) {
+	           saveAs(blob, defaultFileName);
+	       }
+	       else {
+	           throw 'Could not generate blob';
+	       }
+	       if (typeof cb === "function") {
+	           cb();
+	       }
+	   });
+	};
+
+	Document.prototype.getBase64 = function(cb, options) {
+		if (!cb) throw 'getBase64 is an async method and needs a callback argument';
+		this._createDoc(options, function(buffer) {
+			cb(buffer.toString('base64'));
+		});
+	};
+
+	Document.prototype.getDataUrl = function(cb, options) {
+		if (!cb) throw 'getDataUrl is an async method and needs a callback argument';
+		this._createDoc(options, function(buffer) {
+			cb('data:application/pdf;base64,' + buffer.toString('base64'));
+		});
+	};
+
+	Document.prototype.getBuffer = function(cb, options) {
+		if (!cb) throw 'getBuffer is an async method and needs a callback argument';
+		this._createDoc(options, function(buffer){
+	    cb(buffer);
+	  });
+	};
+
+	module.exports = {
+		createPdf: function(docDefinition) {
+			return new Document(docDefinition, window.pdfMake.fonts, window.pdfMake.vfs);
+		}
+	};
+
+	/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(2).Buffer))
+
+/***/ },
+/* 2 */
+/***/ function(module, exports, __webpack_require__) {
+
+	/* WEBPACK VAR INJECTION */(function(Buffer, global) {/*!
+	 * The buffer module from node.js, for the browser.
+	 *
+	 * @author   Feross Aboukhadijeh <[email-masked]> <http://feross.org>
+	 * @license  MIT
+	 */
+	/* eslint-disable no-proto */
+
+	var base64 = __webpack_require__(3)
+	var ieee754 = __webpack_require__(4)
+	var isArray = __webpack_require__(5)
+
+	exports.Buffer = Buffer
+	exports.SlowBuffer = SlowBuffer
+	exports.INSPECT_MAX_BYTES = 50
+	Buffer.poolSize = 8192 // not used by this implementation
+
+	var rootParent = {}
+
+	/**
+	 * If `Buffer.TYPED_ARRAY_SUPPORT`:
+	 *   === true    Use Uint8Array implementation (fastest)
+	 *   === false   Use Object implementation (most compatible, even IE6)
+	 *
+	 * Browsers that support typed arrays are IE 10+, Firefox 4+, Chrome 7+, Safari 5.1+,
+	 * Opera 11.6+, iOS 4.2+.
+	 *
+	 * Due to various browser bugs, sometimes the Object implementation will be used even
+	 * when the browser supports typed arrays.
+	 *
+	 * Note:
+	 *
+	 *   - Firefox 4-29 lacks support for adding new properties to `Uint8Array` instances,
+	 *     See: https://bugzilla.mozilla.org/show_bug.cgi?id=695438.
+	 *
+	 *   - Safari 5-7 lacks support for changing the `Object.prototype.constructor` property
+	 *     on objects.
+	 *
+	 *   - Chrome 9-10 is missing the `TypedArray.prototype.subarray` function.
+	 *
+	 *   - IE10 has a broken `TypedArray.prototype.subarray` function which returns arrays of
+	 *     incorrect length in some situations.
+
+	 * We detect these buggy browsers and set `Buffer.TYPED_ARRAY_SUPPORT` to `false` so they
+	 * get the Object implementation, which is slower but behaves correctly.
+	 */
+	Buffer.TYPED_ARRAY_SUPPORT = global.TYPED_ARRAY_SUPPORT !== undefined
+	  ? global.TYPED_ARRAY_SUPPORT
+	  : typedArraySupport()
+
+	function typedArraySupport () {
+	  function Bar () {}
+	  try {
+	    var arr = new Uint8Array(1)
+	    arr.foo = function () { return 42 }
+	    arr.constructor = Bar
+	    return arr.foo() === 42 && // typed array instances can be augmented
+	        arr.constructor === Bar && // constructor can be set
+	        typeof arr.subarray === 'function' && // chrome 9-10 lack `subarray`
+	        arr.subarray(1, 1).byteLength === 0 // ie10 has broken `subarray`
+	  } catch (e) {
+	    return false
+	  }
+	}
+
+	function kMaxLength () {
+	  return Buffer.TYPED_ARRAY_SUPPORT
+	    ? 0x7fffffff
+	    : 0x3fffffff
+	}
+
+	/**
+	 * Class: Buffer
+	 * =============
+	 *
+	 * The Buffer constructor returns instances of `Uint8Array` that are augmented
+	 * with function properties for all the node `Buffer` API functions. We use
+	 * `Uint8Array` so that square bracket notation works as expected -- it returns
+	 * a single octet.
+	 *
+	 * By augmenting the instances, we can avoid modifying the `Uint8Array`
+	 * prototype.
+	 */
+	function Buffer (arg) {
+	  if (!(this instanceof Buffer)) {
+	    // Avoid going through an ArgumentsAdaptorTrampoline in the common case.
+	    if (arguments.length > 1) return new Buffer(arg, arguments[1])
+	    return new Buffer(arg)
+	  }
+
+	  this.length = 0
+	  this.parent = undefined
+
+	  // Common case.
+	  if (typeof arg === 'number') {
+	    return fromNumber(this, arg)
+	  }
+
+	  // Slightly less common case.
+	  if (typeof arg === 'string') {
+	    return fromString(this, arg, arguments.length > 1 ? arguments[1] : 'utf8')
+	  }
+
+	  // Unusual.
+	  return fromObject(this, arg)
+	}
+
+	function fromNumber (that, length) {
+	  that = allocate(that, length < 0 ? 0 : checked(length) | 0)
+	  if (!Buffer.TYPED_ARRAY_SUPPORT) {
+	    for (var i = 0; i < length; i++) {
+	      that[i] = 0
+	    }
+	  }
+	  return that
+	}
+
+	function fromString (that, string, encoding) {
+	  if (typeof encoding !== 'string' || encoding === '') encoding = 'utf8'
+
+	  // Assumption: byteLength() return value is always < kMaxLength.
+	  var length = byteLength(string, encoding) | 0
+	  that = allocate(that, length)
+
+	  that.write(string, encoding)
+	  return that
+	}
+
+	function fromObject (that, object) {
+	  if (Buffer.isBuffer(object)) return fromBuffer(that, object)
+
+	  if (isArray(object)) return fromArray(that, object)
+
+	  if (object == null) {
+	    throw new TypeError('must start with number, buffer, array or string')
+	  }
+
+	  if (typeof ArrayBuffer !== 'undefined') {
+	    if (object.buffer instanceof ArrayBuffer) {
+	      return fromTypedArray(that, object)
+	    }
+	    if (object instanceof ArrayBuffer) {
+	      return fromArrayBuffer(that, object)
+	    }
+	  }
+
+	  if (object.length) return fromArrayLike(that, object)
+
+	  return fromJsonObject(that, object)
+	}
+
+	function fromBuffer (that, buffer) {
+	  var length = checked(buffer.length) | 0
+	  that = allocate(that, length)
+	  buffer.copy(that, 0, 0, length)
+	  return that
+	}
+
+	function fromArray (that, array) {
+	  var length = checked(array.length) | 0
+	  that = allocate(that, length)
+	  for (var i = 0; i < length; i += 1) {
+	    that[i] = array[i] & 255
+	  }
+	  return that
+	}
+
+	// Duplicate of fromArray() to keep fromArray() monomorphic.
+	function fromTypedArray (that, array) {
+	  var length = checked(array.length) | 0
+	  that = allocate(that, length)
+	  // Truncating the elements is probably not what people expect from typed
+	  // arrays with BYTES_PER_ELEMENT > 1 but it's compatible with the behavior
+	  // of the old Buffer constructor.
+	  for (var i = 0; i < length; i += 1) {
+	    that[i] = array[i] & 255
+	  }
+	  return that
+	}
+
+	function fromArrayBuffer (that, array) {
+	  if (Buffer.TYPED_ARRAY_SUPPORT) {
+	    // Return an augmented `Uint8Array` instance, for best performance
+	    array.byteLength
+	    that = Buffer._augment(new Uint8Array(array))
+	  } else {
+	    // Fallback: Return an object instance of the Buffer class
+	    that = fromTypedArray(that, new Uint8Array(array))
+	  }
+	  return that
+	}
+
+	function fromArrayLike (that, array) {
+	  var length = checked(array.length) | 0
+	  that = allocate(that, length)
+	  for (var i = 0; i < length; i += 1) {
+	    that[i] = array[i] & 255
+	  }
+	  return that
+	}
+
+	// Deserialize { type: 'Buffer', data: [1,2,3,...] } into a Buffer object.
+	// Returns a zero-length buffer for inputs that don't conform to the spec.
+	function fromJsonObject (that, object) {
+	  var array
+	  var length = 0
+
+	  if (object.type === 'Buffer' && isArray(object.data)) {
+	    array = object.data
+	    length = checked(array.length) | 0
+	  }
+	  that = allocate(that, length)
+
+	  for (var i = 0; i < length; i += 1) {
+	    that[i] = array[i] & 255
+	  }
+	  return that
+	}
+
+	if (Buffer.TYPED_ARRAY_SUPPORT) {
+	  Buffer.prototype.__proto__ = Uint8Array.prototype
+	  Buffer.__proto__ = Uint8Array
+	}
+
+	function allocate (that, length) {
+	  if (Buffer.TYPED_ARRAY_SUPPORT) {
+	    // Return an augmented `Uint8Array` instance, for best performance
+	    that = Buffer._augment(new Uint8Array(length))
+	    that.__proto__ = Buffer.prototype
+	  } else {
+	    // Fallback: Return an object instance of the Buffer class
+	    that.length = length
+	    that._isBuffer = true
+	  }
+
+	  var fromPool = length !== 0 && length <= Buffer.poolSize >>> 1
+	  if (fromPool) that.parent = rootParent
+
+	  return that
+	}
+
+	function checked (length) {
+	  // Note: cannot use `length < kMaxLength` here because that fails when
+	  // length is NaN (which is otherwise coerced to zero.)
+	  if (length >= kMaxLength()) {
+	    throw new RangeError('Attempt to allocate Buffer larger than maximum ' +
+	                         'size: 0x' + kMaxLength().toString(16) + ' bytes')
+	  }
+	  return length | 0
+	}
+
+	function SlowBuffer (subject, encoding) {
+	  if (!(this instanceof SlowBuffer)) return new SlowBuffer(subject, encoding)
+
+	  var buf = new Buffer(subject, encoding)
+	  delete buf.parent
+	  return buf
+	}
+
+	Buffer.isBuffer = function isBuffer (b) {
+	  return !!(b != null && b._isBuffer)
+	}
+
+	Buffer.compare = function compare (a, b) {
+	  if (!Buffer.isBuffer(a) || !Buffer.isBuffer(b)) {
+	    throw new TypeError('Arguments must be Buffers')
+	  }
+
+	  if (a === b) return 0
+
+	  var x = a.length
+	  var y = b.length
+
+	  var i = 0
+	  var len = Math.min(x, y)
+	  while (i < len) {
+	    if (a[i] !== b[i]) break
+
+	    ++i
+	  }
+
+	  if (i !== len) {
+	    x = a[i]
+	    y = b[i]
+	  }
+
+	  if (x < y) return -1
+	  if (y < x) return 1
+	  return 0
+	}
+
+	Buffer.isEncoding = function isEncoding (encoding) {
+	  switch (String(encoding).toLowerCase()) {
+	    case 'hex':
+	    case 'utf8':
+	    case 'utf-8':
+	    case 'ascii':
+	    case 'binary':
+	    case 'base64':
+	    case 'raw':
+	    case 'ucs2':
+	    case 'ucs-2':
+	    case 'utf16le':
+	    case 'utf-16le':
+	      return true
+	    default:
+	      return false
+	  }
+	}
+
+	Buffer.concat = function concat (list, length) {
+	  if (!isArray(list)) throw new TypeError('list argument must be an Array of Buffers.')
+
+	  if (list.length === 0) {
+	    return new Buffer(0)
+	  }
+
+	  var i
+	  if (length === undefined) {
+	    length = 0
+	    for (i = 0; i < list.length; i++) {
+	      length += list[i].length
+	    }
+	  }
+
+	  var buf = new Buffer(length)
+	  var pos = 0
+	  for (i = 0; i < list.length; i++) {
+	    var item = list[i]
+	    item.copy(buf, pos)
+	    pos += item.length
+	  }
+	  return buf
+	}
+
+	function byteLength (string, encoding) {
+	  if (typeof string !== 'string') string = '' + string
+
+	  var len = string.length
+	  if (len === 0) return 0
+
+	  // Use a for loop to avoid recursion
+	  var loweredCase = false
+	  for (;;) {
+	    switch (encoding) {
+	      case 'ascii':
+	      case 'binary':
+	      // Deprecated
+	      case 'raw':
+	      case 'raws':
+	        return len
+	      case 'utf8':
+	      case 'utf-8':
+	        return utf8ToBytes(string).length
+	      case 'ucs2':
+	      case 'ucs-2':
+	      case 'utf16le':
+	      case 'utf-16le':
+	        return len * 2
+	      case 'hex':
+	        return len >>> 1
+	      case 'base64':
+	        return base64ToBytes(string).length
+	      default:
+	        if (loweredCase) return utf8ToBytes(string).length // assume utf8
+	        encoding = ('' + encoding).toLowerCase()
+	        loweredCase = true
+	    }
+	  }
+	}
+	Buffer.byteLength = byteLength
+
+	// pre-set for values that may exist in the future
+	Buffer.prototype.length = undefined
+	Buffer.prototype.parent = undefined
+
+	function slowToString (encoding, start, end) {
+	  var loweredCase = false
+
+	  start = start | 0
+	  end = end === undefined || end === Infinity ? this.length : end | 0
+
+	  if (!encoding) encoding = 'utf8'
+	  if (start < 0) start = 0
+	  if (end > this.length) end = this.length
+	  if (end <= start) return ''
+
+	  while (true) {
+	    switch (encoding) {
+	      case 'hex':
+	        return hexSlice(this, start, end)
+
+	      case 'utf8':
+	      case 'utf-8':
+	        return utf8Slice(this, start, end)
+
+	      case 'ascii':
+	        return asciiSlice(this, start, end)
+
+	      case 'binary':
+	        return binarySlice(this, start, end)
+
+	      case 'base64':
+	        return base64Slice(this, start, end)
+
+	      case 'ucs2':
+	      case 'ucs-2':
+	      case 'utf16le':
+	      case 'utf-16le':
+	        return utf16leSlice(this, start, end)
+
+	      default:
+	        if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)
+	        encoding = (encoding + '').toLowerCase()
+	        loweredCase = true
+	    }
+	  }
+	}
+
+	Buffer.prototype.toString = function toString () {
+	  var length = this.length | 0
+	  if (length === 0) return ''
+	  if (arguments.length === 0) return utf8Slice(this, 0, length)
+	  return slowToString.apply(this, arguments)
+	}
+
+	Buffer.prototype.equals = function equals (b) {
+	  if (!Buffer.isBuffer(b)) throw new TypeError('Argument must be a Buffer')
+	  if (this === b) return true
+	  return Buffer.compare(this, b) === 0
+	}
+
+	Buffer.prototype.inspect = function inspect () {
+	  var str = ''
+	  var max = exports.INSPECT_MAX_BYTES
+	  if (this.length > 0) {
+	    str = this.toString('hex', 0, max).match(/.{2}/g).join(' ')
+	    if (this.length > max) str += ' ... '
+	  }
+	  return '<Buffer ' + str + '>'
+	}
+
+	Buffer.prototype.compare = function compare (b) {
+	  if (!Buffer.isBuffer(b)) throw new TypeError('Argument must be a Buffer')
+	  if (this === b) return 0
+	  return Buffer.compare(this, b)
+	}
+
+	Buffer.prototype.indexOf = function indexOf (val, byteOffset) {
+	  if (byteOffset > 0x7fffffff) byteOffset = 0x7fffffff
+	  else if (byteOffset < -0x80000000) byteOffset = -0x80000000
+	  byteOffset >>= 0
+
+	  if (this.length === 0) return -1
+	  if (byteOffset >= this.length) return -1
+
+	  // Negative offsets start from the end of the buffer
+	  if (byteOffset < 0) byteOffset = Math.max(this.length + byteOffset, 0)
+
+	  if (typeof val === 'string') {
+	    if (val.length === 0) return -1 // special case: looking for empty string always fails
+	    return String.prototype.indexOf.call(this, val, byteOffset)
+	  }
+	  if (Buffer.isBuffer(val)) {
+	    return arrayIndexOf(this, val, byteOffset)
+	  }
+	  if (typeof val === 'number') {
+	    if (Buffer.TYPED_ARRAY_SUPPORT && Uint8Array.prototype.indexOf === 'function') {
+	      return Uint8Array.prototype.indexOf.call(this, val, byteOffset)
+	    }
+	    return arrayIndexOf(this, [ val ], byteOffset)
+	  }
+
+	  function arrayIndexOf (arr, val, byteOffset) {
+	    var foundIndex = -1
+	    for (var i = 0; byteOffset + i < arr.length; i++) {
+	      if (arr[byteOffset + i] === val[foundIndex === -1 ? 0 : i - foundIndex]) {
+	        if (foundIndex === -1) foundIndex = i
+	        if (i - foundIndex + 1 === val.length) return byteOffset + foundIndex
+	      } else {
+	        foundIndex = -1
+	      }
+	    }
+	    return -1
+	  }
+
+	  throw new TypeError('val must be string, number or Buffer')
+	}
+
+	// `get` is deprecated
+	Buffer.prototype.get = function get (offset) {
+	  console.log('.get() is deprecated. Access using array indexes instead.')
+	  return this.readUInt8(offset)
+	}
+
+	// `set` is deprecated
+	Buffer.prototype.set = function set (v, offset) {
+	  console.log('.set() is deprecated. Access using array indexes instead.')
+	  return this.writeUInt8(v, offset)
+	}
+
+	function hexWrite (buf, string, offset, length) {
+	  offset = Number(offset) || 0
+	  var remaining = buf.length - offset
+	  if (!length) {
+	    length = remaining
+	  } else {
+	    length = Number(length)
+	    if (length > remaining) {
+	      length = remaining
+	    }
+	  }
+
+	  // must be an even number of digits
+	  var strLen = string.length
+	  if (strLen % 2 !== 0) throw new Error('Invalid hex string')
+
+	  if (length > strLen / 2) {
+	    length = strLen / 2
+	  }
+	  for (var i = 0; i < length; i++) {
+	    var parsed = parseInt(string.substr(i * 2, 2), 16)
+	    if (isNaN(parsed)) throw new Error('Invalid hex string')
+	    buf[offset + i] = parsed
+	  }
+	  return i
+	}
+
+	function utf8Write (buf, string, offset, length) {
+	  return blitBuffer(utf8ToBytes(string, buf.length - offset), buf, offset, length)
+	}
+
+	function asciiWrite (buf, string, offset, length) {
+	  return blitBuffer(asciiToBytes(string), buf, offset, length)
+	}
+
+	function binaryWrite (buf, string, offset, length) {
+	  return asciiWrite(buf, string, offset, length)
+	}
+
+	function base64Write (buf, string, offset, length) {
+	  return blitBuffer(base64ToBytes(string), buf, offset, length)
+	}
+
+	function ucs2Write (buf, string, offset, length) {
+	  return blitBuffer(utf16leToBytes(string, buf.length - offset), buf, offset, length)
+	}
+
+	Buffer.prototype.write = function write (string, offset, length, encoding) {
+	  // Buffer#write(string)
+	  if (offset === undefined) {
+	    encoding = 'utf8'
+	    length = this.length
+	    offset = 0
+	  // Buffer#write(string, encoding)
+	  } else if (length === undefined && typeof offset === 'string') {
+	    encoding = offset
+	    length = this.length
+	    offset = 0
+	  // Buffer#write(string, offset[, length][, encoding])
+	  } else if (isFinite(offset)) {
+	    offset = offset | 0
+	    if (isFinite(length)) {
+	      length = length | 0
+	      if (encoding === undefined) encoding = 'utf8'
+	    } else {
+	      encoding = length
+	      length = undefined
+	    }
+	  // legacy write(string, encoding, offset, length) - remove in v0.13
+	  } else {
+	    var swap = encoding
+	    encoding = offset
+	    offset = length | 0
+	    length = swap
+	  }
+
+	  var remaining = this.length - offset
+	  if (length === undefined || length > remaining) length = remaining
+
+	  if ((string.length > 0 && (length < 0 || offset < 0)) || offset > this.length) {
+	    throw new RangeError('attempt to write outside buffer bounds')
+	  }
+
+	  if (!encoding) encoding = 'utf8'
+
+	  var loweredCase = false
+	  for (;;) {
+	    switch (encoding) {
+	      case 'hex':
+	        return hexWrite(this, string, offset, length)
+
+	      case 'utf8':
+	      case 'utf-8':
+	        return utf8Write(this, string, offset, length)
+
+	      case 'ascii':
+	        return asciiWrite(this, string, offset, length)
+
+	      case 'binary':
+	        return binaryWrite(this, string, offset, length)
+
+	      case 'base64':
+	        // Warning: maxLength not taken into account in base64Write
+	        return base64Write(this, string, offset, length)
+
+	      case 'ucs2':
+	      case 'ucs-2':
+	      case 'utf16le':
+	      case 'utf-16le':
+	        return ucs2Write(this, string, offset, length)
+
+	      default:
+	        if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)
+	        encoding = ('' + encoding).toLowerCase()
+	        loweredCase = true
+	    }
+	  }
+	}
+
+	Buffer.prototype.toJSON = function toJSON () {
+	  return {
+	    type: 'Buffer',
+	    data: Array.prototype.slice.call(this._arr || this, 0)
+	  }
+	}
+
+	function base64Slice (buf, start, end) {
+	  if (start === 0 && end === buf.length) {
+	    return base64.fromByteArray(buf)
+	  } else {
+	    return base64.fromByteArray(buf.slice(start, end))
+	  }
+	}
+
+	function utf8Slice (buf, start, end) {
+	  end = Math.min(buf.length, end)
+	  var res = []
+
+	  var i = start
+	  while (i < end) {
+	    var firstByte = buf[i]
+	    var codePoint = null
+	    var bytesPerSequence = (firstByte > 0xEF) ? 4
+	      : (firstByte > 0xDF) ? 3
+	      : (firstByte > 0xBF) ? 2
+	      : 1
+
+	    if (i + bytesPerSequence <= end) {
+	      var secondByte, thirdByte, fourthByte, tempCodePoint
+
+	      switch (bytesPerSequence) {
+	        case 1:
+	          if (firstByte < 0x80) {
+	            codePoint = firstByte
+	          }
+	          break
+	        case 2:
+	          secondByte = buf[i + 1]
+	          if ((secondByte & 0xC0) === 0x80) {
+	            tempCodePoint = (firstByte & 0x1F) << 0x6 | (secondByte & 0x3F)
+	            if (tempCodePoint > 0x7F) {
+	              codePoint = tempCodePoint
+	            }
+	          }
+	          break
+	        case 3:
+	          secondByte = buf[i + 1]
+	          thirdByte = buf[i + 2]
+	          if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80) {
+	            tempCodePoint = (firstByte & 0xF) << 0xC | (secondByte & 0x3F) << 0x6 | (thirdByte & 0x3F)
+	            if (tempCodePoint > 0x7FF && (tempCodePoint < 0xD800 || tempCodePoint > 0xDFFF)) {
+	              codePoint = tempCodePoint
+	            }
+	          }
+	          break
+	        case 4:
+	          secondByte = buf[i + 1]
+	          thirdByte = buf[i + 2]
+	          fourthByte = buf[i + 3]
+	          if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80 && (fourthByte & 0xC0) === 0x80) {
+	            tempCodePoint = (firstByte & 0xF) << 0x12 | (secondByte & 0x3F) << 0xC | (thirdByte & 0x3F) << 0x6 | (fourthByte & 0x3F)
+	            if (tempCodePoint > 0xFFFF && tempCodePoint < 0x110000) {
+	              codePoint = tempCodePoint
+	            }
+	          }
+	      }
+	    }
+
+	    if (codePoint === null) {
+	      // we did not generate a valid codePoint so insert a
+	      // replacement char (U+FFFD) and advance only 1 byte
+	      codePoint = 0xFFFD
+	      bytesPerSequence = 1
+	    } else if (codePoint > 0xFFFF) {
+	      // encode to utf16 (surrogate pair dance)
+	      codePoint -= 0x10000
+	      res.push(codePoint >>> 10 & 0x3FF | 0xD800)
+	      codePoint = 0xDC00 | codePoint & 0x3FF
+	    }
+
+	    res.push(codePoint)
+	    i += bytesPerSequence
+	  }
+
+	  return decodeCodePointsArray(res)
+	}
+
+	// Based on http://stackoverflow.com/a/22747272/680742, the browser with
+	// the lowest limit is Chrome, with 0x10000 args.
+	// We go 1 magnitude less, for safety
+	var MAX_ARGUMENTS_LENGTH = 0x1000
+
+	function decodeCodePointsArray (codePoints) {
+	  var len = codePoints.length
+	  if (len <= MAX_ARGUMENTS_LENGTH) {
+	    return String.fromCharCode.apply(String, codePoints) // avoid extra slice()
+	  }
+
+	  // Decode in chunks to avoid "call stack size exceeded".
+	  var res = ''
+	  var i = 0
+	  while (i < len) {
+	    res += String.fromCharCode.apply(
+	      String,
+	      codePoints.slice(i, i += MAX_ARGUMENTS_LENGTH)
+	    )
+	  }
+	  return res
+	}
+
+	function asciiSlice (buf, start, end) {
+	  var ret = ''
+	  end = Math.min(buf.length, end)
+
+	  for (var i = start; i < end; i++) {
+	    ret += String.fromCharCode(buf[i] & 0x7F)
+	  }
+	  return ret
+	}
+
+	function binarySlice (buf, start, end) {
+	  var ret = ''
+	  end = Math.min(buf.length, end)
+
+	  for (var i = start; i < end; i++) {
+	    ret += String.fromCharCode(buf[i])
+	  }
+	  return ret
+	}
+
+	function hexSlice (buf, start, end) {
+	  var len = buf.length
+
+	  if (!start || start < 0) start = 0
+	  if (!end || end < 0 || end > len) end = len
+
+	  var out = ''
+	  for (var i = start; i < end; i++) {
+	    out += toHex(buf[i])
+	  }
+	  return out
+	}
+
+	function utf16leSlice (buf, start, end) {
+	  var bytes = buf.slice(start, end)
+	  var res = ''
+	  for (var i = 0; i < bytes.length; i += 2) {
+	    res += String.fromCharCode(bytes[i] + bytes[i + 1] * 256)
+	  }
+	  return res
+	}
+
+	Buffer.prototype.slice = function slice (start, end) {
+	  var len = this.length
+	  start = ~~start
+	  end = end === undefined ? len : ~~end
+
+	  if (start < 0) {
+	    start += len
+	    if (start < 0) start = 0
+	  } else if (start > len) {
+	    start = len
+	  }
+
+	  if (end < 0) {
+	    end += len
+	    if (end < 0) end = 0
+	  } else if (end > len) {
+	    end = len
+	  }
+
+	  if (end < start) end = start
+
+	  var newBuf
+	  if (Buffer.TYPED_ARRAY_SUPPORT) {
+	    newBuf = Buffer._augment(this.subarray(start, end))
+	  } else {
+	    var sliceLen = end - start
+	    newBuf = new Buffer(sliceLen, undefined)
+	    for (var i = 0; i < sliceLen; i++) {
+	      newBuf[i] = this[i + start]
+	    }
+	  }
+
+	  if (newBuf.length) newBuf.parent = this.parent || this
+
+	  return newBuf
+	}
+
+	/*
+	 * Need to make sure that buffer isn't trying to write out of bounds.
+	 */
+	function checkOffset (offset, ext, length) {
+	  if ((offset % 1) !== 0 || offset < 0) throw new RangeError('offset is not uint')
+	  if (offset + ext > length) throw new RangeError('Trying to access beyond buffer length')
+	}
+
+	Buffer.prototype.readUIntLE = function readUIntLE (offset, byteLength, noAssert) {
+	  offset = offset | 0
+	  byteLength = byteLength | 0
+	  if (!noAssert) checkOffset(offset, byteLength, this.length)
+
+	  var val = this[offset]
+	  var mul = 1
+	  var i = 0
+	  while (++i < byteLength && (mul *= 0x100)) {
+	    val += this[offset + i] * mul
+	  }
+
+	  return val
+	}
+
+	Buffer.prototype.readUIntBE = function readUIntBE (offset, byteLength, noAssert) {
+	  offset = offset | 0
+	  byteLength = byteLength | 0
+	  if (!noAssert) {
+	    checkOffset(offset, byteLength, this.length)
+	  }
+
+	  var val = this[offset + --byteLength]
+	  var mul = 1
+	  while (byteLength > 0 && (mul *= 0x100)) {
+	    val += this[offset + --byteLength] * mul
+	  }
+
+	  return val
+	}
+
+	Buffer.prototype.readUInt8 = function readUInt8 (offset, noAssert) {
+	  if (!noAssert) checkOffset(offset, 1, this.length)
+	  return this[offset]
+	}
+
+	Buffer.prototype.readUInt16LE = function readUInt16LE (offset, noAssert) {
+	  if (!noAssert) checkOffset(offset, 2, this.length)
+	  return this[offset] | (this[offset + 1] << 8)
+	}
+
+	Buffer.prototype.readUInt16BE = function readUInt16BE (offset, noAssert) {
+	  if (!noAssert) checkOffset(offset, 2, this.length)
+	  return (this[offset] << 8) | this[offset + 1]
+	}
+
+	Buffer.prototype.readUInt32LE = function readUInt32LE (offset, noAssert) {
+	  if (!noAssert) checkOffset(offset, 4, this.length)
+
+	  return ((this[offset]) |
+	      (this[offset + 1] << 8) |
+	      (this[offset + 2] << 16)) +
+	      (this[offset + 3] * 0x1000000)
+	}
+
+	Buffer.prototype.readUInt32BE = function readUInt32BE (offset, noAssert) {
+	  if (!noAssert) checkOffset(offset, 4, this.length)
+
+	  return (this[offset] * 0x1000000) +
+	    ((this[offset + 1] << 16) |
+	    (this[offset + 2] << 8) |
+	    this[offset + 3])
+	}
+
+	Buffer.prototype.readIntLE = function readIntLE (offset, byteLength, noAssert) {
+	  offset = offset | 0
+	  byteLength = byteLength | 0
+	  if (!noAssert) checkOffset(offset, byteLength, this.length)
+
+	  var val = this[offset]
+	  var mul = 1
+	  var i = 0
+	  while (++i < byteLength && (mul *= 0x100)) {
+	    val += this[offset + i] * mul
+	  }
+	  mul *= 0x80
+
+	  if (val >= mul) val -= Math.pow(2, 8 * byteLength)
+
+	  return val
+	}
+
+	Buffer.prototype.readIntBE = function readIntBE (offset, byteLength, noAssert) {
+	  offset = offset | 0
+	  byteLength = byteLength | 0
+	  if (!noAssert) checkOffset(offset, byteLength, this.length)
+
+	  var i = byteLength
+	  var mul = 1
+	  var val = this[offset + --i]
+	  while (i > 0 && (mul *= 0x100)) {
+	    val += this[offset + --i] * mul
+	  }
+	  mul *= 0x80
+
+	  if (val >= mul) val -= Math.pow(2, 8 * byteLength)
+
+	  return val
+	}
+
+	Buffer.prototype.readInt8 = function readInt8 (offset, noAssert) {
+	  if (!noAssert) checkOffset(offset, 1, this.length)
+	  if (!(this[offset] & 0x80)) return (this[offset])
+	  return ((0xff - this[offset] + 1) * -1)
+	}
+
+	Buffer.prototype.readInt16LE = function readInt16LE (offset, noAssert) {
+	  if (!noAssert) checkOffset(offset, 2, this.length)
+	  var val = this[offset] | (this[offset + 1] << 8)
+	  return (val & 0x8000) ? val | 0xFFFF0000 : val
+	}
+
+	Buffer.prototype.readInt16BE = function readInt16BE (offset, noAssert) {
+	  if (!noAssert) checkOffset(offset, 2, this.length)
+	  var val = this[offset + 1] | (this[offset] << 8)
+	  return (val & 0x8000) ? val | 0xFFFF0000 : val
+	}
+
+	Buffer.prototype.readInt32LE = function readInt32LE (offset, noAssert) {
+	  if (!noAssert) checkOffset(offset, 4, this.length)
+
+	  return (this[offset]) |
+	    (this[offset + 1] << 8) |
+	    (this[offset + 2] << 16) |
+	    (this[offset + 3] << 24)
+	}
+
+	Buffer.prototype.readInt32BE = function readInt32BE (offset, noAssert) {
+	  if (!noAssert) checkOffset(offset, 4, this.length)
+
+	  return (this[offset] << 24) |
+	    (this[offset + 1] << 16) |
+	    (this[offset + 2] << 8) |
+	    (this[offset + 3])
+	}
+
+	Buffer.prototype.readFloatLE = function readFloatLE (offset, noAssert) {
+	  if (!noAssert) checkOffset(offset, 4, this.length)
+	  return ieee754.read(this, offset, true, 23, 4)
+	}
+
+	Buffer.prototype.readFloatBE = function readFloatBE (offset, noAssert) {
+	  if (!noAssert) checkOffset(offset, 4, this.length)
+	  return ieee754.read(this, offset, false, 23, 4)
+	}
+
+	Buffer.prototype.readDoubleLE = function readDoubleLE (offset, noAssert) {
+	  if (!noAssert) checkOffset(offset, 8, this.length)
+	  return ieee754.read(this, offset, true, 52, 8)
+	}
+
+	Buffer.prototype.readDoubleBE = function readDoubleBE (offset, noAssert) {
+	  if (!noAssert) checkOffset(offset, 8, this.length)
+	  return ieee754.read(this, offset, false, 52, 8)
+	}
+
+	function checkInt (buf, value, offset, ext, max, min) {
+	  if (!Buffer.isBuffer(buf)) throw new TypeError('buffer must be a Buffer instance')
+	  if (value > max || value < min) throw new RangeError('value is out of bounds')
+	  if (offset + ext > buf.length) throw new RangeError('index out of range')
+	}
+
+	Buffer.prototype.writeUIntLE = function writeUIntLE (value, offset, byteLength, noAssert) {
+	  value = +value
+	  offset = offset | 0
+	  byteLength = byteLength | 0
+	  if (!noAssert) checkInt(this, value, offset, byteLength, Math.pow(2, 8 * byteLength), 0)
+
+	  var mul = 1
+	  var i = 0
+	  this[offset] = value & 0xFF
+	  while (++i < byteLength && (mul *= 0x100)) {
+	    this[offset + i] = (value / mul) & 0xFF
+	  }
+
+	  return offset + byteLength
+	}
+
+	Buffer.prototype.writeUIntBE = function writeUIntBE (value, offset, byteLength, noAssert) {
+	  value = +value
+	  offset = offset | 0
+	  byteLength = byteLength | 0
+	  if (!noAssert) checkInt(this, value, offset, byteLength, Math.pow(2, 8 * byteLength), 0)
+
+	  var i = byteLength - 1
+	  var mul = 1
+	  this[offset + i] = value & 0xFF
+	  while (--i >= 0 && (mul *= 0x100)) {
+	    this[offset + i] = (value / mul) & 0xFF
+	  }
+
+	  return offset + byteLength
+	}
+
+	Buffer.prototype.writeUInt8 = function writeUInt8 (value, offset, noAssert) {
+	  value = +value
+	  offset = offset | 0
+	  if (!noAssert) checkInt(this, value, offset, 1, 0xff, 0)
+	  if (!Buffer.TYPED_ARRAY_SUPPORT) value = Math.floor(value)
+	  this[offset] = (value & 0xff)
+	  return offset + 1
+	}
+
+	function objectWriteUInt16 (buf, value, offset, littleEndian) {
+	  if (value < 0) value = 0xffff + value + 1
+	  for (var i = 0, j = Math.min(buf.length - offset, 2); i < j; i++) {
+	    buf[offset + i] = (value & (0xff << (8 * (littleEndian ? i : 1 - i)))) >>>
+	      (littleEndian ? i : 1 - i) * 8
+	  }
+	}
+
+	Buffer.prototype.writeUInt16LE = function writeUInt16LE (value, offset, noAssert) {
+	  value = +value
+	  offset = offset | 0
+	  if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0)
+	  if (Buffer.TYPED_ARRAY_SUPPORT) {
+	    this[offset] = (value & 0xff)
+	    this[offset + 1] = (value >>> 8)
+	  } else {
+	    objectWriteUInt16(this, value, offset, true)
+	  }
+	  return offset + 2
+	}
+
+	Buffer.prototype.writeUInt16BE = function writeUInt16BE (value, offset, noAssert) {
+	  value = +value
+	  offset = offset | 0
+	  if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0)
+	  if (Buffer.TYPED_ARRAY_SUPPORT) {
+	    this[offset] = (value >>> 8)
+	    this[offset + 1] = (value & 0xff)
+	  } else {
+	    objectWriteUInt16(this, value, offset, false)
+	  }
+	  return offset + 2
+	}
+
+	function objectWriteUInt32 (buf, value, offset, littleEndian) {
+	  if (value < 0) value = 0xffffffff + value + 1
+	  for (var i = 0, j = Math.min(buf.length - offset, 4); i < j; i++) {
+	    buf[offset + i] = (value >>> (littleEndian ? i : 3 - i) * 8) & 0xff
+	  }
+	}
+
+	Buffer.prototype.writeUInt32LE = function writeUInt32LE (value, offset, noAssert) {
+	  value = +value
+	  offset = offset | 0
+	  if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0)
+	  if (Buffer.TYPED_ARRAY_SUPPORT) {
+	    this[offset + 3] = (value >>> 24)
+	    this[offset + 2] = (value >>> 16)
+	    this[offset + 1] = (value >>> 8)
+	    this[offset] = (value & 0xff)
+	  } else {
+	    objectWriteUInt32(this, value, offset, true)
+	  }
+	  return offset + 4
+	}
+
+	Buffer.prototype.writeUInt32BE = function writeUInt32BE (value, offset, noAssert) {
+	  value = +value
+	  offset = offset | 0
+	  if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0)
+	  if (Buffer.TYPED_ARRAY_SUPPORT) {
+	    this[offset] = (value >>> 24)
+	    this[offset + 1] = (value >>> 16)
+	    this[offset + 2] = (value >>> 8)
+	    this[offset + 3] = (value & 0xff)
+	  } else {
+	    objectWriteUInt32(this, value, offset, false)
+	  }
+	  return offset + 4
+	}
+
+	Buffer.prototype.writeIntLE = function writeIntLE (value, offset, byteLength, noAssert) {
+	  value = +value
+	  offset = offset | 0
+	  if (!noAssert) {
+	    var limit = Math.pow(2, 8 * byteLength - 1)
+
+	    checkInt(this, value, offset, byteLength, limit - 1, -limit)
+	  }
+
+	  var i = 0
+	  var mul = 1
+	  var sub = value < 0 ? 1 : 0
+	  this[offset] = value & 0xFF
+	  while (++i < byteLength && (mul *= 0x100)) {
+	    this[offset + i] = ((value / mul) >> 0) - sub & 0xFF
+	  }
+
+	  return offset + byteLength
+	}
+
+	Buffer.prototype.writeIntBE = function writeIntBE (value, offset, byteLength, noAssert) {
+	  value = +value
+	  offset = offset | 0
+	  if (!noAssert) {
+	    var limit = Math.pow(2, 8 * byteLength - 1)
+
+	    checkInt(this, value, offset, byteLength, limit - 1, -limit)
+	  }
+
+	  var i = byteLength - 1
+	  var mul = 1
+	  var sub = value < 0 ? 1 : 0
+	  this[offset + i] = value & 0xFF
+	  while (--i >= 0 && (mul *= 0x100)) {
+	    this[offset + i] = ((value / mul) >> 0) - sub & 0xFF
+	  }
+
+	  return offset + byteLength
+	}
+
+	Buffer.prototype.writeInt8 = function writeInt8 (value, offset, noAssert) {
+	  value = +value
+	  offset = offset | 0
+	  if (!noAssert) checkInt(this, value, offset, 1, 0x7f, -0x80)
+	  if (!Buffer.TYPED_ARRAY_SUPPORT) value = Math.floor(value)
+	  if (value < 0) value = 0xff + value + 1
+	  this[offset] = (value & 0xff)
+	  return offset + 1
+	}
+
+	Buffer.prototype.writeInt16LE = function writeInt16LE (value, offset, noAssert) {
+	  value = +value
+	  offset = offset | 0
+	  if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000)
+	  if (Buffer.TYPED_ARRAY_SUPPORT) {
+	    this[offset] = (value & 0xff)
+	    this[offset + 1] = (value >>> 8)
+	  } else {
+	    objectWriteUInt16(this, value, offset, true)
+	  }
+	  return offset + 2
+	}
+
+	Buffer.prototype.writeInt16BE = function writeInt16BE (value, offset, noAssert) {
+	  value = +value
+	  offset = offset | 0
+	  if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000)
+	  if (Buffer.TYPED_ARRAY_SUPPORT) {
+	    this[offset] = (value >>> 8)
+	    this[offset + 1] = (value & 0xff)
+	  } else {
+	    objectWriteUInt16(this, value, offset, false)
+	  }
+	  return offset + 2
+	}
+
+	Buffer.prototype.writeInt32LE = function writeInt32LE (value, offset, noAssert) {
+	  value = +value
+	  offset = offset | 0
+	  if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000)
+	  if (Buffer.TYPED_ARRAY_SUPPORT) {
+	    this[offset] = (value & 0xff)
+	    this[offset + 1] = (value >>> 8)
+	    this[offset + 2] = (value >>> 16)
+	    this[offset + 3] = (value >>> 24)
+	  } else {
+	    objectWriteUInt32(this, value, offset, true)
+	  }
+	  return offset + 4
+	}
+
+	Buffer.prototype.writeInt32BE = function writeInt32BE (value, offset, noAssert) {
+	  value = +value
+	  offset = offset | 0
+	  if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000)
+	  if (value < 0) value = 0xffffffff + value + 1
+	  if (Buffer.TYPED_ARRAY_SUPPORT) {
+	    this[offset] = (value >>> 24)
+	    this[offset + 1] = (value >>> 16)
+	    this[offset + 2] = (value >>> 8)
+	    this[offset + 3] = (value & 0xff)
+	  } else {
+	    objectWriteUInt32(this, value, offset, false)
+	  }
+	  return offset + 4
+	}
+
+	function checkIEEE754 (buf, value, offset, ext, max, min) {
+	  if (value > max || value < min) throw new RangeError('value is out of bounds')
+	  if (offset + ext > buf.length) throw new RangeError('index out of range')
+	  if (offset < 0) throw new RangeError('index out of range')
+	}
+
+	function writeFloat (buf, value, offset, littleEndian, noAssert) {
+	  if (!noAssert) {
+	    checkIEEE754(buf, value, offset, 4, 3.4028234663852886e+38, -3.4028234663852886e+38)
+	  }
+	  ieee754.write(buf, value, offset, littleEndian, 23, 4)
+	  return offset + 4
+	}
+
+	Buffer.prototype.writeFloatLE = function writeFloatLE (value, offset, noAssert) {
+	  return writeFloat(this, value, offset, true, noAssert)
+	}
+
+	Buffer.prototype.writeFloatBE = function writeFloatBE (value, offset, noAssert) {
+	  return writeFloat(this, value, offset, false, noAssert)
+	}
+
+	function writeDouble (buf, value, offset, littleEndian, noAssert) {
+	  if (!noAssert) {
+	    checkIEEE754(buf, value, offset, 8, 1.7976931348623157E+308, -1.7976931348623157E+308)
+	  }
+	  ieee754.write(buf, value, offset, littleEndian, 52, 8)
+	  return offset + 8
+	}
+
+	Buffer.prototype.writeDoubleLE = function writeDoubleLE (value, offset, noAssert) {
+	  return writeDouble(this, value, offset, true, noAssert)
+	}
+
+	Buffer.prototype.writeDoubleBE = function writeDoubleBE (value, offset, noAssert) {
+	  return writeDouble(this, value, offset, false, noAssert)
+	}
+
+	// copy(targetBuffer, targetStart=0, sourceStart=0, sourceEnd=buffer.length)
+	Buffer.prototype.copy = function copy (target, targetStart, start, end) {
+	  if (!start) start = 0
+	  if (!end && end !== 0) end = this.length
+	  if (targetStart >= target.length) targetStart = target.length
+	  if (!targetStart) targetStart = 0
+	  if (end > 0 && end < start) end = start
+
+	  // Copy 0 bytes; we're done
+	  if (end === start) return 0
+	  if (target.length === 0 || this.length === 0) return 0
+
+	  // Fatal error conditions
+	  if (targetStart < 0) {
+	    throw new RangeError('targetStart out of bounds')
+	  }
+	  if (start < 0 || start >= this.length) throw new RangeError('sourceStart out of bounds')
+	  if (end < 0) throw new RangeError('sourceEnd out of bounds')
+
+	  // Are we oob?
+	  if (end > this.length) end = this.length
+	  if (target.length - targetStart < end - start) {
+	    end = target.length - targetStart + start
+	  }
+
+	  var len = end - start
+	  var i
+
+	  if (this === target && start < targetStart && targetStart < end) {
+	    // descending copy from end
+	    for (i = len - 1; i >= 0; i--) {
+	      target[i + targetStart] = this[i + start]
+	    }
+	  } else if (len < 1000 || !Buffer.TYPED_ARRAY_SUPPORT) {
+	    // ascending copy from start
+	    for (i = 0; i < len; i++) {
+	      target[i + targetStart] = this[i + start]
+	    }
+	  } else {
+	    target._set(this.subarray(start, start + len), targetStart)
+	  }
+
+	  return len
+	}
+
+	// fill(value, start=0, end=buffer.length)
+	Buffer.prototype.fill = function fill (value, start, end) {
+	  if (!value) value = 0
+	  if (!start) start = 0
+	  if (!end) end = this.length
+
+	  if (end < start) throw new RangeError('end < start')
+
+	  // Fill 0 bytes; we're done
+	  if (end === start) return
+	  if (this.length === 0) return
+
+	  if (start < 0 || start >= this.length) throw new RangeError('start out of bounds')
+	  if (end < 0 || end > this.length) throw new RangeError('end out of bounds')
+
+	  var i
+	  if (typeof value === 'number') {
+	    for (i = start; i < end; i++) {
+	      this[i] = value
+	    }
+	  } else {
+	    var bytes = utf8ToBytes(value.toString())
+	    var len = bytes.length
+	    for (i = start; i < end; i++) {
+	      this[i] = bytes[i % len]
+	    }
+	  }
+
+	  return this
+	}
+
+	/**
+	 * Creates a new `ArrayBuffer` with the *copied* memory of the buffer instance.
+	 * Added in Node 0.12. Only available in browsers that support ArrayBuffer.
+	 */
+	Buffer.prototype.toArrayBuffer = function toArrayBuffer () {
+	  if (typeof Uint8Array !== 'undefined') {
+	    if (Buffer.TYPED_ARRAY_SUPPORT) {
+	      return (new Buffer(this)).buffer
+	    } else {
+	      var buf = new Uint8Array(this.length)
+	      for (var i = 0, len = buf.length; i < len; i += 1) {
+	        buf[i] = this[i]
+	      }
+	      return buf.buffer
+	    }
+	  } else {
+	    throw new TypeError('Buffer.toArrayBuffer not supported in this browser')
+	  }
+	}
+
+	// HELPER FUNCTIONS
+	// ================
+
+	var BP = Buffer.prototype
+
+	/**
+	 * Augment a Uint8Array *instance* (not the Uint8Array class!) with Buffer methods
+	 */
+	Buffer._augment = function _augment (arr) {
+	  arr.constructor = Buffer
+	  arr._isBuffer = true
+
+	  // save reference to original Uint8Array set method before overwriting
+	  arr._set = arr.set
+
+	  // deprecated
+	  arr.get = BP.get
+	  arr.set = BP.set
+
+	  arr.write = BP.write
+	  arr.toString = BP.toString
+	  arr.toLocaleString = BP.toString
+	  arr.toJSON = BP.toJSON
+	  arr.equals = BP.equals
+	  arr.compare = BP.compare
+	  arr.indexOf = BP.indexOf
+	  arr.copy = BP.copy
+	  arr.slice = BP.slice
+	  arr.readUIntLE = BP.readUIntLE
+	  arr.readUIntBE = BP.readUIntBE
+	  arr.readUInt8 = BP.readUInt8
+	  arr.readUInt16LE = BP.readUInt16LE
+	  arr.readUInt16BE = BP.readUInt16BE
+	  arr.readUInt32LE = BP.readUInt32LE
+	  arr.readUInt32BE = BP.readUInt32BE
+	  arr.readIntLE = BP.readIntLE
+	  arr.readIntBE = BP.readIntBE
+	  arr.readInt8 = BP.readInt8
+	  arr.readInt16LE = BP.readInt16LE
+	  arr.readInt16BE = BP.readInt16BE
+	  arr.readInt32LE = BP.readInt32LE
+	  arr.readInt32BE = BP.readInt32BE
+	  arr.readFloatLE = BP.readFloatLE
+	  arr.readFloatBE = BP.readFloatBE
+	  arr.readDoubleLE = BP.readDoubleLE
+	  arr.readDoubleBE = BP.readDoubleBE
+	  arr.writeUInt8 = BP.writeUInt8
+	  arr.writeUIntLE = BP.writeUIntLE
+	  arr.writeUIntBE = BP.writeUIntBE
+	  arr.writeUInt16LE = BP.writeUInt16LE
+	  arr.writeUInt16BE = BP.writeUInt16BE
+	  arr.writeUInt32LE = BP.writeUInt32LE
+	  arr.writeUInt32BE = BP.writeUInt32BE
+	  arr.writeIntLE = BP.writeIntLE
+	  arr.writeIntBE = BP.writeIntBE
+	  arr.writeInt8 = BP.writeInt8
+	  arr.writeInt16LE = BP.writeInt16LE
+	  arr.writeInt16BE = BP.writeInt16BE
+	  arr.writeInt32LE = BP.writeInt32LE
+	  arr.writeInt32BE = BP.writeInt32BE
+	  arr.writeFloatLE = BP.writeFloatLE
+	  arr.writeFloatBE = BP.writeFloatBE
+	  arr.writeDoubleLE = BP.writeDoubleLE
+	  arr.writeDoubleBE = BP.writeDoubleBE
+	  arr.fill = BP.fill
+	  arr.inspect = BP.inspect
+	  arr.toArrayBuffer = BP.toArrayBuffer
+
+	  return arr
+	}
+
+	var INVALID_BASE64_RE = /[^+\/0-9A-Za-z-_]/g
+
+	function base64clean (str) {
+	  // Node strips out invalid characters like \n and \t from the string, base64-js does not
+	  str = stringtrim(str).replace(INVALID_BASE64_RE, '')
+	  // Node converts strings with length < 2 to ''
+	  if (str.length < 2) return ''
+	  // Node allows for non-padded base64 strings (missing trailing ===), base64-js does not
+	  while (str.length % 4 !== 0) {
+	    str = str + '='
+	  }
+	  return str
+	}
+
+	function stringtrim (str) {
+	  if (str.trim) return str.trim()
+	  return str.replace(/^\s+|\s+$/g, '')
+	}
+
+	function toHex (n) {
+	  if (n < 16) return '0' + n.toString(16)
+	  return n.toString(16)
+	}
+
+	function utf8ToBytes (string, units) {
+	  units = units || Infinity
+	  var codePoint
+	  var length = string.length
+	  var leadSurrogate = null
+	  var bytes = []
+
+	  for (var i = 0; i < length; i++) {
+	    codePoint = string.charCodeAt(i)
+
+	    // is surrogate component
+	    if (codePoint > 0xD7FF && codePoint < 0xE000) {
+	      // last char was a lead
+	      if (!leadSurrogate) {
+	        // no lead yet
+	        if (codePoint > 0xDBFF) {
+	          // unexpected trail
+	          if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)
+	          continue
+	        } else if (i + 1 === length) {
+	          // unpaired lead
+	          if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)
+	          continue
+	        }
+
+	        // valid lead
+	        leadSurrogate = codePoint
+
+	        continue
+	      }
+
+	      // 2 leads in a row
+	      if (codePoint < 0xDC00) {
+	        if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)
+	        leadSurrogate = codePoint
+	        continue
+	      }
+
+	      // valid surrogate pair
+	      codePoint = leadSurrogate - 0xD800 << 10 | codePoint - 0xDC00 | 0x10000
+	    } else if (leadSurrogate) {
+	      // valid bmp char, but last char was a lead
+	      if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)
+	    }
+
+	    leadSurrogate = null
+
+	    // encode utf8
+	    if (codePoint < 0x80) {
+	      if ((units -= 1) < 0) break
+	      bytes.push(codePoint)
+	    } else if (codePoint < 0x800) {
+	      if ((units -= 2) < 0) break
+	      bytes.push(
+	        codePoint >> 0x6 | 0xC0,
+	        codePoint & 0x3F | 0x80
+	      )
+	    } else if (codePoint < 0x10000) {
+	      if ((units -= 3) < 0) break
+	      bytes.push(
+	        codePoint >> 0xC | 0xE0,
+	        codePoint >> 0x6 & 0x3F | 0x80,
+	        codePoint & 0x3F | 0x80
+	      )
+	    } else if (codePoint < 0x110000) {
+	      if ((units -= 4) < 0) break
+	      bytes.push(
+	        codePoint >> 0x12 | 0xF0,
+	        codePoint >> 0xC & 0x3F | 0x80,
+	        codePoint >> 0x6 & 0x3F | 0x80,
+	        codePoint & 0x3F | 0x80
+	      )
+	    } else {
+	      throw new Error('Invalid code point')
+	    }
+	  }
+
+	  return bytes
+	}
+
+	function asciiToBytes (str) {
+	  var byteArray = []
+	  for (var i = 0; i < str.length; i++) {
+	    // Node's code seems to be doing this and not & 0x7F..
+	    byteArray.push(str.charCodeAt(i) & 0xFF)
+	  }
+	  return byteArray
+	}
+
+	function utf16leToBytes (str, units) {
+	  var c, hi, lo
+	  var byteArray = []
+	  for (var i = 0; i < str.length; i++) {
+	    if ((units -= 2) < 0) break
+
+	    c = str.charCodeAt(i)
+	    hi = c >> 8
+	    lo = c % 256
+	    byteArray.push(lo)
+	    byteArray.push(hi)
+	  }
+
+	  return byteArray
+	}
+
+	function base64ToBytes (str) {
+	  return base64.toByteArray(base64clean(str))
+	}
+
+	function blitBuffer (src, dst, offset, length) {
+	  for (var i = 0; i < length; i++) {
+	    if ((i + offset >= dst.length) || (i >= src.length)) break
+	    dst[i + offset] = src[i]
+	  }
+	  return i
+	}
+
+	/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(2).Buffer, (function() { return this; }())))
+
+/***/ },
+/* 3 */
+/***/ function(module, exports, __webpack_require__) {
+
+	var lookup = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';
+
+	;(function (exports) {
+		'use strict';
+
+	  var Arr = (typeof Uint8Array !== 'undefined')
+	    ? Uint8Array
+	    : Array
+
+		var PLUS   = '+'.charCodeAt(0)
+		var SLASH  = '/'.charCodeAt(0)
+		var NUMBER = '0'.charCodeAt(0)
+		var LOWER  = 'a'.charCodeAt(0)
+		var UPPER  = 'A'.charCodeAt(0)
+		var PLUS_URL_SAFE = '-'.charCodeAt(0)
+		var SLASH_URL_SAFE = '_'.charCodeAt(0)
+
+		function decode (elt) {
+			var code = elt.charCodeAt(0)
+			if (code === PLUS ||
+			    code === PLUS_URL_SAFE)
+				return 62 // '+'
+			if (code === SLASH ||
+			    code === SLASH_URL_SAFE)
+				return 63 // '/'
+			if (code < NUMBER)
+				return -1 //no match
+			if (code < NUMBER + 10)
+				return code - NUMBER + 26 + 26
+			if (code < UPPER + 26)
+				return code - UPPER
+			if (code < LOWER + 26)
+				return code - LOWER + 26
+		}
+
+		function b64ToByteArray (b64) {
+			var i, j, l, tmp, placeHolders, arr
+
+			if (b64.length % 4 > 0) {
+				throw new Error('Invalid string. Length must be a multiple of 4')
+			}
+
+			// the number of equal signs (place holders)
+			// if there are two placeholders, than the two characters before it
+			// represent one byte
+			// if there is only one, then the three characters before it represent 2 bytes
+			// this is just a cheap hack to not do indexOf twice
+			var len = b64.length
+			placeHolders = '=' === b64.charAt(len - 2) ? 2 : '=' === b64.charAt(len - 1) ? 1 : 0
+
+			// base64 is 4/3 + up to two characters of the original data
+			arr = new Arr(b64.length * 3 / 4 - placeHolders)
+
+			// if there are placeholders, only get up to the last complete 4 chars
+			l = placeHolders > 0 ? b64.length - 4 : b64.length
+
+			var L = 0
+
+			function push (v) {
+				arr[L++] = v
+			}
+
+			for (i = 0, j = 0; i < l; i += 4, j += 3) {
+				tmp = (decode(b64.charAt(i)) << 18) | (decode(b64.charAt(i + 1)) << 12) | (decode(b64.charAt(i + 2)) << 6) | decode(b64.charAt(i + 3))
+				push((tmp & 0xFF0000) >> 16)
+				push((tmp & 0xFF00) >> 8)
+				push(tmp & 0xFF)
+			}
+
+			if (placeHolders === 2) {
+				tmp = (decode(b64.charAt(i)) << 2) | (decode(b64.charAt(i + 1)) >> 4)
+				push(tmp & 0xFF)
+			} else if (placeHolders === 1) {
+				tmp = (decode(b64.charAt(i)) << 10) | (decode(b64.charAt(i + 1)) << 4) | (decode(b64.charAt(i + 2)) >> 2)
+				push((tmp >> 8) & 0xFF)
+				push(tmp & 0xFF)
+			}
+
+			return arr
+		}
+
+		function uint8ToBase64 (uint8) {
+			var i,
+				extraBytes = uint8.length % 3, // if we have 1 byte left, pad 2 bytes
+				output = "",
+				temp, length
+
+			function encode (num) {
+				return lookup.charAt(num)
+			}
+
+			function tripletToBase64 (num) {
+				return encode(num >> 18 & 0x3F) + encode(num >> 12 & 0x3F) + encode(num >> 6 & 0x3F) + encode(num & 0x3F)
+			}
+
+			// go through the array every three bytes, we'll deal with trailing stuff later
+			for (i = 0, length = uint8.length - extraBytes; i < length; i += 3) {
+				temp = (uint8[i] << 16) + (uint8[i + 1] << 8) + (uint8[i + 2])
+				output += tripletToBase64(temp)
+			}
+
+			// pad the end with zeros, but make sure to not forget the extra bytes
+			switch (extraBytes) {
+				case 1:
+					temp = uint8[uint8.length - 1]
+					output += encode(temp >> 2)
+					output += encode((temp << 4) & 0x3F)
+					output += '=='
+					break
+				case 2:
+					temp = (uint8[uint8.length - 2] << 8) + (uint8[uint8.length - 1])
+					output += encode(temp >> 10)
+					output += encode((temp >> 4) & 0x3F)
+					output += encode((temp << 2) & 0x3F)
+					output += '='
+					break
+			}
+
+			return output
+		}
+
+		exports.toByteArray = b64ToByteArray
+		exports.fromByteArray = uint8ToBase64
+	}( false ? (this.base64js = {}) : exports))
+
+
+/***/ },
+/* 4 */
+/***/ function(module, exports) {
+
+	exports.read = function (buffer, offset, isLE, mLen, nBytes) {
+	  var e, m
+	  var eLen = nBytes * 8 - mLen - 1
+	  var eMax = (1 << eLen) - 1
+	  var eBias = eMax >> 1
+	  var nBits = -7
+	  var i = isLE ? (nBytes - 1) : 0
+	  var d = isLE ? -1 : 1
+	  var s = buffer[offset + i]
+
+	  i += d
+
+	  e = s & ((1 << (-nBits)) - 1)
+	  s >>= (-nBits)
+	  nBits += eLen
+	  for (; nBits > 0; e = e * 256 + buffer[offset + i], i += d, nBits -= 8) {}
+
+	  m = e & ((1 << (-nBits)) - 1)
+	  e >>= (-nBits)
+	  nBits += mLen
+	  for (; nBits > 0; m = m * 256 + buffer[offset + i], i += d, nBits -= 8) {}
+
+	  if (e === 0) {
+	    e = 1 - eBias
+	  } else if (e === eMax) {
+	    return m ? NaN : ((s ? -1 : 1) * Infinity)
+	  } else {
+	    m = m + Math.pow(2, mLen)
+	    e = e - eBias
+	  }
+	  return (s ? -1 : 1) * m * Math.pow(2, e - mLen)
+	}
+
+	exports.write = function (buffer, value, offset, isLE, mLen, nBytes) {
+	  var e, m, c
+	  var eLen = nBytes * 8 - mLen - 1
+	  var eMax = (1 << eLen) - 1
+	  var eBias = eMax >> 1
+	  var rt = (mLen === 23 ? Math.pow(2, -24) - Math.pow(2, -77) : 0)
+	  var i = isLE ? 0 : (nBytes - 1)
+	  var d = isLE ? 1 : -1
+	  var s = value < 0 || (value === 0 && 1 / value < 0) ? 1 : 0
+
+	  value = Math.abs(value)
+
+	  if (isNaN(value) || value === Infinity) {
+	    m = isNaN(value) ? 1 : 0
+	    e = eMax
+	  } else {
+	    e = Math.floor(Math.log(value) / Math.LN2)
+	    if (value * (c = Math.pow(2, -e)) < 1) {
+	      e--
+	      c *= 2
+	    }
+	    if (e + eBias >= 1) {
+	      value += rt / c
+	    } else {
+	      value += rt * Math.pow(2, 1 - eBias)
+	    }
+	    if (value * c >= 2) {
+	      e++
+	      c /= 2
+	    }
+
+	    if (e + eBias >= eMax) {
+	      m = 0
+	      e = eMax
+	    } else if (e + eBias >= 1) {
+	      m = (value * c - 1) * Math.pow(2, mLen)
+	      e = e + eBias
+	    } else {
+	      m = value * Math.pow(2, eBias - 1) * Math.pow(2, mLen)
+	      e = 0
+	    }
+	  }
+
+	  for (; mLen >= 8; buffer[offset + i] = m & 0xff, i += d, m /= 256, mLen -= 8) {}
+
+	  e = (e << mLen) | m
+	  eLen += mLen
+	  for (; eLen > 0; buffer[offset + i] = e & 0xff, i += d, e /= 256, eLen -= 8) {}
+
+	  buffer[offset + i - d] |= s * 128
+	}
+
+
+/***/ },
+/* 5 */
+/***/ function(module, exports) {
+
+	
+	/**
+	 * isArray
+	 */
+
+	var isArray = Array.isArray;
+
+	/**
+	 * toString
+	 */
+
+	var str = Object.prototype.toString;
+
+	/**
+	 * Whether or not the given `val`
+	 * is an array.
+	 *
+	 * example:
+	 *
+	 *        isArray([]);
+	 *        // > true
+	 *        isArray(arguments);
+	 *        // > false
+	 *        isArray('');
+	 *        // > false
+	 *
+	 * @param {mixed} val
+	 * @return {bool}
+	 */
+
+	module.exports = isArray || function (val) {
+	  return !! val && '[object Array]' == str.call(val);
+	};
+
+
+/***/ },
+/* 6 */
+/***/ function(module, exports, __webpack_require__) {
+
+	/* jslint node: true */
+	/* global window */
+	'use strict';
+
+	var _ = __webpack_require__(7);
+	var FontProvider = __webpack_require__(9);
+	var LayoutBuilder = __webpack_require__(11);
+	var PdfKit = __webpack_require__(24);
+	var PDFReference = __webpack_require__(46);
+	var sizes = __webpack_require__(102);
+	var ImageMeasure = __webpack_require__(103);
+	var textDecorator = __webpack_require__(104);
+	var FontProvider = __webpack_require__(9);
+
+	////////////////////////////////////////
+	// PdfPrinter
+
+	/**
+	 * @class Creates an instance of a PdfPrinter which turns document definition into a pdf
+	 *
+	 * @param {Object} fontDescriptors font definition dictionary
+	 *
+	 * @example
+	 * var fontDescriptors = {
+	 *	Roboto: {
+	 *		normal: 'fonts/Roboto-Regular.ttf',
+	 *		bold: 'fonts/Roboto-Medium.ttf',
+	 *		italics: 'fonts/Roboto-Italic.ttf',
+	 *		bolditalics: 'fonts/Roboto-Italic.ttf'
+	 *	}
+	 * };
+	 *
+	 * var printer = new PdfPrinter(fontDescriptors);
+	 */
+	function PdfPrinter(fontDescriptors) {
+		this.fontDescriptors = fontDescriptors;
+	}
+
+	/**
+	 * Executes layout engine for the specified document and renders it into a pdfkit document
+	 * ready to be saved.
+	 *
+	 * @param {Object} docDefinition document definition
+	 * @param {Object} docDefinition.content an array describing the pdf structure (for more information take a look at the examples in the /examples folder)
+	 * @param {Object} [docDefinition.defaultStyle] default (implicit) style definition
+	 * @param {Object} [docDefinition.styles] dictionary defining all styles which can be used in the document
+	 * @param {Object} [docDefinition.pageSize] page size (pdfkit units, A4 dimensions by default)
+	 * @param {Number} docDefinition.pageSize.width width
+	 * @param {Number} docDefinition.pageSize.height height
+	 * @param {Object} [docDefinition.pageMargins] page margins (pdfkit units)
+	 *
+	 * @example
+	 *
+	 * var docDefinition = {
+	 * 	info: {
+	 *		title: 'awesome Document',
+	 *		author: 'john doe',
+	 *		subject: 'subject of document',
+	 *		keywords: 'keywords for document',
+	 * 	},
+	 *	content: [
+	 *		'First paragraph',
+	 *		'Second paragraph, this time a little bit longer',
+	 *		{ text: 'Third paragraph, slightly bigger font size', fontSize: 20 },
+	 *		{ text: 'Another paragraph using a named style', style: 'header' },
+	 *		{ text: ['playing with ', 'inlines' ] },
+	 *		{ text: ['and ', { text: 'restyling ', bold: true }, 'them'] },
+	 *	],
+	 *	styles: {
+	 *		header: { fontSize: 30, bold: true }
+	 *	}
+	 * }
+	 *
+	 * var pdfDoc = printer.createPdfKitDocument(docDefinition);
+	 *
+	 * pdfDoc.pipe(fs.createWriteStream('sample.pdf'));
+	 * pdfDoc.end();
+	 *
+	 * @return {Object} a pdfKit document object which can be saved or encode to data-url
+	 */
+	PdfPrinter.prototype.createPdfKitDocument = function(docDefinition, options) {
+		options = options || {};
+
+		var pageSize = pageSize2widthAndHeight(docDefinition.pageSize || 'a4');
+
+	  if(docDefinition.pageOrientation === 'landscape') {
+	    pageSize = { width: pageSize.height, height: pageSize.width};
+	  }
+		pageSize.orientation = docDefinition.pageOrientation === 'landscape' ? docDefinition.pageOrientation : 'portrait';
+
+		this.pdfKitDoc = new PdfKit({ size: [ pageSize.width, pageSize.height ], compress: false});
+		this.pdfKitDoc.info.Producer = 'pdfmake';
+		this.pdfKitDoc.info.Creator = 'pdfmake';
+		
+		// pdf kit maintains the uppercase fieldnames from pdf spec
+		// to keep the pdfmake api consistent, the info field are defined lowercase
+		if(docDefinition.info){
+			var info = docDefinition.info;
+			// check for falsey an set null, so that pdfkit always get either null or value
+			this.pdfKitDoc.info.Title = docDefinition.info.title ? docDefinition.info.title : null;
+			this.pdfKitDoc.info.Author = docDefinition.info.author ? docDefinition.info.author : null;
+			this.pdfKitDoc.info.Subject = docDefinition.info.subject ? docDefinition.info.subject : null;
+			this.pdfKitDoc.info.Keywords = docDefinition.info.keywords ? docDefinition.info.keywords : null;
+		}
+		
+		this.fontProvider = new FontProvider(this.fontDescriptors, this.pdfKitDoc);
+
+	  docDefinition.images = docDefinition.images || {};
+
+		var builder = new LayoutBuilder(
+			pageSize,
+			fixPageMargins(docDefinition.pageMargins || 40),
+	        new ImageMeasure(this.pdfKitDoc, docDefinition.images));
+
+	  registerDefaultTableLayouts(builder);
+	  if (options.tableLayouts) {
+	    builder.registerTableLayouts(options.tableLayouts);
+	  }
+
+		var pages = builder.layoutDocument(docDefinition.content, this.fontProvider, docDefinition.styles || {}, docDefinition.defaultStyle || { fontSize: 12, font: 'Roboto' }, docDefinition.background, docDefinition.header, docDefinition.footer, docDefinition.images, docDefinition.watermark, docDefinition.pageBreakBefore);
+
+		renderPages(pages, this.fontProvider, this.pdfKitDoc);
+
+		if(options.autoPrint){
+	    var printActionRef = this.pdfKitDoc.ref({
+	      Type: 'Action',
+	      S: 'Named',
+	      N: 'Print'
+	    });
+	    this.pdfKitDoc._root.data.OpenAction = printActionRef;
+	    printActionRef.end();
+		}
+		return this.pdfKitDoc;
+	};
+
+	function fixPageMargins(margin) {
+	    if (!margin) return null;
+
+	    if (typeof margin === 'number' || margin instanceof Number) {
+	        margin = { left: margin, right: margin, top: margin, bottom: margin };
+	    } else if (margin instanceof Array) {
+	        if (margin.length === 2) {
+	            margin = { left: margin[0], top: margin[1], right: margin[0], bottom: margin[1] };
+	        } else if (margin.length === 4) {
+	            margin = { left: margin[0], top: margin[1], right: margin[2], bottom: margin[3] };
+	        } else throw 'Invalid pageMargins definition';
+	    }
+
+	    return margin;
+	}
+
+	function registerDefaultTableLayouts(layoutBuilder) {
+	  layoutBuilder.registerTableLayouts({
+	    noBorders: {
+	      hLineWidth: function(i) { return 0; },
+	      vLineWidth: function(i) { return 0; },
+	      paddingLeft: function(i) { return i && 4 || 0; },
+	      paddingRight: function(i, node) { return (i < node.table.widths.length - 1) ? 4 : 0; },
+	    },
+	    headerLineOnly: {
+	      hLineWidth: function(i, node) {
+	        if (i === 0 || i === node.table.body.length) return 0;
+	        return (i === node.table.headerRows) ? 2 : 0;
+	      },
+	      vLineWidth: function(i) { return 0; },
+	      paddingLeft: function(i) {
+	        return i === 0 ? 0 : 8;
+	      },
+	      paddingRight: function(i, node) {
+	        return (i === node.table.widths.length - 1) ? 0 : 8;
+	      }
+	    },
+	    lightHorizontalLines: {
+	      hLineWidth: function(i, node) {
+	        if (i === 0 || i === node.table.body.length) return 0;
+	        return (i === node.table.headerRows) ? 2 : 1;
+	      },
+	      vLineWidth: function(i) { return 0; },
+	      hLineColor: function(i) { return i === 1 ? 'black' : '#aaa'; },
+	      paddingLeft: function(i) {
+	        return i === 0 ? 0 : 8;
+	      },
+	      paddingRight: function(i, node) {
+	        return (i === node.table.widths.length - 1) ? 0 : 8;
+	      }
+	    }
+	  });
+	}
+
+	var defaultLayout = {
+	  hLineWidth: function(i, node) { return 1; }, //return node.table.headerRows && i === node.table.headerRows && 3 || 0; },
+	  vLineWidth: function(i, node) { return 1; },
+	  hLineColor: function(i, node) { return 'black'; },
+	  vLineColor: function(i, node) { return 'black'; },
+	  paddingLeft: function(i, node) { return 4; }, //i && 4 || 0; },
+	  paddingRight: function(i, node) { return 4; }, //(i < node.table.widths.length - 1) ? 4 : 0; },
+	  paddingTop: function(i, node) { return 2; },
+	  paddingBottom: function(i, node) { return 2; }
+	};
+
+	function pageSize2widthAndHeight(pageSize) {
+	    if (typeof pageSize == 'string' || pageSize instanceof String) {
+	        var size = sizes[pageSize.toUpperCase()];
+	        if (!size) throw ('Page size ' + pageSize + ' not recognized');
+	        return { width: size[0], height: size[1] };
+	    }
+
+	    return pageSize;
+	}
+
+	function StringObject(str){
+		this.isString = true;
+		this.toString = function(){
+			return str;
+		};
+	}
+
+	function updatePageOrientationInOptions(currentPage, pdfKitDoc) {
+		var previousPageOrientation = pdfKitDoc.options.size[0] > pdfKitDoc.options.size[1] ? 'landscape' : 'portrait';
+
+		if(currentPage.pageSize.orientation !== previousPageOrientation) {
+			var width = pdfKitDoc.options.size[0];
+			var height = pdfKitDoc.options.size[1];
+			pdfKitDoc.options.size = [height, width];
+		}
+	}
+
+	function renderPages(pages, fontProvider, pdfKitDoc) {
+	  pdfKitDoc._pdfMakePages = pages;
+		for (var i = 0; i < pages.length; i++) {
+			if (i > 0) {
+				updatePageOrientationInOptions(pages[i], pdfKitDoc);
+				pdfKitDoc.addPage(pdfKitDoc.options);
+			}
+
+			var page = pages[i];
+	    for(var ii = 0, il = page.items.length; ii < il; ii++) {
+	        var item = page.items[ii];
+	        switch(item.type) {
+	          case 'vector':
+	              renderVector(item.item, pdfKitDoc);
+	              break;
+	          case 'line':
+	              renderLine(item.item, item.item.x, item.item.y, pdfKitDoc);
+	              break;
+	          case 'image':
+	              renderImage(item.item, item.item.x, item.item.y, pdfKitDoc);
+	              break;
+					}
+	    }
+	    if(page.watermark){
+	      renderWatermark(page, pdfKitDoc);
+		}
+
+	    fontProvider.setFontRefsToPdfDoc();
+	  }
+	}
+
+	function renderLine(line, x, y, pdfKitDoc) {
+		x = x || 0;
+		y = y || 0;
+
+		var lineHeight = line.getHeight();
+		var ascenderHeight = line.getAscenderHeight();
+
+		textDecorator.drawBackground(line, x, y, pdfKitDoc);
+
+		//TODO: line.optimizeInlines();
+		for(var i = 0, l = line.inlines.length; i < l; i++) {
+			var inline = line.inlines[i];
+
+			pdfKitDoc.fill(inline.color || 'black');
+
+			pdfKitDoc.save();
+			pdfKitDoc.transform(1, 0, 0, -1, 0, pdfKitDoc.page.height);
+
+
+	    var encoded = inline.font.encode(inline.text);
+			pdfKitDoc.addContent('BT');
+
+			pdfKitDoc.addContent('' + (x + inline.x) + ' ' + (pdfKitDoc.page.height - y - ascenderHeight) + ' Td');
+			pdfKitDoc.addContent('/' + encoded.fontId + ' ' + inline.fontSize + ' Tf');
+
+	        pdfKitDoc.addContent('<' + encoded.encodedText + '> Tj');
+
+			pdfKitDoc.addContent('ET');
+
+			if (inline.link) {
+				pdfKitDoc.link(x + inline.x, pdfKitDoc.page.height - y - lineHeight, inline.width, lineHeight, inline.link);
+			}
+
+			pdfKitDoc.restore();
+		}
+
+		textDecorator.drawDecorations(line, x, y, pdfKitDoc);
+
+	}
+
+	function renderWatermark(page, pdfKitDoc){
+		var watermark = page.watermark;
+
+		pdfKitDoc.fill('black');
+		pdfKitDoc.opacity(0.6);
+
+		pdfKitDoc.save();
+		pdfKitDoc.transform(1, 0, 0, -1, 0, pdfKitDoc.page.height);
+
+		var angle = Math.atan2(pdfKitDoc.page.height, pdfKitDoc.page.width) * 180/Math.PI;
+		pdfKitDoc.rotate(angle, {origin: [pdfKitDoc.page.width/2, pdfKitDoc.page.height/2]});
+
+	  var encoded = watermark.font.encode(watermark.text);
+		pdfKitDoc.addContent('BT');
+		pdfKitDoc.addContent('' + (pdfKitDoc.page.width/2 - watermark.size.size.width/2) + ' ' + (pdfKitDoc.page.height/2 - watermark.size.size.height/4) + ' Td');
+		pdfKitDoc.addContent('/' + encoded.fontId + ' ' + watermark.size.fontSize + ' Tf');
+		pdfKitDoc.addContent('<' + encoded.encodedText + '> Tj');
+		pdfKitDoc.addContent('ET');
+		pdfKitDoc.restore();
+	}
+
+	function renderVector(vector, pdfDoc) {
+		//TODO: pdf optimization (there's no need to write all properties everytime)
+		pdfDoc.lineWidth(vector.lineWidth || 1);
+		if (vector.dash) {
+			pdfDoc.dash(vector.dash.length, { space: vector.dash.space || vector.dash.length });
+		} else {
+			pdfDoc.undash();
+		}
+		pdfDoc.fillOpacity(vector.fillOpacity || 1);
+		pdfDoc.strokeOpacity(vector.strokeOpacity || 1);
+		pdfDoc.lineJoin(vector.lineJoin || 'miter');
+
+		//TODO: clipping
+
+		switch(vector.type) {
+			case 'ellipse':
+				pdfDoc.ellipse(vector.x, vector.y, vector.r1, vector.r2);
+				break;
+			case 'rect':
+				if (vector.r) {
+					pdfDoc.roundedRect(vector.x, vector.y, vector.w, vector.h, vector.r);
+				} else {
+					pdfDoc.rect(vector.x, vector.y, vector.w, vector.h);
+				}
+				break;
+			case 'line':
+				pdfDoc.moveTo(vector.x1, vector.y1);
+				pdfDoc.lineTo(vector.x2, vector.y2);
+				break;
+			case 'polyline':
+				if (vector.points.length === 0) break;
+
+				pdfDoc.moveTo(vector.points[0].x, vector.points[0].y);
+				for(var i = 1, l = vector.points.length; i < l; i++) {
+					pdfDoc.lineTo(vector.points[i].x, vector.points[i].y);
+				}
+
+				if (vector.points.length > 1) {
+					var p1 = vector.points[0];
+					var pn = vector.points[vector.points.length - 1];
+
+					if (vector.closePath || p1.x === pn.x && p1.y === pn.y) {
+						pdfDoc.closePath();
+					}
+				}
+				break;
+		}
+
+		if (vector.color && vector.lineColor) {
+			pdfDoc.fillAndStroke(vector.color, vector.lineColor);
+		} else if (vector.color) {
+			pdfDoc.fill(vector.color);
+		} else {
+			pdfDoc.stroke(vector.lineColor || 'black');
+		}
+	}
+
+	function renderImage(image, x, y, pdfKitDoc) {
+	    pdfKitDoc.image(image.image, image.x, image.y, { width: image._width, height: image._height });
+	}
+
+	module.exports = PdfPrinter;
+
+
+	/* temporary browser extension */
+	PdfPrinter.prototype.fs = __webpack_require__(44);
+
+
+/***/ },
+/* 7 */
+/***/ function(module, exports, __webpack_require__) {
+
+	var __WEBPACK_AMD_DEFINE_RESULT__;/* WEBPACK VAR INJECTION */(function(module, global) {/**
+	 * @license
+	 * lodash 3.10.1 (Custom Build) <https://lodash.com/>
+	 * Build: `lodash modern -d -o ./index.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-value-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((isRight && isArr) ? array.reverse() : 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-value-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);
+	      if (!(funcName in LazyWrapper.prototype)) {
+	        return false;
+	      }
+	      var other = lodash[funcName];
+	      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 is 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 is 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 is 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 is 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 (wrapped && wrapped.__dir__ < 0) ? value : 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 `value` is in `collection` using
+	     * [`SameValueZero`](http://ecma-international.org/ecma-262/6.0/#sec-samevaluezero)
+	     * for equality comparisons. If `fromIndex` is negative, it is 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 is
+	     * 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 is 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 is 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 is 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 is 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 is 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/en-US/docs/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/en-US/docs/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 is
+	     * 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 two 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, 1))
+	        : baseClone(value, isDeep);
+	    }
+
+	    /**
+	     * Creates a deep clone of `value`. If `customizer` is provided it is 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 two 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, 1))
+	        : 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 is 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 is 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 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 equivalents which return '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 is 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 is 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 is 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 is 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 is 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 is 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 is 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 is 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 is
+	     * 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 is 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 is 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 (true) {
+	    // 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.
+	    !(__WEBPACK_AMD_DEFINE_RESULT__ = function() {
+	      return _;
+	    }.call(exports, __webpack_require__, exports, module), __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));
+	  }
+	  // 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));
+
+	/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(8)(module), (function() { return this; }())))
+
+/***/ },
+/* 8 */
+/***/ function(module, exports) {
+
+	module.exports = function(module) {
+		if(!module.webpackPolyfill) {
+			module.deprecate = function() {};
+			module.paths = [];
+			// module.parent = undefined by default
+			module.children = [];
+			module.webpackPolyfill = 1;
+		}
+		return module;
+	}
+
+
+/***/ },
+/* 9 */
+/***/ function(module, exports, __webpack_require__) {
+
+	/* jslint node: true */
+	'use strict';
+
+	var _ = __webpack_require__(7);
+	var FontWrapper = __webpack_require__(10);
+
+	function typeName(bold, italics){
+		var type = 'normal';
+		if (bold && italics) type = 'bolditalics';
+		else if (bold) type = 'bold';
+		else if (italics) type = 'italics';
+		return type;
+	}
+
+	function FontProvider(fontDescriptors, pdfDoc) {
+		this.fonts = {};
+		this.pdfDoc = pdfDoc;
+		this.fontWrappers = {};
+
+		for(var font in fontDescriptors) {
+			if (fontDescriptors.hasOwnProperty(font)) {
+				var fontDef = fontDescriptors[font];
+
+				this.fonts[font] = {
+					normal: fontDef.normal,
+					bold: fontDef.bold,
+					italics: fontDef.italics,
+					bolditalics: fontDef.bolditalics
+				};
+			}
+		}
+	}
+
+	FontProvider.prototype.provideFont = function(familyName, bold, italics) {
+		var type = typeName(bold, italics);
+	  if (!this.fonts[familyName] || !this.fonts[familyName][type]) {
+			throw new Error('Font \''+ familyName + '\' in style \''+type+ '\' is not defined in the font section of the document definition.');
+		}
+
+	  this.fontWrappers[familyName] = this.fontWrappers[familyName] || {};
+
+	  if (!this.fontWrappers[familyName][type]) {
+			this.fontWrappers[familyName][type] = new FontWrapper(this.pdfDoc, this.fonts[familyName][type], familyName + '(' + type + ')');
+		}
+
+	  return this.fontWrappers[familyName][type];
+	};
+
+	FontProvider.prototype.setFontRefsToPdfDoc = function(){
+	  var self = this;
+
+	  _.each(self.fontWrappers, function(fontFamily) {
+	    _.each(fontFamily, function(fontWrapper){
+	      _.each(fontWrapper.pdfFonts, function(font){
+	        if (!self.pdfDoc.page.fonts[font.id]) {
+	          self.pdfDoc.page.fonts[font.id] = font.ref();
+	        }
+	      });
+	    });
+	  });
+	};
+
+	module.exports = FontProvider;
+
+
+/***/ },
+/* 10 */
+/***/ function(module, exports, __webpack_require__) {
+
+	/* jslint node: true */
+	'use strict';
+
+	var _ = __webpack_require__(7);
+
+	function FontWrapper(pdfkitDoc, path, fontName){
+		this.MAX_CHAR_TYPES = 92;
+
+		this.pdfkitDoc = pdfkitDoc;
+		this.path = path;
+		this.pdfFonts = [];
+		this.charCatalogue = [];
+		this.name = fontName;
+
+	  Object.defineProperty(this, 'ascender', {
+	    get: function () {
+	      var font = this.getFont(0);
+	      return font.ascender;
+	    }
+	  });
+	  Object.defineProperty(this, 'decender', {
+	    get: function () {
+	      var font = this.getFont(0);
+	      return font.decender;
+	    }
+	  });
+
+	}
+	// private
+
+	FontWrapper.prototype.getFont = function(index){
+		if(!this.pdfFonts[index]){
+
+			var pseudoName = this.name + index;
+
+			if(this.postscriptName){
+				delete this.pdfkitDoc._fontFamilies[this.postscriptName];
+			}
+
+			this.pdfFonts[index] = this.pdfkitDoc.font(this.path, pseudoName)._font;
+			if(!this.postscriptName){
+				this.postscriptName = this.pdfFonts[index].name;
+			}
+		}
+
+		return this.pdfFonts[index];
+	};
+
+	// public
+	FontWrapper.prototype.widthOfString = function(){
+		var font = this.getFont(0);
+		return font.widthOfString.apply(font, arguments);
+	};
+
+	FontWrapper.prototype.lineHeight = function(){
+		var font = this.getFont(0);
+		return font.lineHeight.apply(font, arguments);
+	};
+
+	FontWrapper.prototype.ref = function(){
+		var font = this.getFont(0);
+		return font.ref.apply(font, arguments);
+	};
+
+	var toCharCode = function(char){
+	  return char.charCodeAt(0);
+	};
+
+	FontWrapper.prototype.encode = function(text){
+	  var self = this;
+
+	  var charTypesInInline = _.chain(text.split('')).map(toCharCode).uniq().value();
+		if (charTypesInInline.length > self.MAX_CHAR_TYPES) {
+			throw new Error('Inline has more than '+ self.MAX_CHAR_TYPES + ': ' + text + ' different character types and therefore cannot be properly embedded into pdf.');
+		}
+
+
+	  var characterFitInFontWithIndex = function (charCatalogue) {
+	    return _.uniq(charCatalogue.concat(charTypesInInline)).length <= self.MAX_CHAR_TYPES;
+	  };
+
+	  var index = _.findIndex(self.charCatalogue, characterFitInFontWithIndex);
+
+	  if(index < 0){
+	    index = self.charCatalogue.length;
+	    self.charCatalogue[index] = [];
+	  }
+
+		var font = self.getFont(index);
+		font.use(text);
+
+	  _.each(charTypesInInline, function(charCode){
+	    if(!_.includes(self.charCatalogue[index], charCode)){
+	      self.charCatalogue[index].push(charCode);
+	    }
+	  });
+
+	  var encodedText = _.map(font.encode(text), function (char) {
+	    return char.charCodeAt(0).toString(16);
+	  }).join('');
+
+	  return {
+	    encodedText: encodedText,
+	    fontId: font.id
+	  };
+	};
+
+
+	module.exports = FontWrapper;
+
+
+/***/ },
+/* 11 */
+/***/ function(module, exports, __webpack_require__) {
+
+	/* jslint node: true */
+	'use strict';
+
+	var _ = __webpack_require__(7);
+	var TraversalTracker = __webpack_require__(12);
+	var DocMeasure = __webpack_require__(13);
+	var DocumentContext = __webpack_require__(19);
+	var PageElementWriter = __webpack_require__(20);
+	var ColumnCalculator = __webpack_require__(16);
+	var TableProcessor = __webpack_require__(23);
+	var Line = __webpack_require__(22);
+	var pack = __webpack_require__(17).pack;
+	var offsetVector = __webpack_require__(17).offsetVector;
+	var fontStringify = __webpack_require__(17).fontStringify;
+	var isFunction = __webpack_require__(17).isFunction;
+	var TextTools = __webpack_require__(14);
+	var StyleContextStack = __webpack_require__(15);
+
+	function addAll(target, otherArray){
+	  _.each(otherArray, function(item){
+	    target.push(item);
+	  });
+	}
+
+	/**
+	 * Creates an instance of LayoutBuilder - layout engine which turns document-definition-object
+	 * into a set of pages, lines, inlines and vectors ready to be rendered into a PDF
+	 *
+	 * @param {Object} pageSize - an object defining page width and height
+	 * @param {Object} pageMargins - an object defining top, left, right and bottom margins
+	 */
+	function LayoutBuilder(pageSize, pageMargins, imageMeasure) {
+		this.pageSize = pageSize;
+		this.pageMargins = pageMargins;
+		this.tracker = new TraversalTracker();
+	    this.imageMeasure = imageMeasure;
+	    this.tableLayouts = {};
+	}
+
+	LayoutBuilder.prototype.registerTableLayouts = function (tableLayouts) {
+	  this.tableLayouts = pack(this.tableLayouts, tableLayouts);
+	};
+
+	/**
+	 * Executes layout engine on document-definition-object and creates an array of pages
+	 * containing positioned Blocks, Lines and inlines
+	 *
+	 * @param {Object} docStructure document-definition-object
+	 * @param {Object} fontProvider font provider
+	 * @param {Object} styleDictionary dictionary with style definitions
+	 * @param {Object} defaultStyle default style definition
+	 * @return {Array} an array of pages
+	 */
+	LayoutBuilder.prototype.layoutDocument = function (docStructure, fontProvider, styleDictionary, defaultStyle, background, header, footer, images, watermark, pageBreakBeforeFct) {
+
+	  function addPageBreaksIfNecessary(linearNodeList, pages) {
+
+			if(!isFunction(pageBreakBeforeFct)){
+				return false;
+			}
+
+	    linearNodeList = _.reject(linearNodeList, function(node){
+	      return _.isEmpty(node.positions);
+	    });
+
+	    _.each(linearNodeList, function(node) {
+	      var nodeInfo = _.pick(node, [
+	        'id', 'text', 'ul', 'ol', 'table', 'image', 'qr', 'canvas', 'columns',
+	        'headlineLevel', 'style', 'pageBreak', 'pageOrientation',
+	        'width', 'height'
+	      ]);
+	      nodeInfo.startPosition = _.first(node.positions);
+	      nodeInfo.pageNumbers = _.chain(node.positions).map('pageNumber').uniq().value();
+	      nodeInfo.pages = pages.length;
+	      nodeInfo.stack = _.isArray(node.stack);
+
+	      node.nodeInfo = nodeInfo;
+	    });
+
+	    return _.any(linearNodeList, function (node, index, followingNodeList) {
+	      if (node.pageBreak !== 'before' && !node.pageBreakCalculated) {
+	        node.pageBreakCalculated = true;
+	        var pageNumber = _.first(node.nodeInfo.pageNumbers);
+
+					var followingNodesOnPage = _.chain(followingNodeList).drop(index + 1).filter(function (node0) {
+	          return _.contains(node0.nodeInfo.pageNumbers, pageNumber);
+	        }).value();
+
+	        var nodesOnNextPage = _.chain(followingNodeList).drop(index + 1).filter(function (node0) {
+	          return _.contains(node0.nodeInfo.pageNumbers, pageNumber + 1);
+	        }).value();
+
+	        var previousNodesOnPage = _.chain(followingNodeList).take(index).filter(function (node0) {
+	          return _.contains(node0.nodeInfo.pageNumbers, pageNumber);
+	        }).value();
+
+	        if (pageBreakBeforeFct(node.nodeInfo,
+	          _.map(followingNodesOnPage, 'nodeInfo'),
+	          _.map(nodesOnNextPage, 'nodeInfo'),
+	          _.map(previousNodesOnPage, 'nodeInfo'))) {
+	          node.pageBreak = 'before';
+	          return true;
+	        }
+	      }
+	    });
+	  }
+
+	  this.docMeasure = new DocMeasure(fontProvider, styleDictionary, defaultStyle, this.imageMeasure, this.tableLayouts, images);
+
+
+	  function resetXYs(result) {
+	    _.each(result.linearNodeList, function (node) {
+	      node.resetXY();
+	    });
+	  }
+
+	  var result = this.tryLayoutDocument(docStructure, fontProvider, styleDictionary, defaultStyle, background, header, footer, images, watermark);
+	  while(addPageBreaksIfNecessary(result.linearNodeList, result.pages)){
+	    resetXYs(result);
+	    result = this.tryLayoutDocument(docStructure, fontProvider, styleDictionary, defaultStyle, background, header, footer, images, watermark);
+	  }
+
+		return result.pages;
+	};
+
+	LayoutBuilder.prototype.tryLayoutDocument = function (docStructure, fontProvider, styleDictionary, defaultStyle, background, header, footer, images, watermark, pageBreakBeforeFct) {
+
+	  this.linearNodeList = [];
+	  docStructure = this.docMeasure.measureDocument(docStructure);
+
+	  this.writer = new PageElementWriter(
+	    new DocumentContext(this.pageSize, this.pageMargins), this.tracker);
+
+	  var _this = this;
+	  this.writer.context().tracker.startTracking('pageAdded', function() {
+	    _this.addBackground(background);
+	  });
+
+	  this.addBackground(background);
+	  this.processNode(docStructure);
+	  this.addHeadersAndFooters(header, footer);
+	  /* jshint eqnull:true */
+	  if(watermark != null)
+	    this.addWatermark(watermark, fontProvider);
+
+	  return {pages: this.writer.context().pages, linearNodeList: this.linearNodeList};
+	};
+
+
+	LayoutBuilder.prototype.addBackground = function(background) {
+	    var backgroundGetter = isFunction(background) ? background : function() { return background; };
+
+	    var pageBackground = backgroundGetter(this.writer.context().page + 1);
+
+	    if (pageBackground) {
+	      var pageSize = this.writer.context().getCurrentPage().pageSize;
+	      this.writer.beginUnbreakableBlock(pageSize.width, pageSize.height);
+	      this.processNode(this.docMeasure.measureDocument(pageBackground));
+	      this.writer.commitUnbreakableBlock(0, 0);
+	    }
+	};
+
+	LayoutBuilder.prototype.addStaticRepeatable = function(headerOrFooter, sizeFunction) {
+	  this.addDynamicRepeatable(function() { return headerOrFooter; }, sizeFunction);
+	};
+
+	LayoutBuilder.prototype.addDynamicRepeatable = function(nodeGetter, sizeFunction) {
+	  var pages = this.writer.context().pages;
+
+	  for(var pageIndex = 0, l = pages.length; pageIndex < l; pageIndex++) {
+	    this.writer.context().page = pageIndex;
+
+	    var node = nodeGetter(pageIndex + 1, l);
+
+	    if (node) {
+	      var sizes = sizeFunction(this.writer.context().getCurrentPage().pageSize, this.pageMargins);
+	      this.writer.beginUnbreakableBlock(sizes.width, sizes.height);
+	      this.processNode(this.docMeasure.measureDocument(node));
+	      this.writer.commitUnbreakableBlock(sizes.x, sizes.y);
+	    }
+	  }
+	};
+
+	LayoutBuilder.prototype.addHeadersAndFooters = function(header, footer) {
+	  var headerSizeFct = function(pageSize, pageMargins){
+	    return {
+	      x: 0,
+	      y: 0,
+	      width: pageSize.width,
+	      height: pageMargins.top
+	    };
+	  };
+
+	  var footerSizeFct = function (pageSize, pageMargins) {
+	    return {
+	      x: 0,
+	      y: pageSize.height - pageMargins.bottom,
+	      width: pageSize.width,
+	      height: pageMargins.bottom
+	    };
+	  };
+
+	  if(isFunction(header)) {
+	    this.addDynamicRepeatable(header, headerSizeFct);
+	  } else if(header) {
+	    this.addStaticRepeatable(header, headerSizeFct);
+	  }
+
+	  if(isFunction(footer)) {
+	    this.addDynamicRepeatable(footer, footerSizeFct);
+	  } else if(footer) {
+	    this.addStaticRepeatable(footer, footerSizeFct);
+	  }
+	};
+
+	LayoutBuilder.prototype.addWatermark = function(watermark, fontProvider){
+	  var defaultFont = Object.getOwnPropertyNames(fontProvider.fonts)[0]; // TODO allow selection of other font
+	  var watermarkObject = {
+	    text: watermark,
+	    font: fontProvider.provideFont(fontProvider[defaultFont], false, false),
+	    size: getSize(this.pageSize, watermark, fontProvider)
+	  };
+
+	  var pages = this.writer.context().pages;
+	  for(var i = 0, l = pages.length; i < l; i++) {
+	    pages[i].watermark = watermarkObject;
+	  }
+
+	  function getSize(pageSize, watermark, fontProvider){
+	    var width = pageSize.width;
+	    var height = pageSize.height;
+	    var targetWidth = Math.sqrt(width*width + height*height)*0.8; /* page diagnoal * sample factor */
+	    var textTools = new TextTools(fontProvider);
+	    var styleContextStack = new StyleContextStack();
+	    var size;
+
+	    /**
+	     * Binary search the best font size.
+	     * Initial bounds [0, 1000]
+	     * Break when range < 1
+	     */
+	    var a = 0;
+	    var b = 1000;
+	    var c = (a+b)/2;
+	    while(Math.abs(a - b) > 1){
+	      styleContextStack.push({
+	        fontSize: c
+	      });
+	      size = textTools.sizeOfString(watermark, styleContextStack);
+	      if(size.width > targetWidth){
+	        b = c;
+	        c = (a+b)/2;
+	      }
+	      else if(size.width < targetWidth){
+	        a = c;
+	        c = (a+b)/2;
+	      }
+	      styleContextStack.pop();
+	    }
+	    /*
+	      End binary search
+	     */
+	    return {size: size, fontSize: c};
+	  }
+	};
+
+	function decorateNode(node){
+	  var x = node.x, y = node.y;
+	  node.positions = [];
+
+	  _.each(node.canvas, function(vector){
+	    var x = vector.x, y = vector.y, x1 = vector.x1, y1 = vector.y1, x2 = vector.x2, y2 = vector.y2;
+	    vector.resetXY = function(){
+	      vector.x = x;
+	      vector.y = y;
+				vector.x1 = x1;
+				vector.y1 = y1;
+				vector.x2 = x2;
+				vector.y2 = y2;
+	    };
+	  });
+
+	  node.resetXY = function(){
+	    node.x = x;
+	    node.y = y;
+	    _.each(node.canvas, function(vector){
+	      vector.resetXY();
+	    });
+	  };
+	}
+
+	LayoutBuilder.prototype.processNode = function(node) {
+	  var self = this;
+
+	  this.linearNodeList.push(node);
+	  decorateNode(node);
+
+	  applyMargins(function() {
+	    var absPosition = node.absolutePosition;
+	    if(absPosition){
+	      self.writer.context().beginDetachedBlock();
+	      self.writer.context().moveTo(absPosition.x || 0, absPosition.y || 0);
+	    }
+
+	    if (node.stack) {
+	      self.processVerticalContainer(node);
+	    } else if (node.columns) {
+	      self.processColumns(node);
+	    } else if (node.ul) {
+	      self.processList(false, node);
+	    } else if (node.ol) {
+	      self.processList(true, node);
+	    } else if (node.table) {
+	      self.processTable(node);
+	    } else if (node.text !== undefined) {
+	      self.processLeaf(node);
+	    } else if (node.image) {
+	      self.processImage(node);
+	    } else if (node.canvas) {
+	      self.processCanvas(node);
+	    } else if (node.qr) {
+	      self.processQr(node);
+	    }else if (!node._span) {
+			throw 'Unrecognized document structure: ' + JSON.stringify(node, fontStringify);
+			}
+
+	    if(absPosition){
+	      self.writer.context().endDetachedBlock();
+	    }
+		});
+
+		function applyMargins(callback) {
+			var margin = node._margin;
+
+	    if (node.pageBreak === 'before') {
+	        self.writer.moveToNextPage(node.pageOrientation);
+	    }
+
+			if (margin) {
+				self.writer.context().moveDown(margin[1]);
+				self.writer.context().addMargin(margin[0], margin[2]);
+			}
+
+			callback();
+
+			if(margin) {
+				self.writer.context().addMargin(-margin[0], -margin[2]);
+				self.writer.context().moveDown(margin[3]);
+			}
+
+	    if (node.pageBreak === 'after') {
+	        self.writer.moveToNextPage(node.pageOrientation);
+	    }
+		}
+	};
+
+	// vertical container
+	LayoutBuilder.prototype.processVerticalContainer = function(node) {
+		var self = this;
+		node.stack.forEach(function(item) {
+			self.processNode(item);
+			addAll(node.positions, item.positions);
+
+			//TODO: paragraph gap
+		});
+	};
+
+	// columns
+	LayoutBuilder.prototype.processColumns = function(columnNode) {
+		var columns = columnNode.columns;
+		var availableWidth = this.writer.context().availableWidth;
+		var gaps = gapArray(columnNode._gap);
+
+		if (gaps) availableWidth -= (gaps.length - 1) * columnNode._gap;
+
+		ColumnCalculator.buildColumnWidths(columns, availableWidth);
+		var result = this.processRow(columns, columns, gaps);
+	    addAll(columnNode.positions, result.positions);
+
+
+		function gapArray(gap) {
+			if (!gap) return null;
+
+			var gaps = [];
+			gaps.push(0);
+
+			for(var i = columns.length - 1; i > 0; i--) {
+				gaps.push(gap);
+			}
+
+			return gaps;
+		}
+	};
+
+	LayoutBuilder.prototype.processRow = function(columns, widths, gaps, tableBody, tableRow) {
+	  var self = this;
+	  var pageBreaks = [], positions = [];
+
+	  this.tracker.auto('pageChanged', storePageBreakData, function() {
+	    widths = widths || columns;
+
+	    self.writer.context().beginColumnGroup();
+
+	    for(var i = 0, l = columns.length; i < l; i++) {
+	      var column = columns[i];
+	      var width = widths[i]._calcWidth;
+	      var leftOffset = colLeftOffset(i);
+
+	      if (column.colSpan && column.colSpan > 1) {
+	          for(var j = 1; j < column.colSpan; j++) {
+	              width += widths[++i]._calcWidth + gaps[i];
+	          }
+	      }
+
+	      self.writer.context().beginColumn(width, leftOffset, getEndingCell(column, i));
+	      if (!column._span) {
+	        self.processNode(column);
+	        addAll(positions, column.positions);
+	      } else if (column._columnEndingContext) {
+	        // row-span ending
+	        self.writer.context().markEnding(column);
+	      }
+	    }
+
+	    self.writer.context().completeColumnGroup();
+	  });
+
+	  return {pageBreaks: pageBreaks, positions: positions};
+
+	  function storePageBreakData(data) {
+	    var pageDesc;
+
+	    for(var i = 0, l = pageBreaks.length; i < l; i++) {
+	      var desc = pageBreaks[i];
+	      if (desc.prevPage === data.prevPage) {
+	        pageDesc = desc;
+	        break;
+	      }
+	    }
+
+	    if (!pageDesc) {
+	      pageDesc = data;
+	      pageBreaks.push(pageDesc);
+	    }
+	    pageDesc.prevY = Math.max(pageDesc.prevY, data.prevY);
+	    pageDesc.y = Math.min(pageDesc.y, data.y);
+	  }
+
+		function colLeftOffset(i) {
+			if (gaps && gaps.length > i) return gaps[i];
+			return 0;
+		}
+
+	  function getEndingCell(column, columnIndex) {
+	    if (column.rowSpan && column.rowSpan > 1) {
+	      var endingRow = tableRow + column.rowSpan - 1;
+	      if (endingRow >= tableBody.length) throw 'Row span for column ' + columnIndex + ' (with indexes starting from 0) exceeded row count';
+	      return tableBody[endingRow][columnIndex];
+	    }
+
+	    return null;
+	  }
+	};
+
+	// lists
+	LayoutBuilder.prototype.processList = function(orderedList, node) {
+		var self = this,
+	      items = orderedList ? node.ol : node.ul,
+	      gapSize = node._gapSize;
+
+		this.writer.context().addMargin(gapSize.width);
+
+		var nextMarker;
+		this.tracker.auto('lineAdded', addMarkerToFirstLeaf, function() {
+			items.forEach(function(item) {
+				nextMarker = item.listMarker;
+				self.processNode(item);
+	            addAll(node.positions, item.positions);
+			});
+		});
+
+		this.writer.context().addMargin(-gapSize.width);
+
+		function addMarkerToFirstLeaf(line) {
+			// I'm not very happy with the way list processing is implemented
+			// (both code and algorithm should be rethinked)
+			if (nextMarker) {
+				var marker = nextMarker;
+				nextMarker = null;
+
+				if (marker.canvas) {
+					var vector = marker.canvas[0];
+
+					offsetVector(vector, -marker._minWidth, 0);
+					self.writer.addVector(vector);
+				} else {
+					var markerLine = new Line(self.pageSize.width);
+					markerLine.addInline(marker._inlines[0]);
+					markerLine.x = -marker._minWidth;
+					markerLine.y = line.getAscenderHeight() - markerLine.getAscenderHeight();
+					self.writer.addLine(markerLine, true);
+				}
+			}
+		}
+	};
+
+	// tables
+	LayoutBuilder.prototype.processTable = function(tableNode) {
+	  var processor = new TableProcessor(tableNode);
+
+	  processor.beginTable(this.writer);
+
+	  for(var i = 0, l = tableNode.table.body.length; i < l; i++) {
+	    processor.beginRow(i, this.writer);
+
+	    var result = this.processRow(tableNode.table.body[i], tableNode.table.widths, tableNode._offsets.offsets, tableNode.table.body, i);
+	    addAll(tableNode.positions, result.positions);
+
+	    processor.endRow(i, this.writer, result.pageBreaks);
+	  }
+
+	  processor.endTable(this.writer);
+	};
+
+	// leafs (texts)
+	LayoutBuilder.prototype.processLeaf = function(node) {
+		var line = this.buildNextLine(node);
+	  var currentHeight = (line) ? line.getHeight() : 0;
+	  var maxHeight = node.maxHeight || -1;
+
+	  while (line && (maxHeight === -1 || currentHeight < maxHeight)) {
+	    var positions = this.writer.addLine(line);
+	    node.positions.push(positions);
+	    line = this.buildNextLine(node);
+	    if (line) {
+	      currentHeight += line.getHeight();
+	    }
+		}
+	};
+
+	LayoutBuilder.prototype.buildNextLine = function(textNode) {
+		if (!textNode._inlines || textNode._inlines.length === 0) return null;
+
+		var line = new Line(this.writer.context().availableWidth);
+
+		while(textNode._inlines && textNode._inlines.length > 0 && line.hasEnoughSpaceForInline(textNode._inlines[0])) {
+			line.addInline(textNode._inlines.shift());
+		}
+
+		line.lastLineInParagraph = textNode._inlines.length === 0;
+
+		return line;
+	};
+
+	// images
+	LayoutBuilder.prototype.processImage = function(node) {
+	    var position = this.writer.addImage(node);
+	    node.positions.push(position);
+	};
+
+	LayoutBuilder.prototype.processCanvas = function(node) {
+		var height = node._minHeight;
+
+		if (this.writer.context().availableHeight < height) {
+			// TODO: support for canvas larger than a page
+			// TODO: support for other overflow methods
+
+			this.writer.moveToNextPage();
+		}
+
+		node.canvas.forEach(function(vector) {
+			var position = this.writer.addVector(vector);
+	        node.positions.push(position);
+		}, this);
+
+		this.writer.context().moveDown(height);
+	};
+
+	LayoutBuilder.prototype.processQr = function(node) {
+		var position = this.writer.addQr(node);
+	    node.positions.push(position);
+	};
+
+	module.exports = LayoutBuilder;
+
+
+/***/ },
+/* 12 */
+/***/ function(module, exports) {
+
+	/* jslint node: true */
+	'use strict';
+
+	/**
+	* Creates an instance of TraversalTracker
+	*
+	* @constructor
+	*/
+	function TraversalTracker() {
+		this.events = {};
+	}
+
+	TraversalTracker.prototype.startTracking = function(event, cb) {
+		var callbacks = (this.events[event] || (this.events[event] = []));
+
+		if (callbacks.indexOf(cb) < 0) {
+			callbacks.push(cb);
+		}
+	};
+
+	TraversalTracker.prototype.stopTracking = function(event, cb) {
+		var callbacks = this.events[event];
+
+		if (callbacks) {
+			var index = callbacks.indexOf(cb);
+			if (index >= 0) {
+				callbacks.splice(index, 1);
+			}
+		}
+	};
+
+	TraversalTracker.prototype.emit = function(event) {
+		var args = Array.prototype.slice.call(arguments, 1);
+
+		var callbacks = this.events[event];
+
+		if (callbacks) {
+			callbacks.forEach(function(cb) {
+				cb.apply(this, args);
+			});
+		}
+	};
+
+	TraversalTracker.prototype.auto = function(event, cb, innerBlock) {
+		this.startTracking(event, cb);
+		innerBlock();
+		this.stopTracking(event, cb);
+	};
+
+	module.exports = TraversalTracker;
+
+
+/***/ },
+/* 13 */
+/***/ function(module, exports, __webpack_require__) {
+
+	/* jslint node: true */
+	'use strict';
+
+	var TextTools = __webpack_require__(14);
+	var StyleContextStack = __webpack_require__(15);
+	var ColumnCalculator = __webpack_require__(16);
+	var fontStringify = __webpack_require__(17).fontStringify;
+	var pack = __webpack_require__(17).pack;
+	var qrEncoder = __webpack_require__(18);
+
+	/**
+	* @private
+	*/
+	function DocMeasure(fontProvider, styleDictionary, defaultStyle, imageMeasure, tableLayouts, images) {
+		this.textTools = new TextTools(fontProvider);
+		this.styleStack = new StyleContextStack(styleDictionary, defaultStyle);
+		this.imageMeasure = imageMeasure;
+		this.tableLayouts = tableLayouts;
+		this.images = images;
+		this.autoImageIndex = 1;
+	}
+
+	/**
+	* Measures all nodes and sets min/max-width properties required for the second
+	* layout-pass.
+	* @param  {Object} docStructure document-definition-object
+	* @return {Object}              document-measurement-object
+	*/
+	DocMeasure.prototype.measureDocument = function(docStructure) {
+		return this.measureNode(docStructure);
+	};
+
+	DocMeasure.prototype.measureNode = function(node) {
+		// expand shortcuts
+		if (node instanceof Array) {
+			node = { stack: node };
+		} else if (typeof node == 'string' || node instanceof String) {
+			node = { text: node };
+		}
+		
+		// Deal with empty nodes to prevent crash in getNodeMargin
+		if (Object.keys(node).length === 0) {
+			// A warning could be logged: console.warn('pdfmake: Empty node, ignoring it');
+			node = { text: '' };
+		}
+
+		var self = this;
+
+		return this.styleStack.auto(node, function() {
+			// TODO: refactor + rethink whether this is the proper way to handle margins
+			node._margin = getNodeMargin(node);
+
+			if (node.columns) {
+				return extendMargins(self.measureColumns(node));
+			} else if (node.stack) {
+				return extendMargins(self.measureVerticalContainer(node));
+			} else if (node.ul) {
+				return extendMargins(self.measureList(false, node));
+			} else if (node.ol) {
+				return extendMargins(self.measureList(true, node));
+			} else if (node.table) {
+				return extendMargins(self.measureTable(node));
+			} else if (node.text !== undefined) {
+				return extendMargins(self.measureLeaf(node));
+			} else if (node.image) {
+				return extendMargins(self.measureImage(node));
+			} else if (node.canvas) {
+				return extendMargins(self.measureCanvas(node));
+			} else if (node.qr) {
+				return extendMargins(self.measureQr(node));
+			} else {
+				throw 'Unrecognized document structure: ' + JSON.stringify(node, fontStringify);
+			}
+		});
+
+		function extendMargins(node) {
+			var margin = node._margin;
+
+			if (margin) {
+				node._minWidth += margin[0] + margin[2];
+				node._maxWidth += margin[0] + margin[2];
+			}
+
+			return node;
+		}
+
+		function getNodeMargin() {
+
+			function processSingleMargins(node, currentMargin){
+				if (node.marginLeft || node.marginTop || node.marginRight || node.marginBottom) {
+					return [
+						node.marginLeft || currentMargin[0] || 0,
+						node.marginTop || currentMargin[1] || 0,
+						node.marginRight || currentMargin[2]  || 0,
+						node.marginBottom || currentMargin[3]  || 0
+					];
+				}
+				return currentMargin;
+			}
+
+			function flattenStyleArray(styleArray){
+				var flattenedStyles = {};
+				for (var i = styleArray.length - 1; i >= 0; i--) {
+					var styleName = styleArray[i];
+					var style = self.styleStack.styleDictionary[styleName];
+					for(var key in style){
+						if(style.hasOwnProperty(key)){
+							flattenedStyles[key] = style[key];
+						}
+					}
+				}
+				return flattenedStyles;
+			}
+
+			function convertMargin(margin) {
+				if (typeof margin === 'number' || margin instanceof Number) {
+					margin = [ margin, margin, margin, margin ];
+				} else if (margin instanceof Array) {
+					if (margin.length === 2) {
+						margin = [ margin[0], margin[1], margin[0], margin[1] ];
+					}
+				}
+				return margin;
+			}
+
+			var margin = [undefined, undefined, undefined, undefined];
+
+			if(node.style) {
+				var styleArray = (node.style instanceof Array) ? node.style : [node.style];
+				var flattenedStyleArray = flattenStyleArray(styleArray);
+
+				if(flattenedStyleArray) {
+					margin = processSingleMargins(flattenedStyleArray, margin);
+				}
+
+				if(flattenedStyleArray.margin){
+					margin = convertMargin(flattenedStyleArray.margin);
+				}
+			}
+			
+			margin = processSingleMargins(node, margin);
+
+			if(node.margin){
+				margin = convertMargin(node.margin);
+			}
+
+			if(margin[0] === undefined && margin[1] === undefined && margin[2] === undefined && margin[3] === undefined) {
+				return null;
+			} else {
+				return margin;
+			}
+		}
+	};
+
+	DocMeasure.prototype.convertIfBase64Image = function(node) {
+		if (/^data:image\/(jpeg|jpg|png);base64,/.test(node.image)) {
+			var label = '$$pdfmake$$' + this.autoImageIndex++;
+			this.images[label] = node.image;
+			node.image = label;
+	}
+	};
+
+	DocMeasure.prototype.measureImage = function(node) {
+		if (this.images) {
+			this.convertIfBase64Image(node);
+		}
+
+		var imageSize = this.imageMeasure.measureImage(node.image);
+
+		if (node.fit) {
+			var factor = (imageSize.width / imageSize.height > node.fit[0] / node.fit[1]) ? node.fit[0] / imageSize.width : node.fit[1] / imageSize.height;
+			node._width = node._minWidth = node._maxWidth = imageSize.width * factor;
+			node._height = imageSize.height * factor;
+		} else {
+			node._width = node._minWidth = node._maxWidth = node.width || imageSize.width;
+			node._height = node.height || (imageSize.height * node._width / imageSize.width);
+		}
+
+		node._alignment = this.styleStack.getProperty('alignment');
+		return node;
+	};
+
+	DocMeasure.prototype.measureLeaf = function(node) {
+
+		// Make sure style properties of the node itself are considered when building inlines.
+		// We could also just pass [node] to buildInlines, but that fails for bullet points.
+		var styleStack = this.styleStack.clone();
+		styleStack.push(node);
+
+		var data = this.textTools.buildInlines(node.text, styleStack);
+
+		node._inlines = data.items;
+		node._minWidth = data.minWidth;
+		node._maxWidth = data.maxWidth;
+
+		return node;
+	};
+
+	DocMeasure.prototype.measureVerticalContainer = function(node) {
+		var items = node.stack;
+
+		node._minWidth = 0;
+		node._maxWidth = 0;
+
+		for(var i = 0, l = items.length; i < l; i++) {
+			items[i] = this.measureNode(items[i]);
+
+			node._minWidth = Math.max(node._minWidth, items[i]._minWidth);
+			node._maxWidth = Math.max(node._maxWidth, items[i]._maxWidth);
+		}
+
+		return node;
+	};
+
+	DocMeasure.prototype.gapSizeForList = function(isOrderedList, listItems) {
+		if (isOrderedList) {
+			var longestNo = (listItems.length).toString().replace(/./g, '9');
+			return this.textTools.sizeOfString(longestNo + '. ', this.styleStack);
+		} else {
+			return this.textTools.sizeOfString('9. ', this.styleStack);
+		}
+	};
+
+	DocMeasure.prototype.buildMarker = function(isOrderedList, counter, styleStack, gapSize) {
+		var marker;
+
+		if (isOrderedList) {
+			marker = { _inlines: this.textTools.buildInlines(counter, styleStack).items };
+		}
+		else {
+			// TODO: ascender-based calculations
+			var radius = gapSize.fontSize / 6;
+			marker = {
+				canvas: [ {
+					x: radius,
+					y: (gapSize.height / gapSize.lineHeight) + gapSize.decender - gapSize.fontSize / 3,//0,// gapSize.fontSize * 2 / 3,
+					r1: radius,
+					r2: radius,
+					type: 'ellipse',
+					color: 'black'
+				} ]
+			};
+		}
+
+		marker._minWidth = marker._maxWidth = gapSize.width;
+		marker._minHeight = marker._maxHeight = gapSize.height;
+
+		return marker;
+	};
+
+	DocMeasure.prototype.measureList = function(isOrdered, node) {
+		var style = this.styleStack.clone();
+
+		var items = isOrdered ? node.ol : node.ul;
+		node._gapSize = this.gapSizeForList(isOrdered, items);
+		node._minWidth = 0;
+		node._maxWidth = 0;
+
+		var counter = 1;
+
+		for(var i = 0, l = items.length; i < l; i++) {
+			var nextItem = items[i] = this.measureNode(items[i]);
+
+			var marker = counter++ + '. ';
+
+			if (!nextItem.ol && !nextItem.ul) {
+				nextItem.listMarker = this.buildMarker(isOrdered, nextItem.counter || marker, style, node._gapSize);
+			}  // TODO: else - nested lists numbering
+
+			node._minWidth = Math.max(node._minWidth, items[i]._minWidth + node._gapSize.width);
+			node._maxWidth = Math.max(node._maxWidth, items[i]._maxWidth + node._gapSize.width);
+		}
+
+		return node;
+	};
+
+	DocMeasure.prototype.measureColumns = function(node) {
+		var columns = node.columns;
+		node._gap = this.styleStack.getProperty('columnGap') || 0;
+
+		for(var i = 0, l = columns.length; i < l; i++) {
+			columns[i] = this.measureNode(columns[i]);
+		}
+
+		var measures = ColumnCalculator.measureMinMax(columns);
+
+		node._minWidth = measures.min + node._gap * (columns.length - 1);
+		node._maxWidth = measures.max + node._gap * (columns.length - 1);
+
+		return node;
+	};
+
+	DocMeasure.prototype.measureTable = function(node) {
+		extendTableWidths(node);
+		node._layout = getLayout(this.tableLayouts);
+		node._offsets = getOffsets(node._layout);
+
+		var colSpans = [];
+		var col, row, cols, rows;
+
+		for(col = 0, cols = node.table.body[0].length; col < cols; col++) {
+			var c = node.table.widths[col];
+			c._minWidth = 0;
+			c._maxWidth = 0;
+
+			for(row = 0, rows = node.table.body.length; row < rows; row++) {
+				var rowData = node.table.body[row];
+				var data = rowData[col];
+				if (!data._span) {
+					var _this = this;
+					data = rowData[col] = this.styleStack.auto(data, measureCb(this, data));
+
+					if (data.colSpan && data.colSpan > 1) {
+						markSpans(rowData, col, data.colSpan);
+						colSpans.push({ col: col, span: data.colSpan, minWidth: data._minWidth, maxWidth: data._maxWidth });
+					} else {
+						c._minWidth = Math.max(c._minWidth, data._minWidth);
+						c._maxWidth = Math.max(c._maxWidth, data._maxWidth);
+					}
+				}
+
+				if (data.rowSpan && data.rowSpan > 1) {
+					markVSpans(node.table, row, col, data.rowSpan);
+				}
+			}
+		}
+
+		extendWidthsForColSpans();
+
+		var measures = ColumnCalculator.measureMinMax(node.table.widths);
+
+		node._minWidth = measures.min + node._offsets.total;
+		node._maxWidth = measures.max + node._offsets.total;
+
+		return node;
+
+		function measureCb(_this, data) {
+			return function() {
+				if (data !== null && typeof data === 'object') {
+					data.fillColor = _this.styleStack.getProperty('fillColor');
+				}
+				return _this.measureNode(data);
+			};
+		}
+
+		function getLayout(tableLayouts) {
+			var layout = node.layout;
+
+			if (typeof node.layout === 'string' || node instanceof String) {
+				layout = tableLayouts[layout];
+			}
+
+			var defaultLayout = {
+				hLineWidth: function(i, node) { return 1; }, //return node.table.headerRows && i === node.table.headerRows && 3 || 0; },
+				vLineWidth: function(i, node) { return 1; },
+				hLineColor: function(i, node) { return 'black'; },
+				vLineColor: function(i, node) { return 'black'; },
+				paddingLeft: function(i, node) { return 4; }, //i && 4 || 0; },
+				paddingRight: function(i, node) { return 4; }, //(i < node.table.widths.length - 1) ? 4 : 0; },
+				paddingTop: function(i, node) { return 2; },
+				paddingBottom: function(i, node) { return 2; }
+			};
+
+			return pack(defaultLayout, layout);
+		}
+
+		function getOffsets(layout) {
+			var offsets = [];
+			var totalOffset = 0;
+			var prevRightPadding = 0;
+
+			for(var i = 0, l = node.table.widths.length; i < l; i++) {
+				var lOffset = prevRightPadding + layout.vLineWidth(i, node) + layout.paddingLeft(i, node);
+				offsets.push(lOffset);
+				totalOffset += lOffset;
+				prevRightPadding = layout.paddingRight(i, node);
+			}
+
+			totalOffset += prevRightPadding + layout.vLineWidth(node.table.widths.length, node);
+
+			return {
+				total: totalOffset,
+				offsets: offsets
+			};
+		}
+
+		function extendWidthsForColSpans() {
+			var q, j;
+
+			for (var i = 0, l = colSpans.length; i < l; i++) {
+				var span = colSpans[i];
+
+				var currentMinMax = getMinMax(span.col, span.span, node._offsets);
+				var minDifference = span.minWidth - currentMinMax.minWidth;
+				var maxDifference = span.maxWidth - currentMinMax.maxWidth;
+
+				if (minDifference > 0) {
+					q = minDifference / span.span;
+
+					for(j = 0; j < span.span; j++) {
+						node.table.widths[span.col + j]._minWidth += q;
+					}
+				}
+
+				if (maxDifference > 0) {
+					q = maxDifference / span.span;
+
+					for(j = 0; j < span.span; j++) {
+						node.table.widths[span.col + j]._maxWidth += q;
+					}
+				}
+			}
+		}
+
+		function getMinMax(col, span, offsets) {
+			var result = { minWidth: 0, maxWidth: 0 };
+
+			for(var i = 0; i < span; i++) {
+				result.minWidth += node.table.widths[col + i]._minWidth + (i? offsets.offsets[col + i] : 0);
+				result.maxWidth += node.table.widths[col + i]._maxWidth + (i? offsets.offsets[col + i] : 0);
+			}
+
+			return result;
+		}
+
+		function markSpans(rowData, col, span) {
+			for (var i = 1; i < span; i++) {
+				rowData[col + i] = {
+					_span: true,
+					_minWidth: 0,
+					_maxWidth: 0,
+					rowSpan: rowData[col].rowSpan
+				};
+			}
+		}
+
+		function markVSpans(table, row, col, span) {
+			for (var i = 1; i < span; i++) {
+				table.body[row + i][col] = {
+					_span: true,
+					_minWidth: 0,
+					_maxWidth: 0,
+					fillColor: table.body[row][col].fillColor
+				};
+			}
+		}
+
+		function extendTableWidths(node) {
+			if (!node.table.widths) {
+				node.table.widths = 'auto';
+			}
+
+			if (typeof node.table.widths === 'string' || node.table.widths instanceof String) {
+				node.table.widths = [ node.table.widths ];
+
+				while(node.table.widths.length < node.table.body[0].length) {
+					node.table.widths.push(node.table.widths[node.table.widths.length - 1]);
+				}
+			}
+
+			for(var i = 0, l = node.table.widths.length; i < l; i++) {
+				var w = node.table.widths[i];
+				if (typeof w === 'number' || w instanceof Number || typeof w === 'string' || w instanceof String) {
+					node.table.widths[i] = { width: w };
+				}
+			}
+		}
+	};
+
+	DocMeasure.prototype.measureCanvas = function(node) {
+		var w = 0, h = 0;
+
+		for(var i = 0, l = node.canvas.length; i < l; i++) {
+			var vector = node.canvas[i];
+
+			switch(vector.type) {
+			case 'ellipse':
+				w = Math.max(w, vector.x + vector.r1);
+				h = Math.max(h, vector.y + vector.r2);
+				break;
+			case 'rect':
+				w = Math.max(w, vector.x + vector.w);
+				h = Math.max(h, vector.y + vector.h);
+				break;
+			case 'line':
+				w = Math.max(w, vector.x1, vector.x2);
+				h = Math.max(h, vector.y1, vector.y2);
+				break;
+			case 'polyline':
+				for(var i2 = 0, l2 = vector.points.length; i2 < l2; i2++) {
+					w = Math.max(w, vector.points[i2].x);
+					h = Math.max(h, vector.points[i2].y);
+				}
+				break;
+			}
+		}
+
+		node._minWidth = node._maxWidth = w;
+		node._minHeight = node._maxHeight = h;
+
+		return node;
+	};
+
+	DocMeasure.prototype.measureQr = function(node) {
+		node = qrEncoder.measure(node);
+		node._alignment = this.styleStack.getProperty('alignment');
+		return node;
+	};
+
+	module.exports = DocMeasure;
+
+
+/***/ },
+/* 14 */
+/***/ function(module, exports) {
+
+	/* jslint node: true */
+	'use strict';
+
+	var WORD_RE = /([^ ,\/!.?:;\-\n]*[ ,\/!.?:;\-]*)|\n/g;
+	// /\S*\s*/g to be considered (I'm not sure however - we shouldn't split 'aaa !!!!')
+
+	var LEADING = /^(\s)+/g;
+	var TRAILING = /(\s)+$/g;
+
+	/**
+	* Creates an instance of TextTools - text measurement utility
+	*
+	* @constructor
+	* @param {FontProvider} fontProvider
+	*/
+	function TextTools(fontProvider) {
+		this.fontProvider = fontProvider;
+	}
+
+	/**
+	 * Converts an array of strings (or inline-definition-objects) into a collection
+	 * of inlines and calculated minWidth/maxWidth.
+	* and their min/max widths
+	* @param  {Object} textArray - an array of inline-definition-objects (or strings)
+	* @param  {Object} styleContextStack current style stack
+	* @return {Object}                   collection of inlines, minWidth, maxWidth
+	*/
+	TextTools.prototype.buildInlines = function(textArray, styleContextStack) {
+		var measured = measure(this.fontProvider, textArray, styleContextStack);
+
+		var minWidth = 0,
+			maxWidth = 0,
+			currentLineWidth;
+
+		measured.forEach(function (inline) {
+			minWidth = Math.max(minWidth, inline.width - inline.leadingCut - inline.trailingCut);
+
+			if (!currentLineWidth) {
+				currentLineWidth = { width: 0, leadingCut: inline.leadingCut, trailingCut: 0 };
+			}
+
+			currentLineWidth.width += inline.width;
+			currentLineWidth.trailingCut = inline.trailingCut;
+
+			maxWidth = Math.max(maxWidth, getTrimmedWidth(currentLineWidth));
+
+			if (inline.lineEnd) {
+				currentLineWidth = null;
+			}
+		});
+
+		if (getStyleProperty({}, styleContextStack, 'noWrap', false)) {
+			minWidth = maxWidth;
+		}
+
+		return {
+			items: measured,
+			minWidth: minWidth,
+			maxWidth: maxWidth
+		};
+
+		function getTrimmedWidth(item) {
+			return Math.max(0, item.width - item.leadingCut - item.trailingCut);
+		}
+	};
+
+	/**
+	* Returns size of the specified string (without breaking it) using the current style
+	* @param  {String} text              text to be measured
+	* @param  {Object} styleContextStack current style stack
+	* @return {Object}                   size of the specified string
+	*/
+	TextTools.prototype.sizeOfString = function(text, styleContextStack) {
+		text = text.replace('\t', '    ');
+
+		//TODO: refactor - extract from measure
+		var fontName = getStyleProperty({}, styleContextStack, 'font', 'Roboto');
+		var fontSize = getStyleProperty({}, styleContextStack, 'fontSize', 12);
+		var bold = getStyleProperty({}, styleContextStack, 'bold', false);
+		var italics = getStyleProperty({}, styleContextStack, 'italics', false);
+		var lineHeight = getStyleProperty({}, styleContextStack, 'lineHeight', 1);
+
+		var font = this.fontProvider.provideFont(fontName, bold, italics);
+
+		return {
+			width: font.widthOfString(removeDiacritics(text), fontSize),
+			height: font.lineHeight(fontSize) * lineHeight,
+			fontSize: fontSize,
+			lineHeight: lineHeight,
+			ascender: font.ascender / 1000 * fontSize,
+			decender: font.decender / 1000 * fontSize
+		};
+	};
+
+	function splitWords(text, noWrap) {
+		var results = [];
+		text = text.replace('\t', '    ');
+
+		var array;
+		if (noWrap) {
+			array = [ text, "" ];
+		} else {
+			array = text.match(WORD_RE);
+		}
+		// i < l - 1, because the last match is always an empty string
+		// other empty strings however are treated as new-lines
+		for(var i = 0, l = array.length; i < l - 1; i++) {
+			var item = array[i];
+
+			var isNewLine = item.length === 0;
+
+			if (!isNewLine) {
+				results.push({text: item});
+			}
+			else {
+				var shouldAddLine = (results.length === 0 || results[results.length - 1].lineEnd);
+
+				if (shouldAddLine) {
+					results.push({ text: '', lineEnd: true });
+				}
+				else {
+					results[results.length - 1].lineEnd = true;
+				}
+			}
+		}
+		return results;
+	}
+
+	function copyStyle(source, destination) {
+		destination = destination || {};
+		source = source || {}; //TODO: default style
+
+		for(var key in source) {
+			if (key != 'text' && source.hasOwnProperty(key)) {
+				destination[key] = source[key];
+			}
+		}
+
+		return destination;
+	}
+
+	function normalizeTextArray(array) {
+		var results = [];
+
+		if (typeof array == 'string' || array instanceof String) {
+			array = [ array ];
+		}
+
+		for(var i = 0, l = array.length; i < l; i++) {
+			var item = array[i];
+			var style = null;
+			var words;
+
+			if (typeof item == 'string' || item instanceof String) {
+				words = splitWords(item);
+			} else {
+				words = splitWords(item.text, item.noWrap);
+				style = copyStyle(item);
+			}
+
+			for(var i2 = 0, l2 = words.length; i2 < l2; i2++) {
+				var result = {
+					text: words[i2].text
+				};
+
+				if (words[i2].lineEnd) {
+					result.lineEnd = true;
+				}
+
+				copyStyle(style, result);
+
+				results.push(result);
+			}
+		}
+
+		return results;
+	}
+
+	//TODO: support for other languages (currently only polish is supported)
+	var diacriticsMap = { 'Ą': 'A', 'Ć': 'C', 'Ę': 'E', 'Ł': 'L', 'Ń': 'N', 'Ó': 'O', 'Ś': 'S', 'Ź': 'Z', 'Ż': 'Z', 'ą': 'a', 'ć': 'c', 'ę': 'e', 'ł': 'l', 'ń': 'n', 'ó': 'o', 'ś': 's', 'ź': 'z', 'ż': 'z' };
+	// '  << atom.io workaround
+
+	function removeDiacritics(text) {
+		return text.replace(/[^A-Za-z0-9\[\] ]/g, function(a) {
+			return diacriticsMap[a] || a;
+		});
+	}
+
+	function getStyleProperty(item, styleContextStack, property, defaultValue) {
+		var value;
+
+		if (item[property] !== undefined && item[property] !== null) {
+			// item defines this property
+			return item[property];
+		}
+
+		if (!styleContextStack) return defaultValue;
+
+		styleContextStack.auto(item, function() {
+			value = styleContextStack.getProperty(property);
+		});
+
+		if (value !== null && value !== undefined) {
+			return value;
+		} else {
+			return defaultValue;
+		}
+	}
+
+	function measure(fontProvider, textArray, styleContextStack) {
+		var normalized = normalizeTextArray(textArray);
+
+		normalized.forEach(function(item) {
+			var fontName = getStyleProperty(item, styleContextStack, 'font', 'Roboto');
+			var fontSize = getStyleProperty(item, styleContextStack, 'fontSize', 12);
+			var bold = getStyleProperty(item, styleContextStack, 'bold', false);
+			var italics = getStyleProperty(item, styleContextStack, 'italics', false);
+			var color = getStyleProperty(item, styleContextStack, 'color', 'black');
+			var decoration = getStyleProperty(item, styleContextStack, 'decoration', null);
+			var decorationColor = getStyleProperty(item, styleContextStack, 'decorationColor', null);
+			var decorationStyle = getStyleProperty(item, styleContextStack, 'decorationStyle', null);
+			var background = getStyleProperty(item, styleContextStack, 'background', null);
+			var lineHeight = getStyleProperty(item, styleContextStack, 'lineHeight', 1);
+
+			var font = fontProvider.provideFont(fontName, bold, italics);
+
+			// TODO: character spacing
+			item.width = font.widthOfString(removeDiacritics(item.text), fontSize);
+			item.height = font.lineHeight(fontSize) * lineHeight;
+
+			var leadingSpaces = item.text.match(LEADING);
+			var trailingSpaces = item.text.match(TRAILING);
+			if (leadingSpaces) {
+				item.leadingCut = font.widthOfString(leadingSpaces[0], fontSize);
+			}
+			else {
+				item.leadingCut = 0;
+			}
+
+			if (trailingSpaces) {
+				item.trailingCut = font.widthOfString(trailingSpaces[0], fontSize);
+			}
+			else {
+				item.trailingCut = 0;
+			}
+
+			item.alignment = getStyleProperty(item, styleContextStack, 'alignment', 'left');
+			item.font = font;
+			item.fontSize = fontSize;
+			item.color = color;
+			item.decoration = decoration;
+			item.decorationColor = decorationColor;
+			item.decorationStyle = decorationStyle;
+			item.background = background;
+		});
+
+		return normalized;
+	}
+
+	/****TESTS**** (add a leading '/' to uncomment)
+	TextTools.prototype.splitWords = splitWords;
+	TextTools.prototype.normalizeTextArray = normalizeTextArray;
+	TextTools.prototype.measure = measure;
+	// */
+
+
+	module.exports = TextTools;
+
+
+/***/ },
+/* 15 */
+/***/ function(module, exports) {
+
+	/* jslint node: true */
+	'use strict';
+
+	/**
+	* Creates an instance of StyleContextStack used for style inheritance and style overrides
+	*
+	* @constructor
+	* @this {StyleContextStack}
+	* @param {Object} named styles dictionary
+	* @param {Object} optional default style definition
+	*/
+	function StyleContextStack (styleDictionary, defaultStyle) {
+		this.defaultStyle = defaultStyle || {};
+		this.styleDictionary = styleDictionary;
+		this.styleOverrides = [];
+	}
+
+	/**
+	* Creates cloned version of current stack
+	* @return {StyleContextStack} current stack snapshot
+	*/
+	StyleContextStack.prototype.clone = function() {
+		var stack = new StyleContextStack(this.styleDictionary, this.defaultStyle);
+
+		this.styleOverrides.forEach(function(item) {
+			stack.styleOverrides.push(item);
+		});
+
+		return stack;
+	};
+
+	/**
+	* Pushes style-name or style-overrides-object onto the stack for future evaluation
+	*
+	* @param {String|Object} styleNameOrOverride style-name (referring to styleDictionary) or
+	*                                            a new dictionary defining overriding properties
+	*/
+	StyleContextStack.prototype.push = function(styleNameOrOverride) {
+		this.styleOverrides.push(styleNameOrOverride);
+	};
+
+	/**
+	* Removes last style-name or style-overrides-object from the stack
+	*
+	* @param {Number} howMany - optional number of elements to be popped (if not specified,
+	*                           one element will be removed from the stack)
+	*/
+	StyleContextStack.prototype.pop = function(howMany) {
+		howMany = howMany || 1;
+
+		while(howMany-- > 0) {
+			this.styleOverrides.pop();
+		}
+	};
+
+	/**
+	* Creates a set of named styles or/and a style-overrides-object based on the item,
+	* pushes those elements onto the stack for future evaluation and returns the number
+	* of elements pushed, so they can be easily poped then.
+	*
+	* @param {Object} item - an object with optional style property and/or style overrides
+	* @return the number of items pushed onto the stack
+	*/
+	StyleContextStack.prototype.autopush = function(item) {
+		if (typeof item === 'string' || item instanceof String) return 0;
+
+		var styleNames = [];
+
+		if (item.style) {
+			if (item.style instanceof Array) {
+				styleNames = item.style;
+			} else {
+				styleNames = [ item.style ];
+			}
+		}
+
+		for(var i = 0, l = styleNames.length; i < l; i++) {
+			this.push(styleNames[i]);
+		}
+
+		var styleOverrideObject = {};
+		var pushSOO = false;
+
+		[
+			'font',
+			'fontSize',
+			'bold',
+			'italics',
+			'alignment',
+			'color',
+			'columnGap',
+			'fillColor',
+			'decoration',
+			'decorationStyle',
+			'decorationColor',
+			'background',
+			'lineHeight',
+			'noWrap'
+			//'tableCellPadding'
+			// 'cellBorder',
+			// 'headerCellBorder',
+			// 'oddRowCellBorder',
+			// 'evenRowCellBorder',
+			// 'tableBorder'
+		].forEach(function(key) {
+			if (item[key] !== undefined && item[key] !== null) {
+				styleOverrideObject[key] = item[key];
+				pushSOO = true;
+			}
+		});
+
+		if (pushSOO) {
+			this.push(styleOverrideObject);
+		}
+
+		return styleNames.length + (pushSOO ? 1 : 0);
+	};
+
+	/**
+	* Automatically pushes elements onto the stack, using autopush based on item,
+	* executes callback and then pops elements back. Returns value returned by callback
+	*
+	* @param  {Object}   item - an object with optional style property and/or style overrides
+	* @param  {Function} function to be called between autopush and pop
+	* @return {Object} value returned by callback
+	*/
+	StyleContextStack.prototype.auto = function(item, callback) {
+		var pushedItems = this.autopush(item);
+		var result = callback();
+
+		if (pushedItems > 0) {
+			this.pop(pushedItems);
+		}
+
+		return result;
+	};
+
+	/**
+	* Evaluates stack and returns value of a named property
+	*
+	* @param {String} property - property name
+	* @return property value or null if not found
+	*/
+	StyleContextStack.prototype.getProperty = function(property) {
+		if (this.styleOverrides) {
+			for(var i = this.styleOverrides.length - 1; i >= 0; i--) {
+				var item = this.styleOverrides[i];
+
+				if (typeof item == 'string' || item instanceof String) {
+					// named-style-override
+
+					var style = this.styleDictionary[item];
+					if (style && style[property] !== null && style[property] !== undefined) {
+						return style[property];
+					}
+				} else {
+					// style-overrides-object
+					if (item[property] !== undefined && item[property] !== null) {
+						return item[property];
+					}
+				}
+			}
+		}
+
+		return this.defaultStyle && this.defaultStyle[property];
+	};
+
+	module.exports = StyleContextStack;
+
+
+/***/ },
+/* 16 */
+/***/ function(module, exports) {
+
+	/* jslint node: true */
+	'use strict';
+
+	function buildColumnWidths(columns, availableWidth) {
+		var autoColumns = [],
+			autoMin = 0, autoMax = 0,
+			starColumns = [],
+			starMaxMin = 0,
+			starMaxMax = 0,
+			fixedColumns = [],
+			initial_availableWidth = availableWidth;
+
+		columns.forEach(function(column) {
+			if (isAutoColumn(column)) {
+				autoColumns.push(column);
+				autoMin += column._minWidth;
+				autoMax += column._maxWidth;
+			} else if (isStarColumn(column)) {
+				starColumns.push(column);
+				starMaxMin = Math.max(starMaxMin, column._minWidth);
+				starMaxMax = Math.max(starMaxMax, column._maxWidth);
+			} else {
+				fixedColumns.push(column);
+			}
+		});
+
+		fixedColumns.forEach(function(col) {
+			// width specified as %
+			if (typeof col.width === 'string' && /\d+%/.test(col.width) ) {
+				col.width = parseFloat(col.width)*initial_availableWidth/100;
+			}
+			if (col.width < (col._minWidth) && col.elasticWidth) {
+				col._calcWidth = col._minWidth;
+			} else {
+				col._calcWidth = col.width;
+			}
+
+			availableWidth -= col._calcWidth;
+		});
+
+		// http://www.freesoft.org/CIE/RFC/1942/18.htm
+		// http://www.w3.org/TR/CSS2/tables.html#width-layout
+		// http://dev.w3.org/csswg/css3-tables-algorithms/Overview.src.htm
+		var minW = autoMin + starMaxMin * starColumns.length;
+		var maxW = autoMax + starMaxMax * starColumns.length;
+		if (minW >= availableWidth) {
+			// case 1 - there's no way to fit all columns within available width
+			// that's actually pretty bad situation with PDF as we have no horizontal scroll
+			// no easy workaround (unless we decide, in the future, to split single words)
+			// currently we simply use minWidths for all columns
+			autoColumns.forEach(function(col) {
+				col._calcWidth = col._minWidth;
+			});
+
+			starColumns.forEach(function(col) {
+				col._calcWidth = starMaxMin; // starMaxMin already contains padding
+			});
+		} else {
+			if (maxW < availableWidth) {
+				// case 2 - we can fit rest of the table within available space
+				autoColumns.forEach(function(col) {
+					col._calcWidth = col._maxWidth;
+					availableWidth -= col._calcWidth;
+				});
+			} else {
+				// maxW is too large, but minW fits within available width
+				var W = availableWidth - minW;
+				var D = maxW - minW;
+
+				autoColumns.forEach(function(col) {
+					var d = col._maxWidth - col._minWidth;
+					col._calcWidth = col._minWidth + d * W / D;
+					availableWidth -= col._calcWidth;
+				});
+			}
+
+			if (starColumns.length > 0) {
+				var starSize = availableWidth / starColumns.length;
+
+				starColumns.forEach(function(col) {
+					col._calcWidth = starSize;
+				});
+			}
+		}
+	}
+
+	function isAutoColumn(column) {
+		return column.width === 'auto';
+	}
+
+	function isStarColumn(column) {
+		return column.width === null || column.width === undefined || column.width === '*' || column.width === 'star';
+	}
+
+	//TODO: refactor and reuse in measureTable
+	function measureMinMax(columns) {
+		var result = { min: 0, max: 0 };
+
+		var maxStar = { min: 0, max: 0 };
+		var starCount = 0;
+
+		for(var i = 0, l = columns.length; i < l; i++) {
+			var c = columns[i];
+
+			if (isStarColumn(c)) {
+				maxStar.min = Math.max(maxStar.min, c._minWidth);
+				maxStar.max = Math.max(maxStar.max, c._maxWidth);
+				starCount++;
+			} else if (isAutoColumn(c)) {
+				result.min += c._minWidth;
+				result.max += c._maxWidth;
+			} else {
+				result.min += ((c.width !== undefined && c.width) || c._minWidth);
+				result.max += ((c.width  !== undefined && c.width) || c._maxWidth);
+			}
+		}
+
+		if (starCount) {
+			result.min += starCount * maxStar.min;
+			result.max += starCount * maxStar.max;
+		}
+
+		return result;
+	}
+
+	/**
+	* Calculates column widths
+	* @private
+	*/
+	module.exports = {
+		buildColumnWidths: buildColumnWidths,
+		measureMinMax: measureMinMax,
+		isAutoColumn: isAutoColumn,
+		isStarColumn: isStarColumn
+	};
+
+
+/***/ },
+/* 17 */
+/***/ function(module, exports) {
+
+	/* jslint node: true */
+	'use strict';
+
+	function pack() {
+		var result = {};
+
+		for(var i = 0, l = arguments.length; i < l; i++) {
+			var obj = arguments[i];
+
+			if (obj) {
+				for(var key in obj) {
+					if (obj.hasOwnProperty(key)) {
+						result[key] = obj[key];
+					}
+				}
+			}
+		}
+
+		return result;
+	}
+
+	function offsetVector(vector, x, y) {
+		switch(vector.type) {
+		case 'ellipse':
+		case 'rect':
+			vector.x += x;
+			vector.y += y;
+			break;
+		case 'line':
+			vector.x1 += x;
+			vector.x2 += x;
+			vector.y1 += y;
+			vector.y2 += y;
+			break;
+		case 'polyline':
+			for(var i = 0, l = vector.points.length; i < l; i++) {
+				vector.points[i].x += x;
+				vector.points[i].y += y;
+			}
+			break;
+		}
+	}
+
+	function fontStringify(key, val) {
+		if (key === 'font') {
+			return 'font';
+		}
+		return val;
+	}
+
+	function isFunction(functionToCheck) {
+		var getType = {};
+		return functionToCheck && getType.toString.call(functionToCheck) === '[object Function]';
+	}
+
+
+	module.exports = {
+		pack: pack,
+		fontStringify: fontStringify,
+		offsetVector: offsetVector,
+		isFunction: isFunction
+	};
+
+
+/***/ },
+/* 18 */
+/***/ function(module, exports) {
+
+	/* jslint node: true */
+	'use strict';
+	/*jshint -W004 */
+	/* qr.js -- QR code generator in Javascript (revision 2011-01-19)
+	 * Written by Kang Seonghoon <[email-masked]>.
+	 *
+	 * This source code is in the public domain; if your jurisdiction does not
+	 * recognize the public domain the terms of Creative Commons CC0 license
+	 * apply. In the other words, you can always do what you want.
+	 */
+
+
+	// per-version information (cf. JIS X 0510:2004 pp. 30--36, 71)
+	//
+	// [0]: the degree of generator polynomial by ECC levels
+	// [1]: # of code blocks by ECC levels
+	// [2]: left-top positions of alignment patterns
+	//
+	// the number in this table (in particular, [0]) does not exactly match with
+	// the numbers in the specficiation. see augumenteccs below for the reason.
+	var VERSIONS = [
+		null,
+		[[10, 7,17,13], [ 1, 1, 1, 1], []],
+		[[16,10,28,22], [ 1, 1, 1, 1], [4,16]],
+		[[26,15,22,18], [ 1, 1, 2, 2], [4,20]],
+		[[18,20,16,26], [ 2, 1, 4, 2], [4,24]],
+		[[24,26,22,18], [ 2, 1, 4, 4], [4,28]],
+		[[16,18,28,24], [ 4, 2, 4, 4], [4,32]],
+		[[18,20,26,18], [ 4, 2, 5, 6], [4,20,36]],
+		[[22,24,26,22], [ 4, 2, 6, 6], [4,22,40]],
+		[[22,30,24,20], [ 5, 2, 8, 8], [4,24,44]],
+		[[26,18,28,24], [ 5, 4, 8, 8], [4,26,48]],
+		[[30,20,24,28], [ 5, 4,11, 8], [4,28,52]],
+		[[22,24,28,26], [ 8, 4,11,10], [4,30,56]],
+		[[22,26,22,24], [ 9, 4,16,12], [4,32,60]],
+		[[24,30,24,20], [ 9, 4,16,16], [4,24,44,64]],
+		[[24,22,24,30], [10, 6,18,12], [4,24,46,68]],
+		[[28,24,30,24], [10, 6,16,17], [4,24,48,72]],
+		[[28,28,28,28], [11, 6,19,16], [4,28,52,76]],
+		[[26,30,28,28], [13, 6,21,18], [4,28,54,80]],
+		[[26,28,26,26], [14, 7,25,21], [4,28,56,84]],
+		[[26,28,28,30], [16, 8,25,20], [4,32,60,88]],
+		[[26,28,30,28], [17, 8,25,23], [4,26,48,70,92]],
+		[[28,28,24,30], [17, 9,34,23], [4,24,48,72,96]],
+		[[28,30,30,30], [18, 9,30,25], [4,28,52,76,100]],
+		[[28,30,30,30], [20,10,32,27], [4,26,52,78,104]],
+		[[28,26,30,30], [21,12,35,29], [4,30,56,82,108]],
+		[[28,28,30,28], [23,12,37,34], [4,28,56,84,112]],
+		[[28,30,30,30], [25,12,40,34], [4,32,60,88,116]],
+		[[28,30,30,30], [26,13,42,35], [4,24,48,72,96,120]],
+		[[28,30,30,30], [28,14,45,38], [4,28,52,76,100,124]],
+		[[28,30,30,30], [29,15,48,40], [4,24,50,76,102,128]],
+		[[28,30,30,30], [31,16,51,43], [4,28,54,80,106,132]],
+		[[28,30,30,30], [33,17,54,45], [4,32,58,84,110,136]],
+		[[28,30,30,30], [35,18,57,48], [4,28,56,84,112,140]],
+		[[28,30,30,30], [37,19,60,51], [4,32,60,88,116,144]],
+		[[28,30,30,30], [38,19,63,53], [4,28,52,76,100,124,148]],
+		[[28,30,30,30], [40,20,66,56], [4,22,48,74,100,126,152]],
+		[[28,30,30,30], [43,21,70,59], [4,26,52,78,104,130,156]],
+		[[28,30,30,30], [45,22,74,62], [4,30,56,82,108,134,160]],
+		[[28,30,30,30], [47,24,77,65], [4,24,52,80,108,136,164]],
+		[[28,30,30,30], [49,25,81,68], [4,28,56,84,112,140,168]]];
+
+	// mode constants (cf. Table 2 in JIS X 0510:2004 p. 16)
+	var MODE_TERMINATOR = 0;
+	var MODE_NUMERIC = 1, MODE_ALPHANUMERIC = 2, MODE_OCTET = 4, MODE_KANJI = 8;
+
+	// validation regexps
+	var NUMERIC_REGEXP = /^\d*$/;
+	var ALPHANUMERIC_REGEXP = /^[A-Za-z0-9 $%*+\-./:]*$/;
+	var ALPHANUMERIC_OUT_REGEXP = /^[A-Z0-9 $%*+\-./:]*$/;
+
+	// ECC levels (cf. Table 22 in JIS X 0510:2004 p. 45)
+	var ECCLEVEL_L = 1, ECCLEVEL_M = 0, ECCLEVEL_Q = 3, ECCLEVEL_H = 2;
+
+	// GF(2^8)-to-integer mapping with a reducing polynomial x^8+x^4+x^3+x^2+1
+	// invariant: GF256_MAP[GF256_INVMAP[i]] == i for all i in [1,256)
+	var GF256_MAP = [], GF256_INVMAP = [-1];
+	for (var i = 0, v = 1; i < 255; ++i) {
+		GF256_MAP.push(v);
+		GF256_INVMAP[v] = i;
+		v = (v * 2) ^ (v >= 128 ? 0x11d : 0);
+	}
+
+	// generator polynomials up to degree 30
+	// (should match with polynomials in JIS X 0510:2004 Appendix A)
+	//
+	// generator polynomial of degree K is product of (x-\alpha^0), (x-\alpha^1),
+	// ..., (x-\alpha^(K-1)). by convention, we omit the K-th coefficient (always 1)
+	// from the result; also other coefficients are written in terms of the exponent
+	// to \alpha to avoid the redundant calculation. (see also calculateecc below.)
+	var GF256_GENPOLY = [[]];
+	for (var i = 0; i < 30; ++i) {
+		var prevpoly = GF256_GENPOLY[i], poly = [];
+		for (var j = 0; j <= i; ++j) {
+			var a = (j < i ? GF256_MAP[prevpoly[j]] : 0);
+			var b = GF256_MAP[(i + (prevpoly[j-1] || 0)) % 255];
+			poly.push(GF256_INVMAP[a ^ b]);
+		}
+		GF256_GENPOLY.push(poly);
+	}
+
+	// alphanumeric character mapping (cf. Table 5 in JIS X 0510:2004 p. 19)
+	var ALPHANUMERIC_MAP = {};
+	for (var i = 0; i < 45; ++i) {
+		ALPHANUMERIC_MAP['0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ $%*+-./:'.charAt(i)] = i;
+	}
+
+	// mask functions in terms of row # and column #
+	// (cf. Table 20 in JIS X 0510:2004 p. 42)
+	var MASKFUNCS = [
+		function(i,j) { return (i+j) % 2 === 0; },
+		function(i,j) { return i % 2 === 0; },
+		function(i,j) { return j % 3 === 0; },
+		function(i,j) { return (i+j) % 3 === 0; },
+		function(i,j) { return (((i/2)|0) + ((j/3)|0)) % 2 === 0; },
+		function(i,j) { return (i*j) % 2 + (i*j) % 3 === 0; },
+		function(i,j) { return ((i*j) % 2 + (i*j) % 3) % 2 === 0; },
+		function(i,j) { return ((i+j) % 2 + (i*j) % 3) % 2 === 0; }];
+
+	// returns true when the version information has to be embeded.
+	var needsverinfo = function(ver) { return ver > 6; };
+
+	// returns the size of entire QR code for given version.
+	var getsizebyver = function(ver) { return 4 * ver + 17; };
+
+	// returns the number of bits available for code words in this version.
+	var nfullbits = function(ver) {
+		/*
+		 * |<--------------- n --------------->|
+		 * |        |<----- n-17 ---->|        |
+		 * +-------+                ///+-------+ ----
+		 * |       |                ///|       |    ^
+		 * |  9x9  |       @@@@@    ///|  9x8  |    |
+		 * |       | # # # @5x5@ # # # |       |    |
+		 * +-------+       @@@@@       +-------+    |
+		 *       #                               ---|
+		 *                                        ^ |
+		 *       #                                |
+		 *     @@@@@       @@@@@       @@@@@      | n
+		 *     @5x5@       @5x5@       @5x5@   n-17
+		 *     @@@@@       @@@@@       @@@@@      | |
+		 *       #                                | |
+		 * //////                                 v |
+		 * //////#                               ---|
+		 * +-------+       @@@@@       @@@@@        |
+		 * |       |       @5x5@       @5x5@        |
+		 * |  8x9  |       @@@@@       @@@@@        |
+		 * |       |                                v
+		 * +-------+                             ----
+		 *
+		 * when the entire code has n^2 modules and there are m^2-3 alignment
+		 * patterns, we have:
+		 * - 225 (= 9x9 + 9x8 + 8x9) modules for finder patterns and
+		 *   format information;
+		 * - 2n-34 (= 2(n-17)) modules for timing patterns;
+		 * - 36 (= 3x6 + 6x3) modules for version information, if any;
+		 * - 25m^2-75 (= (m^2-3)(5x5)) modules for alignment patterns
+		 *   if any, but 10m-20 (= 2(m-2)x5) of them overlaps with
+		 *   timing patterns.
+		 */
+		var v = VERSIONS[ver];
+		var nbits = 16*ver*ver + 128*ver + 64; // finder, timing and format info.
+		if (needsverinfo(ver)) nbits -= 36; // version information
+		if (v[2].length) { // alignment patterns
+			nbits -= 25 * v[2].length * v[2].length - 10 * v[2].length - 55;
+		}
+		return nbits;
+	};
+
+	// returns the number of bits available for data portions (i.e. excludes ECC
+	// bits but includes mode and length bits) in this version and ECC level.
+	var ndatabits = function(ver, ecclevel) {
+		var nbits = nfullbits(ver) & ~7; // no sub-octet code words
+		var v = VERSIONS[ver];
+		nbits -= 8 * v[0][ecclevel] * v[1][ecclevel]; // ecc bits
+		return nbits;
+	};
+
+	// returns the number of bits required for the length of data.
+	// (cf. Table 3 in JIS X 0510:2004 p. 16)
+	var ndatalenbits = function(ver, mode) {
+		switch (mode) {
+		case MODE_NUMERIC: return (ver < 10 ? 10 : ver < 27 ? 12 : 14);
+		case MODE_ALPHANUMERIC: return (ver < 10 ? 9 : ver < 27 ? 11 : 13);
+		case MODE_OCTET: return (ver < 10 ? 8 : 16);
+		case MODE_KANJI: return (ver < 10 ? 8 : ver < 27 ? 10 : 12);
+		}
+	};
+
+	// returns the maximum length of data possible in given configuration.
+	var getmaxdatalen = function(ver, mode, ecclevel) {
+		var nbits = ndatabits(ver, ecclevel) - 4 - ndatalenbits(ver, mode); // 4 for mode bits
+		switch (mode) {
+		case MODE_NUMERIC:
+			return ((nbits/10) | 0) * 3 + (nbits%10 < 4 ? 0 : nbits%10 < 7 ? 1 : 2);
+		case MODE_ALPHANUMERIC:
+			return ((nbits/11) | 0) * 2 + (nbits%11 < 6 ? 0 : 1);
+		case MODE_OCTET:
+			return (nbits/8) | 0;
+		case MODE_KANJI:
+			return (nbits/13) | 0;
+		}
+	};
+
+	// checks if the given data can be encoded in given mode, and returns
+	// the converted data for the further processing if possible. otherwise
+	// returns null.
+	//
+	// this function does not check the length of data; it is a duty of
+	// encode function below (as it depends on the version and ECC level too).
+	var validatedata = function(mode, data) {
+		switch (mode) {
+		case MODE_NUMERIC:
+			if (!data.match(NUMERIC_REGEXP)) return null;
+			return data;
+
+		case MODE_ALPHANUMERIC:
+			if (!data.match(ALPHANUMERIC_REGEXP)) return null;
+			return data.toUpperCase();
+
+		case MODE_OCTET:
+			if (typeof data === 'string') { // encode as utf-8 string
+				var newdata = [];
+				for (var i = 0; i < data.length; ++i) {
+					var ch = data.charCodeAt(i);
+					if (ch < 0x80) {
+						newdata.push(ch);
+					} else if (ch < 0x800) {
+						newdata.push(0xc0 | (ch >> 6),
+							0x80 | (ch & 0x3f));
+					} else if (ch < 0x10000) {
+						newdata.push(0xe0 | (ch >> 12),
+							0x80 | ((ch >> 6) & 0x3f),
+							0x80 | (ch & 0x3f));
+					} else {
+						newdata.push(0xf0 | (ch >> 18),
+							0x80 | ((ch >> 12) & 0x3f),
+							0x80 | ((ch >> 6) & 0x3f),
+							0x80 | (ch & 0x3f));
+					}
+				}
+				return newdata;
+			} else {
+				return data;
+			}
+		}
+	};
+
+	// returns the code words (sans ECC bits) for given data and configurations.
+	// requires data to be preprocessed by validatedata. no length check is
+	// performed, and everything has to be checked before calling this function.
+	var encode = function(ver, mode, data, maxbuflen) {
+		var buf = [];
+		var bits = 0, remaining = 8;
+		var datalen = data.length;
+
+		// this function is intentionally no-op when n=0.
+		var pack = function(x, n) {
+			if (n >= remaining) {
+				buf.push(bits | (x >> (n -= remaining)));
+				while (n >= 8) buf.push((x >> (n -= 8)) & 255);
+				bits = 0;
+				remaining = 8;
+			}
+			if (n > 0) bits |= (x & ((1 << n) - 1)) << (remaining -= n);
+		};
+
+		var nlenbits = ndatalenbits(ver, mode);
+		pack(mode, 4);
+		pack(datalen, nlenbits);
+
+		switch (mode) {
+		case MODE_NUMERIC:
+			for (var i = 2; i < datalen; i += 3) {
+				pack(parseInt(data.substring(i-2,i+1), 10), 10);
+			}
+			pack(parseInt(data.substring(i-2), 10), [0,4,7][datalen%3]);
+			break;
+
+		case MODE_ALPHANUMERIC:
+			for (var i = 1; i < datalen; i += 2) {
+				pack(ALPHANUMERIC_MAP[data.charAt(i-1)] * 45 +
+					ALPHANUMERIC_MAP[data.charAt(i)], 11);
+			}
+			if (datalen % 2 == 1) {
+				pack(ALPHANUMERIC_MAP[data.charAt(i-1)], 6);
+			}
+			break;
+
+		case MODE_OCTET:
+			for (var i = 0; i < datalen; ++i) {
+				pack(data[i], 8);
+			}
+			break;
+		}
+
+		// final bits. it is possible that adding terminator causes the buffer
+		// to overflow, but then the buffer truncated to the maximum size will
+		// be valid as the truncated terminator mode bits and padding is
+		// identical in appearance (cf. JIS X 0510:2004 sec 8.4.8).
+		pack(MODE_TERMINATOR, 4);
+		if (remaining < 8) buf.push(bits);
+
+		// the padding to fill up the remaining space. we should not add any
+		// words when the overflow already occurred.
+		while (buf.length + 1 < maxbuflen) buf.push(0xec, 0x11);
+		if (buf.length < maxbuflen) buf.push(0xec);
+		return buf;
+	};
+
+	// calculates ECC code words for given code words and generator polynomial.
+	//
+	// this is quite similar to CRC calculation as both Reed-Solomon and CRC use
+	// the certain kind of cyclic codes, which is effectively the division of
+	// zero-augumented polynomial by the generator polynomial. the only difference
+	// is that Reed-Solomon uses GF(2^8), instead of CRC's GF(2), and Reed-Solomon
+	// uses the different generator polynomial than CRC's.
+	var calculateecc = function(poly, genpoly) {
+		var modulus = poly.slice(0);
+		var polylen = poly.length, genpolylen = genpoly.length;
+		for (var i = 0; i < genpolylen; ++i) modulus.push(0);
+		for (var i = 0; i < polylen; ) {
+			var quotient = GF256_INVMAP[modulus[i++]];
+			if (quotient >= 0) {
+				for (var j = 0; j < genpolylen; ++j) {
+					modulus[i+j] ^= GF256_MAP[(quotient + genpoly[j]) % 255];
+				}
+			}
+		}
+		return modulus.slice(polylen);
+	};
+
+	// auguments ECC code words to given code words. the resulting words are
+	// ready to be encoded in the matrix.
+	//
+	// the much of actual augumenting procedure follows JIS X 0510:2004 sec 8.7.
+	// the code is simplified using the fact that the size of each code & ECC
+	// blocks is almost same; for example, when we have 4 blocks and 46 data words
+	// the number of code words in those blocks are 11, 11, 12, 12 respectively.
+	var augumenteccs = function(poly, nblocks, genpoly) {
+		var subsizes = [];
+		var subsize = (poly.length / nblocks) | 0, subsize0 = 0;
+		var pivot = nblocks - poly.length % nblocks;
+		for (var i = 0; i < pivot; ++i) {
+			subsizes.push(subsize0);
+			subsize0 += subsize;
+		}
+		for (var i = pivot; i < nblocks; ++i) {
+			subsizes.push(subsize0);
+			subsize0 += subsize+1;
+		}
+		subsizes.push(subsize0);
+
+		var eccs = [];
+		for (var i = 0; i < nblocks; ++i) {
+			eccs.push(calculateecc(poly.slice(subsizes[i], subsizes[i+1]), genpoly));
+		}
+
+		var result = [];
+		var nitemsperblock = (poly.length / nblocks) | 0;
+		for (var i = 0; i < nitemsperblock; ++i) {
+			for (var j = 0; j < nblocks; ++j) {
+				result.push(poly[subsizes[j] + i]);
+			}
+		}
+		for (var j = pivot; j < nblocks; ++j) {
+			result.push(poly[subsizes[j+1] - 1]);
+		}
+		for (var i = 0; i < genpoly.length; ++i) {
+			for (var j = 0; j < nblocks; ++j) {
+				result.push(eccs[j][i]);
+			}
+		}
+		return result;
+	};
+
+	// auguments BCH(p+q,q) code to the polynomial over GF(2), given the proper
+	// genpoly. the both input and output are in binary numbers, and unlike
+	// calculateecc genpoly should include the 1 bit for the highest degree.
+	//
+	// actual polynomials used for this procedure are as follows:
+	// - p=10, q=5, genpoly=x^10+x^8+x^5+x^4+x^2+x+1 (JIS X 0510:2004 Appendix C)
+	// - p=18, q=6, genpoly=x^12+x^11+x^10+x^9+x^8+x^5+x^2+1 (ibid. Appendix D)
+	var augumentbch = function(poly, p, genpoly, q) {
+		var modulus = poly << q;
+		for (var i = p - 1; i >= 0; --i) {
+			if ((modulus >> (q+i)) & 1) modulus ^= genpoly << i;
+		}
+		return (poly << q) | modulus;
+	};
+
+	// creates the base matrix for given version. it returns two matrices, one of
+	// them is the actual one and the another represents the "reserved" portion
+	// (e.g. finder and timing patterns) of the matrix.
+	//
+	// some entries in the matrix may be undefined, rather than 0 or 1. this is
+	// intentional (no initialization needed!), and putdata below will fill
+	// the remaining ones.
+	var makebasematrix = function(ver) {
+		var v = VERSIONS[ver], n = getsizebyver(ver);
+		var matrix = [], reserved = [];
+		for (var i = 0; i < n; ++i) {
+			matrix.push([]);
+			reserved.push([]);
+		}
+
+		var blit = function(y, x, h, w, bits) {
+			for (var i = 0; i < h; ++i) {
+				for (var j = 0; j < w; ++j) {
+					matrix[y+i][x+j] = (bits[i] >> j) & 1;
+					reserved[y+i][x+j] = 1;
+				}
+			}
+		};
+
+		// finder patterns and a part of timing patterns
+		// will also mark the format information area (not yet written) as reserved.
+		blit(0, 0, 9, 9, [0x7f, 0x41, 0x5d, 0x5d, 0x5d, 0x41, 0x17f, 0x00, 0x40]);
+		blit(n-8, 0, 8, 9, [0x100, 0x7f, 0x41, 0x5d, 0x5d, 0x5d, 0x41, 0x7f]);
+		blit(0, n-8, 9, 8, [0xfe, 0x82, 0xba, 0xba, 0xba, 0x82, 0xfe, 0x00, 0x00]);
+
+		// the rest of timing patterns
+		for (var i = 9; i < n-8; ++i) {
+			matrix[6][i] = matrix[i][6] = ~i & 1;
+			reserved[6][i] = reserved[i][6] = 1;
+		}
+
+		// alignment patterns
+		var aligns = v[2], m = aligns.length;
+		for (var i = 0; i < m; ++i) {
+			var minj = (i===0 || i===m-1 ? 1 : 0), maxj = (i===0 ? m-1 : m);
+			for (var j = minj; j < maxj; ++j) {
+				blit(aligns[i], aligns[j], 5, 5, [0x1f, 0x11, 0x15, 0x11, 0x1f]);
+			}
+		}
+
+		// version information
+		if (needsverinfo(ver)) {
+			var code = augumentbch(ver, 6, 0x1f25, 12);
+			var k = 0;
+			for (var i = 0; i < 6; ++i) {
+				for (var j = 0; j < 3; ++j) {
+					matrix[i][(n-11)+j] = matrix[(n-11)+j][i] = (code >> k++) & 1;
+					reserved[i][(n-11)+j] = reserved[(n-11)+j][i] = 1;
+				}
+			}
+		}
+
+		return {matrix: matrix, reserved: reserved};
+	};
+
+	// fills the data portion (i.e. unmarked in reserved) of the matrix with given
+	// code words. the size of code words should be no more than available bits,
+	// and remaining bits are padded to 0 (cf. JIS X 0510:2004 sec 8.7.3).
+	var putdata = function(matrix, reserved, buf) {
+		var n = matrix.length;
+		var k = 0, dir = -1;
+		for (var i = n-1; i >= 0; i -= 2) {
+			if (i == 6) --i; // skip the entire timing pattern column
+			var jj = (dir < 0 ? n-1 : 0);
+			for (var j = 0; j < n; ++j) {
+				for (var ii = i; ii > i-2; --ii) {
+					if (!reserved[jj][ii]) {
+						// may overflow, but (undefined >> x)
+						// is 0 so it will auto-pad to zero.
+						matrix[jj][ii] = (buf[k >> 3] >> (~k&7)) & 1;
+						++k;
+					}
+				}
+				jj += dir;
+			}
+			dir = -dir;
+		}
+		return matrix;
+	};
+
+	// XOR-masks the data portion of the matrix. repeating the call with the same
+	// arguments will revert the prior call (convenient in the matrix evaluation).
+	var maskdata = function(matrix, reserved, mask) {
+		var maskf = MASKFUNCS[mask];
+		var n = matrix.length;
+		for (var i = 0; i < n; ++i) {
+			for (var j = 0; j < n; ++j) {
+				if (!reserved[i][j]) matrix[i][j] ^= maskf(i,j);
+			}
+		}
+		return matrix;
+	};
+
+	// puts the format information.
+	var putformatinfo = function(matrix, reserved, ecclevel, mask) {
+		var n = matrix.length;
+		var code = augumentbch((ecclevel << 3) | mask, 5, 0x537, 10) ^ 0x5412;
+		for (var i = 0; i < 15; ++i) {
+			var r = [0,1,2,3,4,5,7,8,n-7,n-6,n-5,n-4,n-3,n-2,n-1][i];
+			var c = [n-1,n-2,n-3,n-4,n-5,n-6,n-7,n-8,7,5,4,3,2,1,0][i];
+			matrix[r][8] = matrix[8][c] = (code >> i) & 1;
+			// we don't have to mark those bits reserved; always done
+			// in makebasematrix above.
+		}
+		return matrix;
+	};
+
+	// evaluates the resulting matrix and returns the score (lower is better).
+	// (cf. JIS X 0510:2004 sec 8.8.2)
+	//
+	// the evaluation procedure tries to avoid the problematic patterns naturally
+	// occuring from the original matrix. for example, it penaltizes the patterns
+	// which just look like the finder pattern which will confuse the decoder.
+	// we choose the mask which results in the lowest score among 8 possible ones.
+	//
+	// note: zxing seems to use the same procedure and in many cases its choice
+	// agrees to ours, but sometimes it does not. practically it doesn't matter.
+	var evaluatematrix = function(matrix) {
+		// N1+(k-5) points for each consecutive row of k same-colored modules,
+		// where k >= 5. no overlapping row counts.
+		var PENALTY_CONSECUTIVE = 3;
+		// N2 points for each 2x2 block of same-colored modules.
+		// overlapping block does count.
+		var PENALTY_TWOBYTWO = 3;
+		// N3 points for each pattern with >4W:1B:1W:3B:1W:1B or
+		// 1B:1W:3B:1W:1B:>4W, or their multiples (e.g. highly unlikely,
+		// but 13W:3B:3W:9B:3W:3B counts).
+		var PENALTY_FINDERLIKE = 40;
+		// N4*k points for every (5*k)% deviation from 50% black density.
+		// i.e. k=1 for 55~60% and 40~45%, k=2 for 60~65% and 35~40%, etc.
+		var PENALTY_DENSITY = 10;
+
+		var evaluategroup = function(groups) { // assumes [W,B,W,B,W,...,B,W]
+			var score = 0;
+			for (var i = 0; i < groups.length; ++i) {
+				if (groups[i] >= 5) score += PENALTY_CONSECUTIVE + (groups[i]-5);
+			}
+			for (var i = 5; i < groups.length; i += 2) {
+				var p = groups[i];
+				if (groups[i-1] == p && groups[i-2] == 3*p && groups[i-3] == p &&
+						groups[i-4] == p && (groups[i-5] >= 4*p || groups[i+1] >= 4*p)) {
+					// this part differs from zxing...
+					score += PENALTY_FINDERLIKE;
+				}
+			}
+			return score;
+		};
+
+		var n = matrix.length;
+		var score = 0, nblacks = 0;
+		for (var i = 0; i < n; ++i) {
+			var row = matrix[i];
+			var groups;
+
+			// evaluate the current row
+			groups = [0]; // the first empty group of white
+			for (var j = 0; j < n; ) {
+				var k;
+				for (k = 0; j < n && row[j]; ++k) ++j;
+				groups.push(k);
+				for (k = 0; j < n && !row[j]; ++k) ++j;
+				groups.push(k);
+			}
+			score += evaluategroup(groups);
+
+			// evaluate the current column
+			groups = [0];
+			for (var j = 0; j < n; ) {
+				var k;
+				for (k = 0; j < n && matrix[j][i]; ++k) ++j;
+				groups.push(k);
+				for (k = 0; j < n && !matrix[j][i]; ++k) ++j;
+				groups.push(k);
+			}
+			score += evaluategroup(groups);
+
+			// check the 2x2 box and calculate the density
+			var nextrow = matrix[i+1] || [];
+			nblacks += row[0];
+			for (var j = 1; j < n; ++j) {
+				var p = row[j];
+				nblacks += p;
+				// at least comparison with next row should be strict...
+				if (row[j-1] == p && nextrow[j] === p && nextrow[j-1] === p) {
+					score += PENALTY_TWOBYTWO;
+				}
+			}
+		}
+
+		score += PENALTY_DENSITY * ((Math.abs(nblacks / n / n - 0.5) / 0.05) | 0);
+		return score;
+	};
+
+	// returns the fully encoded QR code matrix which contains given data.
+	// it also chooses the best mask automatically when mask is -1.
+	var generate = function(data, ver, mode, ecclevel, mask) {
+		var v = VERSIONS[ver];
+		var buf = encode(ver, mode, data, ndatabits(ver, ecclevel) >> 3);
+		buf = augumenteccs(buf, v[1][ecclevel], GF256_GENPOLY[v[0][ecclevel]]);
+
+		var result = makebasematrix(ver);
+		var matrix = result.matrix, reserved = result.reserved;
+		putdata(matrix, reserved, buf);
+
+		if (mask < 0) {
+			// find the best mask
+			maskdata(matrix, reserved, 0);
+			putformatinfo(matrix, reserved, ecclevel, 0);
+			var bestmask = 0, bestscore = evaluatematrix(matrix);
+			maskdata(matrix, reserved, 0);
+			for (mask = 1; mask < 8; ++mask) {
+				maskdata(matrix, reserved, mask);
+				putformatinfo(matrix, reserved, ecclevel, mask);
+				var score = evaluatematrix(matrix);
+				if (bestscore > score) {
+					bestscore = score;
+					bestmask = mask;
+				}
+				maskdata(matrix, reserved, mask);
+			}
+			mask = bestmask;
+		}
+
+		maskdata(matrix, reserved, mask);
+		putformatinfo(matrix, reserved, ecclevel, mask);
+		return matrix;
+	};
+
+	// the public interface is trivial; the options available are as follows:
+	//
+	// - version: an integer in [1,40]. when omitted (or -1) the smallest possible
+	//   version is chosen.
+	// - mode: one of 'numeric', 'alphanumeric', 'octet'. when omitted the smallest
+	//   possible mode is chosen.
+	// - eccLevel: one of 'L', 'M', 'Q', 'H'. defaults to 'L'.
+	// - mask: an integer in [0,7]. when omitted (or -1) the best mask is chosen.
+	//
+
+	function generateFrame(data, options) {
+			var MODES = {'numeric': MODE_NUMERIC, 'alphanumeric': MODE_ALPHANUMERIC,
+				'octet': MODE_OCTET};
+			var ECCLEVELS = {'L': ECCLEVEL_L, 'M': ECCLEVEL_M, 'Q': ECCLEVEL_Q,
+				'H': ECCLEVEL_H};
+
+			options = options || {};
+			var ver = options.version || -1;
+			var ecclevel = ECCLEVELS[(options.eccLevel || 'L').toUpperCase()];
+			var mode = options.mode ? MODES[options.mode.toLowerCase()] : -1;
+			var mask = 'mask' in options ? options.mask : -1;
+
+			if (mode < 0) {
+				if (typeof data === 'string') {
+					if (data.match(NUMERIC_REGEXP)) {
+						mode = MODE_NUMERIC;
+					} else if (data.match(ALPHANUMERIC_OUT_REGEXP)) {
+						// while encode supports case-insensitive encoding, we restrict the data to be uppercased when auto-selecting the mode.
+						mode = MODE_ALPHANUMERIC;
+					} else {
+						mode = MODE_OCTET;
+					}
+				} else {
+					mode = MODE_OCTET;
+				}
+			} else if (!(mode == MODE_NUMERIC || mode == MODE_ALPHANUMERIC ||
+					mode == MODE_OCTET)) {
+				throw 'invalid or unsupported mode';
+			}
+
+			data = validatedata(mode, data);
+			if (data === null) throw 'invalid data format';
+
+			if (ecclevel < 0 || ecclevel > 3) throw 'invalid ECC level';
+
+			if (ver < 0) {
+				for (ver = 1; ver <= 40; ++ver) {
+					if (data.length <= getmaxdatalen(ver, mode, ecclevel)) break;
+				}
+				if (ver > 40) throw 'too large data for the Qr format';
+			} else if (ver < 1 || ver > 40) {
+				throw 'invalid Qr version! should be between 1 and 40';
+			}
+
+			if (mask != -1 && (mask < 0 || mask > 8)) throw 'invalid mask';
+	        //console.log('version:', ver, 'mode:', mode, 'ECC:', ecclevel, 'mask:', mask )
+			return generate(data, ver, mode, ecclevel, mask);
+		}
+
+
+	// options
+	// - modulesize: a number. this is a size of each modules in pixels, and
+	//   defaults to 5px.
+	// - margin: a number. this is a size of margin in *modules*, and defaults to
+	//   4 (white modules). the specficiation mandates the margin no less than 4
+	//   modules, so it is better not to alter this value unless you know what
+	//   you're doing.
+	function buildCanvas(data, options) {
+	   
+	    var canvas = [];
+	    var background = data.background || '#fff';
+	    var foreground = data.foreground || '#000';
+	    //var margin = options.margin || 4;
+		var matrix = generateFrame(data, options);
+		var n = matrix.length;
+		var modSize = Math.floor( options.fit ? options.fit/n : 5 );
+		var size = n * modSize;
+		
+	    canvas.push({
+	      type: 'rect',
+	      x: 0, y: 0, w: size, h: size, lineWidth: 0, color: background
+	    });
+	    
+		for (var i = 0; i < n; ++i) {
+			for (var j = 0; j < n; ++j) {
+	            if(matrix[i][j]) {
+	              canvas.push({
+	                type: 'rect',
+	                x: modSize * i,
+	                y: modSize * j,
+	                w: modSize,
+	                h: modSize,
+	                lineWidth: 0,
+	                color: foreground
+	              });
+	            }
+	        }
+	    }
+	    
+	    return {
+	        canvas: canvas,
+	        size: size
+	    };
+			
+	}
+
+	function measure(node) {
+	    var cd = buildCanvas(node.qr, node);
+	    node._canvas = cd.canvas;
+	    node._width = node._height = node._minWidth = node._maxWidth = node._minHeight = node._maxHeight = cd.size;
+	    return node;
+	}
+
+	module.exports = {
+	  measure: measure
+	};
+
+/***/ },
+/* 19 */
+/***/ function(module, exports, __webpack_require__) {
+
+	/* jslint node: true */
+	'use strict';
+
+	var TraversalTracker = __webpack_require__(12);
+
+	/**
+	* Creates an instance of DocumentContext - a store for current x, y positions and available width/height.
+	* It facilitates column divisions and vertical sync
+	*/
+	function DocumentContext(pageSize, pageMargins) {
+		this.pages = [];
+
+		this.pageMargins = pageMargins;
+
+		this.x = pageMargins.left;
+		this.availableWidth = pageSize.width - pageMargins.left - pageMargins.right;
+		this.availableHeight = 0;
+		this.page = -1;
+
+		this.snapshots = [];
+
+		this.endingCell = null;
+
+	  this.tracker = new TraversalTracker();
+
+		this.addPage(pageSize);
+	}
+
+	DocumentContext.prototype.beginColumnGroup = function() {
+		this.snapshots.push({
+			x: this.x,
+			y: this.y,
+			availableHeight: this.availableHeight,
+			availableWidth: this.availableWidth,
+			page: this.page,
+			bottomMost: { y: this.y, page: this.page },
+			endingCell: this.endingCell,
+			lastColumnWidth: this.lastColumnWidth
+		});
+
+		this.lastColumnWidth = 0;
+	};
+
+	DocumentContext.prototype.beginColumn = function(width, offset, endingCell) {
+		var saved = this.snapshots[this.snapshots.length - 1];
+
+		this.calculateBottomMost(saved);
+
+	  this.endingCell = endingCell;
+		this.page = saved.page;
+		this.x = this.x + this.lastColumnWidth + (offset || 0);
+		this.y = saved.y;
+		this.availableWidth = width;	//saved.availableWidth - offset;
+		this.availableHeight = saved.availableHeight;
+
+		this.lastColumnWidth = width;
+	};
+
+	DocumentContext.prototype.calculateBottomMost = function(destContext) {
+		if (this.endingCell) {
+			this.saveContextInEndingCell(this.endingCell);
+			this.endingCell = null;
+		} else {
+			destContext.bottomMost = bottomMostContext(this, destContext.bottomMost);
+		}
+	};
+
+	DocumentContext.prototype.markEnding = function(endingCell) {
+		this.page = endingCell._columnEndingContext.page;
+		this.x = endingCell._columnEndingContext.x;
+		this.y = endingCell._columnEndingContext.y;
+		this.availableWidth = endingCell._columnEndingContext.availableWidth;
+		this.availableHeight = endingCell._columnEndingContext.availableHeight;
+		this.lastColumnWidth = endingCell._columnEndingContext.lastColumnWidth;
+	};
+
+	DocumentContext.prototype.saveContextInEndingCell = function(endingCell) {
+		endingCell._columnEndingContext = {
+			page: this.page,
+			x: this.x,
+			y: this.y,
+			availableHeight: this.availableHeight,
+			availableWidth: this.availableWidth,
+			lastColumnWidth: this.lastColumnWidth
+		};
+	};
+
+	DocumentContext.prototype.completeColumnGroup = function() {
+		var saved = this.snapshots.pop();
+
+		this.calculateBottomMost(saved);
+
+		this.endingCell = null;
+		this.x = saved.x;
+		this.y = saved.bottomMost.y;
+		this.page = saved.bottomMost.page;
+		this.availableWidth = saved.availableWidth;
+		this.availableHeight = saved.bottomMost.availableHeight;
+		this.lastColumnWidth = saved.lastColumnWidth;
+	};
+
+	DocumentContext.prototype.addMargin = function(left, right) {
+		this.x += left;
+		this.availableWidth -= left + (right || 0);
+	};
+
+	DocumentContext.prototype.moveDown = function(offset) {
+		this.y += offset;
+		this.availableHeight -= offset;
+
+		return this.availableHeight > 0;
+	};
+
+	DocumentContext.prototype.initializePage = function() {
+		this.y = this.pageMargins.top;
+		this.availableHeight = this.getCurrentPage().pageSize.height - this.pageMargins.top - this.pageMargins.bottom;
+		this.pageSnapshot().availableWidth = this.getCurrentPage().pageSize.width - this.pageMargins.left - this.pageMargins.right;
+	};
+
+	DocumentContext.prototype.pageSnapshot = function(){
+	  if(this.snapshots[0]){
+	    return this.snapshots[0];
+	  } else {
+	    return this;
+	  }
+	};
+
+	DocumentContext.prototype.moveTo = function(x,y) {
+		if(x !== undefined && x !== null) {
+			this.x = x;
+			this.availableWidth = this.getCurrentPage().pageSize.width - this.x - this.pageMargins.right;
+		}
+		if(y !== undefined && y !== null){
+			this.y = y;
+			this.availableHeight = this.getCurrentPage().pageSize.height - this.y - this.pageMargins.bottom;
+		}
+	};
+
+	DocumentContext.prototype.beginDetachedBlock = function() {
+		this.snapshots.push({
+			x: this.x,
+			y: this.y,
+			availableHeight: this.availableHeight,
+			availableWidth: this.availableWidth,
+			page: this.page,
+			endingCell: this.endingCell,
+			lastColumnWidth: this.lastColumnWidth
+		});
+	};
+
+	DocumentContext.prototype.endDetachedBlock = function() {
+		var saved = this.snapshots.pop();
+
+		this.x = saved.x;
+		this.y = saved.y;
+		this.availableWidth = saved.availableWidth;
+		this.availableHeight = saved.availableHeight;
+		this.page = saved.page;
+		this.endingCell = saved.endingCell;
+		this.lastColumnWidth = saved.lastColumnWidth;
+	};
+
+	function pageOrientation(pageOrientationString, currentPageOrientation){
+		if(pageOrientationString === undefined) {
+			return currentPageOrientation;
+		} else if(pageOrientationString === 'landscape'){
+			return 'landscape';
+		} else {
+			return 'portrait';
+		}
+	}
+
+	var getPageSize = function (currentPage, newPageOrientation) {
+
+		newPageOrientation = pageOrientation(newPageOrientation, currentPage.pageSize.orientation);
+
+		if(newPageOrientation !== currentPage.pageSize.orientation) {
+			return {
+				orientation: newPageOrientation,
+				width: currentPage.pageSize.height,
+				height: currentPage.pageSize.width
+			};
+		} else {
+			return {
+				orientation: currentPage.pageSize.orientation,
+				width: currentPage.pageSize.width,
+				height: currentPage.pageSize.height
+			};
+		}
+
+	};
+
+
+	DocumentContext.prototype.moveToNextPage = function(pageOrientation) {
+		var nextPageIndex = this.page + 1;
+
+		var prevPage = this.page;
+		var prevY = this.y;
+
+		var createNewPage = nextPageIndex >= this.pages.length;
+		if (createNewPage) {
+			this.addPage(getPageSize(this.getCurrentPage(), pageOrientation));
+		} else {
+			this.page = nextPageIndex;
+			this.initializePage();
+		}
+
+	  return {
+			newPageCreated: createNewPage,
+			prevPage: prevPage,
+			prevY: prevY,
+			y: this.y
+		};
+	};
+
+
+	DocumentContext.prototype.addPage = function(pageSize) {
+		var page = { items: [], pageSize: pageSize };
+		this.pages.push(page);
+		this.page = this.pages.length - 1;
+		this.initializePage();
+
+		this.tracker.emit('pageAdded');
+
+		return page;
+	};
+
+	DocumentContext.prototype.getCurrentPage = function() {
+		if (this.page < 0 || this.page >= this.pages.length) return null;
+
+		return this.pages[this.page];
+	};
+
+	DocumentContext.prototype.getCurrentPosition = function() {
+	  var pageSize = this.getCurrentPage().pageSize;
+	  var innerHeight = pageSize.height - this.pageMargins.top - this.pageMargins.bottom;
+	  var innerWidth = pageSize.width - this.pageMargins.left - this.pageMargins.right;
+
+	  return {
+	    pageNumber: this.page + 1,
+	    pageOrientation: pageSize.orientation,
+	    pageInnerHeight: innerHeight,
+	    pageInnerWidth: innerWidth,
+	    left: this.x,
+	    top: this.y,
+	    verticalRatio: ((this.y - this.pageMargins.top) / innerHeight),
+	    horizontalRatio: ((this.x - this.pageMargins.left) / innerWidth)
+	  };
+	};
+
+	function bottomMostContext(c1, c2) {
+		var r;
+
+		if (c1.page > c2.page) r = c1;
+		else if (c2.page > c1.page) r = c2;
+		else r = (c1.y > c2.y) ? c1 : c2;
+
+		return {
+			page: r.page,
+			x: r.x,
+			y: r.y,
+			availableHeight: r.availableHeight,
+			availableWidth: r.availableWidth
+		};
+	}
+
+	/****TESTS**** (add a leading '/' to uncomment)
+	DocumentContext.bottomMostContext = bottomMostContext;
+	// */
+
+	module.exports = DocumentContext;
+
+
+/***/ },
+/* 20 */
+/***/ function(module, exports, __webpack_require__) {
+
+	/* jslint node: true */
+	'use strict';
+
+	var ElementWriter = __webpack_require__(21);
+
+	/**
+	* Creates an instance of PageElementWriter - an extended ElementWriter
+	* which can handle:
+	* - page-breaks (it adds new pages when there's not enough space left),
+	* - repeatable fragments (like table-headers, which are repeated everytime
+	*                         a page-break occurs)
+	* - transactions (used for unbreakable-blocks when we want to make sure
+	*                 whole block will be rendered on the same page)
+	*/
+	function PageElementWriter(context, tracker) {
+		this.transactionLevel = 0;
+		this.repeatables = [];
+		this.tracker = tracker;
+		this.writer = new ElementWriter(context, tracker);
+	}
+
+	function fitOnPage(self, addFct){
+	  var position = addFct(self);
+	  if (!position) {
+	    self.moveToNextPage();
+	    position = addFct(self);
+	  }
+	  return position;
+	}
+
+	PageElementWriter.prototype.addLine = function(line, dontUpdateContextPosition, index) {
+	  return fitOnPage(this, function(self){
+	    return self.writer.addLine(line, dontUpdateContextPosition, index);
+	  });
+	};
+
+	PageElementWriter.prototype.addImage = function(image, index) {
+	  return fitOnPage(this, function(self){
+	    return self.writer.addImage(image, index);
+	  });
+	};
+
+	PageElementWriter.prototype.addQr = function(qr, index) {
+	  return fitOnPage(this, function(self){
+			return self.writer.addQr(qr, index);
+		});
+	};
+
+	PageElementWriter.prototype.addVector = function(vector, ignoreContextX, ignoreContextY, index) {
+		return this.writer.addVector(vector, ignoreContextX, ignoreContextY, index);
+	};
+
+	PageElementWriter.prototype.addFragment = function(fragment, useBlockXOffset, useBlockYOffset, dontUpdateContextPosition) {
+		if (!this.writer.addFragment(fragment, useBlockXOffset, useBlockYOffset, dontUpdateContextPosition)) {
+			this.moveToNextPage();
+			this.writer.addFragment(fragment, useBlockXOffset, useBlockYOffset, dontUpdateContextPosition);
+		}
+	};
+
+	PageElementWriter.prototype.moveToNextPage = function(pageOrientation) {
+		
+		var nextPage = this.writer.context.moveToNextPage(pageOrientation);
+		
+	  if (nextPage.newPageCreated) {
+			this.repeatables.forEach(function(rep) {
+				this.writer.addFragment(rep, true);
+			}, this);
+		} else {
+			this.repeatables.forEach(function(rep) {
+				this.writer.context.moveDown(rep.height);
+			}, this);
+		}
+
+		this.writer.tracker.emit('pageChanged', {
+			prevPage: nextPage.prevPage,
+			prevY: nextPage.prevY,
+			y: nextPage.y
+		});
+	};
+
+	PageElementWriter.prototype.beginUnbreakableBlock = function(width, height) {
+		if (this.transactionLevel++ === 0) {
+			this.originalX = this.writer.context.x;
+			this.writer.pushContext(width, height);
+		}
+	};
+
+	PageElementWriter.prototype.commitUnbreakableBlock = function(forcedX, forcedY) {
+		if (--this.transactionLevel === 0) {
+			var unbreakableContext = this.writer.context;
+			this.writer.popContext();
+
+			var nbPages = unbreakableContext.pages.length;
+			if(nbPages > 0) {
+				// no support for multi-page unbreakableBlocks
+				var fragment = unbreakableContext.pages[0];
+				fragment.xOffset = forcedX;
+				fragment.yOffset = forcedY;
+
+				//TODO: vectors can influence height in some situations
+				if(nbPages > 1) {
+					// on out-of-context blocs (headers, footers, background) height should be the whole DocumentContext height
+					if (forcedX !== undefined || forcedY !== undefined) {
+						fragment.height = unbreakableContext.getCurrentPage().pageSize.height - unbreakableContext.pageMargins.top - unbreakableContext.pageMargins.bottom;
+					} else {
+						fragment.height = this.writer.context.getCurrentPage().pageSize.height - this.writer.context.pageMargins.top - this.writer.context.pageMargins.bottom;
+						for (var i = 0, l = this.repeatables.length; i < l; i++) {
+							fragment.height -= this.repeatables[i].height;
+						}
+					}
+				} else {
+					fragment.height = unbreakableContext.y;
+				}
+
+				if (forcedX !== undefined || forcedY !== undefined) {
+					this.writer.addFragment(fragment, true, true, true);
+				} else {
+					this.addFragment(fragment);
+				}
+			}
+		}
+	};
+
+	PageElementWriter.prototype.currentBlockToRepeatable = function() {
+		var unbreakableContext = this.writer.context;
+		var rep = { items: [] };
+
+	    unbreakableContext.pages[0].items.forEach(function(item) {
+	        rep.items.push(item);
+	    });
+
+		rep.xOffset = this.originalX;
+
+		//TODO: vectors can influence height in some situations
+		rep.height = unbreakableContext.y;
+
+		return rep;
+	};
+
+	PageElementWriter.prototype.pushToRepeatables = function(rep) {
+		this.repeatables.push(rep);
+	};
+
+	PageElementWriter.prototype.popFromRepeatables = function() {
+		this.repeatables.pop();
+	};
+
+	PageElementWriter.prototype.context = function() {
+		return this.writer.context;
+	};
+
+	module.exports = PageElementWriter;
+
+
+/***/ },
+/* 21 */
+/***/ function(module, exports, __webpack_require__) {
+
+	/* jslint node: true */
+	'use strict';
+
+	var Line = __webpack_require__(22);
+	var pack = __webpack_require__(17).pack;
+	var offsetVector = __webpack_require__(17).offsetVector;
+	var DocumentContext = __webpack_require__(19);
+
+	/**
+	* Creates an instance of ElementWriter - a line/vector writer, which adds
+	* elements to current page and sets their positions based on the context
+	*/
+	function ElementWriter(context, tracker) {
+		this.context = context;
+		this.contextStack = [];
+		this.tracker = tracker;
+	}
+
+	function addPageItem(page, item, index) {
+		if(index === null || index === undefined || index < 0 || index > page.items.length) {
+			page.items.push(item);
+		} else {
+			page.items.splice(index, 0, item);
+		}
+	}
+
+	ElementWriter.prototype.addLine = function(line, dontUpdateContextPosition, index) {
+		var height = line.getHeight();
+		var context = this.context;
+		var page = context.getCurrentPage(),
+	      position = this.getCurrentPositionOnPage();
+
+		if (context.availableHeight < height || !page) {
+			return false;
+		}
+
+		line.x = context.x + (line.x || 0);
+		line.y = context.y + (line.y || 0);
+
+		this.alignLine(line);
+
+	    addPageItem(page, {
+	        type: 'line',
+	        item: line
+	    }, index);
+		this.tracker.emit('lineAdded', line);
+
+		if (!dontUpdateContextPosition) context.moveDown(height);
+
+		return position;
+	};
+
+	ElementWriter.prototype.alignLine = function(line) {
+		var width = this.context.availableWidth;
+		var lineWidth = line.getWidth();
+
+		var alignment = line.inlines && line.inlines.length > 0 && line.inlines[0].alignment;
+
+		var offset = 0;
+		switch(alignment) {
+			case 'right':
+				offset = width - lineWidth;
+				break;
+			case 'center':
+				offset = (width - lineWidth) / 2;
+				break;
+		}
+
+		if (offset) {
+			line.x = (line.x || 0) + offset;
+		}
+
+		if (alignment === 'justify' &&
+			!line.newLineForced &&
+			!line.lastLineInParagraph &&
+			line.inlines.length > 1) {
+			var additionalSpacing = (width - lineWidth) / (line.inlines.length - 1);
+
+			for(var i = 1, l = line.inlines.length; i < l; i++) {
+				offset = i * additionalSpacing;
+
+				line.inlines[i].x += offset;
+			}
+		}
+	};
+
+	ElementWriter.prototype.addImage = function(image, index) {
+		var context = this.context;
+		var page = context.getCurrentPage(),
+	      position = this.getCurrentPositionOnPage();
+
+		if (context.availableHeight < image._height || !page) {
+			return false;
+		}
+
+		image.x = context.x + (image.x || 0);
+		image.y = context.y;
+
+		this.alignImage(image);
+
+		addPageItem(page, {
+	        type: 'image',
+	        item: image
+	    }, index);
+
+		context.moveDown(image._height);
+
+		return position;
+	};
+
+	ElementWriter.prototype.addQr = function(qr, index) {
+		var context = this.context;
+		var page = context.getCurrentPage(),
+	      position = this.getCurrentPositionOnPage();
+
+		if (context.availableHeight < qr._height || !page) {
+			return false;
+		}
+
+		qr.x = context.x + (qr.x || 0);
+		qr.y = context.y;
+
+		this.alignImage(qr);
+
+		for (var i=0, l=qr._canvas.length; i < l; i++) {
+			var vector = qr._canvas[i];
+			vector.x += qr.x;
+			vector.y += qr.y;
+			this.addVector(vector, true, true, index);
+		}
+
+		context.moveDown(qr._height);
+
+		return position;
+	};
+
+	ElementWriter.prototype.alignImage = function(image) {
+		var width = this.context.availableWidth;
+		var imageWidth = image._minWidth;
+		var offset = 0;
+		switch(image._alignment) {
+			case 'right':
+				offset = width - imageWidth;
+				break;
+			case 'center':
+				offset = (width - imageWidth) / 2;
+				break;
+		}
+
+		if (offset) {
+			image.x = (image.x || 0) + offset;
+		}
+	};
+
+	ElementWriter.prototype.addVector = function(vector, ignoreContextX, ignoreContextY, index) {
+		var context = this.context;
+		var page = context.getCurrentPage(),
+	      position = this.getCurrentPositionOnPage();
+
+		if (page) {
+			offsetVector(vector, ignoreContextX ? 0 : context.x, ignoreContextY ? 0 : context.y);
+	        addPageItem(page, {
+	            type: 'vector',
+	            item: vector
+	        }, index);
+			return position;
+		}
+	};
+
+	function cloneLine(line) {
+		var result = new Line(line.maxWidth);
+
+		for(var key in line) {
+			if (line.hasOwnProperty(key)) {
+				result[key] = line[key];
+			}
+		}
+
+		return result;
+	}
+
+	ElementWriter.prototype.addFragment = function(block, useBlockXOffset, useBlockYOffset, dontUpdateContextPosition) {
+		var ctx = this.context;
+		var page = ctx.getCurrentPage();
+
+		if (!useBlockXOffset && block.height > ctx.availableHeight) return false;
+
+		block.items.forEach(function(item) {
+	        switch(item.type) {
+	            case 'line':
+	                var l = cloneLine(item.item);
+
+	                l.x = (l.x || 0) + (useBlockXOffset ? (block.xOffset || 0) : ctx.x);
+	                l.y = (l.y || 0) + (useBlockYOffset ? (block.yOffset || 0) : ctx.y);
+
+	                page.items.push({
+	                    type: 'line',
+	                    item: l
+	                });
+	                break;
+
+	            case 'vector':
+	                var v = pack(item.item);
+
+	                offsetVector(v, useBlockXOffset ? (block.xOffset || 0) : ctx.x, useBlockYOffset ? (block.yOffset || 0) : ctx.y);
+	                page.items.push({
+	                    type: 'vector',
+	                    item: v
+	                });
+	                break;
+
+	            case 'image':
+	                var img = pack(item.item);
+
+	                img.x = (img.x || 0) + (useBlockXOffset ? (block.xOffset || 0) : ctx.x);
+	                img.y = (img.y || 0) + (useBlockYOffset ? (block.yOffset || 0) : ctx.y);
+
+	                page.items.push({
+	                    type: 'image',
+	                    item: img
+	                });
+	                break;
+	        }
+		});
+
+		if (!dontUpdateContextPosition) ctx.moveDown(block.height);
+
+		return true;
+	};
+
+	/**
+	* Pushes the provided context onto the stack or creates a new one
+	*
+	* pushContext(context) - pushes the provided context and makes it current
+	* pushContext(width, height) - creates and pushes a new context with the specified width and height
+	* pushContext() - creates a new context for unbreakable blocks (with current availableWidth and full-page-height)
+	*/
+	ElementWriter.prototype.pushContext = function(contextOrWidth, height) {
+		if (contextOrWidth === undefined) {
+			height = this.context.getCurrentPage().height - this.context.pageMargins.top - this.context.pageMargins.bottom;
+			contextOrWidth = this.context.availableWidth;
+		}
+
+		if (typeof contextOrWidth === 'number' || contextOrWidth instanceof Number) {
+			contextOrWidth = new DocumentContext({ width: contextOrWidth, height: height }, { left: 0, right: 0, top: 0, bottom: 0 });
+		}
+
+		this.contextStack.push(this.context);
+		this.context = contextOrWidth;
+	};
+
+	ElementWriter.prototype.popContext = function() {
+		this.context = this.contextStack.pop();
+	};
+
+	ElementWriter.prototype.getCurrentPositionOnPage = function(){
+		return (this.contextStack[0] || this.context).getCurrentPosition();
+	};
+
+
+	module.exports = ElementWriter;
+
+
+/***/ },
+/* 22 */
+/***/ function(module, exports) {
+
+	/* jslint node: true */
+	'use strict';
+
+	/**
+	* Creates an instance of Line
+	*
+	* @constructor
+	* @this {Line}
+	* @param {Number} Maximum width this line can have
+	*/
+	function Line(maxWidth) {
+		this.maxWidth = maxWidth;
+		this.leadingCut = 0;
+		this.trailingCut = 0;
+		this.inlineWidths = 0;
+		this.inlines = [];
+	}
+
+	Line.prototype.getAscenderHeight = function() {
+		var y = 0;
+
+		this.inlines.forEach(function(inline) {
+			y = Math.max(y, inline.font.ascender / 1000 * inline.fontSize);
+		});
+		return y;
+	};
+
+	Line.prototype.hasEnoughSpaceForInline = function(inline) {
+		if (this.inlines.length === 0) return true;
+		if (this.newLineForced) return false;
+
+		return this.inlineWidths + inline.width - this.leadingCut - (inline.trailingCut || 0) <= this.maxWidth;
+	};
+
+	Line.prototype.addInline = function(inline) {
+		if (this.inlines.length === 0) {
+			this.leadingCut = inline.leadingCut || 0;
+		}
+		this.trailingCut = inline.trailingCut || 0;
+
+		inline.x = this.inlineWidths - this.leadingCut;
+
+		this.inlines.push(inline);
+		this.inlineWidths += inline.width;
+
+		if (inline.lineEnd) {
+			this.newLineForced = true;
+		}
+	};
+
+	Line.prototype.getWidth = function() {
+		return this.inlineWidths - this.leadingCut - this.trailingCut;
+	};
+
+	/**
+	* Returns line height
+	* @return {Number}
+	*/
+	Line.prototype.getHeight = function() {
+		var max = 0;
+
+		this.inlines.forEach(function(item) {
+			max = Math.max(max, item.height || 0);
+		});
+
+		return max;
+	};
+
+	module.exports = Line;
+
+
+/***/ },
+/* 23 */
+/***/ function(module, exports, __webpack_require__) {
+
+	/* jslint node: true */
+	'use strict';
+
+	var ColumnCalculator = __webpack_require__(16);
+
+	function TableProcessor(tableNode) {
+	  this.tableNode = tableNode;
+	}
+
+	TableProcessor.prototype.beginTable = function(writer) {
+	  var tableNode;
+	  var availableWidth;
+	  var self = this;
+
+	  tableNode = this.tableNode;
+	  this.offsets = tableNode._offsets;
+	  this.layout = tableNode._layout;
+
+	  availableWidth = writer.context().availableWidth - this.offsets.total;
+	  ColumnCalculator.buildColumnWidths(tableNode.table.widths, availableWidth);
+
+	  this.tableWidth = tableNode._offsets.total + getTableInnerContentWidth();
+	  this.rowSpanData = prepareRowSpanData();
+	  this.cleanUpRepeatables = false;
+
+	  this.headerRows = tableNode.table.headerRows || 0;
+	  this.rowsWithoutPageBreak = this.headerRows + (tableNode.table.keepWithHeaderRows || 0);
+	  this.dontBreakRows = tableNode.table.dontBreakRows || false;
+
+	  if (this.rowsWithoutPageBreak) {
+	    writer.beginUnbreakableBlock();
+	  }
+
+	  this.drawHorizontalLine(0, writer);
+
+	  function getTableInnerContentWidth() {
+	    var width = 0;
+
+	    tableNode.table.widths.forEach(function(w) {
+	      width += w._calcWidth;
+	    });
+
+	    return width;
+	  }
+
+	  function prepareRowSpanData() {
+	    var rsd = [];
+	    var x = 0;
+	    var lastWidth = 0;
+
+	    rsd.push({ left: 0, rowSpan: 0 });
+
+	    for(var i = 0, l = self.tableNode.table.body[0].length; i < l; i++) {
+	      var paddings = self.layout.paddingLeft(i, self.tableNode) + self.layout.paddingRight(i, self.tableNode);
+	      var lBorder = self.layout.vLineWidth(i, self.tableNode);
+	      lastWidth = paddings + lBorder + self.tableNode.table.widths[i]._calcWidth;
+	      rsd[rsd.length - 1].width = lastWidth;
+	      x += lastWidth;
+	      rsd.push({ left: x, rowSpan: 0, width: 0 });
+	    }
+
+	    return rsd;
+	  }
+	};
+
+	TableProcessor.prototype.onRowBreak = function(rowIndex, writer) {
+	  var self = this;
+	  return function() {
+	    //console.log('moving by : ', topLineWidth, rowPaddingTop);
+	    var offset = self.rowPaddingTop + (!self.headerRows ? self.topLineWidth : 0);
+	    writer.context().moveDown(offset);
+	  };
+
+	};
+
+	TableProcessor.prototype.beginRow = function(rowIndex, writer) {
+	  this.topLineWidth = this.layout.hLineWidth(rowIndex, this.tableNode);
+	  this.rowPaddingTop = this.layout.paddingTop(rowIndex, this.tableNode);
+	  this.bottomLineWidth = this.layout.hLineWidth(rowIndex+1, this.tableNode);
+	  this.rowPaddingBottom = this.layout.paddingBottom(rowIndex, this.tableNode);
+
+	  this.rowCallback = this.onRowBreak(rowIndex, writer);
+	  writer.tracker.startTracking('pageChanged', this.rowCallback );
+	    if(this.dontBreakRows) {
+	        writer.beginUnbreakableBlock();
+	    }
+	  this.rowTopY = writer.context().y;
+	  this.reservedAtBottom = this.bottomLineWidth + this.rowPaddingBottom;
+
+	  writer.context().availableHeight -= this.reservedAtBottom;
+
+	  writer.context().moveDown(this.rowPaddingTop);
+	};
+
+	TableProcessor.prototype.drawHorizontalLine = function(lineIndex, writer, overrideY) {
+	  var lineWidth = this.layout.hLineWidth(lineIndex, this.tableNode);
+	  if (lineWidth) {
+	    var offset = lineWidth / 2;
+	    var currentLine = null;
+
+	    for(var i = 0, l = this.rowSpanData.length; i < l; i++) {
+	      var data = this.rowSpanData[i];
+	      var shouldDrawLine = !data.rowSpan;
+
+	      if (!currentLine && shouldDrawLine) {
+	        currentLine = { left: data.left, width: 0 };
+	      }
+
+	      if (shouldDrawLine) {
+	        currentLine.width += (data.width || 0);
+	      }
+
+	      var y = (overrideY || 0) + offset;
+
+	      if (!shouldDrawLine || i === l - 1) {
+	        if (currentLine) {
+	          writer.addVector({
+	            type: 'line',
+	            x1: currentLine.left,
+	            x2: currentLine.left + currentLine.width,
+	            y1: y,
+	            y2: y,
+	            lineWidth: lineWidth,
+	            lineColor: typeof this.layout.hLineColor === 'function' ? this.layout.hLineColor(lineIndex, this.tableNode) : this.layout.hLineColor
+	          }, false, overrideY);
+	          currentLine = null;
+	        }
+	      }
+	    }
+
+	    writer.context().moveDown(lineWidth);
+	  }
+	};
+
+	TableProcessor.prototype.drawVerticalLine = function(x, y0, y1, vLineIndex, writer) {
+	  var width = this.layout.vLineWidth(vLineIndex, this.tableNode);
+	  if (width === 0) return;
+	  writer.addVector({
+	    type: 'line',
+	    x1: x + width/2,
+	    x2: x + width/2,
+	    y1: y0,
+	    y2: y1,
+	    lineWidth: width,
+	    lineColor: typeof this.layout.vLineColor === 'function' ? this.layout.vLineColor(vLineIndex, this.tableNode) : this.layout.vLineColor
+	  }, false, true);
+	};
+
+	TableProcessor.prototype.endTable = function(writer) {
+	  if (this.cleanUpRepeatables) {
+	    writer.popFromRepeatables();
+	  }
+	};
+
+	TableProcessor.prototype.endRow = function(rowIndex, writer, pageBreaks) {
+	    var l, i;
+	    var self = this;
+	    writer.tracker.stopTracking('pageChanged', this.rowCallback);
+	    writer.context().moveDown(this.layout.paddingBottom(rowIndex, this.tableNode));
+	    writer.context().availableHeight += this.reservedAtBottom;
+
+	    var endingPage = writer.context().page;
+	    var endingY = writer.context().y;
+
+	    var xs = getLineXs();
+
+	    var ys = [];
+
+	    var hasBreaks = pageBreaks && pageBreaks.length > 0;
+
+	    ys.push({
+	      y0: this.rowTopY,
+	      page: hasBreaks ? pageBreaks[0].prevPage : endingPage
+	    });
+
+	    if (hasBreaks) {
+	      for(i = 0, l = pageBreaks.length; i < l; i++) {
+	        var pageBreak = pageBreaks[i];
+	        ys[ys.length - 1].y1 = pageBreak.prevY;
+
+	        ys.push({y0: pageBreak.y, page: pageBreak.prevPage + 1});
+	      }
+	    }
+
+	    ys[ys.length - 1].y1 = endingY;
+
+	    var skipOrphanePadding = (ys[0].y1 - ys[0].y0 === this.rowPaddingTop);
+	    for(var yi = (skipOrphanePadding ? 1 : 0), yl = ys.length; yi < yl; yi++) {
+	      var willBreak = yi < ys.length - 1;
+	      var rowBreakWithoutHeader = (yi > 0 && !this.headerRows);
+	      var hzLineOffset =  rowBreakWithoutHeader ? 0 : this.topLineWidth;
+	      var y1 = ys[yi].y0;
+	      var y2 = ys[yi].y1;
+
+				if(willBreak) {
+					y2 = y2 + this.rowPaddingBottom;
+				}
+
+	      if (writer.context().page != ys[yi].page) {
+	        writer.context().page = ys[yi].page;
+
+	        //TODO: buggy, availableHeight should be updated on every pageChanged event
+	        // TableProcessor should be pageChanged listener, instead of processRow
+	        this.reservedAtBottom = 0;
+	      }
+
+	      for(i = 0, l = xs.length; i < l; i++) {
+	        this.drawVerticalLine(xs[i].x, y1 - hzLineOffset, y2 + this.bottomLineWidth, xs[i].index, writer);
+	        if(i < l-1) {
+	          var colIndex = xs[i].index;
+	          var fillColor=  this.tableNode.table.body[rowIndex][colIndex].fillColor;
+	          if(fillColor ) {
+	            var wBorder = this.layout.vLineWidth(colIndex, this.tableNode);
+	            var xf = xs[i].x+wBorder;
+	            var yf = y1 - hzLineOffset;
+	            writer.addVector({
+	              type: 'rect',
+	              x: xf,
+	              y: yf,
+	              w: xs[i+1].x-xf,
+	              h: y2+this.bottomLineWidth-yf,
+	              lineWidth: 0,
+	              color: fillColor
+	            }, false, true, 0);
+	          }
+	        }
+	      }
+
+	      if (willBreak && this.layout.hLineWhenBroken !== false) {
+	        this.drawHorizontalLine(rowIndex + 1, writer, y2);
+	      }
+	      if(rowBreakWithoutHeader && this.layout.hLineWhenBroken !== false) {
+	        this.drawHorizontalLine(rowIndex, writer, y1);
+	      }
+	    }
+
+	    writer.context().page = endingPage;
+	    writer.context().y = endingY;
+
+	    var row = this.tableNode.table.body[rowIndex];
+	    for(i = 0, l = row.length; i < l; i++) {
+	      if (row[i].rowSpan) {
+	        this.rowSpanData[i].rowSpan = row[i].rowSpan;
+
+	        // fix colSpans
+	        if (row[i].colSpan && row[i].colSpan > 1) {
+	          for(var j = 1; j < row[i].rowSpan; j++) {
+	            this.tableNode.table.body[rowIndex + j][i]._colSpan = row[i].colSpan;
+	          }
+	        }
+	      }
+
+	      if(this.rowSpanData[i].rowSpan > 0) {
+	        this.rowSpanData[i].rowSpan--;
+	      }
+	    }
+
+	    this.drawHorizontalLine(rowIndex + 1, writer);
+
+	    if(this.headerRows && rowIndex === this.headerRows - 1) {
+	      this.headerRepeatable = writer.currentBlockToRepeatable();
+	    }
+
+	    if(this.dontBreakRows) {
+	      writer.tracker.auto('pageChanged',
+	        function() {
+	          self.drawHorizontalLine(rowIndex, writer);
+	        },
+	        function() {
+	          writer.commitUnbreakableBlock();
+	          self.drawHorizontalLine(rowIndex, writer);
+	        }
+	      );
+	    }
+
+	    if(this.headerRepeatable && (rowIndex === (this.rowsWithoutPageBreak - 1) || rowIndex === this.tableNode.table.body.length - 1)) {
+	      writer.commitUnbreakableBlock();
+	      writer.pushToRepeatables(this.headerRepeatable);
+	      this.cleanUpRepeatables = true;
+	      this.headerRepeatable = null;
+	    }
+
+	    function getLineXs() {
+	      var result = [];
+	      var cols = 0;
+
+	      for(var i = 0, l = self.tableNode.table.body[rowIndex].length; i < l; i++) {
+	        if (!cols) {
+	          result.push({ x: self.rowSpanData[i].left, index: i});
+
+	          var item = self.tableNode.table.body[rowIndex][i];
+	          cols = (item._colSpan || item.colSpan || 0);
+	        }
+	        if (cols > 0) {
+	          cols--;
+	        }
+	      }
+
+	      result.push({ x: self.rowSpanData[self.rowSpanData.length - 1].left, index: self.rowSpanData.length - 1});
+
+	      return result;
+	    }
+	};
+
+	module.exports = TableProcessor;
+
+
+/***/ },
+/* 24 */
+/***/ function(module, exports, __webpack_require__) {
+
+	/* WEBPACK VAR INJECTION */(function(Buffer) {// Generated by CoffeeScript 1.7.1
+
+	/*
+	PDFDocument - represents an entire PDF document
+	By Devon Govett
+	 */
+
+	(function() {
+	  var PDFDocument, PDFObject, PDFPage, PDFReference, fs, stream,
+	    __hasProp = {}.hasOwnProperty,
+	    __extends = function(child, parent) { for (var key in parent) { if (__hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; };
+
+	  stream = __webpack_require__(25);
+
+	  fs = __webpack_require__(44);
+
+	  PDFObject = __webpack_require__(45);
+
+	  PDFReference = __webpack_require__(46);
+
+	  PDFPage = __webpack_require__(64);
+
+	  PDFDocument = (function(_super) {
+	    var mixin;
+
+	    __extends(PDFDocument, _super);
+
+	    function PDFDocument(options) {
+	      var key, val, _ref, _ref1;
+	      this.options = options != null ? options : {};
+	      PDFDocument.__super__.constructor.apply(this, arguments);
+	      this.version = 1.3;
+	      this.compress = (_ref = this.options.compress) != null ? _ref : true;
+	      this._pageBuffer = [];
+	      this._pageBufferStart = 0;
+	      this._offsets = [];
+	      this._waiting = 0;
+	      this._ended = false;
+	      this._offset = 0;
+	      this._root = this.ref({
+	        Type: 'Catalog',
+	        Pages: this.ref({
+	          Type: 'Pages',
+	          Count: 0,
+	          Kids: []
+	        })
+	      });
+	      this.page = null;
+	      this.initColor();
+	      this.initVector();
+	      this.initFonts();
+	      this.initText();
+	      this.initImages();
+	      this.info = {
+	        Producer: 'PDFKit',
+	        Creator: 'PDFKit',
+	        CreationDate: new Date()
+	      };
+	      if (this.options.info) {
+	        _ref1 = this.options.info;
+	        for (key in _ref1) {
+	          val = _ref1[key];
+	          this.info[key] = val;
+	        }
+	      }
+	      this._write("%PDF-" + this.version);
+	      this._write("%\xFF\xFF\xFF\xFF");
+	      this.addPage();
+	    }
+
+	    mixin = function(methods) {
+	      var method, name, _results;
+	      _results = [];
+	      for (name in methods) {
+	        method = methods[name];
+	        _results.push(PDFDocument.prototype[name] = method);
+	      }
+	      return _results;
+	    };
+
+	    mixin(__webpack_require__(65));
+
+	    mixin(__webpack_require__(67));
+
+	    mixin(__webpack_require__(69));
+
+	    mixin(__webpack_require__(89));
+
+	    mixin(__webpack_require__(96));
+
+	    mixin(__webpack_require__(101));
+
+	    PDFDocument.prototype.addPage = function(options) {
+	      var pages;
+	      if (options == null) {
+	        options = this.options;
+	      }
+	      if (!this.options.bufferPages) {
+	        this.flushPages();
+	      }
+	      this.page = new PDFPage(this, options);
+	      this._pageBuffer.push(this.page);
+	      pages = this._root.data.Pages.data;
+	      pages.Kids.push(this.page.dictionary);
+	      pages.Count++;
+	      this.x = this.page.margins.left;
+	      this.y = this.page.margins.top;
+	      this._ctm = [1, 0, 0, 1, 0, 0];
+	      this.transform(1, 0, 0, -1, 0, this.page.height);
+	      return this;
+	    };
+
+	    PDFDocument.prototype.bufferedPageRange = function() {
+	      return {
+	        start: this._pageBufferStart,
+	        count: this._pageBuffer.length
+	      };
+	    };
+
+	    PDFDocument.prototype.switchToPage = function(n) {
+	      var page;
+	      if (!(page = this._pageBuffer[n - this._pageBufferStart])) {
+	        throw new Error("switchToPage(" + n + ") out of bounds, current buffer covers pages " + this._pageBufferStart + " to " + (this._pageBufferStart + this._pageBuffer.length - 1));
+	      }
+	      return this.page = page;
+	    };
+
+	    PDFDocument.prototype.flushPages = function() {
+	      var page, pages, _i, _len;
+	      pages = this._pageBuffer;
+	      this._pageBuffer = [];
+	      this._pageBufferStart += pages.length;
+	      for (_i = 0, _len = pages.length; _i < _len; _i++) {
+	        page = pages[_i];
+	        page.end();
+	      }
+	    };
+
+	    PDFDocument.prototype.ref = function(data) {
+	      var ref;
+	      ref = new PDFReference(this, this._offsets.length + 1, data);
+	      this._offsets.push(null);
+	      this._waiting++;
+	      return ref;
+	    };
+
+	    PDFDocument.prototype._read = function() {};
+
+	    PDFDocument.prototype._write = function(data) {
+	      if (!Buffer.isBuffer(data)) {
+	        data = new Buffer(data + '\n', 'binary');
+	      }
+	      this.push(data);
+	      return this._offset += data.length;
+	    };
+
+	    PDFDocument.prototype.addContent = function(data) {
+	      this.page.write(data);
+	      return this;
+	    };
+
+	    PDFDocument.prototype._refEnd = function(ref) {
+	      this._offsets[ref.id - 1] = ref.offset;
+	      if (--this._waiting === 0 && this._ended) {
+	        this._finalize();
+	        return this._ended = false;
+	      }
+	    };
+
+	    PDFDocument.prototype.write = function(filename, fn) {
+	      var err;
+	      err = new Error('PDFDocument#write is deprecated, and will be removed in a future version of PDFKit. Please pipe the document into a Node stream.');
+	      console.warn(err.stack);
+	      this.pipe(fs.createWriteStream(filename));
+	      this.end();
+	      return this.once('end', fn);
+	    };
+
+	    PDFDocument.prototype.output = function(fn) {
+	      throw new Error('PDFDocument#output is deprecated, and has been removed from PDFKit. Please pipe the document into a Node stream.');
+	    };
+
+	    PDFDocument.prototype.end = function() {
+	      var font, key, name, val, _ref, _ref1;
+	      this.flushPages();
+	      this._info = this.ref();
+	      _ref = this.info;
+	      for (key in _ref) {
+	        val = _ref[key];
+	        if (typeof val === 'string') {
+	          val = new String(val);
+	        }
+	        this._info.data[key] = val;
+	      }
+	      this._info.end();
+	      _ref1 = this._fontFamilies;
+	      for (name in _ref1) {
+	        font = _ref1[name];
+	        font.embed();
+	      }
+	      this._root.end();
+	      this._root.data.Pages.end();
+	      if (this._waiting === 0) {
+	        return this._finalize();
+	      } else {
+	        return this._ended = true;
+	      }
+	    };
+
+	    PDFDocument.prototype._finalize = function(fn) {
+	      var offset, xRefOffset, _i, _len, _ref;
+	      xRefOffset = this._offset;
+	      this._write("xref");
+	      this._write("0 " + (this._offsets.length + 1));
+	      this._write("0000000000 65535 f ");
+	      _ref = this._offsets;
+	      for (_i = 0, _len = _ref.length; _i < _len; _i++) {
+	        offset = _ref[_i];
+	        offset = ('0000000000' + offset).slice(-10);
+	        this._write(offset + ' 00000 n ');
+	      }
+	      this._write('trailer');
+	      this._write(PDFObject.convert({
+	        Size: this._offsets.length + 1,
+	        Root: this._root,
+	        Info: this._info
+	      }));
+	      this._write('startxref');
+	      this._write("" + xRefOffset);
+	      this._write('%%EOF');
+	      return this.push(null);
+	    };
+
+	    PDFDocument.prototype.toString = function() {
+	      return "[object PDFDocument]";
+	    };
+
+	    return PDFDocument;
+
+	  })(stream.Readable);
+
+	  module.exports = PDFDocument;
+
+	}).call(this);
+
+	/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(2).Buffer))
+
+/***/ },
+/* 25 */
+/***/ function(module, exports, __webpack_require__) {
+
+	// Copyright Joyent, Inc. and other Node contributors.
+	//
+	// 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.
+
+	module.exports = Stream;
+
+	var EE = __webpack_require__(26).EventEmitter;
+	var inherits = __webpack_require__(27);
+
+	inherits(Stream, EE);
+	Stream.Readable = __webpack_require__(28);
+	Stream.Writable = __webpack_require__(40);
+	Stream.Duplex = __webpack_require__(41);
+	Stream.Transform = __webpack_require__(42);
+	Stream.PassThrough = __webpack_require__(43);
+
+	// Backwards-compat with node 0.4.x
+	Stream.Stream = Stream;
+
+
+
+	// old-style streams.  Note that the pipe method (the only relevant
+	// part of this class) is overridden in the Readable class.
+
+	function Stream() {
+	  EE.call(this);
+	}
+
+	Stream.prototype.pipe = function(dest, options) {
+	  var source = this;
+
+	  function ondata(chunk) {
+	    if (dest.writable) {
+	      if (false === dest.write(chunk) && source.pause) {
+	        source.pause();
+	      }
+	    }
+	  }
+
+	  source.on('data', ondata);
+
+	  function ondrain() {
+	    if (source.readable && source.resume) {
+	      source.resume();
+	    }
+	  }
+
+	  dest.on('drain', ondrain);
+
+	  // If the 'end' option is not supplied, dest.end() will be called when
+	  // source gets the 'end' or 'close' events.  Only dest.end() once.
+	  if (!dest._isStdio && (!options || options.end !== false)) {
+	    source.on('end', onend);
+	    source.on('close', onclose);
+	  }
+
+	  var didOnEnd = false;
+	  function onend() {
+	    if (didOnEnd) return;
+	    didOnEnd = true;
+
+	    dest.end();
+	  }
+
+
+	  function onclose() {
+	    if (didOnEnd) return;
+	    didOnEnd = true;
+
+	    if (typeof dest.destroy === 'function') dest.destroy();
+	  }
+
+	  // don't leave dangling pipes when there are errors.
+	  function onerror(er) {
+	    cleanup();
+	    if (EE.listenerCount(this, 'error') === 0) {
+	      throw er; // Unhandled stream error in pipe.
+	    }
+	  }
+
+	  source.on('error', onerror);
+	  dest.on('error', onerror);
+
+	  // remove all the event listeners that were added.
+	  function cleanup() {
+	    source.removeListener('data', ondata);
+	    dest.removeListener('drain', ondrain);
+
+	    source.removeListener('end', onend);
+	    source.removeListener('close', onclose);
+
+	    source.removeListener('error', onerror);
+	    dest.removeListener('error', onerror);
+
+	    source.removeListener('end', cleanup);
+	    source.removeListener('close', cleanup);
+
+	    dest.removeListener('close', cleanup);
+	  }
+
+	  source.on('end', cleanup);
+	  source.on('close', cleanup);
+
+	  dest.on('close', cleanup);
+
+	  dest.emit('pipe', source);
+
+	  // Allow for unix-like usage: A.pipe(B).pipe(C)
+	  return dest;
+	};
+
+
+/***/ },
+/* 26 */
+/***/ function(module, exports) {
+
+	// Copyright Joyent, Inc. and other Node contributors.
+	//
+	// 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.
+
+	function EventEmitter() {
+	  this._events = this._events || {};
+	  this._maxListeners = this._maxListeners || undefined;
+	}
+	module.exports = EventEmitter;
+
+	// Backwards-compat with node 0.10.x
+	EventEmitter.EventEmitter = EventEmitter;
+
+	EventEmitter.prototype._events = undefined;
+	EventEmitter.prototype._maxListeners = undefined;
+
+	// By default EventEmitters will print a warning if more than 10 listeners are
+	// added to it. This is a useful default which helps finding memory leaks.
+	EventEmitter.defaultMaxListeners = 10;
+
+	// Obviously not all Emitters should be limited to 10. This function allows
+	// that to be increased. Set to zero for unlimited.
+	EventEmitter.prototype.setMaxListeners = function(n) {
+	  if (!isNumber(n) || n < 0 || isNaN(n))
+	    throw TypeError('n must be a positive number');
+	  this._maxListeners = n;
+	  return this;
+	};
+
+	EventEmitter.prototype.emit = function(type) {
+	  var er, handler, len, args, i, listeners;
+
+	  if (!this._events)
+	    this._events = {};
+
+	  // If there is no 'error' event listener then throw.
+	  if (type === 'error') {
+	    if (!this._events.error ||
+	        (isObject(this._events.error) && !this._events.error.length)) {
+	      er = arguments[1];
+	      if (er instanceof Error) {
+	        throw er; // Unhandled 'error' event
+	      }
+	      throw TypeError('Uncaught, unspecified "error" event.');
+	    }
+	  }
+
+	  handler = this._events[type];
+
+	  if (isUndefined(handler))
+	    return false;
+
+	  if (isFunction(handler)) {
+	    switch (arguments.length) {
+	      // fast cases
+	      case 1:
+	        handler.call(this);
+	        break;
+	      case 2:
+	        handler.call(this, arguments[1]);
+	        break;
+	      case 3:
+	        handler.call(this, arguments[1], arguments[2]);
+	        break;
+	      // slower
+	      default:
+	        args = Array.prototype.slice.call(arguments, 1);
+	        handler.apply(this, args);
+	    }
+	  } else if (isObject(handler)) {
+	    args = Array.prototype.slice.call(arguments, 1);
+	    listeners = handler.slice();
+	    len = listeners.length;
+	    for (i = 0; i < len; i++)
+	      listeners[i].apply(this, args);
+	  }
+
+	  return true;
+	};
+
+	EventEmitter.prototype.addListener = function(type, listener) {
+	  var m;
+
+	  if (!isFunction(listener))
+	    throw TypeError('listener must be a function');
+
+	  if (!this._events)
+	    this._events = {};
+
+	  // To avoid recursion in the case that type === "newListener"! Before
+	  // adding it to the listeners, first emit "newListener".
+	  if (this._events.newListener)
+	    this.emit('newListener', type,
+	              isFunction(listener.listener) ?
+	              listener.listener : listener);
+
+	  if (!this._events[type])
+	    // Optimize the case of one listener. Don't need the extra array object.
+	    this._events[type] = listener;
+	  else if (isObject(this._events[type]))
+	    // If we've already got an array, just append.
+	    this._events[type].push(listener);
+	  else
+	    // Adding the second element, need to change to array.
+	    this._events[type] = [this._events[type], listener];
+
+	  // Check for listener leak
+	  if (isObject(this._events[type]) && !this._events[type].warned) {
+	    if (!isUndefined(this._maxListeners)) {
+	      m = this._maxListeners;
+	    } else {
+	      m = EventEmitter.defaultMaxListeners;
+	    }
+
+	    if (m && m > 0 && this._events[type].length > m) {
+	      this._events[type].warned = true;
+	      console.error('(node) warning: possible EventEmitter memory ' +
+	                    'leak detected. %d listeners added. ' +
+	                    'Use emitter.setMaxListeners() to increase limit.',
+	                    this._events[type].length);
+	      if (typeof console.trace === 'function') {
+	        // not supported in IE 10
+	        console.trace();
+	      }
+	    }
+	  }
+
+	  return this;
+	};
+
+	EventEmitter.prototype.on = EventEmitter.prototype.addListener;
+
+	EventEmitter.prototype.once = function(type, listener) {
+	  if (!isFunction(listener))
+	    throw TypeError('listener must be a function');
+
+	  var fired = false;
+
+	  function g() {
+	    this.removeListener(type, g);
+
+	    if (!fired) {
+	      fired = true;
+	      listener.apply(this, arguments);
+	    }
+	  }
+
+	  g.listener = listener;
+	  this.on(type, g);
+
+	  return this;
+	};
+
+	// emits a 'removeListener' event iff the listener was removed
+	EventEmitter.prototype.removeListener = function(type, listener) {
+	  var list, position, length, i;
+
+	  if (!isFunction(listener))
+	    throw TypeError('listener must be a function');
+
+	  if (!this._events || !this._events[type])
+	    return this;
+
+	  list = this._events[type];
+	  length = list.length;
+	  position = -1;
+
+	  if (list === listener ||
+	      (isFunction(list.listener) && list.listener === listener)) {
+	    delete this._events[type];
+	    if (this._events.removeListener)
+	      this.emit('removeListener', type, listener);
+
+	  } else if (isObject(list)) {
+	    for (i = length; i-- > 0;) {
+	      if (list[i] === listener ||
+	          (list[i].listener && list[i].listener === listener)) {
+	        position = i;
+	        break;
+	      }
+	    }
+
+	    if (position < 0)
+	      return this;
+
+	    if (list.length === 1) {
+	      list.length = 0;
+	      delete this._events[type];
+	    } else {
+	      list.splice(position, 1);
+	    }
+
+	    if (this._events.removeListener)
+	      this.emit('removeListener', type, listener);
+	  }
+
+	  return this;
+	};
+
+	EventEmitter.prototype.removeAllListeners = function(type) {
+	  var key, listeners;
+
+	  if (!this._events)
+	    return this;
+
+	  // not listening for removeListener, no need to emit
+	  if (!this._events.removeListener) {
+	    if (arguments.length === 0)
+	      this._events = {};
+	    else if (this._events[type])
+	      delete this._events[type];
+	    return this;
+	  }
+
+	  // emit removeListener for all listeners on all events
+	  if (arguments.length === 0) {
+	    for (key in this._events) {
+	      if (key === 'removeListener') continue;
+	      this.removeAllListeners(key);
+	    }
+	    this.removeAllListeners('removeListener');
+	    this._events = {};
+	    return this;
+	  }
+
+	  listeners = this._events[type];
+
+	  if (isFunction(listeners)) {
+	    this.removeListener(type, listeners);
+	  } else if (listeners) {
+	    // LIFO order
+	    while (listeners.length)
+	      this.removeListener(type, listeners[listeners.length - 1]);
+	  }
+	  delete this._events[type];
+
+	  return this;
+	};
+
+	EventEmitter.prototype.listeners = function(type) {
+	  var ret;
+	  if (!this._events || !this._events[type])
+	    ret = [];
+	  else if (isFunction(this._events[type]))
+	    ret = [this._events[type]];
+	  else
+	    ret = this._events[type].slice();
+	  return ret;
+	};
+
+	EventEmitter.prototype.listenerCount = function(type) {
+	  if (this._events) {
+	    var evlistener = this._events[type];
+
+	    if (isFunction(evlistener))
+	      return 1;
+	    else if (evlistener)
+	      return evlistener.length;
+	  }
+	  return 0;
+	};
+
+	EventEmitter.listenerCount = function(emitter, type) {
+	  return emitter.listenerCount(type);
+	};
+
+	function isFunction(arg) {
+	  return typeof arg === 'function';
+	}
+
+	function isNumber(arg) {
+	  return typeof arg === 'number';
+	}
+
+	function isObject(arg) {
+	  return typeof arg === 'object' && arg !== null;
+	}
+
+	function isUndefined(arg) {
+	  return arg === void 0;
+	}
+
+
+/***/ },
+/* 27 */
+/***/ function(module, exports) {
+
+	if (typeof Object.create === 'function') {
+	  // implementation from standard node.js 'util' module
+	  module.exports = function inherits(ctor, superCtor) {
+	    ctor.super_ = superCtor
+	    ctor.prototype = Object.create(superCtor.prototype, {
+	      constructor: {
+	        value: ctor,
+	        enumerable: false,
+	        writable: true,
+	        configurable: true
+	      }
+	    });
+	  };
+	} else {
+	  // old school shim for old browsers
+	  module.exports = function inherits(ctor, superCtor) {
+	    ctor.super_ = superCtor
+	    var TempCtor = function () {}
+	    TempCtor.prototype = superCtor.prototype
+	    ctor.prototype = new TempCtor()
+	    ctor.prototype.constructor = ctor
+	  }
+	}
+
+
+/***/ },
+/* 28 */
+/***/ function(module, exports, __webpack_require__) {
+
+	exports = module.exports = __webpack_require__(29);
+	exports.Stream = __webpack_require__(25);
+	exports.Readable = exports;
+	exports.Writable = __webpack_require__(36);
+	exports.Duplex = __webpack_require__(35);
+	exports.Transform = __webpack_require__(38);
+	exports.PassThrough = __webpack_require__(39);
+
+
+/***/ },
+/* 29 */
+/***/ function(module, exports, __webpack_require__) {
+
+	/* WEBPACK VAR INJECTION */(function(process) {// Copyright Joyent, Inc. and other Node contributors.
+	//
+	// 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.
+
+	module.exports = Readable;
+
+	/*<replacement>*/
+	var isArray = __webpack_require__(31);
+	/*</replacement>*/
+
+
+	/*<replacement>*/
+	var Buffer = __webpack_require__(2).Buffer;
+	/*</replacement>*/
+
+	Readable.ReadableState = ReadableState;
+
+	var EE = __webpack_require__(26).EventEmitter;
+
+	/*<replacement>*/
+	if (!EE.listenerCount) EE.listenerCount = function(emitter, type) {
+	  return emitter.listeners(type).length;
+	};
+	/*</replacement>*/
+
+	var Stream = __webpack_require__(25);
+
+	/*<replacement>*/
+	var util = __webpack_require__(32);
+	util.inherits = __webpack_require__(33);
+	/*</replacement>*/
+
+	var StringDecoder;
+
+
+	/*<replacement>*/
+	var debug = __webpack_require__(34);
+	if (debug && debug.debuglog) {
+	  debug = debug.debuglog('stream');
+	} else {
+	  debug = function () {};
+	}
+	/*</replacement>*/
+
+
+	util.inherits(Readable, Stream);
+
+	function ReadableState(options, stream) {
+	  var Duplex = __webpack_require__(35);
+
+	  options = options || {};
+
+	  // the point at which it stops calling _read() to fill the buffer
+	  // Note: 0 is a valid value, means "don't call _read preemptively ever"
+	  var hwm = options.highWaterMark;
+	  var defaultHwm = options.objectMode ? 16 : 16 * 1024;
+	  this.highWaterMark = (hwm || hwm === 0) ? hwm : defaultHwm;
+
+	  // cast to ints.
+	  this.highWaterMark = ~~this.highWaterMark;
+
+	  this.buffer = [];
+	  this.length = 0;
+	  this.pipes = null;
+	  this.pipesCount = 0;
+	  this.flowing = null;
+	  this.ended = false;
+	  this.endEmitted = false;
+	  this.reading = false;
+
+	  // a flag to be able to tell if the onwrite cb is called immediately,
+	  // or on a later tick.  We set this to true at first, because any
+	  // actions that shouldn't happen until "later" should generally also
+	  // not happen before the first write call.
+	  this.sync = true;
+
+	  // whenever we return null, then we set a flag to say
+	  // that we're awaiting a 'readable' event emission.
+	  this.needReadable = false;
+	  this.emittedReadable = false;
+	  this.readableListening = false;
+
+
+	  // object stream flag. Used to make read(n) ignore n and to
+	  // make all the buffer merging and length checks go away
+	  this.objectMode = !!options.objectMode;
+
+	  if (stream instanceof Duplex)
+	    this.objectMode = this.objectMode || !!options.readableObjectMode;
+
+	  // Crypto is kind of old and crusty.  Historically, its default string
+	  // encoding is 'binary' so we have to make this configurable.
+	  // Everything else in the universe uses 'utf8', though.
+	  this.defaultEncoding = options.defaultEncoding || 'utf8';
+
+	  // when piping, we only care about 'readable' events that happen
+	  // after read()ing all the bytes and not getting any pushback.
+	  this.ranOut = false;
+
+	  // the number of writers that are awaiting a drain event in .pipe()s
+	  this.awaitDrain = 0;
+
+	  // if true, a maybeReadMore has been scheduled
+	  this.readingMore = false;
+
+	  this.decoder = null;
+	  this.encoding = null;
+	  if (options.encoding) {
+	    if (!StringDecoder)
+	      StringDecoder = __webpack_require__(37).StringDecoder;
+	    this.decoder = new StringDecoder(options.encoding);
+	    this.encoding = options.encoding;
+	  }
+	}
+
+	function Readable(options) {
+	  var Duplex = __webpack_require__(35);
+
+	  if (!(this instanceof Readable))
+	    return new Readable(options);
+
+	  this._readableState = new ReadableState(options, this);
+
+	  // legacy
+	  this.readable = true;
+
+	  Stream.call(this);
+	}
+
+	// Manually shove something into the read() buffer.
+	// This returns true if the highWaterMark has not been hit yet,
+	// similar to how Writable.write() returns true if you should
+	// write() some more.
+	Readable.prototype.push = function(chunk, encoding) {
+	  var state = this._readableState;
+
+	  if (util.isString(chunk) && !state.objectMode) {
+	    encoding = encoding || state.defaultEncoding;
+	    if (encoding !== state.encoding) {
+	      chunk = new Buffer(chunk, encoding);
+	      encoding = '';
+	    }
+	  }
+
+	  return readableAddChunk(this, state, chunk, encoding, false);
+	};
+
+	// Unshift should *always* be something directly out of read()
+	Readable.prototype.unshift = function(chunk) {
+	  var state = this._readableState;
+	  return readableAddChunk(this, state, chunk, '', true);
+	};
+
+	function readableAddChunk(stream, state, chunk, encoding, addToFront) {
+	  var er = chunkInvalid(state, chunk);
+	  if (er) {
+	    stream.emit('error', er);
+	  } else if (util.isNullOrUndefined(chunk)) {
+	    state.reading = false;
+	    if (!state.ended)
+	      onEofChunk(stream, state);
+	  } else if (state.objectMode || chunk && chunk.length > 0) {
+	    if (state.ended && !addToFront) {
+	      var e = new Error('stream.push() after EOF');
+	      stream.emit('error', e);
+	    } else if (state.endEmitted && addToFront) {
+	      var e = new Error('stream.unshift() after end event');
+	      stream.emit('error', e);
+	    } else {
+	      if (state.decoder && !addToFront && !encoding)
+	        chunk = state.decoder.write(chunk);
+
+	      if (!addToFront)
+	        state.reading = false;
+
+	      // if we want the data now, just emit it.
+	      if (state.flowing && state.length === 0 && !state.sync) {
+	        stream.emit('data', chunk);
+	        stream.read(0);
+	      } else {
+	        // update the buffer info.
+	        state.length += state.objectMode ? 1 : chunk.length;
+	        if (addToFront)
+	          state.buffer.unshift(chunk);
+	        else
+	          state.buffer.push(chunk);
+
+	        if (state.needReadable)
+	          emitReadable(stream);
+	      }
+
+	      maybeReadMore(stream, state);
+	    }
+	  } else if (!addToFront) {
+	    state.reading = false;
+	  }
+
+	  return needMoreData(state);
+	}
+
+
+
+	// if it's past the high water mark, we can push in some more.
+	// Also, if we have no data yet, we can stand some
+	// more bytes.  This is to work around cases where hwm=0,
+	// such as the repl.  Also, if the push() triggered a
+	// readable event, and the user called read(largeNumber) such that
+	// needReadable was set, then we ought to push more, so that another
+	// 'readable' event will be triggered.
+	function needMoreData(state) {
+	  return !state.ended &&
+	         (state.needReadable ||
+	          state.length < state.highWaterMark ||
+	          state.length === 0);
+	}
+
+	// backwards compatibility.
+	Readable.prototype.setEncoding = function(enc) {
+	  if (!StringDecoder)
+	    StringDecoder = __webpack_require__(37).StringDecoder;
+	  this._readableState.decoder = new StringDecoder(enc);
+	  this._readableState.encoding = enc;
+	  return this;
+	};
+
+	// Don't raise the hwm > 128MB
+	var MAX_HWM = 0x800000;
+	function roundUpToNextPowerOf2(n) {
+	  if (n >= MAX_HWM) {
+	    n = MAX_HWM;
+	  } else {
+	    // Get the next highest power of 2
+	    n--;
+	    for (var p = 1; p < 32; p <<= 1) n |= n >> p;
+	    n++;
+	  }
+	  return n;
+	}
+
+	function howMuchToRead(n, state) {
+	  if (state.length === 0 && state.ended)
+	    return 0;
+
+	  if (state.objectMode)
+	    return n === 0 ? 0 : 1;
+
+	  if (isNaN(n) || util.isNull(n)) {
+	    // only flow one buffer at a time
+	    if (state.flowing && state.buffer.length)
+	      return state.buffer[0].length;
+	    else
+	      return state.length;
+	  }
+
+	  if (n <= 0)
+	    return 0;
+
+	  // If we're asking for more than the target buffer level,
+	  // then raise the water mark.  Bump up to the next highest
+	  // power of 2, to prevent increasing it excessively in tiny
+	  // amounts.
+	  if (n > state.highWaterMark)
+	    state.highWaterMark = roundUpToNextPowerOf2(n);
+
+	  // don't have that much.  return null, unless we've ended.
+	  if (n > state.length) {
+	    if (!state.ended) {
+	      state.needReadable = true;
+	      return 0;
+	    } else
+	      return state.length;
+	  }
+
+	  return n;
+	}
+
+	// you can override either this method, or the async _read(n) below.
+	Readable.prototype.read = function(n) {
+	  debug('read', n);
+	  var state = this._readableState;
+	  var nOrig = n;
+
+	  if (!util.isNumber(n) || n > 0)
+	    state.emittedReadable = false;
+
+	  // if we're doing read(0) to trigger a readable event, but we
+	  // already have a bunch of data in the buffer, then just trigger
+	  // the 'readable' event and move on.
+	  if (n === 0 &&
+	      state.needReadable &&
+	      (state.length >= state.highWaterMark || state.ended)) {
+	    debug('read: emitReadable', state.length, state.ended);
+	    if (state.length === 0 && state.ended)
+	      endReadable(this);
+	    else
+	      emitReadable(this);
+	    return null;
+	  }
+
+	  n = howMuchToRead(n, state);
+
+	  // if we've ended, and we're now clear, then finish it up.
+	  if (n === 0 && state.ended) {
+	    if (state.length === 0)
+	      endReadable(this);
+	    return null;
+	  }
+
+	  // All the actual chunk generation logic needs to be
+	  // *below* the call to _read.  The reason is that in certain
+	  // synthetic stream cases, such as passthrough streams, _read
+	  // may be a completely synchronous operation which may change
+	  // the state of the read buffer, providing enough data when
+	  // before there was *not* enough.
+	  //
+	  // So, the steps are:
+	  // 1. Figure out what the state of things will be after we do
+	  // a read from the buffer.
+	  //
+	  // 2. If that resulting state will trigger a _read, then call _read.
+	  // Note that this may be asynchronous, or synchronous.  Yes, it is
+	  // deeply ugly to write APIs this way, but that still doesn't mean
+	  // that the Readable class should behave improperly, as streams are
+	  // designed to be sync/async agnostic.
+	  // Take note if the _read call is sync or async (ie, if the read call
+	  // has returned yet), so that we know whether or not it's safe to emit
+	  // 'readable' etc.
+	  //
+	  // 3. Actually pull the requested chunks out of the buffer and return.
+
+	  // if we need a readable event, then we need to do some reading.
+	  var doRead = state.needReadable;
+	  debug('need readable', doRead);
+
+	  // if we currently have less than the highWaterMark, then also read some
+	  if (state.length === 0 || state.length - n < state.highWaterMark) {
+	    doRead = true;
+	    debug('length less than watermark', doRead);
+	  }
+
+	  // however, if we've ended, then there's no point, and if we're already
+	  // reading, then it's unnecessary.
+	  if (state.ended || state.reading) {
+	    doRead = false;
+	    debug('reading or ended', doRead);
+	  }
+
+	  if (doRead) {
+	    debug('do read');
+	    state.reading = true;
+	    state.sync = true;
+	    // if the length is currently zero, then we *need* a readable event.
+	    if (state.length === 0)
+	      state.needReadable = true;
+	    // call internal read method
+	    this._read(state.highWaterMark);
+	    state.sync = false;
+	  }
+
+	  // If _read pushed data synchronously, then `reading` will be false,
+	  // and we need to re-evaluate how much data we can return to the user.
+	  if (doRead && !state.reading)
+	    n = howMuchToRead(nOrig, state);
+
+	  var ret;
+	  if (n > 0)
+	    ret = fromList(n, state);
+	  else
+	    ret = null;
+
+	  if (util.isNull(ret)) {
+	    state.needReadable = true;
+	    n = 0;
+	  }
+
+	  state.length -= n;
+
+	  // If we have nothing in the buffer, then we want to know
+	  // as soon as we *do* get something into the buffer.
+	  if (state.length === 0 && !state.ended)
+	    state.needReadable = true;
+
+	  // If we tried to read() past the EOF, then emit end on the next tick.
+	  if (nOrig !== n && state.ended && state.length === 0)
+	    endReadable(this);
+
+	  if (!util.isNull(ret))
+	    this.emit('data', ret);
+
+	  return ret;
+	};
+
+	function chunkInvalid(state, chunk) {
+	  var er = null;
+	  if (!util.isBuffer(chunk) &&
+	      !util.isString(chunk) &&
+	      !util.isNullOrUndefined(chunk) &&
+	      !state.objectMode) {
+	    er = new TypeError('Invalid non-string/buffer chunk');
+	  }
+	  return er;
+	}
+
+
+	function onEofChunk(stream, state) {
+	  if (state.decoder && !state.ended) {
+	    var chunk = state.decoder.end();
+	    if (chunk && chunk.length) {
+	      state.buffer.push(chunk);
+	      state.length += state.objectMode ? 1 : chunk.length;
+	    }
+	  }
+	  state.ended = true;
+
+	  // emit 'readable' now to make sure it gets picked up.
+	  emitReadable(stream);
+	}
+
+	// Don't emit readable right away in sync mode, because this can trigger
+	// another read() call => stack overflow.  This way, it might trigger
+	// a nextTick recursion warning, but that's not so bad.
+	function emitReadable(stream) {
+	  var state = stream._readableState;
+	  state.needReadable = false;
+	  if (!state.emittedReadable) {
+	    debug('emitReadable', state.flowing);
+	    state.emittedReadable = true;
+	    if (state.sync)
+	      process.nextTick(function() {
+	        emitReadable_(stream);
+	      });
+	    else
+	      emitReadable_(stream);
+	  }
+	}
+
+	function emitReadable_(stream) {
+	  debug('emit readable');
+	  stream.emit('readable');
+	  flow(stream);
+	}
+
+
+	// at this point, the user has presumably seen the 'readable' event,
+	// and called read() to consume some data.  that may have triggered
+	// in turn another _read(n) call, in which case reading = true if
+	// it's in progress.
+	// However, if we're not ended, or reading, and the length < hwm,
+	// then go ahead and try to read some more preemptively.
+	function maybeReadMore(stream, state) {
+	  if (!state.readingMore) {
+	    state.readingMore = true;
+	    process.nextTick(function() {
+	      maybeReadMore_(stream, state);
+	    });
+	  }
+	}
+
+	function maybeReadMore_(stream, state) {
+	  var len = state.length;
+	  while (!state.reading && !state.flowing && !state.ended &&
+	         state.length < state.highWaterMark) {
+	    debug('maybeReadMore read 0');
+	    stream.read(0);
+	    if (len === state.length)
+	      // didn't get any data, stop spinning.
+	      break;
+	    else
+	      len = state.length;
+	  }
+	  state.readingMore = false;
+	}
+
+	// abstract method.  to be overridden in specific implementation classes.
+	// call cb(er, data) where data is <= n in length.
+	// for virtual (non-string, non-buffer) streams, "length" is somewhat
+	// arbitrary, and perhaps not very meaningful.
+	Readable.prototype._read = function(n) {
+	  this.emit('error', new Error('not implemented'));
+	};
+
+	Readable.prototype.pipe = function(dest, pipeOpts) {
+	  var src = this;
+	  var state = this._readableState;
+
+	  switch (state.pipesCount) {
+	    case 0:
+	      state.pipes = dest;
+	      break;
+	    case 1:
+	      state.pipes = [state.pipes, dest];
+	      break;
+	    default:
+	      state.pipes.push(dest);
+	      break;
+	  }
+	  state.pipesCount += 1;
+	  debug('pipe count=%d opts=%j', state.pipesCount, pipeOpts);
+
+	  var doEnd = (!pipeOpts || pipeOpts.end !== false) &&
+	              dest !== process.stdout &&
+	              dest !== process.stderr;
+
+	  var endFn = doEnd ? onend : cleanup;
+	  if (state.endEmitted)
+	    process.nextTick(endFn);
+	  else
+	    src.once('end', endFn);
+
+	  dest.on('unpipe', onunpipe);
+	  function onunpipe(readable) {
+	    debug('onunpipe');
+	    if (readable === src) {
+	      cleanup();
+	    }
+	  }
+
+	  function onend() {
+	    debug('onend');
+	    dest.end();
+	  }
+
+	  // when the dest drains, it reduces the awaitDrain counter
+	  // on the source.  This would be more elegant with a .once()
+	  // handler in flow(), but adding and removing repeatedly is
+	  // too slow.
+	  var ondrain = pipeOnDrain(src);
+	  dest.on('drain', ondrain);
+
+	  function cleanup() {
+	    debug('cleanup');
+	    // cleanup event handlers once the pipe is broken
+	    dest.removeListener('close', onclose);
+	    dest.removeListener('finish', onfinish);
+	    dest.removeListener('drain', ondrain);
+	    dest.removeListener('error', onerror);
+	    dest.removeListener('unpipe', onunpipe);
+	    src.removeListener('end', onend);
+	    src.removeListener('end', cleanup);
+	    src.removeListener('data', ondata);
+
+	    // if the reader is waiting for a drain event from this
+	    // specific writer, then it would cause it to never start
+	    // flowing again.
+	    // So, if this is awaiting a drain, then we just call it now.
+	    // If we don't know, then assume that we are waiting for one.
+	    if (state.awaitDrain &&
+	        (!dest._writableState || dest._writableState.needDrain))
+	      ondrain();
+	  }
+
+	  src.on('data', ondata);
+	  function ondata(chunk) {
+	    debug('ondata');
+	    var ret = dest.write(chunk);
+	    if (false === ret) {
+	      debug('false write response, pause',
+	            src._readableState.awaitDrain);
+	      src._readableState.awaitDrain++;
+	      src.pause();
+	    }
+	  }
+
+	  // if the dest has an error, then stop piping into it.
+	  // however, don't suppress the throwing behavior for this.
+	  function onerror(er) {
+	    debug('onerror', er);
+	    unpipe();
+	    dest.removeListener('error', onerror);
+	    if (EE.listenerCount(dest, 'error') === 0)
+	      dest.emit('error', er);
+	  }
+	  // This is a brutally ugly hack to make sure that our error handler
+	  // is attached before any userland ones.  NEVER DO THIS.
+	  if (!dest._events || !dest._events.error)
+	    dest.on('error', onerror);
+	  else if (isArray(dest._events.error))
+	    dest._events.error.unshift(onerror);
+	  else
+	    dest._events.error = [onerror, dest._events.error];
+
+
+
+	  // Both close and finish should trigger unpipe, but only once.
+	  function onclose() {
+	    dest.removeListener('finish', onfinish);
+	    unpipe();
+	  }
+	  dest.once('close', onclose);
+	  function onfinish() {
+	    debug('onfinish');
+	    dest.removeListener('close', onclose);
+	    unpipe();
+	  }
+	  dest.once('finish', onfinish);
+
+	  function unpipe() {
+	    debug('unpipe');
+	    src.unpipe(dest);
+	  }
+
+	  // tell the dest that it's being piped to
+	  dest.emit('pipe', src);
+
+	  // start the flow if it hasn't been started already.
+	  if (!state.flowing) {
+	    debug('pipe resume');
+	    src.resume();
+	  }
+
+	  return dest;
+	};
+
+	function pipeOnDrain(src) {
+	  return function() {
+	    var state = src._readableState;
+	    debug('pipeOnDrain', state.awaitDrain);
+	    if (state.awaitDrain)
+	      state.awaitDrain--;
+	    if (state.awaitDrain === 0 && EE.listenerCount(src, 'data')) {
+	      state.flowing = true;
+	      flow(src);
+	    }
+	  };
+	}
+
+
+	Readable.prototype.unpipe = function(dest) {
+	  var state = this._readableState;
+
+	  // if we're not piping anywhere, then do nothing.
+	  if (state.pipesCount === 0)
+	    return this;
+
+	  // just one destination.  most common case.
+	  if (state.pipesCount === 1) {
+	    // passed in one, but it's not the right one.
+	    if (dest && dest !== state.pipes)
+	      return this;
+
+	    if (!dest)
+	      dest = state.pipes;
+
+	    // got a match.
+	    state.pipes = null;
+	    state.pipesCount = 0;
+	    state.flowing = false;
+	    if (dest)
+	      dest.emit('unpipe', this);
+	    return this;
+	  }
+
+	  // slow case. multiple pipe destinations.
+
+	  if (!dest) {
+	    // remove all.
+	    var dests = state.pipes;
+	    var len = state.pipesCount;
+	    state.pipes = null;
+	    state.pipesCount = 0;
+	    state.flowing = false;
+
+	    for (var i = 0; i < len; i++)
+	      dests[i].emit('unpipe', this);
+	    return this;
+	  }
+
+	  // try to find the right one.
+	  var i = indexOf(state.pipes, dest);
+	  if (i === -1)
+	    return this;
+
+	  state.pipes.splice(i, 1);
+	  state.pipesCount -= 1;
+	  if (state.pipesCount === 1)
+	    state.pipes = state.pipes[0];
+
+	  dest.emit('unpipe', this);
+
+	  return this;
+	};
+
+	// set up data events if they are asked for
+	// Ensure readable listeners eventually get something
+	Readable.prototype.on = function(ev, fn) {
+	  var res = Stream.prototype.on.call(this, ev, fn);
+
+	  // If listening to data, and it has not explicitly been paused,
+	  // then call resume to start the flow of data on the next tick.
+	  if (ev === 'data' && false !== this._readableState.flowing) {
+	    this.resume();
+	  }
+
+	  if (ev === 'readable' && this.readable) {
+	    var state = this._readableState;
+	    if (!state.readableListening) {
+	      state.readableListening = true;
+	      state.emittedReadable = false;
+	      state.needReadable = true;
+	      if (!state.reading) {
+	        var self = this;
+	        process.nextTick(function() {
+	          debug('readable nexttick read 0');
+	          self.read(0);
+	        });
+	      } else if (state.length) {
+	        emitReadable(this, state);
+	      }
+	    }
+	  }
+
+	  return res;
+	};
+	Readable.prototype.addListener = Readable.prototype.on;
+
+	// pause() and resume() are remnants of the legacy readable stream API
+	// If the user uses them, then switch into old mode.
+	Readable.prototype.resume = function() {
+	  var state = this._readableState;
+	  if (!state.flowing) {
+	    debug('resume');
+	    state.flowing = true;
+	    if (!state.reading) {
+	      debug('resume read 0');
+	      this.read(0);
+	    }
+	    resume(this, state);
+	  }
+	  return this;
+	};
+
+	function resume(stream, state) {
+	  if (!state.resumeScheduled) {
+	    state.resumeScheduled = true;
+	    process.nextTick(function() {
+	      resume_(stream, state);
+	    });
+	  }
+	}
+
+	function resume_(stream, state) {
+	  state.resumeScheduled = false;
+	  stream.emit('resume');
+	  flow(stream);
+	  if (state.flowing && !state.reading)
+	    stream.read(0);
+	}
+
+	Readable.prototype.pause = function() {
+	  debug('call pause flowing=%j', this._readableState.flowing);
+	  if (false !== this._readableState.flowing) {
+	    debug('pause');
+	    this._readableState.flowing = false;
+	    this.emit('pause');
+	  }
+	  return this;
+	};
+
+	function flow(stream) {
+	  var state = stream._readableState;
+	  debug('flow', state.flowing);
+	  if (state.flowing) {
+	    do {
+	      var chunk = stream.read();
+	    } while (null !== chunk && state.flowing);
+	  }
+	}
+
+	// wrap an old-style stream as the async data source.
+	// This is *not* part of the readable stream interface.
+	// It is an ugly unfortunate mess of history.
+	Readable.prototype.wrap = function(stream) {
+	  var state = this._readableState;
+	  var paused = false;
+
+	  var self = this;
+	  stream.on('end', function() {
+	    debug('wrapped end');
+	    if (state.decoder && !state.ended) {
+	      var chunk = state.decoder.end();
+	      if (chunk && chunk.length)
+	        self.push(chunk);
+	    }
+
+	    self.push(null);
+	  });
+
+	  stream.on('data', function(chunk) {
+	    debug('wrapped data');
+	    if (state.decoder)
+	      chunk = state.decoder.write(chunk);
+	    if (!chunk || !state.objectMode && !chunk.length)
+	      return;
+
+	    var ret = self.push(chunk);
+	    if (!ret) {
+	      paused = true;
+	      stream.pause();
+	    }
+	  });
+
+	  // proxy all the other methods.
+	  // important when wrapping filters and duplexes.
+	  for (var i in stream) {
+	    if (util.isFunction(stream[i]) && util.isUndefined(this[i])) {
+	      this[i] = function(method) { return function() {
+	        return stream[method].apply(stream, arguments);
+	      }}(i);
+	    }
+	  }
+
+	  // proxy certain important events.
+	  var events = ['error', 'close', 'destroy', 'pause', 'resume'];
+	  forEach(events, function(ev) {
+	    stream.on(ev, self.emit.bind(self, ev));
+	  });
+
+	  // when we try to consume some more bytes, simply unpause the
+	  // underlying stream.
+	  self._read = function(n) {
+	    debug('wrapped _read', n);
+	    if (paused) {
+	      paused = false;
+	      stream.resume();
+	    }
+	  };
+
+	  return self;
+	};
+
+
+
+	// exposed for testing purposes only.
+	Readable._fromList = fromList;
+
+	// Pluck off n bytes from an array of buffers.
+	// Length is the combined lengths of all the buffers in the list.
+	function fromList(n, state) {
+	  var list = state.buffer;
+	  var length = state.length;
+	  var stringMode = !!state.decoder;
+	  var objectMode = !!state.objectMode;
+	  var ret;
+
+	  // nothing in the list, definitely empty.
+	  if (list.length === 0)
+	    return null;
+
+	  if (length === 0)
+	    ret = null;
+	  else if (objectMode)
+	    ret = list.shift();
+	  else if (!n || n >= length) {
+	    // read it all, truncate the array.
+	    if (stringMode)
+	      ret = list.join('');
+	    else
+	      ret = Buffer.concat(list, length);
+	    list.length = 0;
+	  } else {
+	    // read just some of it.
+	    if (n < list[0].length) {
+	      // just take a part of the first list item.
+	      // slice is the same for buffers and strings.
+	      var buf = list[0];
+	      ret = buf.slice(0, n);
+	      list[0] = buf.slice(n);
+	    } else if (n === list[0].length) {
+	      // first list is a perfect match
+	      ret = list.shift();
+	    } else {
+	      // complex case.
+	      // we have enough to cover it, but it spans past the first buffer.
+	      if (stringMode)
+	        ret = '';
+	      else
+	        ret = new Buffer(n);
+
+	      var c = 0;
+	      for (var i = 0, l = list.length; i < l && c < n; i++) {
+	        var buf = list[0];
+	        var cpy = Math.min(n - c, buf.length);
+
+	        if (stringMode)
+	          ret += buf.slice(0, cpy);
+	        else
+	          buf.copy(ret, c, 0, cpy);
+
+	        if (cpy < buf.length)
+	          list[0] = buf.slice(cpy);
+	        else
+	          list.shift();
+
+	        c += cpy;
+	      }
+	    }
+	  }
+
+	  return ret;
+	}
+
+	function endReadable(stream) {
+	  var state = stream._readableState;
+
+	  // If we get here before consuming all the bytes, then that is a
+	  // bug in node.  Should never happen.
+	  if (state.length > 0)
+	    throw new Error('endReadable called on non-empty stream');
+
+	  if (!state.endEmitted) {
+	    state.ended = true;
+	    process.nextTick(function() {
+	      // Check that we didn't get one last unshift.
+	      if (!state.endEmitted && state.length === 0) {
+	        state.endEmitted = true;
+	        stream.readable = false;
+	        stream.emit('end');
+	      }
+	    });
+	  }
+	}
+
+	function forEach (xs, f) {
+	  for (var i = 0, l = xs.length; i < l; i++) {
+	    f(xs[i], i);
+	  }
+	}
+
+	function indexOf (xs, x) {
+	  for (var i = 0, l = xs.length; i < l; i++) {
+	    if (xs[i] === x) return i;
+	  }
+	  return -1;
+	}
+
+	/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(30)))
+
+/***/ },
+/* 30 */
+/***/ function(module, exports) {
+
+	// shim for using process in browser
+
+	var process = module.exports = {};
+	var queue = [];
+	var draining = false;
+	var currentQueue;
+	var queueIndex = -1;
+
+	function cleanUpNextTick() {
+	    draining = false;
+	    if (currentQueue.length) {
+	        queue = currentQueue.concat(queue);
+	    } else {
+	        queueIndex = -1;
+	    }
+	    if (queue.length) {
+	        drainQueue();
+	    }
+	}
+
+	function drainQueue() {
+	    if (draining) {
+	        return;
+	    }
+	    var timeout = setTimeout(cleanUpNextTick);
+	    draining = true;
+
+	    var len = queue.length;
+	    while(len) {
+	        currentQueue = queue;
+	        queue = [];
+	        while (++queueIndex < len) {
+	            if (currentQueue) {
+	                currentQueue[queueIndex].run();
+	            }
+	        }
+	        queueIndex = -1;
+	        len = queue.length;
+	    }
+	    currentQueue = null;
+	    draining = false;
+	    clearTimeout(timeout);
+	}
+
+	process.nextTick = function (fun) {
+	    var args = new Array(arguments.length - 1);
+	    if (arguments.length > 1) {
+	        for (var i = 1; i < arguments.length; i++) {
+	            args[i - 1] = arguments[i];
+	        }
+	    }
+	    queue.push(new Item(fun, args));
+	    if (queue.length === 1 && !draining) {
+	        setTimeout(drainQueue, 0);
+	    }
+	};
+
+	// v8 likes predictible objects
+	function Item(fun, array) {
+	    this.fun = fun;
+	    this.array = array;
+	}
+	Item.prototype.run = function () {
+	    this.fun.apply(null, this.array);
+	};
+	process.title = 'browser';
+	process.browser = true;
+	process.env = {};
+	process.argv = [];
+	process.version = ''; // empty string to avoid regexp issues
+	process.versions = {};
+
+	function noop() {}
+
+	process.on = noop;
+	process.addListener = noop;
+	process.once = noop;
+	process.off = noop;
+	process.removeListener = noop;
+	process.removeAllListeners = noop;
+	process.emit = noop;
+
+	process.binding = function (name) {
+	    throw new Error('process.binding is not supported');
+	};
+
+	process.cwd = function () { return '/' };
+	process.chdir = function (dir) {
+	    throw new Error('process.chdir is not supported');
+	};
+	process.umask = function() { return 0; };
+
+
+/***/ },
+/* 31 */
+/***/ function(module, exports) {
+
+	module.exports = Array.isArray || function (arr) {
+	  return Object.prototype.toString.call(arr) == '[object Array]';
+	};
+
+
+/***/ },
+/* 32 */
+/***/ function(module, exports, __webpack_require__) {
+
+	/* WEBPACK VAR INJECTION */(function(Buffer) {// Copyright Joyent, Inc. and other Node contributors.
+	//
+	// 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.
+
+	// NOTE: These type checking functions intentionally don't use `instanceof`
+	// because it is fragile and can be easily faked with `Object.create()`.
+	function isArray(ar) {
+	  return Array.isArray(ar);
+	}
+	exports.isArray = isArray;
+
+	function isBoolean(arg) {
+	  return typeof arg === 'boolean';
+	}
+	exports.isBoolean = isBoolean;
+
+	function isNull(arg) {
+	  return arg === null;
+	}
+	exports.isNull = isNull;
+
+	function isNullOrUndefined(arg) {
+	  return arg == null;
+	}
+	exports.isNullOrUndefined = isNullOrUndefined;
+
+	function isNumber(arg) {
+	  return typeof arg === 'number';
+	}
+	exports.isNumber = isNumber;
+
+	function isString(arg) {
+	  return typeof arg === 'string';
+	}
+	exports.isString = isString;
+
+	function isSymbol(arg) {
+	  return typeof arg === 'symbol';
+	}
+	exports.isSymbol = isSymbol;
+
+	function isUndefined(arg) {
+	  return arg === void 0;
+	}
+	exports.isUndefined = isUndefined;
+
+	function isRegExp(re) {
+	  return isObject(re) && objectToString(re) === '[object RegExp]';
+	}
+	exports.isRegExp = isRegExp;
+
+	function isObject(arg) {
+	  return typeof arg === 'object' && arg !== null;
+	}
+	exports.isObject = isObject;
+
+	function isDate(d) {
+	  return isObject(d) && objectToString(d) === '[object Date]';
+	}
+	exports.isDate = isDate;
+
+	function isError(e) {
+	  return isObject(e) &&
+	      (objectToString(e) === '[object Error]' || e instanceof Error);
+	}
+	exports.isError = isError;
+
+	function isFunction(arg) {
+	  return typeof arg === 'function';
+	}
+	exports.isFunction = isFunction;
+
+	function isPrimitive(arg) {
+	  return arg === null ||
+	         typeof arg === 'boolean' ||
+	         typeof arg === 'number' ||
+	         typeof arg === 'string' ||
+	         typeof arg === 'symbol' ||  // ES6 symbol
+	         typeof arg === 'undefined';
+	}
+	exports.isPrimitive = isPrimitive;
+
+	function isBuffer(arg) {
+	  return Buffer.isBuffer(arg);
+	}
+	exports.isBuffer = isBuffer;
+
+	function objectToString(o) {
+	  return Object.prototype.toString.call(o);
+	}
+	/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(2).Buffer))
+
+/***/ },
+/* 33 */
+/***/ function(module, exports) {
+
+	if (typeof Object.create === 'function') {
+	  // implementation from standard node.js 'util' module
+	  module.exports = function inherits(ctor, superCtor) {
+	    ctor.super_ = superCtor
+	    ctor.prototype = Object.create(superCtor.prototype, {
+	      constructor: {
+	        value: ctor,
+	        enumerable: false,
+	        writable: true,
+	        configurable: true
+	      }
+	    });
+	  };
+	} else {
+	  // old school shim for old browsers
+	  module.exports = function inherits(ctor, superCtor) {
+	    ctor.super_ = superCtor
+	    var TempCtor = function () {}
+	    TempCtor.prototype = superCtor.prototype
+	    ctor.prototype = new TempCtor()
+	    ctor.prototype.constructor = ctor
+	  }
+	}
+
+
+/***/ },
+/* 34 */
+/***/ function(module, exports) {
+
+	/* (ignored) */
+
+/***/ },
+/* 35 */
+/***/ function(module, exports, __webpack_require__) {
+
+	/* WEBPACK VAR INJECTION */(function(process) {// Copyright Joyent, Inc. and other Node contributors.
+	//
+	// 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.
+
+	// a duplex stream is just a stream that is both readable and writable.
+	// Since JS doesn't have multiple prototypal inheritance, this class
+	// prototypally inherits from Readable, and then parasitically from
+	// Writable.
+
+	module.exports = Duplex;
+
+	/*<replacement>*/
+	var objectKeys = Object.keys || function (obj) {
+	  var keys = [];
+	  for (var key in obj) keys.push(key);
+	  return keys;
+	}
+	/*</replacement>*/
+
+
+	/*<replacement>*/
+	var util = __webpack_require__(32);
+	util.inherits = __webpack_require__(33);
+	/*</replacement>*/
+
+	var Readable = __webpack_require__(29);
+	var Writable = __webpack_require__(36);
+
+	util.inherits(Duplex, Readable);
+
+	forEach(objectKeys(Writable.prototype), function(method) {
+	  if (!Duplex.prototype[method])
+	    Duplex.prototype[method] = Writable.prototype[method];
+	});
+
+	function Duplex(options) {
+	  if (!(this instanceof Duplex))
+	    return new Duplex(options);
+
+	  Readable.call(this, options);
+	  Writable.call(this, options);
+
+	  if (options && options.readable === false)
+	    this.readable = false;
+
+	  if (options && options.writable === false)
+	    this.writable = false;
+
+	  this.allowHalfOpen = true;
+	  if (options && options.allowHalfOpen === false)
+	    this.allowHalfOpen = false;
+
+	  this.once('end', onend);
+	}
+
+	// the no-half-open enforcer
+	function onend() {
+	  // if we allow half-open state, or if the writable side ended,
+	  // then we're ok.
+	  if (this.allowHalfOpen || this._writableState.ended)
+	    return;
+
+	  // no more data can be written.
+	  // But allow more writes to happen in this tick.
+	  process.nextTick(this.end.bind(this));
+	}
+
+	function forEach (xs, f) {
+	  for (var i = 0, l = xs.length; i < l; i++) {
+	    f(xs[i], i);
+	  }
+	}
+
+	/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(30)))
+
+/***/ },
+/* 36 */
+/***/ function(module, exports, __webpack_require__) {
+
+	/* WEBPACK VAR INJECTION */(function(process) {// Copyright Joyent, Inc. and other Node contributors.
+	//
+	// 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.
+
+	// A bit simpler than readable streams.
+	// Implement an async ._write(chunk, cb), and it'll handle all
+	// the drain event emission and buffering.
+
+	module.exports = Writable;
+
+	/*<replacement>*/
+	var Buffer = __webpack_require__(2).Buffer;
+	/*</replacement>*/
+
+	Writable.WritableState = WritableState;
+
+
+	/*<replacement>*/
+	var util = __webpack_require__(32);
+	util.inherits = __webpack_require__(33);
+	/*</replacement>*/
+
+	var Stream = __webpack_require__(25);
+
+	util.inherits(Writable, Stream);
+
+	function WriteReq(chunk, encoding, cb) {
+	  this.chunk = chunk;
+	  this.encoding = encoding;
+	  this.callback = cb;
+	}
+
+	function WritableState(options, stream) {
+	  var Duplex = __webpack_require__(35);
+
+	  options = options || {};
+
+	  // the point at which write() starts returning false
+	  // Note: 0 is a valid value, means that we always return false if
+	  // the entire buffer is not flushed immediately on write()
+	  var hwm = options.highWaterMark;
+	  var defaultHwm = options.objectMode ? 16 : 16 * 1024;
+	  this.highWaterMark = (hwm || hwm === 0) ? hwm : defaultHwm;
+
+	  // object stream flag to indicate whether or not this stream
+	  // contains buffers or objects.
+	  this.objectMode = !!options.objectMode;
+
+	  if (stream instanceof Duplex)
+	    this.objectMode = this.objectMode || !!options.writableObjectMode;
+
+	  // cast to ints.
+	  this.highWaterMark = ~~this.highWaterMark;
+
+	  this.needDrain = false;
+	  // at the start of calling end()
+	  this.ending = false;
+	  // when end() has been called, and returned
+	  this.ended = false;
+	  // when 'finish' is emitted
+	  this.finished = false;
+
+	  // should we decode strings into buffers before passing to _write?
+	  // this is here so that some node-core streams can optimize string
+	  // handling at a lower level.
+	  var noDecode = options.decodeStrings === false;
+	  this.decodeStrings = !noDecode;
+
+	  // Crypto is kind of old and crusty.  Historically, its default string
+	  // encoding is 'binary' so we have to make this configurable.
+	  // Everything else in the universe uses 'utf8', though.
+	  this.defaultEncoding = options.defaultEncoding || 'utf8';
+
+	  // not an actual buffer we keep track of, but a measurement
+	  // of how much we're waiting to get pushed to some underlying
+	  // socket or file.
+	  this.length = 0;
+
+	  // a flag to see when we're in the middle of a write.
+	  this.writing = false;
+
+	  // when true all writes will be buffered until .uncork() call
+	  this.corked = 0;
+
+	  // a flag to be able to tell if the onwrite cb is called immediately,
+	  // or on a later tick.  We set this to true at first, because any
+	  // actions that shouldn't happen until "later" should generally also
+	  // not happen before the first write call.
+	  this.sync = true;
+
+	  // a flag to know if we're processing previously buffered items, which
+	  // may call the _write() callback in the same tick, so that we don't
+	  // end up in an overlapped onwrite situation.
+	  this.bufferProcessing = false;
+
+	  // the callback that's passed to _write(chunk,cb)
+	  this.onwrite = function(er) {
+	    onwrite(stream, er);
+	  };
+
+	  // the callback that the user supplies to write(chunk,encoding,cb)
+	  this.writecb = null;
+
+	  // the amount that is being written when _write is called.
+	  this.writelen = 0;
+
+	  this.buffer = [];
+
+	  // number of pending user-supplied write callbacks
+	  // this must be 0 before 'finish' can be emitted
+	  this.pendingcb = 0;
+
+	  // emit prefinish if the only thing we're waiting for is _write cbs
+	  // This is relevant for synchronous Transform streams
+	  this.prefinished = false;
+
+	  // True if the error was already emitted and should not be thrown again
+	  this.errorEmitted = false;
+	}
+
+	function Writable(options) {
+	  var Duplex = __webpack_require__(35);
+
+	  // Writable ctor is applied to Duplexes, though they're not
+	  // instanceof Writable, they're instanceof Readable.
+	  if (!(this instanceof Writable) && !(this instanceof Duplex))
+	    return new Writable(options);
+
+	  this._writableState = new WritableState(options, this);
+
+	  // legacy.
+	  this.writable = true;
+
+	  Stream.call(this);
+	}
+
+	// Otherwise people can pipe Writable streams, which is just wrong.
+	Writable.prototype.pipe = function() {
+	  this.emit('error', new Error('Cannot pipe. Not readable.'));
+	};
+
+
+	function writeAfterEnd(stream, state, cb) {
+	  var er = new Error('write after end');
+	  // TODO: defer error events consistently everywhere, not just the cb
+	  stream.emit('error', er);
+	  process.nextTick(function() {
+	    cb(er);
+	  });
+	}
+
+	// If we get something that is not a buffer, string, null, or undefined,
+	// and we're not in objectMode, then that's an error.
+	// Otherwise stream chunks are all considered to be of length=1, and the
+	// watermarks determine how many objects to keep in the buffer, rather than
+	// how many bytes or characters.
+	function validChunk(stream, state, chunk, cb) {
+	  var valid = true;
+	  if (!util.isBuffer(chunk) &&
+	      !util.isString(chunk) &&
+	      !util.isNullOrUndefined(chunk) &&
+	      !state.objectMode) {
+	    var er = new TypeError('Invalid non-string/buffer chunk');
+	    stream.emit('error', er);
+	    process.nextTick(function() {
+	      cb(er);
+	    });
+	    valid = false;
+	  }
+	  return valid;
+	}
+
+	Writable.prototype.write = function(chunk, encoding, cb) {
+	  var state = this._writableState;
+	  var ret = false;
+
+	  if (util.isFunction(encoding)) {
+	    cb = encoding;
+	    encoding = null;
+	  }
+
+	  if (util.isBuffer(chunk))
+	    encoding = 'buffer';
+	  else if (!encoding)
+	    encoding = state.defaultEncoding;
+
+	  if (!util.isFunction(cb))
+	    cb = function() {};
+
+	  if (state.ended)
+	    writeAfterEnd(this, state, cb);
+	  else if (validChunk(this, state, chunk, cb)) {
+	    state.pendingcb++;
+	    ret = writeOrBuffer(this, state, chunk, encoding, cb);
+	  }
+
+	  return ret;
+	};
+
+	Writable.prototype.cork = function() {
+	  var state = this._writableState;
+
+	  state.corked++;
+	};
+
+	Writable.prototype.uncork = function() {
+	  var state = this._writableState;
+
+	  if (state.corked) {
+	    state.corked--;
+
+	    if (!state.writing &&
+	        !state.corked &&
+	        !state.finished &&
+	        !state.bufferProcessing &&
+	        state.buffer.length)
+	      clearBuffer(this, state);
+	  }
+	};
+
+	function decodeChunk(state, chunk, encoding) {
+	  if (!state.objectMode &&
+	      state.decodeStrings !== false &&
+	      util.isString(chunk)) {
+	    chunk = new Buffer(chunk, encoding);
+	  }
+	  return chunk;
+	}
+
+	// if we're already writing something, then just put this
+	// in the queue, and wait our turn.  Otherwise, call _write
+	// If we return false, then we need a drain event, so set that flag.
+	function writeOrBuffer(stream, state, chunk, encoding, cb) {
+	  chunk = decodeChunk(state, chunk, encoding);
+	  if (util.isBuffer(chunk))
+	    encoding = 'buffer';
+	  var len = state.objectMode ? 1 : chunk.length;
+
+	  state.length += len;
+
+	  var ret = state.length < state.highWaterMark;
+	  // we must ensure that previous needDrain will not be reset to false.
+	  if (!ret)
+	    state.needDrain = true;
+
+	  if (state.writing || state.corked)
+	    state.buffer.push(new WriteReq(chunk, encoding, cb));
+	  else
+	    doWrite(stream, state, false, len, chunk, encoding, cb);
+
+	  return ret;
+	}
+
+	function doWrite(stream, state, writev, len, chunk, encoding, cb) {
+	  state.writelen = len;
+	  state.writecb = cb;
+	  state.writing = true;
+	  state.sync = true;
+	  if (writev)
+	    stream._writev(chunk, state.onwrite);
+	  else
+	    stream._write(chunk, encoding, state.onwrite);
+	  state.sync = false;
+	}
+
+	function onwriteError(stream, state, sync, er, cb) {
+	  if (sync)
+	    process.nextTick(function() {
+	      state.pendingcb--;
+	      cb(er);
+	    });
+	  else {
+	    state.pendingcb--;
+	    cb(er);
+	  }
+
+	  stream._writableState.errorEmitted = true;
+	  stream.emit('error', er);
+	}
+
+	function onwriteStateUpdate(state) {
+	  state.writing = false;
+	  state.writecb = null;
+	  state.length -= state.writelen;
+	  state.writelen = 0;
+	}
+
+	function onwrite(stream, er) {
+	  var state = stream._writableState;
+	  var sync = state.sync;
+	  var cb = state.writecb;
+
+	  onwriteStateUpdate(state);
+
+	  if (er)
+	    onwriteError(stream, state, sync, er, cb);
+	  else {
+	    // Check if we're actually ready to finish, but don't emit yet
+	    var finished = needFinish(stream, state);
+
+	    if (!finished &&
+	        !state.corked &&
+	        !state.bufferProcessing &&
+	        state.buffer.length) {
+	      clearBuffer(stream, state);
+	    }
+
+	    if (sync) {
+	      process.nextTick(function() {
+	        afterWrite(stream, state, finished, cb);
+	      });
+	    } else {
+	      afterWrite(stream, state, finished, cb);
+	    }
+	  }
+	}
+
+	function afterWrite(stream, state, finished, cb) {
+	  if (!finished)
+	    onwriteDrain(stream, state);
+	  state.pendingcb--;
+	  cb();
+	  finishMaybe(stream, state);
+	}
+
+	// Must force callback to be called on nextTick, so that we don't
+	// emit 'drain' before the write() consumer gets the 'false' return
+	// value, and has a chance to attach a 'drain' listener.
+	function onwriteDrain(stream, state) {
+	  if (state.length === 0 && state.needDrain) {
+	    state.needDrain = false;
+	    stream.emit('drain');
+	  }
+	}
+
+
+	// if there's something in the buffer waiting, then process it
+	function clearBuffer(stream, state) {
+	  state.bufferProcessing = true;
+
+	  if (stream._writev && state.buffer.length > 1) {
+	    // Fast case, write everything using _writev()
+	    var cbs = [];
+	    for (var c = 0; c < state.buffer.length; c++)
+	      cbs.push(state.buffer[c].callback);
+
+	    // count the one we are adding, as well.
+	    // TODO(isaacs) clean this up
+	    state.pendingcb++;
+	    doWrite(stream, state, true, state.length, state.buffer, '', function(err) {
+	      for (var i = 0; i < cbs.length; i++) {
+	        state.pendingcb--;
+	        cbs[i](err);
+	      }
+	    });
+
+	    // Clear buffer
+	    state.buffer = [];
+	  } else {
+	    // Slow case, write chunks one-by-one
+	    for (var c = 0; c < state.buffer.length; c++) {
+	      var entry = state.buffer[c];
+	      var chunk = entry.chunk;
+	      var encoding = entry.encoding;
+	      var cb = entry.callback;
+	      var len = state.objectMode ? 1 : chunk.length;
+
+	      doWrite(stream, state, false, len, chunk, encoding, cb);
+
+	      // if we didn't call the onwrite immediately, then
+	      // it means that we need to wait until it does.
+	      // also, that means that the chunk and cb are currently
+	      // being processed, so move the buffer counter past them.
+	      if (state.writing) {
+	        c++;
+	        break;
+	      }
+	    }
+
+	    if (c < state.buffer.length)
+	      state.buffer = state.buffer.slice(c);
+	    else
+	      state.buffer.length = 0;
+	  }
+
+	  state.bufferProcessing = false;
+	}
+
+	Writable.prototype._write = function(chunk, encoding, cb) {
+	  cb(new Error('not implemented'));
+
+	};
+
+	Writable.prototype._writev = null;
+
+	Writable.prototype.end = function(chunk, encoding, cb) {
+	  var state = this._writableState;
+
+	  if (util.isFunction(chunk)) {
+	    cb = chunk;
+	    chunk = null;
+	    encoding = null;
+	  } else if (util.isFunction(encoding)) {
+	    cb = encoding;
+	    encoding = null;
+	  }
+
+	  if (!util.isNullOrUndefined(chunk))
+	    this.write(chunk, encoding);
+
+	  // .end() fully uncorks
+	  if (state.corked) {
+	    state.corked = 1;
+	    this.uncork();
+	  }
+
+	  // ignore unnecessary end() calls.
+	  if (!state.ending && !state.finished)
+	    endWritable(this, state, cb);
+	};
+
+
+	function needFinish(stream, state) {
+	  return (state.ending &&
+	          state.length === 0 &&
+	          !state.finished &&
+	          !state.writing);
+	}
+
+	function prefinish(stream, state) {
+	  if (!state.prefinished) {
+	    state.prefinished = true;
+	    stream.emit('prefinish');
+	  }
+	}
+
+	function finishMaybe(stream, state) {
+	  var need = needFinish(stream, state);
+	  if (need) {
+	    if (state.pendingcb === 0) {
+	      prefinish(stream, state);
+	      state.finished = true;
+	      stream.emit('finish');
+	    } else
+	      prefinish(stream, state);
+	  }
+	  return need;
+	}
+
+	function endWritable(stream, state, cb) {
+	  state.ending = true;
+	  finishMaybe(stream, state);
+	  if (cb) {
+	    if (state.finished)
+	      process.nextTick(cb);
+	    else
+	      stream.once('finish', cb);
+	  }
+	  state.ended = true;
+	}
+
+	/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(30)))
+
+/***/ },
+/* 37 */
+/***/ function(module, exports, __webpack_require__) {
+
+	// Copyright Joyent, Inc. and other Node contributors.
+	//
+	// 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.
+
+	var Buffer = __webpack_require__(2).Buffer;
+
+	var isBufferEncoding = Buffer.isEncoding
+	  || function(encoding) {
+	       switch (encoding && encoding.toLowerCase()) {
+	         case 'hex': case 'utf8': case 'utf-8': case 'ascii': case 'binary': case 'base64': case 'ucs2': case 'ucs-2': case 'utf16le': case 'utf-16le': case 'raw': return true;
+	         default: return false;
+	       }
+	     }
+
+
+	function assertEncoding(encoding) {
+	  if (encoding && !isBufferEncoding(encoding)) {
+	    throw new Error('Unknown encoding: ' + encoding);
+	  }
+	}
+
+	// StringDecoder provides an interface for efficiently splitting a series of
+	// buffers into a series of JS strings without breaking apart multi-byte
+	// characters. CESU-8 is handled as part of the UTF-8 encoding.
+	//
+	// @TODO Handling all encodings inside a single object makes it very difficult
+	// to reason about this code, so it should be split up in the future.
+	// @TODO There should be a utf8-strict encoding that rejects invalid UTF-8 code
+	// points as used by CESU-8.
+	var StringDecoder = exports.StringDecoder = function(encoding) {
+	  this.encoding = (encoding || 'utf8').toLowerCase().replace(/[-_]/, '');
+	  assertEncoding(encoding);
+	  switch (this.encoding) {
+	    case 'utf8':
+	      // CESU-8 represents each of Surrogate Pair by 3-bytes
+	      this.surrogateSize = 3;
+	      break;
+	    case 'ucs2':
+	    case 'utf16le':
+	      // UTF-16 represents each of Surrogate Pair by 2-bytes
+	      this.surrogateSize = 2;
+	      this.detectIncompleteChar = utf16DetectIncompleteChar;
+	      break;
+	    case 'base64':
+	      // Base-64 stores 3 bytes in 4 chars, and pads the remainder.
+	      this.surrogateSize = 3;
+	      this.detectIncompleteChar = base64DetectIncompleteChar;
+	      break;
+	    default:
+	      this.write = passThroughWrite;
+	      return;
+	  }
+
+	  // Enough space to store all bytes of a single character. UTF-8 needs 4
+	  // bytes, but CESU-8 may require up to 6 (3 bytes per surrogate).
+	  this.charBuffer = new Buffer(6);
+	  // Number of bytes received for the current incomplete multi-byte character.
+	  this.charReceived = 0;
+	  // Number of bytes expected for the current incomplete multi-byte character.
+	  this.charLength = 0;
+	};
+
+
+	// write decodes the given buffer and returns it as JS string that is
+	// guaranteed to not contain any partial multi-byte characters. Any partial
+	// character found at the end of the buffer is buffered up, and will be
+	// returned when calling write again with the remaining bytes.
+	//
+	// Note: Converting a Buffer containing an orphan surrogate to a String
+	// currently works, but converting a String to a Buffer (via `new Buffer`, or
+	// Buffer#write) will replace incomplete surrogates with the unicode
+	// replacement character. See https://codereview.chromium.org/121173009/ .
+	StringDecoder.prototype.write = function(buffer) {
+	  var charStr = '';
+	  // if our last write ended with an incomplete multibyte character
+	  while (this.charLength) {
+	    // determine how many remaining bytes this buffer has to offer for this char
+	    var available = (buffer.length >= this.charLength - this.charReceived) ?
+	        this.charLength - this.charReceived :
+	        buffer.length;
+
+	    // add the new bytes to the char buffer
+	    buffer.copy(this.charBuffer, this.charReceived, 0, available);
+	    this.charReceived += available;
+
+	    if (this.charReceived < this.charLength) {
+	      // still not enough chars in this buffer? wait for more ...
+	      return '';
+	    }
+
+	    // remove bytes belonging to the current character from the buffer
+	    buffer = buffer.slice(available, buffer.length);
+
+	    // get the character that was split
+	    charStr = this.charBuffer.slice(0, this.charLength).toString(this.encoding);
+
+	    // CESU-8: lead surrogate (D800-DBFF) is also the incomplete character
+	    var charCode = charStr.charCodeAt(charStr.length - 1);
+	    if (charCode >= 0xD800 && charCode <= 0xDBFF) {
+	      this.charLength += this.surrogateSize;
+	      charStr = '';
+	      continue;
+	    }
+	    this.charReceived = this.charLength = 0;
+
+	    // if there are no more bytes in this buffer, just emit our char
+	    if (buffer.length === 0) {
+	      return charStr;
+	    }
+	    break;
+	  }
+
+	  // determine and set charLength / charReceived
+	  this.detectIncompleteChar(buffer);
+
+	  var end = buffer.length;
+	  if (this.charLength) {
+	    // buffer the incomplete character bytes we got
+	    buffer.copy(this.charBuffer, 0, buffer.length - this.charReceived, end);
+	    end -= this.charReceived;
+	  }
+
+	  charStr += buffer.toString(this.encoding, 0, end);
+
+	  var end = charStr.length - 1;
+	  var charCode = charStr.charCodeAt(end);
+	  // CESU-8: lead surrogate (D800-DBFF) is also the incomplete character
+	  if (charCode >= 0xD800 && charCode <= 0xDBFF) {
+	    var size = this.surrogateSize;
+	    this.charLength += size;
+	    this.charReceived += size;
+	    this.charBuffer.copy(this.charBuffer, size, 0, size);
+	    buffer.copy(this.charBuffer, 0, 0, size);
+	    return charStr.substring(0, end);
+	  }
+
+	  // or just emit the charStr
+	  return charStr;
+	};
+
+	// detectIncompleteChar determines if there is an incomplete UTF-8 character at
+	// the end of the given buffer. If so, it sets this.charLength to the byte
+	// length that character, and sets this.charReceived to the number of bytes
+	// that are available for this character.
+	StringDecoder.prototype.detectIncompleteChar = function(buffer) {
+	  // determine how many bytes we have to check at the end of this buffer
+	  var i = (buffer.length >= 3) ? 3 : buffer.length;
+
+	  // Figure out if one of the last i bytes of our buffer announces an
+	  // incomplete char.
+	  for (; i > 0; i--) {
+	    var c = buffer[buffer.length - i];
+
+	    // See http://en.wikipedia.org/wiki/UTF-8#Description
+
+	    // 110XXXXX
+	    if (i == 1 && c >> 5 == 0x06) {
+	      this.charLength = 2;
+	      break;
+	    }
+
+	    // 1110XXXX
+	    if (i <= 2 && c >> 4 == 0x0E) {
+	      this.charLength = 3;
+	      break;
+	    }
+
+	    // 11110XXX
+	    if (i <= 3 && c >> 3 == 0x1E) {
+	      this.charLength = 4;
+	      break;
+	    }
+	  }
+	  this.charReceived = i;
+	};
+
+	StringDecoder.prototype.end = function(buffer) {
+	  var res = '';
+	  if (buffer && buffer.length)
+	    res = this.write(buffer);
+
+	  if (this.charReceived) {
+	    var cr = this.charReceived;
+	    var buf = this.charBuffer;
+	    var enc = this.encoding;
+	    res += buf.slice(0, cr).toString(enc);
+	  }
+
+	  return res;
+	};
+
+	function passThroughWrite(buffer) {
+	  return buffer.toString(this.encoding);
+	}
+
+	function utf16DetectIncompleteChar(buffer) {
+	  this.charReceived = buffer.length % 2;
+	  this.charLength = this.charReceived ? 2 : 0;
+	}
+
+	function base64DetectIncompleteChar(buffer) {
+	  this.charReceived = buffer.length % 3;
+	  this.charLength = this.charReceived ? 3 : 0;
+	}
+
+
+/***/ },
+/* 38 */
+/***/ function(module, exports, __webpack_require__) {
+
+	// Copyright Joyent, Inc. and other Node contributors.
+	//
+	// 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.
+
+
+	// a transform stream is a readable/writable stream where you do
+	// something with the data.  Sometimes it's called a "filter",
+	// but that's not a great name for it, since that implies a thing where
+	// some bits pass through, and others are simply ignored.  (That would
+	// be a valid example of a transform, of course.)
+	//
+	// While the output is causally related to the input, it's not a
+	// necessarily symmetric or synchronous transformation.  For example,
+	// a zlib stream might take multiple plain-text writes(), and then
+	// emit a single compressed chunk some time in the future.
+	//
+	// Here's how this works:
+	//
+	// The Transform stream has all the aspects of the readable and writable
+	// stream classes.  When you write(chunk), that calls _write(chunk,cb)
+	// internally, and returns false if there's a lot of pending writes
+	// buffered up.  When you call read(), that calls _read(n) until
+	// there's enough pending readable data buffered up.
+	//
+	// In a transform stream, the written data is placed in a buffer.  When
+	// _read(n) is called, it transforms the queued up data, calling the
+	// buffered _write cb's as it consumes chunks.  If consuming a single
+	// written chunk would result in multiple output chunks, then the first
+	// outputted bit calls the readcb, and subsequent chunks just go into
+	// the read buffer, and will cause it to emit 'readable' if necessary.
+	//
+	// This way, back-pressure is actually determined by the reading side,
+	// since _read has to be called to start processing a new chunk.  However,
+	// a pathological inflate type of transform can cause excessive buffering
+	// here.  For example, imagine a stream where every byte of input is
+	// interpreted as an integer from 0-255, and then results in that many
+	// bytes of output.  Writing the 4 bytes {ff,ff,ff,ff} would result in
+	// 1kb of data being output.  In this case, you could write a very small
+	// amount of input, and end up with a very large amount of output.  In
+	// such a pathological inflating mechanism, there'd be no way to tell
+	// the system to stop doing the transform.  A single 4MB write could
+	// cause the system to run out of memory.
+	//
+	// However, even in such a pathological case, only a single written chunk
+	// would be consumed, and then the rest would wait (un-transformed) until
+	// the results of the previous transformed chunk were consumed.
+
+	module.exports = Transform;
+
+	var Duplex = __webpack_require__(35);
+
+	/*<replacement>*/
+	var util = __webpack_require__(32);
+	util.inherits = __webpack_require__(33);
+	/*</replacement>*/
+
+	util.inherits(Transform, Duplex);
+
+
+	function TransformState(options, stream) {
+	  this.afterTransform = function(er, data) {
+	    return afterTransform(stream, er, data);
+	  };
+
+	  this.needTransform = false;
+	  this.transforming = false;
+	  this.writecb = null;
+	  this.writechunk = null;
+	}
+
+	function afterTransform(stream, er, data) {
+	  var ts = stream._transformState;
+	  ts.transforming = false;
+
+	  var cb = ts.writecb;
+
+	  if (!cb)
+	    return stream.emit('error', new Error('no writecb in Transform class'));
+
+	  ts.writechunk = null;
+	  ts.writecb = null;
+
+	  if (!util.isNullOrUndefined(data))
+	    stream.push(data);
+
+	  if (cb)
+	    cb(er);
+
+	  var rs = stream._readableState;
+	  rs.reading = false;
+	  if (rs.needReadable || rs.length < rs.highWaterMark) {
+	    stream._read(rs.highWaterMark);
+	  }
+	}
+
+
+	function Transform(options) {
+	  if (!(this instanceof Transform))
+	    return new Transform(options);
+
+	  Duplex.call(this, options);
+
+	  this._transformState = new TransformState(options, this);
+
+	  // when the writable side finishes, then flush out anything remaining.
+	  var stream = this;
+
+	  // start out asking for a readable event once data is transformed.
+	  this._readableState.needReadable = true;
+
+	  // we have implemented the _read method, and done the other things
+	  // that Readable wants before the first _read call, so unset the
+	  // sync guard flag.
+	  this._readableState.sync = false;
+
+	  this.once('prefinish', function() {
+	    if (util.isFunction(this._flush))
+	      this._flush(function(er) {
+	        done(stream, er);
+	      });
+	    else
+	      done(stream);
+	  });
+	}
+
+	Transform.prototype.push = function(chunk, encoding) {
+	  this._transformState.needTransform = false;
+	  return Duplex.prototype.push.call(this, chunk, encoding);
+	};
+
+	// This is the part where you do stuff!
+	// override this function in implementation classes.
+	// 'chunk' is an input chunk.
+	//
+	// Call `push(newChunk)` to pass along transformed output
+	// to the readable side.  You may call 'push' zero or more times.
+	//
+	// Call `cb(err)` when you are done with this chunk.  If you pass
+	// an error, then that'll put the hurt on the whole operation.  If you
+	// never call cb(), then you'll never get another chunk.
+	Transform.prototype._transform = function(chunk, encoding, cb) {
+	  throw new Error('not implemented');
+	};
+
+	Transform.prototype._write = function(chunk, encoding, cb) {
+	  var ts = this._transformState;
+	  ts.writecb = cb;
+	  ts.writechunk = chunk;
+	  ts.writeencoding = encoding;
+	  if (!ts.transforming) {
+	    var rs = this._readableState;
+	    if (ts.needTransform ||
+	        rs.needReadable ||
+	        rs.length < rs.highWaterMark)
+	      this._read(rs.highWaterMark);
+	  }
+	};
+
+	// Doesn't matter what the args are here.
+	// _transform does all the work.
+	// That we got here means that the readable side wants more data.
+	Transform.prototype._read = function(n) {
+	  var ts = this._transformState;
+
+	  if (!util.isNull(ts.writechunk) && ts.writecb && !ts.transforming) {
+	    ts.transforming = true;
+	    this._transform(ts.writechunk, ts.writeencoding, ts.afterTransform);
+	  } else {
+	    // mark that we need a transform, so that any data that comes in
+	    // will get processed, now that we've asked for it.
+	    ts.needTransform = true;
+	  }
+	};
+
+
+	function done(stream, er) {
+	  if (er)
+	    return stream.emit('error', er);
+
+	  // if there's nothing in the write buffer, then that means
+	  // that nothing more will ever be provided
+	  var ws = stream._writableState;
+	  var ts = stream._transformState;
+
+	  if (ws.length)
+	    throw new Error('calling transform done when ws.length != 0');
+
+	  if (ts.transforming)
+	    throw new Error('calling transform done when still transforming');
+
+	  return stream.push(null);
+	}
+
+
+/***/ },
+/* 39 */
+/***/ function(module, exports, __webpack_require__) {
+
+	// Copyright Joyent, Inc. and other Node contributors.
+	//
+	// 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.
+
+	// a passthrough stream.
+	// basically just the most minimal sort of Transform stream.
+	// Every written chunk gets output as-is.
+
+	module.exports = PassThrough;
+
+	var Transform = __webpack_require__(38);
+
+	/*<replacement>*/
+	var util = __webpack_require__(32);
+	util.inherits = __webpack_require__(33);
+	/*</replacement>*/
+
+	util.inherits(PassThrough, Transform);
+
+	function PassThrough(options) {
+	  if (!(this instanceof PassThrough))
+	    return new PassThrough(options);
+
+	  Transform.call(this, options);
+	}
+
+	PassThrough.prototype._transform = function(chunk, encoding, cb) {
+	  cb(null, chunk);
+	};
+
+
+/***/ },
+/* 40 */
+/***/ function(module, exports, __webpack_require__) {
+
+	module.exports = __webpack_require__(36)
+
+
+/***/ },
+/* 41 */
+/***/ function(module, exports, __webpack_require__) {
+
+	module.exports = __webpack_require__(35)
+
+
+/***/ },
+/* 42 */
+/***/ function(module, exports, __webpack_require__) {
+
+	module.exports = __webpack_require__(38)
+
+
+/***/ },
+/* 43 */
+/***/ function(module, exports, __webpack_require__) {
+
+	module.exports = __webpack_require__(39)
+
+
+/***/ },
+/* 44 */
+/***/ function(module, exports, __webpack_require__) {
+
+	/* WEBPACK VAR INJECTION */(function(Buffer, __dirname) {/* jslint node: true */
+	'use strict';
+
+	// var b64 = require('./base64.js').base64DecToArr;
+	function VirtualFileSystem() {
+		this.fileSystem = {};
+		this.baseSystem = {};
+	}
+
+	VirtualFileSystem.prototype.readFileSync = function(filename) {
+		filename = fixFilename(filename);
+
+		var base64content = this.baseSystem[filename];
+		if (base64content) {
+			return new Buffer(base64content, 'base64');
+		}
+
+		return this.fileSystem[filename];
+	};
+
+	VirtualFileSystem.prototype.writeFileSync = function(filename, content) {
+		this.fileSystem[fixFilename(filename)] = content;
+	};
+
+	VirtualFileSystem.prototype.bindFS = function(data) {
+		this.baseSystem = data;
+	};
+
+
+	function fixFilename(filename) {
+		if (filename.indexOf(__dirname) === 0) {
+			filename = filename.substring(__dirname.length);
+		}
+
+		if (filename.indexOf('/') === 0) {
+			filename = filename.substring(1);
+		}
+
+		return filename;
+	}
+
+	module.exports = new VirtualFileSystem();
+
+	/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(2).Buffer, "/"))
+
+/***/ },
+/* 45 */
+/***/ function(module, exports, __webpack_require__) {
+
+	/* WEBPACK VAR INJECTION */(function(Buffer) {// Generated by CoffeeScript 1.7.1
+
+	/*
+	PDFObject - converts JavaScript types into their corrisponding PDF types.
+	By Devon Govett
+	 */
+
+	(function() {
+	  var PDFObject, PDFReference;
+
+	  PDFObject = (function() {
+	    var escapable, escapableRe, pad, swapBytes;
+
+	    function PDFObject() {}
+
+	    pad = function(str, length) {
+	      return (Array(length + 1).join('0') + str).slice(-length);
+	    };
+
+	    escapableRe = /[\n\r\t\b\f\(\)\\]/g;
+
+	    escapable = {
+	      '\n': '\\n',
+	      '\r': '\\r',
+	      '\t': '\\t',
+	      '\b': '\\b',
+	      '\f': '\\f',
+	      '\\': '\\\\',
+	      '(': '\\(',
+	      ')': '\\)'
+	    };
+
+	    swapBytes = function(buff) {
+	      var a, i, l, _i, _ref;
+	      l = buff.length;
+	      if (l & 0x01) {
+	        throw new Error("Buffer length must be even");
+	      } else {
+	        for (i = _i = 0, _ref = l - 1; _i < _ref; i = _i += 2) {
+	          a = buff[i];
+	          buff[i] = buff[i + 1];
+	          buff[i + 1] = a;
+	        }
+	      }
+	      return buff;
+	    };
+
+	    PDFObject.convert = function(object) {
+	      var e, i, isUnicode, items, key, out, string, val, _i, _ref;
+	      if (typeof object === 'string') {
+	        return '/' + object;
+	      } else if (object instanceof String) {
+	        string = object.replace(escapableRe, function(c) {
+	          return escapable[c];
+	        });
+	        isUnicode = false;
+	        for (i = _i = 0, _ref = string.length; _i < _ref; i = _i += 1) {
+	          if (string.charCodeAt(i) > 0x7f) {
+	            isUnicode = true;
+	            break;
+	          }
+	        }
+	        if (isUnicode) {
+	          string = swapBytes(new Buffer('\ufeff' + string, 'utf16le')).toString('binary');
+	        }
+	        return '(' + string + ')';
+	      } else if (Buffer.isBuffer(object)) {
+	        return '<' + object.toString('hex') + '>';
+	      } else if (object instanceof PDFReference) {
+	        return object.toString();
+	      } else if (object instanceof Date) {
+	        return '(D:' + pad(object.getUTCFullYear(), 4) + pad(object.getUTCMonth(), 2) + pad(object.getUTCDate(), 2) + pad(object.getUTCHours(), 2) + pad(object.getUTCMinutes(), 2) + pad(object.getUTCSeconds(), 2) + 'Z)';
+	      } else if (Array.isArray(object)) {
+	        items = ((function() {
+	          var _j, _len, _results;
+	          _results = [];
+	          for (_j = 0, _len = object.length; _j < _len; _j++) {
+	            e = object[_j];
+	            _results.push(PDFObject.convert(e));
+	          }
+	          return _results;
+	        })()).join(' ');
+	        return '[' + items + ']';
+	      } else if ({}.toString.call(object) === '[object Object]') {
+	        out = ['<<'];
+	        for (key in object) {
+	          val = object[key];
+	          out.push('/' + key + ' ' + PDFObject.convert(val));
+	        }
+	        out.push('>>');
+	        return out.join('\n');
+	      } else {
+	        return '' + object;
+	      }
+	    };
+
+	    return PDFObject;
+
+	  })();
+
+	  module.exports = PDFObject;
+
+	  PDFReference = __webpack_require__(46);
+
+	}).call(this);
+
+	/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(2).Buffer))
+
+/***/ },
+/* 46 */
+/***/ function(module, exports, __webpack_require__) {
+
+	/* WEBPACK VAR INJECTION */(function(Buffer) {// Generated by CoffeeScript 1.7.1
+
+	/*
+	PDFReference - represents a reference to another object in the PDF object heirarchy
+	By Devon Govett
+	 */
+
+	(function() {
+	  var PDFObject, PDFReference, zlib,
+	    __bind = function(fn, me){ return function(){ return fn.apply(me, arguments); }; };
+
+	  zlib = __webpack_require__(47);
+
+	  PDFReference = (function() {
+	    function PDFReference(document, id, data) {
+	      this.document = document;
+	      this.id = id;
+	      this.data = data != null ? data : {};
+	      this.finalize = __bind(this.finalize, this);
+	      this.gen = 0;
+	      this.deflate = null;
+	      this.compress = this.document.compress && !this.data.Filter;
+	      this.uncompressedLength = 0;
+	      this.chunks = [];
+	    }
+
+	    PDFReference.prototype.initDeflate = function() {
+	      this.data.Filter = 'FlateDecode';
+	      this.deflate = zlib.createDeflate();
+	      this.deflate.on('data', (function(_this) {
+	        return function(chunk) {
+	          _this.chunks.push(chunk);
+	          return _this.data.Length += chunk.length;
+	        };
+	      })(this));
+	      return this.deflate.on('end', this.finalize);
+	    };
+
+	    PDFReference.prototype.write = function(chunk) {
+	      var _base;
+	      if (!Buffer.isBuffer(chunk)) {
+	        chunk = new Buffer(chunk + '\n', 'binary');
+	      }
+	      this.uncompressedLength += chunk.length;
+	      if ((_base = this.data).Length == null) {
+	        _base.Length = 0;
+	      }
+	      if (this.compress) {
+	        if (!this.deflate) {
+	          this.initDeflate();
+	        }
+	        return this.deflate.write(chunk);
+	      } else {
+	        this.chunks.push(chunk);
+	        return this.data.Length += chunk.length;
+	      }
+	    };
+
+	    PDFReference.prototype.end = function(chunk) {
+	      if (typeof chunk === 'string' || Buffer.isBuffer(chunk)) {
+	        this.write(chunk);
+	      }
+	      if (this.deflate) {
+	        return this.deflate.end();
+	      } else {
+	        return this.finalize();
+	      }
+	    };
+
+	    PDFReference.prototype.finalize = function() {
+	      var chunk, _i, _len, _ref;
+	      this.offset = this.document._offset;
+	      this.document._write("" + this.id + " " + this.gen + " obj");
+	      this.document._write(PDFObject.convert(this.data));
+	      if (this.chunks.length) {
+	        this.document._write('stream');
+	        _ref = this.chunks;
+	        for (_i = 0, _len = _ref.length; _i < _len; _i++) {
+	          chunk = _ref[_i];
+	          this.document._write(chunk);
+	        }
+	        this.chunks.length = 0;
+	        this.document._write('\nendstream');
+	      }
+	      this.document._write('endobj');
+	      return this.document._refEnd(this);
+	    };
+
+	    PDFReference.prototype.toString = function() {
+	      return "" + this.id + " " + this.gen + " R";
+	    };
+
+	    return PDFReference;
+
+	  })();
+
+	  module.exports = PDFReference;
+
+	  PDFObject = __webpack_require__(45);
+
+	}).call(this);
+
+	/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(2).Buffer))
+
+/***/ },
+/* 47 */
+/***/ function(module, exports, __webpack_require__) {
+
+	/* WEBPACK VAR INJECTION */(function(Buffer, process) {// Copyright Joyent, Inc. and other Node contributors.
+	//
+	// 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.
+
+	var Transform = __webpack_require__(42);
+
+	var binding = __webpack_require__(48);
+	var util = __webpack_require__(60);
+	var assert = __webpack_require__(63).ok;
+
+	// zlib doesn't provide these, so kludge them in following the same
+	// const naming scheme zlib uses.
+	binding.Z_MIN_WINDOWBITS = 8;
+	binding.Z_MAX_WINDOWBITS = 15;
+	binding.Z_DEFAULT_WINDOWBITS = 15;
+
+	// fewer than 64 bytes per chunk is stupid.
+	// technically it could work with as few as 8, but even 64 bytes
+	// is absurdly low.  Usually a MB or more is best.
+	binding.Z_MIN_CHUNK = 64;
+	binding.Z_MAX_CHUNK = Infinity;
+	binding.Z_DEFAULT_CHUNK = (16 * 1024);
+
+	binding.Z_MIN_MEMLEVEL = 1;
+	binding.Z_MAX_MEMLEVEL = 9;
+	binding.Z_DEFAULT_MEMLEVEL = 8;
+
+	binding.Z_MIN_LEVEL = -1;
+	binding.Z_MAX_LEVEL = 9;
+	binding.Z_DEFAULT_LEVEL = binding.Z_DEFAULT_COMPRESSION;
+
+	// expose all the zlib constants
+	Object.keys(binding).forEach(function(k) {
+	  if (k.match(/^Z/)) exports[k] = binding[k];
+	});
+
+	// translation table for return codes.
+	exports.codes = {
+	  Z_OK: binding.Z_OK,
+	  Z_STREAM_END: binding.Z_STREAM_END,
+	  Z_NEED_DICT: binding.Z_NEED_DICT,
+	  Z_ERRNO: binding.Z_ERRNO,
+	  Z_STREAM_ERROR: binding.Z_STREAM_ERROR,
+	  Z_DATA_ERROR: binding.Z_DATA_ERROR,
+	  Z_MEM_ERROR: binding.Z_MEM_ERROR,
+	  Z_BUF_ERROR: binding.Z_BUF_ERROR,
+	  Z_VERSION_ERROR: binding.Z_VERSION_ERROR
+	};
+
+	Object.keys(exports.codes).forEach(function(k) {
+	  exports.codes[exports.codes[k]] = k;
+	});
+
+	exports.Deflate = Deflate;
+	exports.Inflate = Inflate;
+	exports.Gzip = Gzip;
+	exports.Gunzip = Gunzip;
+	exports.DeflateRaw = DeflateRaw;
+	exports.InflateRaw = InflateRaw;
+	exports.Unzip = Unzip;
+
+	exports.createDeflate = function(o) {
+	  return new Deflate(o);
+	};
+
+	exports.createInflate = function(o) {
+	  return new Inflate(o);
+	};
+
+	exports.createDeflateRaw = function(o) {
+	  return new DeflateRaw(o);
+	};
+
+	exports.createInflateRaw = function(o) {
+	  return new InflateRaw(o);
+	};
+
+	exports.createGzip = function(o) {
+	  return new Gzip(o);
+	};
+
+	exports.createGunzip = function(o) {
+	  return new Gunzip(o);
+	};
+
+	exports.createUnzip = function(o) {
+	  return new Unzip(o);
+	};
+
+
+	// Convenience methods.
+	// compress/decompress a string or buffer in one step.
+	exports.deflate = function(buffer, opts, callback) {
+	  if (typeof opts === 'function') {
+	    callback = opts;
+	    opts = {};
+	  }
+	  return zlibBuffer(new Deflate(opts), buffer, callback);
+	};
+
+	exports.deflateSync = function(buffer, opts) {
+	  return zlibBufferSync(new Deflate(opts), buffer);
+	};
+
+	exports.gzip = function(buffer, opts, callback) {
+	  if (typeof opts === 'function') {
+	    callback = opts;
+	    opts = {};
+	  }
+	  return zlibBuffer(new Gzip(opts), buffer, callback);
+	};
+
+	exports.gzipSync = function(buffer, opts) {
+	  return zlibBufferSync(new Gzip(opts), buffer);
+	};
+
+	exports.deflateRaw = function(buffer, opts, callback) {
+	  if (typeof opts === 'function') {
+	    callback = opts;
+	    opts = {};
+	  }
+	  return zlibBuffer(new DeflateRaw(opts), buffer, callback);
+	};
+
+	exports.deflateRawSync = function(buffer, opts) {
+	  return zlibBufferSync(new DeflateRaw(opts), buffer);
+	};
+
+	exports.unzip = function(buffer, opts, callback) {
+	  if (typeof opts === 'function') {
+	    callback = opts;
+	    opts = {};
+	  }
+	  return zlibBuffer(new Unzip(opts), buffer, callback);
+	};
+
+	exports.unzipSync = function(buffer, opts) {
+	  return zlibBufferSync(new Unzip(opts), buffer);
+	};
+
+	exports.inflate = function(buffer, opts, callback) {
+	  if (typeof opts === 'function') {
+	    callback = opts;
+	    opts = {};
+	  }
+	  return zlibBuffer(new Inflate(opts), buffer, callback);
+	};
+
+	exports.inflateSync = function(buffer, opts) {
+	  return zlibBufferSync(new Inflate(opts), buffer);
+	};
+
+	exports.gunzip = function(buffer, opts, callback) {
+	  if (typeof opts === 'function') {
+	    callback = opts;
+	    opts = {};
+	  }
+	  return zlibBuffer(new Gunzip(opts), buffer, callback);
+	};
+
+	exports.gunzipSync = function(buffer, opts) {
+	  return zlibBufferSync(new Gunzip(opts), buffer);
+	};
+
+	exports.inflateRaw = function(buffer, opts, callback) {
+	  if (typeof opts === 'function') {
+	    callback = opts;
+	    opts = {};
+	  }
+	  return zlibBuffer(new InflateRaw(opts), buffer, callback);
+	};
+
+	exports.inflateRawSync = function(buffer, opts) {
+	  return zlibBufferSync(new InflateRaw(opts), buffer);
+	};
+
+	function zlibBuffer(engine, buffer, callback) {
+	  var buffers = [];
+	  var nread = 0;
+
+	  engine.on('error', onError);
+	  engine.on('end', onEnd);
+
+	  engine.end(buffer);
+	  flow();
+
+	  function flow() {
+	    var chunk;
+	    while (null !== (chunk = engine.read())) {
+	      buffers.push(chunk);
+	      nread += chunk.length;
+	    }
+	    engine.once('readable', flow);
+	  }
+
+	  function onError(err) {
+	    engine.removeListener('end', onEnd);
+	    engine.removeListener('readable', flow);
+	    callback(err);
+	  }
+
+	  function onEnd() {
+	    var buf = Buffer.concat(buffers, nread);
+	    buffers = [];
+	    callback(null, buf);
+	    engine.close();
+	  }
+	}
+
+	function zlibBufferSync(engine, buffer) {
+	  if (typeof buffer === 'string')
+	    buffer = new Buffer(buffer);
+	  if (!Buffer.isBuffer(buffer))
+	    throw new TypeError('Not a string or buffer');
+
+	  var flushFlag = binding.Z_FINISH;
+
+	  return engine._processChunk(buffer, flushFlag);
+	}
+
+	// generic zlib
+	// minimal 2-byte header
+	function Deflate(opts) {
+	  if (!(this instanceof Deflate)) return new Deflate(opts);
+	  Zlib.call(this, opts, binding.DEFLATE);
+	}
+
+	function Inflate(opts) {
+	  if (!(this instanceof Inflate)) return new Inflate(opts);
+	  Zlib.call(this, opts, binding.INFLATE);
+	}
+
+
+
+	// gzip - bigger header, same deflate compression
+	function Gzip(opts) {
+	  if (!(this instanceof Gzip)) return new Gzip(opts);
+	  Zlib.call(this, opts, binding.GZIP);
+	}
+
+	function Gunzip(opts) {
+	  if (!(this instanceof Gunzip)) return new Gunzip(opts);
+	  Zlib.call(this, opts, binding.GUNZIP);
+	}
+
+
+
+	// raw - no header
+	function DeflateRaw(opts) {
+	  if (!(this instanceof DeflateRaw)) return new DeflateRaw(opts);
+	  Zlib.call(this, opts, binding.DEFLATERAW);
+	}
+
+	function InflateRaw(opts) {
+	  if (!(this instanceof InflateRaw)) return new InflateRaw(opts);
+	  Zlib.call(this, opts, binding.INFLATERAW);
+	}
+
+
+	// auto-detect header.
+	function Unzip(opts) {
+	  if (!(this instanceof Unzip)) return new Unzip(opts);
+	  Zlib.call(this, opts, binding.UNZIP);
+	}
+
+
+	// the Zlib class they all inherit from
+	// This thing manages the queue of requests, and returns
+	// true or false if there is anything in the queue when
+	// you call the .write() method.
+
+	function Zlib(opts, mode) {
+	  this._opts = opts = opts || {};
+	  this._chunkSize = opts.chunkSize || exports.Z_DEFAULT_CHUNK;
+
+	  Transform.call(this, opts);
+
+	  if (opts.flush) {
+	    if (opts.flush !== binding.Z_NO_FLUSH &&
+	        opts.flush !== binding.Z_PARTIAL_FLUSH &&
+	        opts.flush !== binding.Z_SYNC_FLUSH &&
+	        opts.flush !== binding.Z_FULL_FLUSH &&
+	        opts.flush !== binding.Z_FINISH &&
+	        opts.flush !== binding.Z_BLOCK) {
+	      throw new Error('Invalid flush flag: ' + opts.flush);
+	    }
+	  }
+	  this._flushFlag = opts.flush || binding.Z_NO_FLUSH;
+
+	  if (opts.chunkSize) {
+	    if (opts.chunkSize < exports.Z_MIN_CHUNK ||
+	        opts.chunkSize > exports.Z_MAX_CHUNK) {
+	      throw new Error('Invalid chunk size: ' + opts.chunkSize);
+	    }
+	  }
+
+	  if (opts.windowBits) {
+	    if (opts.windowBits < exports.Z_MIN_WINDOWBITS ||
+	        opts.windowBits > exports.Z_MAX_WINDOWBITS) {
+	      throw new Error('Invalid windowBits: ' + opts.windowBits);
+	    }
+	  }
+
+	  if (opts.level) {
+	    if (opts.level < exports.Z_MIN_LEVEL ||
+	        opts.level > exports.Z_MAX_LEVEL) {
+	      throw new Error('Invalid compression level: ' + opts.level);
+	    }
+	  }
+
+	  if (opts.memLevel) {
+	    if (opts.memLevel < exports.Z_MIN_MEMLEVEL ||
+	        opts.memLevel > exports.Z_MAX_MEMLEVEL) {
+	      throw new Error('Invalid memLevel: ' + opts.memLevel);
+	    }
+	  }
+
+	  if (opts.strategy) {
+	    if (opts.strategy != exports.Z_FILTERED &&
+	        opts.strategy != exports.Z_HUFFMAN_ONLY &&
+	        opts.strategy != exports.Z_RLE &&
+	        opts.strategy != exports.Z_FIXED &&
+	        opts.strategy != exports.Z_DEFAULT_STRATEGY) {
+	      throw new Error('Invalid strategy: ' + opts.strategy);
+	    }
+	  }
+
+	  if (opts.dictionary) {
+	    if (!Buffer.isBuffer(opts.dictionary)) {
+	      throw new Error('Invalid dictionary: it should be a Buffer instance');
+	    }
+	  }
+
+	  this._binding = new binding.Zlib(mode);
+
+	  var self = this;
+	  this._hadError = false;
+	  this._binding.onerror = function(message, errno) {
+	    // there is no way to cleanly recover.
+	    // continuing only obscures problems.
+	    self._binding = null;
+	    self._hadError = true;
+
+	    var error = new Error(message);
+	    error.errno = errno;
+	    error.code = exports.codes[errno];
+	    self.emit('error', error);
+	  };
+
+	  var level = exports.Z_DEFAULT_COMPRESSION;
+	  if (typeof opts.level === 'number') level = opts.level;
+
+	  var strategy = exports.Z_DEFAULT_STRATEGY;
+	  if (typeof opts.strategy === 'number') strategy = opts.strategy;
+
+	  this._binding.init(opts.windowBits || exports.Z_DEFAULT_WINDOWBITS,
+	                     level,
+	                     opts.memLevel || exports.Z_DEFAULT_MEMLEVEL,
+	                     strategy,
+	                     opts.dictionary);
+
+	  this._buffer = new Buffer(this._chunkSize);
+	  this._offset = 0;
+	  this._closed = false;
+	  this._level = level;
+	  this._strategy = strategy;
+
+	  this.once('end', this.close);
+	}
+
+	util.inherits(Zlib, Transform);
+
+	Zlib.prototype.params = function(level, strategy, callback) {
+	  if (level < exports.Z_MIN_LEVEL ||
+	      level > exports.Z_MAX_LEVEL) {
+	    throw new RangeError('Invalid compression level: ' + level);
+	  }
+	  if (strategy != exports.Z_FILTERED &&
+	      strategy != exports.Z_HUFFMAN_ONLY &&
+	      strategy != exports.Z_RLE &&
+	      strategy != exports.Z_FIXED &&
+	      strategy != exports.Z_DEFAULT_STRATEGY) {
+	    throw new TypeError('Invalid strategy: ' + strategy);
+	  }
+
+	  if (this._level !== level || this._strategy !== strategy) {
+	    var self = this;
+	    this.flush(binding.Z_SYNC_FLUSH, function() {
+	      self._binding.params(level, strategy);
+	      if (!self._hadError) {
+	        self._level = level;
+	        self._strategy = strategy;
+	        if (callback) callback();
+	      }
+	    });
+	  } else {
+	    process.nextTick(callback);
+	  }
+	};
+
+	Zlib.prototype.reset = function() {
+	  return this._binding.reset();
+	};
+
+	// This is the _flush function called by the transform class,
+	// internally, when the last chunk has been written.
+	Zlib.prototype._flush = function(callback) {
+	  this._transform(new Buffer(0), '', callback);
+	};
+
+	Zlib.prototype.flush = function(kind, callback) {
+	  var ws = this._writableState;
+
+	  if (typeof kind === 'function' || (kind === void 0 && !callback)) {
+	    callback = kind;
+	    kind = binding.Z_FULL_FLUSH;
+	  }
+
+	  if (ws.ended) {
+	    if (callback)
+	      process.nextTick(callback);
+	  } else if (ws.ending) {
+	    if (callback)
+	      this.once('end', callback);
+	  } else if (ws.needDrain) {
+	    var self = this;
+	    this.once('drain', function() {
+	      self.flush(callback);
+	    });
+	  } else {
+	    this._flushFlag = kind;
+	    this.write(new Buffer(0), '', callback);
+	  }
+	};
+
+	Zlib.prototype.close = function(callback) {
+	  if (callback)
+	    process.nextTick(callback);
+
+	  if (this._closed)
+	    return;
+
+	  this._closed = true;
+
+	  this._binding.close();
+
+	  var self = this;
+	  process.nextTick(function() {
+	    self.emit('close');
+	  });
+	};
+
+	Zlib.prototype._transform = function(chunk, encoding, cb) {
+	  var flushFlag;
+	  var ws = this._writableState;
+	  var ending = ws.ending || ws.ended;
+	  var last = ending && (!chunk || ws.length === chunk.length);
+
+	  if (!chunk === null && !Buffer.isBuffer(chunk))
+	    return cb(new Error('invalid input'));
+
+	  // If it's the last chunk, or a final flush, we use the Z_FINISH flush flag.
+	  // If it's explicitly flushing at some other time, then we use
+	  // Z_FULL_FLUSH. Otherwise, use Z_NO_FLUSH for maximum compression
+	  // goodness.
+	  if (last)
+	    flushFlag = binding.Z_FINISH;
+	  else {
+	    flushFlag = this._flushFlag;
+	    // once we've flushed the last of the queue, stop flushing and
+	    // go back to the normal behavior.
+	    if (chunk.length >= ws.length) {
+	      this._flushFlag = this._opts.flush || binding.Z_NO_FLUSH;
+	    }
+	  }
+
+	  var self = this;
+	  this._processChunk(chunk, flushFlag, cb);
+	};
+
+	Zlib.prototype._processChunk = function(chunk, flushFlag, cb) {
+	  var availInBefore = chunk && chunk.length;
+	  var availOutBefore = this._chunkSize - this._offset;
+	  var inOff = 0;
+
+	  var self = this;
+
+	  var async = typeof cb === 'function';
+
+	  if (!async) {
+	    var buffers = [];
+	    var nread = 0;
+
+	    var error;
+	    this.on('error', function(er) {
+	      error = er;
+	    });
+
+	    do {
+	      var res = this._binding.writeSync(flushFlag,
+	                                        chunk, // in
+	                                        inOff, // in_off
+	                                        availInBefore, // in_len
+	                                        this._buffer, // out
+	                                        this._offset, //out_off
+	                                        availOutBefore); // out_len
+	    } while (!this._hadError && callback(res[0], res[1]));
+
+	    if (this._hadError) {
+	      throw error;
+	    }
+
+	    var buf = Buffer.concat(buffers, nread);
+	    this.close();
+
+	    return buf;
+	  }
+
+	  var req = this._binding.write(flushFlag,
+	                                chunk, // in
+	                                inOff, // in_off
+	                                availInBefore, // in_len
+	                                this._buffer, // out
+	                                this._offset, //out_off
+	                                availOutBefore); // out_len
+
+	  req.buffer = chunk;
+	  req.callback = callback;
+
+	  function callback(availInAfter, availOutAfter) {
+	    if (self._hadError)
+	      return;
+
+	    var have = availOutBefore - availOutAfter;
+	    assert(have >= 0, 'have should not go down');
+
+	    if (have > 0) {
+	      var out = self._buffer.slice(self._offset, self._offset + have);
+	      self._offset += have;
+	      // serve some output to the consumer.
+	      if (async) {
+	        self.push(out);
+	      } else {
+	        buffers.push(out);
+	        nread += out.length;
+	      }
+	    }
+
+	    // exhausted the output buffer, or used all the input create a new one.
+	    if (availOutAfter === 0 || self._offset >= self._chunkSize) {
+	      availOutBefore = self._chunkSize;
+	      self._offset = 0;
+	      self._buffer = new Buffer(self._chunkSize);
+	    }
+
+	    if (availOutAfter === 0) {
+	      // Not actually done.  Need to reprocess.
+	      // Also, update the availInBefore to the availInAfter value,
+	      // so that if we have to hit it a third (fourth, etc.) time,
+	      // it'll have the correct byte counts.
+	      inOff += (availInBefore - availInAfter);
+	      availInBefore = availInAfter;
+
+	      if (!async)
+	        return true;
+
+	      var newReq = self._binding.write(flushFlag,
+	                                       chunk,
+	                                       inOff,
+	                                       availInBefore,
+	                                       self._buffer,
+	                                       self._offset,
+	                                       self._chunkSize);
+	      newReq.callback = callback; // this same function
+	      newReq.buffer = chunk;
+	      return;
+	    }
+
+	    if (!async)
+	      return false;
+
+	    // finished with the chunk.
+	    cb();
+	  }
+	};
+
+	util.inherits(Deflate, Zlib);
+	util.inherits(Inflate, Zlib);
+	util.inherits(Gzip, Zlib);
+	util.inherits(Gunzip, Zlib);
+	util.inherits(DeflateRaw, Zlib);
+	util.inherits(InflateRaw, Zlib);
+	util.inherits(Unzip, Zlib);
+
+	/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(2).Buffer, __webpack_require__(30)))
+
+/***/ },
+/* 48 */
+/***/ function(module, exports, __webpack_require__) {
+
+	/* WEBPACK VAR INJECTION */(function(process, Buffer) {var msg = __webpack_require__(49);
+	var zstream = __webpack_require__(50);
+	var zlib_deflate = __webpack_require__(51);
+	var zlib_inflate = __webpack_require__(56);
+	var constants = __webpack_require__(59);
+
+	for (var key in constants) {
+	  exports[key] = constants[key];
+	}
+
+	// zlib modes
+	exports.NONE = 0;
+	exports.DEFLATE = 1;
+	exports.INFLATE = 2;
+	exports.GZIP = 3;
+	exports.GUNZIP = 4;
+	exports.DEFLATERAW = 5;
+	exports.INFLATERAW = 6;
+	exports.UNZIP = 7;
+
+	/**
+	 * Emulate Node's zlib C++ layer for use by the JS layer in index.js
+	 */
+	function Zlib(mode) {
+	  if (mode < exports.DEFLATE || mode > exports.UNZIP)
+	    throw new TypeError("Bad argument");
+	    
+	  this.mode = mode;
+	  this.init_done = false;
+	  this.write_in_progress = false;
+	  this.pending_close = false;
+	  this.windowBits = 0;
+	  this.level = 0;
+	  this.memLevel = 0;
+	  this.strategy = 0;
+	  this.dictionary = null;
+	}
+
+	Zlib.prototype.init = function(windowBits, level, memLevel, strategy, dictionary) {
+	  this.windowBits = windowBits;
+	  this.level = level;
+	  this.memLevel = memLevel;
+	  this.strategy = strategy;
+	  // dictionary not supported.
+	  
+	  if (this.mode === exports.GZIP || this.mode === exports.GUNZIP)
+	    this.windowBits += 16;
+	    
+	  if (this.mode === exports.UNZIP)
+	    this.windowBits += 32;
+	    
+	  if (this.mode === exports.DEFLATERAW || this.mode === exports.INFLATERAW)
+	    this.windowBits = -this.windowBits;
+	    
+	  this.strm = new zstream();
+	  
+	  switch (this.mode) {
+	    case exports.DEFLATE:
+	    case exports.GZIP:
+	    case exports.DEFLATERAW:
+	      var status = zlib_deflate.deflateInit2(
+	        this.strm,
+	        this.level,
+	        exports.Z_DEFLATED,
+	        this.windowBits,
+	        this.memLevel,
+	        this.strategy
+	      );
+	      break;
+	    case exports.INFLATE:
+	    case exports.GUNZIP:
+	    case exports.INFLATERAW:
+	    case exports.UNZIP:
+	      var status  = zlib_inflate.inflateInit2(
+	        this.strm,
+	        this.windowBits
+	      );
+	      break;
+	    default:
+	      throw new Error("Unknown mode " + this.mode);
+	  }
+	  
+	  if (status !== exports.Z_OK) {
+	    this._error(status);
+	    return;
+	  }
+	  
+	  this.write_in_progress = false;
+	  this.init_done = true;
+	};
+
+	Zlib.prototype.params = function() {
+	  throw new Error("deflateParams Not supported");
+	};
+
+	Zlib.prototype._writeCheck = function() {
+	  if (!this.init_done)
+	    throw new Error("write before init");
+	    
+	  if (this.mode === exports.NONE)
+	    throw new Error("already finalized");
+	    
+	  if (this.write_in_progress)
+	    throw new Error("write already in progress");
+	    
+	  if (this.pending_close)
+	    throw new Error("close is pending");
+	};
+
+	Zlib.prototype.write = function(flush, input, in_off, in_len, out, out_off, out_len) {    
+	  this._writeCheck();
+	  this.write_in_progress = true;
+	  
+	  var self = this;
+	  process.nextTick(function() {
+	    self.write_in_progress = false;
+	    var res = self._write(flush, input, in_off, in_len, out, out_off, out_len);
+	    self.callback(res[0], res[1]);
+	    
+	    if (self.pending_close)
+	      self.close();
+	  });
+	  
+	  return this;
+	};
+
+	// set method for Node buffers, used by pako
+	function bufferSet(data, offset) {
+	  for (var i = 0; i < data.length; i++) {
+	    this[offset + i] = data[i];
+	  }
+	}
+
+	Zlib.prototype.writeSync = function(flush, input, in_off, in_len, out, out_off, out_len) {
+	  this._writeCheck();
+	  return this._write(flush, input, in_off, in_len, out, out_off, out_len);
+	};
+
+	Zlib.prototype._write = function(flush, input, in_off, in_len, out, out_off, out_len) {
+	  this.write_in_progress = true;
+	  
+	  if (flush !== exports.Z_NO_FLUSH &&
+	      flush !== exports.Z_PARTIAL_FLUSH &&
+	      flush !== exports.Z_SYNC_FLUSH &&
+	      flush !== exports.Z_FULL_FLUSH &&
+	      flush !== exports.Z_FINISH &&
+	      flush !== exports.Z_BLOCK) {
+	    throw new Error("Invalid flush value");
+	  }
+	  
+	  if (input == null) {
+	    input = new Buffer(0);
+	    in_len = 0;
+	    in_off = 0;
+	  }
+	  
+	  if (out._set)
+	    out.set = out._set;
+	  else
+	    out.set = bufferSet;
+	  
+	  var strm = this.strm;
+	  strm.avail_in = in_len;
+	  strm.input = input;
+	  strm.next_in = in_off;
+	  strm.avail_out = out_len;
+	  strm.output = out;
+	  strm.next_out = out_off;
+	  
+	  switch (this.mode) {
+	    case exports.DEFLATE:
+	    case exports.GZIP:
+	    case exports.DEFLATERAW:
+	      var status = zlib_deflate.deflate(strm, flush);
+	      break;
+	    case exports.UNZIP:
+	    case exports.INFLATE:
+	    case exports.GUNZIP:
+	    case exports.INFLATERAW:
+	      var status = zlib_inflate.inflate(strm, flush);
+	      break;
+	    default:
+	      throw new Error("Unknown mode " + this.mode);
+	  }
+	  
+	  if (status !== exports.Z_STREAM_END && status !== exports.Z_OK) {
+	    this._error(status);
+	  }
+	  
+	  this.write_in_progress = false;
+	  return [strm.avail_in, strm.avail_out];
+	};
+
+	Zlib.prototype.close = function() {
+	  if (this.write_in_progress) {
+	    this.pending_close = true;
+	    return;
+	  }
+	  
+	  this.pending_close = false;
+	  
+	  if (this.mode === exports.DEFLATE || this.mode === exports.GZIP || this.mode === exports.DEFLATERAW) {
+	    zlib_deflate.deflateEnd(this.strm);
+	  } else {
+	    zlib_inflate.inflateEnd(this.strm);
+	  }
+	  
+	  this.mode = exports.NONE;
+	};
+
+	Zlib.prototype.reset = function() {
+	  switch (this.mode) {
+	    case exports.DEFLATE:
+	    case exports.DEFLATERAW:
+	      var status = zlib_deflate.deflateReset(this.strm);
+	      break;
+	    case exports.INFLATE:
+	    case exports.INFLATERAW:
+	      var status = zlib_inflate.inflateReset(this.strm);
+	      break;
+	  }
+	  
+	  if (status !== exports.Z_OK) {
+	    this._error(status);
+	  }
+	};
+
+	Zlib.prototype._error = function(status) {
+	  this.onerror(msg[status] + ': ' + this.strm.msg, status);
+	  
+	  this.write_in_progress = false;
+	  if (this.pending_close)
+	    this.close();
+	};
+
+	exports.Zlib = Zlib;
+
+	/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(30), __webpack_require__(2).Buffer))
+
+/***/ },
+/* 49 */
+/***/ function(module, exports) {
+
+	'use strict';
+
+	module.exports = {
+	  '2':    'need dictionary',     /* Z_NEED_DICT       2  */
+	  '1':    'stream end',          /* Z_STREAM_END      1  */
+	  '0':    '',                    /* Z_OK              0  */
+	  '-1':   'file error',          /* Z_ERRNO         (-1) */
+	  '-2':   'stream error',        /* Z_STREAM_ERROR  (-2) */
+	  '-3':   'data error',          /* Z_DATA_ERROR    (-3) */
+	  '-4':   'insufficient memory', /* Z_MEM_ERROR     (-4) */
+	  '-5':   'buffer error',        /* Z_BUF_ERROR     (-5) */
+	  '-6':   'incompatible version' /* Z_VERSION_ERROR (-6) */
+	};
+
+
+/***/ },
+/* 50 */
+/***/ function(module, exports) {
+
+	'use strict';
+
+
+	function ZStream() {
+	  /* next input byte */
+	  this.input = null; // JS specific, because we have no pointers
+	  this.next_in = 0;
+	  /* number of bytes available at input */
+	  this.avail_in = 0;
+	  /* total number of input bytes read so far */
+	  this.total_in = 0;
+	  /* next output byte should be put there */
+	  this.output = null; // JS specific, because we have no pointers
+	  this.next_out = 0;
+	  /* remaining free space at output */
+	  this.avail_out = 0;
+	  /* total number of bytes output so far */
+	  this.total_out = 0;
+	  /* last error message, NULL if no error */
+	  this.msg = ''/*Z_NULL*/;
+	  /* not visible by applications */
+	  this.state = null;
+	  /* best guess about the data type: binary or text */
+	  this.data_type = 2/*Z_UNKNOWN*/;
+	  /* adler32 value of the uncompressed data */
+	  this.adler = 0;
+	}
+
+	module.exports = ZStream;
+
+
+/***/ },
+/* 51 */
+/***/ function(module, exports, __webpack_require__) {
+
+	'use strict';
+
+	var utils   = __webpack_require__(52);
+	var trees   = __webpack_require__(53);
+	var adler32 = __webpack_require__(54);
+	var crc32   = __webpack_require__(55);
+	var msg   = __webpack_require__(49);
+
+	/* Public constants ==========================================================*/
+	/* ===========================================================================*/
+
+
+	/* Allowed flush values; see deflate() and inflate() below for details */
+	var Z_NO_FLUSH      = 0;
+	var Z_PARTIAL_FLUSH = 1;
+	//var Z_SYNC_FLUSH    = 2;
+	var Z_FULL_FLUSH    = 3;
+	var Z_FINISH        = 4;
+	var Z_BLOCK         = 5;
+	//var Z_TREES         = 6;
+
+
+	/* Return codes for the compression/decompression functions. Negative values
+	 * are errors, positive values are used for special but normal events.
+	 */
+	var Z_OK            = 0;
+	var Z_STREAM_END    = 1;
+	//var Z_NEED_DICT     = 2;
+	//var Z_ERRNO         = -1;
+	var Z_STREAM_ERROR  = -2;
+	var Z_DATA_ERROR    = -3;
+	//var Z_MEM_ERROR     = -4;
+	var Z_BUF_ERROR     = -5;
+	//var Z_VERSION_ERROR = -6;
+
+
+	/* compression levels */
+	//var Z_NO_COMPRESSION      = 0;
+	//var Z_BEST_SPEED          = 1;
+	//var Z_BEST_COMPRESSION    = 9;
+	var Z_DEFAULT_COMPRESSION = -1;
+
+
+	var Z_FILTERED            = 1;
+	var Z_HUFFMAN_ONLY        = 2;
+	var Z_RLE                 = 3;
+	var Z_FIXED               = 4;
+	var Z_DEFAULT_STRATEGY    = 0;
+
+	/* Possible values of the data_type field (though see inflate()) */
+	//var Z_BINARY              = 0;
+	//var Z_TEXT                = 1;
+	//var Z_ASCII               = 1; // = Z_TEXT
+	var Z_UNKNOWN             = 2;
+
+
+	/* The deflate compression method */
+	var Z_DEFLATED  = 8;
+
+	/*============================================================================*/
+
+
+	var MAX_MEM_LEVEL = 9;
+	/* Maximum value for memLevel in deflateInit2 */
+	var MAX_WBITS = 15;
+	/* 32K LZ77 window */
+	var DEF_MEM_LEVEL = 8;
+
+
+	var LENGTH_CODES  = 29;
+	/* number of length codes, not counting the special END_BLOCK code */
+	var LITERALS      = 256;
+	/* number of literal bytes 0..255 */
+	var L_CODES       = LITERALS + 1 + LENGTH_CODES;
+	/* number of Literal or Length codes, including the END_BLOCK code */
+	var D_CODES       = 30;
+	/* number of distance codes */
+	var BL_CODES      = 19;
+	/* number of codes used to transfer the bit lengths */
+	var HEAP_SIZE     = 2*L_CODES + 1;
+	/* maximum heap size */
+	var MAX_BITS  = 15;
+	/* All codes must not exceed MAX_BITS bits */
+
+	var MIN_MATCH = 3;
+	var MAX_MATCH = 258;
+	var MIN_LOOKAHEAD = (MAX_MATCH + MIN_MATCH + 1);
+
+	var PRESET_DICT = 0x20;
+
+	var INIT_STATE = 42;
+	var EXTRA_STATE = 69;
+	var NAME_STATE = 73;
+	var COMMENT_STATE = 91;
+	var HCRC_STATE = 103;
+	var BUSY_STATE = 113;
+	var FINISH_STATE = 666;
+
+	var BS_NEED_MORE      = 1; /* block not completed, need more input or more output */
+	var BS_BLOCK_DONE     = 2; /* block flush performed */
+	var BS_FINISH_STARTED = 3; /* finish started, need only more output at next deflate */
+	var BS_FINISH_DONE    = 4; /* finish done, accept no more input or output */
+
+	var OS_CODE = 0x03; // Unix :) . Don't detect, use this default.
+
+	function err(strm, errorCode) {
+	  strm.msg = msg[errorCode];
+	  return errorCode;
+	}
+
+	function rank(f) {
+	  return ((f) << 1) - ((f) > 4 ? 9 : 0);
+	}
+
+	function zero(buf) { var len = buf.length; while (--len >= 0) { buf[len] = 0; } }
+
+
+	/* =========================================================================
+	 * Flush as much pending output as possible. All deflate() output goes
+	 * through this function so some applications may wish to modify it
+	 * to avoid allocating a large strm->output buffer and copying into it.
+	 * (See also read_buf()).
+	 */
+	function flush_pending(strm) {
+	  var s = strm.state;
+
+	  //_tr_flush_bits(s);
+	  var len = s.pending;
+	  if (len > strm.avail_out) {
+	    len = strm.avail_out;
+	  }
+	  if (len === 0) { return; }
+
+	  utils.arraySet(strm.output, s.pending_buf, s.pending_out, len, strm.next_out);
+	  strm.next_out += len;
+	  s.pending_out += len;
+	  strm.total_out += len;
+	  strm.avail_out -= len;
+	  s.pending -= len;
+	  if (s.pending === 0) {
+	    s.pending_out = 0;
+	  }
+	}
+
+
+	function flush_block_only (s, last) {
+	  trees._tr_flush_block(s, (s.block_start >= 0 ? s.block_start : -1), s.strstart - s.block_start, last);
+	  s.block_start = s.strstart;
+	  flush_pending(s.strm);
+	}
+
+
+	function put_byte(s, b) {
+	  s.pending_buf[s.pending++] = b;
+	}
+
+
+	/* =========================================================================
+	 * Put a short in the pending buffer. The 16-bit value is put in MSB order.
+	 * IN assertion: the stream state is correct and there is enough room in
+	 * pending_buf.
+	 */
+	function putShortMSB(s, b) {
+	//  put_byte(s, (Byte)(b >> 8));
+	//  put_byte(s, (Byte)(b & 0xff));
+	  s.pending_buf[s.pending++] = (b >>> 8) & 0xff;
+	  s.pending_buf[s.pending++] = b & 0xff;
+	}
+
+
+	/* ===========================================================================
+	 * Read a new buffer from the current input stream, update the adler32
+	 * and total number of bytes read.  All deflate() input goes through
+	 * this function so some applications may wish to modify it to avoid
+	 * allocating a large strm->input buffer and copying from it.
+	 * (See also flush_pending()).
+	 */
+	function read_buf(strm, buf, start, size) {
+	  var len = strm.avail_in;
+
+	  if (len > size) { len = size; }
+	  if (len === 0) { return 0; }
+
+	  strm.avail_in -= len;
+
+	  utils.arraySet(buf, strm.input, strm.next_in, len, start);
+	  if (strm.state.wrap === 1) {
+	    strm.adler = adler32(strm.adler, buf, len, start);
+	  }
+
+	  else if (strm.state.wrap === 2) {
+	    strm.adler = crc32(strm.adler, buf, len, start);
+	  }
+
+	  strm.next_in += len;
+	  strm.total_in += len;
+
+	  return len;
+	}
+
+
+	/* ===========================================================================
+	 * Set match_start to the longest match starting at the given string and
+	 * return its length. Matches shorter or equal to prev_length are discarded,
+	 * in which case the result is equal to prev_length and match_start is
+	 * garbage.
+	 * IN assertions: cur_match is the head of the hash chain for the current
+	 *   string (strstart) and its distance is <= MAX_DIST, and prev_length >= 1
+	 * OUT assertion: the match length is not greater than s->lookahead.
+	 */
+	function longest_match(s, cur_match) {
+	  var chain_length = s.max_chain_length;      /* max hash chain length */
+	  var scan = s.strstart; /* current string */
+	  var match;                       /* matched string */
+	  var len;                           /* length of current match */
+	  var best_len = s.prev_length;              /* best match length so far */
+	  var nice_match = s.nice_match;             /* stop if match long enough */
+	  var limit = (s.strstart > (s.w_size - MIN_LOOKAHEAD)) ?
+	      s.strstart - (s.w_size - MIN_LOOKAHEAD) : 0/*NIL*/;
+
+	  var _win = s.window; // shortcut
+
+	  var wmask = s.w_mask;
+	  var prev  = s.prev;
+
+	  /* Stop when cur_match becomes <= limit. To simplify the code,
+	   * we prevent matches with the string of window index 0.
+	   */
+
+	  var strend = s.strstart + MAX_MATCH;
+	  var scan_end1  = _win[scan + best_len - 1];
+	  var scan_end   = _win[scan + best_len];
+
+	  /* The code is optimized for HASH_BITS >= 8 and MAX_MATCH-2 multiple of 16.
+	   * It is easy to get rid of this optimization if necessary.
+	   */
+	  // Assert(s->hash_bits >= 8 && MAX_MATCH == 258, "Code too clever");
+
+	  /* Do not waste too much time if we already have a good match: */
+	  if (s.prev_length >= s.good_match) {
+	    chain_length >>= 2;
+	  }
+	  /* Do not look for matches beyond the end of the input. This is necessary
+	   * to make deflate deterministic.
+	   */
+	  if (nice_match > s.lookahead) { nice_match = s.lookahead; }
+
+	  // Assert((ulg)s->strstart <= s->window_size-MIN_LOOKAHEAD, "need lookahead");
+
+	  do {
+	    // Assert(cur_match < s->strstart, "no future");
+	    match = cur_match;
+
+	    /* Skip to next match if the match length cannot increase
+	     * or if the match length is less than 2.  Note that the checks below
+	     * for insufficient lookahead only occur occasionally for performance
+	     * reasons.  Therefore uninitialized memory will be accessed, and
+	     * conditional jumps will be made that depend on those values.
+	     * However the length of the match is limited to the lookahead, so
+	     * the output of deflate is not affected by the uninitialized values.
+	     */
+
+	    if (_win[match + best_len]     !== scan_end  ||
+	        _win[match + best_len - 1] !== scan_end1 ||
+	        _win[match]                !== _win[scan] ||
+	        _win[++match]              !== _win[scan + 1]) {
+	      continue;
+	    }
+
+	    /* The check at best_len-1 can be removed because it will be made
+	     * again later. (This heuristic is not always a win.)
+	     * It is not necessary to compare scan[2] and match[2] since they
+	     * are always equal when the other bytes match, given that
+	     * the hash keys are equal and that HASH_BITS >= 8.
+	     */
+	    scan += 2;
+	    match++;
+	    // Assert(*scan == *match, "match[2]?");
+
+	    /* We check for insufficient lookahead only every 8th comparison;
+	     * the 256th check will be made at strstart+258.
+	     */
+	    do {
+	      /*jshint noempty:false*/
+	    } while (_win[++scan] === _win[++match] && _win[++scan] === _win[++match] &&
+	             _win[++scan] === _win[++match] && _win[++scan] === _win[++match] &&
+	             _win[++scan] === _win[++match] && _win[++scan] === _win[++match] &&
+	             _win[++scan] === _win[++match] && _win[++scan] === _win[++match] &&
+	             scan < strend);
+
+	    // Assert(scan <= s->window+(unsigned)(s->window_size-1), "wild scan");
+
+	    len = MAX_MATCH - (strend - scan);
+	    scan = strend - MAX_MATCH;
+
+	    if (len > best_len) {
+	      s.match_start = cur_match;
+	      best_len = len;
+	      if (len >= nice_match) {
+	        break;
+	      }
+	      scan_end1  = _win[scan + best_len - 1];
+	      scan_end   = _win[scan + best_len];
+	    }
+	  } while ((cur_match = prev[cur_match & wmask]) > limit && --chain_length !== 0);
+
+	  if (best_len <= s.lookahead) {
+	    return best_len;
+	  }
+	  return s.lookahead;
+	}
+
+
+	/* ===========================================================================
+	 * Fill the window when the lookahead becomes insufficient.
+	 * Updates strstart and lookahead.
+	 *
+	 * IN assertion: lookahead < MIN_LOOKAHEAD
+	 * OUT assertions: strstart <= window_size-MIN_LOOKAHEAD
+	 *    At least one byte has been read, or avail_in == 0; reads are
+	 *    performed for at least two bytes (required for the zip translate_eol
+	 *    option -- not supported here).
+	 */
+	function fill_window(s) {
+	  var _w_size = s.w_size;
+	  var p, n, m, more, str;
+
+	  //Assert(s->lookahead < MIN_LOOKAHEAD, "already enough lookahead");
+
+	  do {
+	    more = s.window_size - s.lookahead - s.strstart;
+
+	    // JS ints have 32 bit, block below not needed
+	    /* Deal with !@#$% 64K limit: */
+	    //if (sizeof(int) <= 2) {
+	    //    if (more == 0 && s->strstart == 0 && s->lookahead == 0) {
+	    //        more = wsize;
+	    //
+	    //  } else if (more == (unsigned)(-1)) {
+	    //        /* Very unlikely, but possible on 16 bit machine if
+	    //         * strstart == 0 && lookahead == 1 (input done a byte at time)
+	    //         */
+	    //        more--;
+	    //    }
+	    //}
+
+
+	    /* If the window is almost full and there is insufficient lookahead,
+	     * move the upper half to the lower one to make room in the upper half.
+	     */
+	    if (s.strstart >= _w_size + (_w_size - MIN_LOOKAHEAD)) {
+
+	      utils.arraySet(s.window, s.window, _w_size, _w_size, 0);
+	      s.match_start -= _w_size;
+	      s.strstart -= _w_size;
+	      /* we now have strstart >= MAX_DIST */
+	      s.block_start -= _w_size;
+
+	      /* Slide the hash table (could be avoided with 32 bit values
+	       at the expense of memory usage). We slide even when level == 0
+	       to keep the hash table consistent if we switch back to level > 0
+	       later. (Using level 0 permanently is not an optimal usage of
+	       zlib, so we don't care about this pathological case.)
+	       */
+
+	      n = s.hash_size;
+	      p = n;
+	      do {
+	        m = s.head[--p];
+	        s.head[p] = (m >= _w_size ? m - _w_size : 0);
+	      } while (--n);
+
+	      n = _w_size;
+	      p = n;
+	      do {
+	        m = s.prev[--p];
+	        s.prev[p] = (m >= _w_size ? m - _w_size : 0);
+	        /* If n is not on any hash chain, prev[n] is garbage but
+	         * its value will never be used.
+	         */
+	      } while (--n);
+
+	      more += _w_size;
+	    }
+	    if (s.strm.avail_in === 0) {
+	      break;
+	    }
+
+	    /* If there was no sliding:
+	     *    strstart <= WSIZE+MAX_DIST-1 && lookahead <= MIN_LOOKAHEAD - 1 &&
+	     *    more == window_size - lookahead - strstart
+	     * => more >= window_size - (MIN_LOOKAHEAD-1 + WSIZE + MAX_DIST-1)
+	     * => more >= window_size - 2*WSIZE + 2
+	     * In the BIG_MEM or MMAP case (not yet supported),
+	     *   window_size == input_size + MIN_LOOKAHEAD  &&
+	     *   strstart + s->lookahead <= input_size => more >= MIN_LOOKAHEAD.
+	     * Otherwise, window_size == 2*WSIZE so more >= 2.
+	     * If there was sliding, more >= WSIZE. So in all cases, more >= 2.
+	     */
+	    //Assert(more >= 2, "more < 2");
+	    n = read_buf(s.strm, s.window, s.strstart + s.lookahead, more);
+	    s.lookahead += n;
+
+	    /* Initialize the hash value now that we have some input: */
+	    if (s.lookahead + s.insert >= MIN_MATCH) {
+	      str = s.strstart - s.insert;
+	      s.ins_h = s.window[str];
+
+	      /* UPDATE_HASH(s, s->ins_h, s->window[str + 1]); */
+	      s.ins_h = ((s.ins_h << s.hash_shift) ^ s.window[str + 1]) & s.hash_mask;
+	//#if MIN_MATCH != 3
+	//        Call update_hash() MIN_MATCH-3 more times
+	//#endif
+	      while (s.insert) {
+	        /* UPDATE_HASH(s, s->ins_h, s->window[str + MIN_MATCH-1]); */
+	        s.ins_h = ((s.ins_h << s.hash_shift) ^ s.window[str + MIN_MATCH-1]) & s.hash_mask;
+
+	        s.prev[str & s.w_mask] = s.head[s.ins_h];
+	        s.head[s.ins_h] = str;
+	        str++;
+	        s.insert--;
+	        if (s.lookahead + s.insert < MIN_MATCH) {
+	          break;
+	        }
+	      }
+	    }
+	    /* If the whole input has less than MIN_MATCH bytes, ins_h is garbage,
+	     * but this is not important since only literal bytes will be emitted.
+	     */
+
+	  } while (s.lookahead < MIN_LOOKAHEAD && s.strm.avail_in !== 0);
+
+	  /* If the WIN_INIT bytes after the end of the current data have never been
+	   * written, then zero those bytes in order to avoid memory check reports of
+	   * the use of uninitialized (or uninitialised as Julian writes) bytes by
+	   * the longest match routines.  Update the high water mark for the next
+	   * time through here.  WIN_INIT is set to MAX_MATCH since the longest match
+	   * routines allow scanning to strstart + MAX_MATCH, ignoring lookahead.
+	   */
+	//  if (s.high_water < s.window_size) {
+	//    var curr = s.strstart + s.lookahead;
+	//    var init = 0;
+	//
+	//    if (s.high_water < curr) {
+	//      /* Previous high water mark below current data -- zero WIN_INIT
+	//       * bytes or up to end of window, whichever is less.
+	//       */
+	//      init = s.window_size - curr;
+	//      if (init > WIN_INIT)
+	//        init = WIN_INIT;
+	//      zmemzero(s->window + curr, (unsigned)init);
+	//      s->high_water = curr + init;
+	//    }
+	//    else if (s->high_water < (ulg)curr + WIN_INIT) {
+	//      /* High water mark at or above current data, but below current data
+	//       * plus WIN_INIT -- zero out to current data plus WIN_INIT, or up
+	//       * to end of window, whichever is less.
+	//       */
+	//      init = (ulg)curr + WIN_INIT - s->high_water;
+	//      if (init > s->window_size - s->high_water)
+	//        init = s->window_size - s->high_water;
+	//      zmemzero(s->window + s->high_water, (unsigned)init);
+	//      s->high_water += init;
+	//    }
+	//  }
+	//
+	//  Assert((ulg)s->strstart <= s->window_size - MIN_LOOKAHEAD,
+	//    "not enough room for search");
+	}
+
+	/* ===========================================================================
+	 * Copy without compression as much as possible from the input stream, return
+	 * the current block state.
+	 * This function does not insert new strings in the dictionary since
+	 * uncompressible data is probably not useful. This function is used
+	 * only for the level=0 compression option.
+	 * NOTE: this function should be optimized to avoid extra copying from
+	 * window to pending_buf.
+	 */
+	function deflate_stored(s, flush) {
+	  /* Stored blocks are limited to 0xffff bytes, pending_buf is limited
+	   * to pending_buf_size, and each stored block has a 5 byte header:
+	   */
+	  var max_block_size = 0xffff;
+
+	  if (max_block_size > s.pending_buf_size - 5) {
+	    max_block_size = s.pending_buf_size - 5;
+	  }
+
+	  /* Copy as much as possible from input to output: */
+	  for (;;) {
+	    /* Fill the window as much as possible: */
+	    if (s.lookahead <= 1) {
+
+	      //Assert(s->strstart < s->w_size+MAX_DIST(s) ||
+	      //  s->block_start >= (long)s->w_size, "slide too late");
+	//      if (!(s.strstart < s.w_size + (s.w_size - MIN_LOOKAHEAD) ||
+	//        s.block_start >= s.w_size)) {
+	//        throw  new Error("slide too late");
+	//      }
+
+	      fill_window(s);
+	      if (s.lookahead === 0 && flush === Z_NO_FLUSH) {
+	        return BS_NEED_MORE;
+	      }
+
+	      if (s.lookahead === 0) {
+	        break;
+	      }
+	      /* flush the current block */
+	    }
+	    //Assert(s->block_start >= 0L, "block gone");
+	//    if (s.block_start < 0) throw new Error("block gone");
+
+	    s.strstart += s.lookahead;
+	    s.lookahead = 0;
+
+	    /* Emit a stored block if pending_buf will be full: */
+	    var max_start = s.block_start + max_block_size;
+
+	    if (s.strstart === 0 || s.strstart >= max_start) {
+	      /* strstart == 0 is possible when wraparound on 16-bit machine */
+	      s.lookahead = s.strstart - max_start;
+	      s.strstart = max_start;
+	      /*** FLUSH_BLOCK(s, 0); ***/
+	      flush_block_only(s, false);
+	      if (s.strm.avail_out === 0) {
+	        return BS_NEED_MORE;
+	      }
+	      /***/
+
+
+	    }
+	    /* Flush if we may have to slide, otherwise block_start may become
+	     * negative and the data will be gone:
+	     */
+	    if (s.strstart - s.block_start >= (s.w_size - MIN_LOOKAHEAD)) {
+	      /*** FLUSH_BLOCK(s, 0); ***/
+	      flush_block_only(s, false);
+	      if (s.strm.avail_out === 0) {
+	        return BS_NEED_MORE;
+	      }
+	      /***/
+	    }
+	  }
+
+	  s.insert = 0;
+
+	  if (flush === Z_FINISH) {
+	    /*** FLUSH_BLOCK(s, 1); ***/
+	    flush_block_only(s, true);
+	    if (s.strm.avail_out === 0) {
+	      return BS_FINISH_STARTED;
+	    }
+	    /***/
+	    return BS_FINISH_DONE;
+	  }
+
+	  if (s.strstart > s.block_start) {
+	    /*** FLUSH_BLOCK(s, 0); ***/
+	    flush_block_only(s, false);
+	    if (s.strm.avail_out === 0) {
+	      return BS_NEED_MORE;
+	    }
+	    /***/
+	  }
+
+	  return BS_NEED_MORE;
+	}
+
+	/* ===========================================================================
+	 * Compress as much as possible from the input stream, return the current
+	 * block state.
+	 * This function does not perform lazy evaluation of matches and inserts
+	 * new strings in the dictionary only for unmatched strings or for short
+	 * matches. It is used only for the fast compression options.
+	 */
+	function deflate_fast(s, flush) {
+	  var hash_head;        /* head of the hash chain */
+	  var bflush;           /* set if current block must be flushed */
+
+	  for (;;) {
+	    /* Make sure that we always have enough lookahead, except
+	     * at the end of the input file. We need MAX_MATCH bytes
+	     * for the next match, plus MIN_MATCH bytes to insert the
+	     * string following the next match.
+	     */
+	    if (s.lookahead < MIN_LOOKAHEAD) {
+	      fill_window(s);
+	      if (s.lookahead < MIN_LOOKAHEAD && flush === Z_NO_FLUSH) {
+	        return BS_NEED_MORE;
+	      }
+	      if (s.lookahead === 0) {
+	        break; /* flush the current block */
+	      }
+	    }
+
+	    /* Insert the string window[strstart .. strstart+2] in the
+	     * dictionary, and set hash_head to the head of the hash chain:
+	     */
+	    hash_head = 0/*NIL*/;
+	    if (s.lookahead >= MIN_MATCH) {
+	      /*** INSERT_STRING(s, s.strstart, hash_head); ***/
+	      s.ins_h = ((s.ins_h << s.hash_shift) ^ s.window[s.strstart + MIN_MATCH - 1]) & s.hash_mask;
+	      hash_head = s.prev[s.strstart & s.w_mask] = s.head[s.ins_h];
+	      s.head[s.ins_h] = s.strstart;
+	      /***/
+	    }
+
+	    /* Find the longest match, discarding those <= prev_length.
+	     * At this point we have always match_length < MIN_MATCH
+	     */
+	    if (hash_head !== 0/*NIL*/ && ((s.strstart - hash_head) <= (s.w_size - MIN_LOOKAHEAD))) {
+	      /* To simplify the code, we prevent matches with the string
+	       * of window index 0 (in particular we have to avoid a match
+	       * of the string with itself at the start of the input file).
+	       */
+	      s.match_length = longest_match(s, hash_head);
+	      /* longest_match() sets match_start */
+	    }
+	    if (s.match_length >= MIN_MATCH) {
+	      // check_match(s, s.strstart, s.match_start, s.match_length); // for debug only
+
+	      /*** _tr_tally_dist(s, s.strstart - s.match_start,
+	                     s.match_length - MIN_MATCH, bflush); ***/
+	      bflush = trees._tr_tally(s, s.strstart - s.match_start, s.match_length - MIN_MATCH);
+
+	      s.lookahead -= s.match_length;
+
+	      /* Insert new strings in the hash table only if the match length
+	       * is not too large. This saves time but degrades compression.
+	       */
+	      if (s.match_length <= s.max_lazy_match/*max_insert_length*/ && s.lookahead >= MIN_MATCH) {
+	        s.match_length--; /* string at strstart already in table */
+	        do {
+	          s.strstart++;
+	          /*** INSERT_STRING(s, s.strstart, hash_head); ***/
+	          s.ins_h = ((s.ins_h << s.hash_shift) ^ s.window[s.strstart + MIN_MATCH - 1]) & s.hash_mask;
+	          hash_head = s.prev[s.strstart & s.w_mask] = s.head[s.ins_h];
+	          s.head[s.ins_h] = s.strstart;
+	          /***/
+	          /* strstart never exceeds WSIZE-MAX_MATCH, so there are
+	           * always MIN_MATCH bytes ahead.
+	           */
+	        } while (--s.match_length !== 0);
+	        s.strstart++;
+	      } else
+	      {
+	        s.strstart += s.match_length;
+	        s.match_length = 0;
+	        s.ins_h = s.window[s.strstart];
+	        /* UPDATE_HASH(s, s.ins_h, s.window[s.strstart+1]); */
+	        s.ins_h = ((s.ins_h << s.hash_shift) ^ s.window[s.strstart + 1]) & s.hash_mask;
+
+	//#if MIN_MATCH != 3
+	//                Call UPDATE_HASH() MIN_MATCH-3 more times
+	//#endif
+	        /* If lookahead < MIN_MATCH, ins_h is garbage, but it does not
+	         * matter since it will be recomputed at next deflate call.
+	         */
+	      }
+	    } else {
+	      /* No match, output a literal byte */
+	      //Tracevv((stderr,"%c", s.window[s.strstart]));
+	      /*** _tr_tally_lit(s, s.window[s.strstart], bflush); ***/
+	      bflush = trees._tr_tally(s, 0, s.window[s.strstart]);
+
+	      s.lookahead--;
+	      s.strstart++;
+	    }
+	    if (bflush) {
+	      /*** FLUSH_BLOCK(s, 0); ***/
+	      flush_block_only(s, false);
+	      if (s.strm.avail_out === 0) {
+	        return BS_NEED_MORE;
+	      }
+	      /***/
+	    }
+	  }
+	  s.insert = ((s.strstart < (MIN_MATCH-1)) ? s.strstart : MIN_MATCH-1);
+	  if (flush === Z_FINISH) {
+	    /*** FLUSH_BLOCK(s, 1); ***/
+	    flush_block_only(s, true);
+	    if (s.strm.avail_out === 0) {
+	      return BS_FINISH_STARTED;
+	    }
+	    /***/
+	    return BS_FINISH_DONE;
+	  }
+	  if (s.last_lit) {
+	    /*** FLUSH_BLOCK(s, 0); ***/
+	    flush_block_only(s, false);
+	    if (s.strm.avail_out === 0) {
+	      return BS_NEED_MORE;
+	    }
+	    /***/
+	  }
+	  return BS_BLOCK_DONE;
+	}
+
+	/* ===========================================================================
+	 * Same as above, but achieves better compression. We use a lazy
+	 * evaluation for matches: a match is finally adopted only if there is
+	 * no better match at the next window position.
+	 */
+	function deflate_slow(s, flush) {
+	  var hash_head;          /* head of hash chain */
+	  var bflush;              /* set if current block must be flushed */
+
+	  var max_insert;
+
+	  /* Process the input block. */
+	  for (;;) {
+	    /* Make sure that we always have enough lookahead, except
+	     * at the end of the input file. We need MAX_MATCH bytes
+	     * for the next match, plus MIN_MATCH bytes to insert the
+	     * string following the next match.
+	     */
+	    if (s.lookahead < MIN_LOOKAHEAD) {
+	      fill_window(s);
+	      if (s.lookahead < MIN_LOOKAHEAD && flush === Z_NO_FLUSH) {
+	        return BS_NEED_MORE;
+	      }
+	      if (s.lookahead === 0) { break; } /* flush the current block */
+	    }
+
+	    /* Insert the string window[strstart .. strstart+2] in the
+	     * dictionary, and set hash_head to the head of the hash chain:
+	     */
+	    hash_head = 0/*NIL*/;
+	    if (s.lookahead >= MIN_MATCH) {
+	      /*** INSERT_STRING(s, s.strstart, hash_head); ***/
+	      s.ins_h = ((s.ins_h << s.hash_shift) ^ s.window[s.strstart + MIN_MATCH - 1]) & s.hash_mask;
+	      hash_head = s.prev[s.strstart & s.w_mask] = s.head[s.ins_h];
+	      s.head[s.ins_h] = s.strstart;
+	      /***/
+	    }
+
+	    /* Find the longest match, discarding those <= prev_length.
+	     */
+	    s.prev_length = s.match_length;
+	    s.prev_match = s.match_start;
+	    s.match_length = MIN_MATCH-1;
+
+	    if (hash_head !== 0/*NIL*/ && s.prev_length < s.max_lazy_match &&
+	        s.strstart - hash_head <= (s.w_size-MIN_LOOKAHEAD)/*MAX_DIST(s)*/) {
+	      /* To simplify the code, we prevent matches with the string
+	       * of window index 0 (in particular we have to avoid a match
+	       * of the string with itself at the start of the input file).
+	       */
+	      s.match_length = longest_match(s, hash_head);
+	      /* longest_match() sets match_start */
+
+	      if (s.match_length <= 5 &&
+	         (s.strategy === Z_FILTERED || (s.match_length === MIN_MATCH && s.strstart - s.match_start > 4096/*TOO_FAR*/))) {
+
+	        /* If prev_match is also MIN_MATCH, match_start is garbage
+	         * but we will ignore the current match anyway.
+	         */
+	        s.match_length = MIN_MATCH-1;
+	      }
+	    }
+	    /* If there was a match at the previous step and the current
+	     * match is not better, output the previous match:
+	     */
+	    if (s.prev_length >= MIN_MATCH && s.match_length <= s.prev_length) {
+	      max_insert = s.strstart + s.lookahead - MIN_MATCH;
+	      /* Do not insert strings in hash table beyond this. */
+
+	      //check_match(s, s.strstart-1, s.prev_match, s.prev_length);
+
+	      /***_tr_tally_dist(s, s.strstart - 1 - s.prev_match,
+	                     s.prev_length - MIN_MATCH, bflush);***/
+	      bflush = trees._tr_tally(s, s.strstart - 1- s.prev_match, s.prev_length - MIN_MATCH);
+	      /* Insert in hash table all strings up to the end of the match.
+	       * strstart-1 and strstart are already inserted. If there is not
+	       * enough lookahead, the last two strings are not inserted in
+	       * the hash table.
+	       */
+	      s.lookahead -= s.prev_length-1;
+	      s.prev_length -= 2;
+	      do {
+	        if (++s.strstart <= max_insert) {
+	          /*** INSERT_STRING(s, s.strstart, hash_head); ***/
+	          s.ins_h = ((s.ins_h << s.hash_shift) ^ s.window[s.strstart + MIN_MATCH - 1]) & s.hash_mask;
+	          hash_head = s.prev[s.strstart & s.w_mask] = s.head[s.ins_h];
+	          s.head[s.ins_h] = s.strstart;
+	          /***/
+	        }
+	      } while (--s.prev_length !== 0);
+	      s.match_available = 0;
+	      s.match_length = MIN_MATCH-1;
+	      s.strstart++;
+
+	      if (bflush) {
+	        /*** FLUSH_BLOCK(s, 0); ***/
+	        flush_block_only(s, false);
+	        if (s.strm.avail_out === 0) {
+	          return BS_NEED_MORE;
+	        }
+	        /***/
+	      }
+
+	    } else if (s.match_available) {
+	      /* If there was no match at the previous position, output a
+	       * single literal. If there was a match but the current match
+	       * is longer, truncate the previous match to a single literal.
+	       */
+	      //Tracevv((stderr,"%c", s->window[s->strstart-1]));
+	      /*** _tr_tally_lit(s, s.window[s.strstart-1], bflush); ***/
+	      bflush = trees._tr_tally(s, 0, s.window[s.strstart-1]);
+
+	      if (bflush) {
+	        /*** FLUSH_BLOCK_ONLY(s, 0) ***/
+	        flush_block_only(s, false);
+	        /***/
+	      }
+	      s.strstart++;
+	      s.lookahead--;
+	      if (s.strm.avail_out === 0) {
+	        return BS_NEED_MORE;
+	      }
+	    } else {
+	      /* There is no previous match to compare with, wait for
+	       * the next step to decide.
+	       */
+	      s.match_available = 1;
+	      s.strstart++;
+	      s.lookahead--;
+	    }
+	  }
+	  //Assert (flush != Z_NO_FLUSH, "no flush?");
+	  if (s.match_available) {
+	    //Tracevv((stderr,"%c", s->window[s->strstart-1]));
+	    /*** _tr_tally_lit(s, s.window[s.strstart-1], bflush); ***/
+	    bflush = trees._tr_tally(s, 0, s.window[s.strstart-1]);
+
+	    s.match_available = 0;
+	  }
+	  s.insert = s.strstart < MIN_MATCH-1 ? s.strstart : MIN_MATCH-1;
+	  if (flush === Z_FINISH) {
+	    /*** FLUSH_BLOCK(s, 1); ***/
+	    flush_block_only(s, true);
+	    if (s.strm.avail_out === 0) {
+	      return BS_FINISH_STARTED;
+	    }
+	    /***/
+	    return BS_FINISH_DONE;
+	  }
+	  if (s.last_lit) {
+	    /*** FLUSH_BLOCK(s, 0); ***/
+	    flush_block_only(s, false);
+	    if (s.strm.avail_out === 0) {
+	      return BS_NEED_MORE;
+	    }
+	    /***/
+	  }
+
+	  return BS_BLOCK_DONE;
+	}
+
+
+	/* ===========================================================================
+	 * For Z_RLE, simply look for runs of bytes, generate matches only of distance
+	 * one.  Do not maintain a hash table.  (It will be regenerated if this run of
+	 * deflate switches away from Z_RLE.)
+	 */
+	function deflate_rle(s, flush) {
+	  var bflush;            /* set if current block must be flushed */
+	  var prev;              /* byte at distance one to match */
+	  var scan, strend;      /* scan goes up to strend for length of run */
+
+	  var _win = s.window;
+
+	  for (;;) {
+	    /* Make sure that we always have enough lookahead, except
+	     * at the end of the input file. We need MAX_MATCH bytes
+	     * for the longest run, plus one for the unrolled loop.
+	     */
+	    if (s.lookahead <= MAX_MATCH) {
+	      fill_window(s);
+	      if (s.lookahead <= MAX_MATCH && flush === Z_NO_FLUSH) {
+	        return BS_NEED_MORE;
+	      }
+	      if (s.lookahead === 0) { break; } /* flush the current block */
+	    }
+
+	    /* See how many times the previous byte repeats */
+	    s.match_length = 0;
+	    if (s.lookahead >= MIN_MATCH && s.strstart > 0) {
+	      scan = s.strstart - 1;
+	      prev = _win[scan];
+	      if (prev === _win[++scan] && prev === _win[++scan] && prev === _win[++scan]) {
+	        strend = s.strstart + MAX_MATCH;
+	        do {
+	          /*jshint noempty:false*/
+	        } while (prev === _win[++scan] && prev === _win[++scan] &&
+	                 prev === _win[++scan] && prev === _win[++scan] &&
+	                 prev === _win[++scan] && prev === _win[++scan] &&
+	                 prev === _win[++scan] && prev === _win[++scan] &&
+	                 scan < strend);
+	        s.match_length = MAX_MATCH - (strend - scan);
+	        if (s.match_length > s.lookahead) {
+	          s.match_length = s.lookahead;
+	        }
+	      }
+	      //Assert(scan <= s->window+(uInt)(s->window_size-1), "wild scan");
+	    }
+
+	    /* Emit match if have run of MIN_MATCH or longer, else emit literal */
+	    if (s.match_length >= MIN_MATCH) {
+	      //check_match(s, s.strstart, s.strstart - 1, s.match_length);
+
+	      /*** _tr_tally_dist(s, 1, s.match_length - MIN_MATCH, bflush); ***/
+	      bflush = trees._tr_tally(s, 1, s.match_length - MIN_MATCH);
+
+	      s.lookahead -= s.match_length;
+	      s.strstart += s.match_length;
+	      s.match_length = 0;
+	    } else {
+	      /* No match, output a literal byte */
+	      //Tracevv((stderr,"%c", s->window[s->strstart]));
+	      /*** _tr_tally_lit(s, s.window[s.strstart], bflush); ***/
+	      bflush = trees._tr_tally(s, 0, s.window[s.strstart]);
+
+	      s.lookahead--;
+	      s.strstart++;
+	    }
+	    if (bflush) {
+	      /*** FLUSH_BLOCK(s, 0); ***/
+	      flush_block_only(s, false);
+	      if (s.strm.avail_out === 0) {
+	        return BS_NEED_MORE;
+	      }
+	      /***/
+	    }
+	  }
+	  s.insert = 0;
+	  if (flush === Z_FINISH) {
+	    /*** FLUSH_BLOCK(s, 1); ***/
+	    flush_block_only(s, true);
+	    if (s.strm.avail_out === 0) {
+	      return BS_FINISH_STARTED;
+	    }
+	    /***/
+	    return BS_FINISH_DONE;
+	  }
+	  if (s.last_lit) {
+	    /*** FLUSH_BLOCK(s, 0); ***/
+	    flush_block_only(s, false);
+	    if (s.strm.avail_out === 0) {
+	      return BS_NEED_MORE;
+	    }
+	    /***/
+	  }
+	  return BS_BLOCK_DONE;
+	}
+
+	/* ===========================================================================
+	 * For Z_HUFFMAN_ONLY, do not look for matches.  Do not maintain a hash table.
+	 * (It will be regenerated if this run of deflate switches away from Huffman.)
+	 */
+	function deflate_huff(s, flush) {
+	  var bflush;             /* set if current block must be flushed */
+
+	  for (;;) {
+	    /* Make sure that we have a literal to write. */
+	    if (s.lookahead === 0) {
+	      fill_window(s);
+	      if (s.lookahead === 0) {
+	        if (flush === Z_NO_FLUSH) {
+	          return BS_NEED_MORE;
+	        }
+	        break;      /* flush the current block */
+	      }
+	    }
+
+	    /* Output a literal byte */
+	    s.match_length = 0;
+	    //Tracevv((stderr,"%c", s->window[s->strstart]));
+	    /*** _tr_tally_lit(s, s.window[s.strstart], bflush); ***/
+	    bflush = trees._tr_tally(s, 0, s.window[s.strstart]);
+	    s.lookahead--;
+	    s.strstart++;
+	    if (bflush) {
+	      /*** FLUSH_BLOCK(s, 0); ***/
+	      flush_block_only(s, false);
+	      if (s.strm.avail_out === 0) {
+	        return BS_NEED_MORE;
+	      }
+	      /***/
+	    }
+	  }
+	  s.insert = 0;
+	  if (flush === Z_FINISH) {
+	    /*** FLUSH_BLOCK(s, 1); ***/
+	    flush_block_only(s, true);
+	    if (s.strm.avail_out === 0) {
+	      return BS_FINISH_STARTED;
+	    }
+	    /***/
+	    return BS_FINISH_DONE;
+	  }
+	  if (s.last_lit) {
+	    /*** FLUSH_BLOCK(s, 0); ***/
+	    flush_block_only(s, false);
+	    if (s.strm.avail_out === 0) {
+	      return BS_NEED_MORE;
+	    }
+	    /***/
+	  }
+	  return BS_BLOCK_DONE;
+	}
+
+	/* Values for max_lazy_match, good_match and max_chain_length, depending on
+	 * the desired pack level (0..9). The values given below have been tuned to
+	 * exclude worst case performance for pathological files. Better values may be
+	 * found for specific files.
+	 */
+	var Config = function (good_length, max_lazy, nice_length, max_chain, func) {
+	  this.good_length = good_length;
+	  this.max_lazy = max_lazy;
+	  this.nice_length = nice_length;
+	  this.max_chain = max_chain;
+	  this.func = func;
+	};
+
+	var configuration_table;
+
+	configuration_table = [
+	  /*      good lazy nice chain */
+	  new Config(0, 0, 0, 0, deflate_stored),          /* 0 store only */
+	  new Config(4, 4, 8, 4, deflate_fast),            /* 1 max speed, no lazy matches */
+	  new Config(4, 5, 16, 8, deflate_fast),           /* 2 */
+	  new Config(4, 6, 32, 32, deflate_fast),          /* 3 */
+
+	  new Config(4, 4, 16, 16, deflate_slow),          /* 4 lazy matches */
+	  new Config(8, 16, 32, 32, deflate_slow),         /* 5 */
+	  new Config(8, 16, 128, 128, deflate_slow),       /* 6 */
+	  new Config(8, 32, 128, 256, deflate_slow),       /* 7 */
+	  new Config(32, 128, 258, 1024, deflate_slow),    /* 8 */
+	  new Config(32, 258, 258, 4096, deflate_slow)     /* 9 max compression */
+	];
+
+
+	/* ===========================================================================
+	 * Initialize the "longest match" routines for a new zlib stream
+	 */
+	function lm_init(s) {
+	  s.window_size = 2 * s.w_size;
+
+	  /*** CLEAR_HASH(s); ***/
+	  zero(s.head); // Fill with NIL (= 0);
+
+	  /* Set the default configuration parameters:
+	   */
+	  s.max_lazy_match = configuration_table[s.level].max_lazy;
+	  s.good_match = configuration_table[s.level].good_length;
+	  s.nice_match = configuration_table[s.level].nice_length;
+	  s.max_chain_length = configuration_table[s.level].max_chain;
+
+	  s.strstart = 0;
+	  s.block_start = 0;
+	  s.lookahead = 0;
+	  s.insert = 0;
+	  s.match_length = s.prev_length = MIN_MATCH - 1;
+	  s.match_available = 0;
+	  s.ins_h = 0;
+	}
+
+
+	function DeflateState() {
+	  this.strm = null;            /* pointer back to this zlib stream */
+	  this.status = 0;            /* as the name implies */
+	  this.pending_buf = null;      /* output still pending */
+	  this.pending_buf_size = 0;  /* size of pending_buf */
+	  this.pending_out = 0;       /* next pending byte to output to the stream */
+	  this.pending = 0;           /* nb of bytes in the pending buffer */
+	  this.wrap = 0;              /* bit 0 true for zlib, bit 1 true for gzip */
+	  this.gzhead = null;         /* gzip header information to write */
+	  this.gzindex = 0;           /* where in extra, name, or comment */
+	  this.method = Z_DEFLATED; /* can only be DEFLATED */
+	  this.last_flush = -1;   /* value of flush param for previous deflate call */
+
+	  this.w_size = 0;  /* LZ77 window size (32K by default) */
+	  this.w_bits = 0;  /* log2(w_size)  (8..16) */
+	  this.w_mask = 0;  /* w_size - 1 */
+
+	  this.window = null;
+	  /* Sliding window. Input bytes are read into the second half of the window,
+	   * and move to the first half later to keep a dictionary of at least wSize
+	   * bytes. With this organization, matches are limited to a distance of
+	   * wSize-MAX_MATCH bytes, but this ensures that IO is always
+	   * performed with a length multiple of the block size.
+	   */
+
+	  this.window_size = 0;
+	  /* Actual size of window: 2*wSize, except when the user input buffer
+	   * is directly used as sliding window.
+	   */
+
+	  this.prev = null;
+	  /* Link to older string with same hash index. To limit the size of this
+	   * array to 64K, this link is maintained only for the last 32K strings.
+	   * An index in this array is thus a window index modulo 32K.
+	   */
+
+	  this.head = null;   /* Heads of the hash chains or NIL. */
+
+	  this.ins_h = 0;       /* hash index of string to be inserted */
+	  this.hash_size = 0;   /* number of elements in hash table */
+	  this.hash_bits = 0;   /* log2(hash_size) */
+	  this.hash_mask = 0;   /* hash_size-1 */
+
+	  this.hash_shift = 0;
+	  /* Number of bits by which ins_h must be shifted at each input
+	   * step. It must be such that after MIN_MATCH steps, the oldest
+	   * byte no longer takes part in the hash key, that is:
+	   *   hash_shift * MIN_MATCH >= hash_bits
+	   */
+
+	  this.block_start = 0;
+	  /* Window position at the beginning of the current output block. Gets
+	   * negative when the window is moved backwards.
+	   */
+
+	  this.match_length = 0;      /* length of best match */
+	  this.prev_match = 0;        /* previous match */
+	  this.match_available = 0;   /* set if previous match exists */
+	  this.strstart = 0;          /* start of string to insert */
+	  this.match_start = 0;       /* start of matching string */
+	  this.lookahead = 0;         /* number of valid bytes ahead in window */
+
+	  this.prev_length = 0;
+	  /* Length of the best match at previous step. Matches not greater than this
+	   * are discarded. This is used in the lazy match evaluation.
+	   */
+
+	  this.max_chain_length = 0;
+	  /* To speed up deflation, hash chains are never searched beyond this
+	   * length.  A higher limit improves compression ratio but degrades the
+	   * speed.
+	   */
+
+	  this.max_lazy_match = 0;
+	  /* Attempt to find a better match only when the current match is strictly
+	   * smaller than this value. This mechanism is used only for compression
+	   * levels >= 4.
+	   */
+	  // That's alias to max_lazy_match, don't use directly
+	  //this.max_insert_length = 0;
+	  /* Insert new strings in the hash table only if the match length is not
+	   * greater than this length. This saves time but degrades compression.
+	   * max_insert_length is used only for compression levels <= 3.
+	   */
+
+	  this.level = 0;     /* compression level (1..9) */
+	  this.strategy = 0;  /* favor or force Huffman coding*/
+
+	  this.good_match = 0;
+	  /* Use a faster search when the previous match is longer than this */
+
+	  this.nice_match = 0; /* Stop searching when current match exceeds this */
+
+	              /* used by trees.c: */
+
+	  /* Didn't use ct_data typedef below to suppress compiler warning */
+
+	  // struct ct_data_s dyn_ltree[HEAP_SIZE];   /* literal and length tree */
+	  // struct ct_data_s dyn_dtree[2*D_CODES+1]; /* distance tree */
+	  // struct ct_data_s bl_tree[2*BL_CODES+1];  /* Huffman tree for bit lengths */
+
+	  // Use flat array of DOUBLE size, with interleaved fata,
+	  // because JS does not support effective
+	  this.dyn_ltree  = new utils.Buf16(HEAP_SIZE * 2);
+	  this.dyn_dtree  = new utils.Buf16((2*D_CODES+1) * 2);
+	  this.bl_tree    = new utils.Buf16((2*BL_CODES+1) * 2);
+	  zero(this.dyn_ltree);
+	  zero(this.dyn_dtree);
+	  zero(this.bl_tree);
+
+	  this.l_desc   = null;         /* desc. for literal tree */
+	  this.d_desc   = null;         /* desc. for distance tree */
+	  this.bl_desc  = null;         /* desc. for bit length tree */
+
+	  //ush bl_count[MAX_BITS+1];
+	  this.bl_count = new utils.Buf16(MAX_BITS+1);
+	  /* number of codes at each bit length for an optimal tree */
+
+	  //int heap[2*L_CODES+1];      /* heap used to build the Huffman trees */
+	  this.heap = new utils.Buf16(2*L_CODES+1);  /* heap used to build the Huffman trees */
+	  zero(this.heap);
+
+	  this.heap_len = 0;               /* number of elements in the heap */
+	  this.heap_max = 0;               /* element of largest frequency */
+	  /* The sons of heap[n] are heap[2*n] and heap[2*n+1]. heap[0] is not used.
+	   * The same heap array is used to build all trees.
+	   */
+
+	  this.depth = new utils.Buf16(2*L_CODES+1); //uch depth[2*L_CODES+1];
+	  zero(this.depth);
+	  /* Depth of each subtree used as tie breaker for trees of equal frequency
+	   */
+
+	  this.l_buf = 0;          /* buffer index for literals or lengths */
+
+	  this.lit_bufsize = 0;
+	  /* Size of match buffer for literals/lengths.  There are 4 reasons for
+	   * limiting lit_bufsize to 64K:
+	   *   - frequencies can be kept in 16 bit counters
+	   *   - if compression is not successful for the first block, all input
+	   *     data is still in the window so we can still emit a stored block even
+	   *     when input comes from standard input.  (This can also be done for
+	   *     all blocks if lit_bufsize is not greater than 32K.)
+	   *   - if compression is not successful for a file smaller than 64K, we can
+	   *     even emit a stored file instead of a stored block (saving 5 bytes).
+	   *     This is applicable only for zip (not gzip or zlib).
+	   *   - creating new Huffman trees less frequently may not provide fast
+	   *     adaptation to changes in the input data statistics. (Take for
+	   *     example a binary file with poorly compressible code followed by
+	   *     a highly compressible string table.) Smaller buffer sizes give
+	   *     fast adaptation but have of course the overhead of transmitting
+	   *     trees more frequently.
+	   *   - I can't count above 4
+	   */
+
+	  this.last_lit = 0;      /* running index in l_buf */
+
+	  this.d_buf = 0;
+	  /* Buffer index for distances. To simplify the code, d_buf and l_buf have
+	   * the same number of elements. To use different lengths, an extra flag
+	   * array would be necessary.
+	   */
+
+	  this.opt_len = 0;       /* bit length of current block with optimal trees */
+	  this.static_len = 0;    /* bit length of current block with static trees */
+	  this.matches = 0;       /* number of string matches in current block */
+	  this.insert = 0;        /* bytes at end of window left to insert */
+
+
+	  this.bi_buf = 0;
+	  /* Output buffer. bits are inserted starting at the bottom (least
+	   * significant bits).
+	   */
+	  this.bi_valid = 0;
+	  /* Number of valid bits in bi_buf.  All bits above the last valid bit
+	   * are always zero.
+	   */
+
+	  // Used for window memory init. We safely ignore it for JS. That makes
+	  // sense only for pointers and memory check tools.
+	  //this.high_water = 0;
+	  /* High water mark offset in window for initialized bytes -- bytes above
+	   * this are set to zero in order to avoid memory check warnings when
+	   * longest match routines access bytes past the input.  This is then
+	   * updated to the new high water mark.
+	   */
+	}
+
+
+	function deflateResetKeep(strm) {
+	  var s;
+
+	  if (!strm || !strm.state) {
+	    return err(strm, Z_STREAM_ERROR);
+	  }
+
+	  strm.total_in = strm.total_out = 0;
+	  strm.data_type = Z_UNKNOWN;
+
+	  s = strm.state;
+	  s.pending = 0;
+	  s.pending_out = 0;
+
+	  if (s.wrap < 0) {
+	    s.wrap = -s.wrap;
+	    /* was made negative by deflate(..., Z_FINISH); */
+	  }
+	  s.status = (s.wrap ? INIT_STATE : BUSY_STATE);
+	  strm.adler = (s.wrap === 2) ?
+	    0  // crc32(0, Z_NULL, 0)
+	  :
+	    1; // adler32(0, Z_NULL, 0)
+	  s.last_flush = Z_NO_FLUSH;
+	  trees._tr_init(s);
+	  return Z_OK;
+	}
+
+
+	function deflateReset(strm) {
+	  var ret = deflateResetKeep(strm);
+	  if (ret === Z_OK) {
+	    lm_init(strm.state);
+	  }
+	  return ret;
+	}
+
+
+	function deflateSetHeader(strm, head) {
+	  if (!strm || !strm.state) { return Z_STREAM_ERROR; }
+	  if (strm.state.wrap !== 2) { return Z_STREAM_ERROR; }
+	  strm.state.gzhead = head;
+	  return Z_OK;
+	}
+
+
+	function deflateInit2(strm, level, method, windowBits, memLevel, strategy) {
+	  if (!strm) { // === Z_NULL
+	    return Z_STREAM_ERROR;
+	  }
+	  var wrap = 1;
+
+	  if (level === Z_DEFAULT_COMPRESSION) {
+	    level = 6;
+	  }
+
+	  if (windowBits < 0) { /* suppress zlib wrapper */
+	    wrap = 0;
+	    windowBits = -windowBits;
+	  }
+
+	  else if (windowBits > 15) {
+	    wrap = 2;           /* write gzip wrapper instead */
+	    windowBits -= 16;
+	  }
+
+
+	  if (memLevel < 1 || memLevel > MAX_MEM_LEVEL || method !== Z_DEFLATED ||
+	    windowBits < 8 || windowBits > 15 || level < 0 || level > 9 ||
+	    strategy < 0 || strategy > Z_FIXED) {
+	    return err(strm, Z_STREAM_ERROR);
+	  }
+
+
+	  if (windowBits === 8) {
+	    windowBits = 9;
+	  }
+	  /* until 256-byte window bug fixed */
+
+	  var s = new DeflateState();
+
+	  strm.state = s;
+	  s.strm = strm;
+
+	  s.wrap = wrap;
+	  s.gzhead = null;
+	  s.w_bits = windowBits;
+	  s.w_size = 1 << s.w_bits;
+	  s.w_mask = s.w_size - 1;
+
+	  s.hash_bits = memLevel + 7;
+	  s.hash_size = 1 << s.hash_bits;
+	  s.hash_mask = s.hash_size - 1;
+	  s.hash_shift = ~~((s.hash_bits + MIN_MATCH - 1) / MIN_MATCH);
+
+	  s.window = new utils.Buf8(s.w_size * 2);
+	  s.head = new utils.Buf16(s.hash_size);
+	  s.prev = new utils.Buf16(s.w_size);
+
+	  // Don't need mem init magic for JS.
+	  //s.high_water = 0;  /* nothing written to s->window yet */
+
+	  s.lit_bufsize = 1 << (memLevel + 6); /* 16K elements by default */
+
+	  s.pending_buf_size = s.lit_bufsize * 4;
+	  s.pending_buf = new utils.Buf8(s.pending_buf_size);
+
+	  s.d_buf = s.lit_bufsize >> 1;
+	  s.l_buf = (1 + 2) * s.lit_bufsize;
+
+	  s.level = level;
+	  s.strategy = strategy;
+	  s.method = method;
+
+	  return deflateReset(strm);
+	}
+
+	function deflateInit(strm, level) {
+	  return deflateInit2(strm, level, Z_DEFLATED, MAX_WBITS, DEF_MEM_LEVEL, Z_DEFAULT_STRATEGY);
+	}
+
+
+	function deflate(strm, flush) {
+	  var old_flush, s;
+	  var beg, val; // for gzip header write only
+
+	  if (!strm || !strm.state ||
+	    flush > Z_BLOCK || flush < 0) {
+	    return strm ? err(strm, Z_STREAM_ERROR) : Z_STREAM_ERROR;
+	  }
+
+	  s = strm.state;
+
+	  if (!strm.output ||
+	      (!strm.input && strm.avail_in !== 0) ||
+	      (s.status === FINISH_STATE && flush !== Z_FINISH)) {
+	    return err(strm, (strm.avail_out === 0) ? Z_BUF_ERROR : Z_STREAM_ERROR);
+	  }
+
+	  s.strm = strm; /* just in case */
+	  old_flush = s.last_flush;
+	  s.last_flush = flush;
+
+	  /* Write the header */
+	  if (s.status === INIT_STATE) {
+
+	    if (s.wrap === 2) { // GZIP header
+	      strm.adler = 0;  //crc32(0L, Z_NULL, 0);
+	      put_byte(s, 31);
+	      put_byte(s, 139);
+	      put_byte(s, 8);
+	      if (!s.gzhead) { // s->gzhead == Z_NULL
+	        put_byte(s, 0);
+	        put_byte(s, 0);
+	        put_byte(s, 0);
+	        put_byte(s, 0);
+	        put_byte(s, 0);
+	        put_byte(s, s.level === 9 ? 2 :
+	                    (s.strategy >= Z_HUFFMAN_ONLY || s.level < 2 ?
+	                     4 : 0));
+	        put_byte(s, OS_CODE);
+	        s.status = BUSY_STATE;
+	      }
+	      else {
+	        put_byte(s, (s.gzhead.text ? 1 : 0) +
+	                    (s.gzhead.hcrc ? 2 : 0) +
+	                    (!s.gzhead.extra ? 0 : 4) +
+	                    (!s.gzhead.name ? 0 : 8) +
+	                    (!s.gzhead.comment ? 0 : 16)
+	                );
+	        put_byte(s, s.gzhead.time & 0xff);
+	        put_byte(s, (s.gzhead.time >> 8) & 0xff);
+	        put_byte(s, (s.gzhead.time >> 16) & 0xff);
+	        put_byte(s, (s.gzhead.time >> 24) & 0xff);
+	        put_byte(s, s.level === 9 ? 2 :
+	                    (s.strategy >= Z_HUFFMAN_ONLY || s.level < 2 ?
+	                     4 : 0));
+	        put_byte(s, s.gzhead.os & 0xff);
+	        if (s.gzhead.extra && s.gzhead.extra.length) {
+	          put_byte(s, s.gzhead.extra.length & 0xff);
+	          put_byte(s, (s.gzhead.extra.length >> 8) & 0xff);
+	        }
+	        if (s.gzhead.hcrc) {
+	          strm.adler = crc32(strm.adler, s.pending_buf, s.pending, 0);
+	        }
+	        s.gzindex = 0;
+	        s.status = EXTRA_STATE;
+	      }
+	    }
+	    else // DEFLATE header
+	    {
+	      var header = (Z_DEFLATED + ((s.w_bits - 8) << 4)) << 8;
+	      var level_flags = -1;
+
+	      if (s.strategy >= Z_HUFFMAN_ONLY || s.level < 2) {
+	        level_flags = 0;
+	      } else if (s.level < 6) {
+	        level_flags = 1;
+	      } else if (s.level === 6) {
+	        level_flags = 2;
+	      } else {
+	        level_flags = 3;
+	      }
+	      header |= (level_flags << 6);
+	      if (s.strstart !== 0) { header |= PRESET_DICT; }
+	      header += 31 - (header % 31);
+
+	      s.status = BUSY_STATE;
+	      putShortMSB(s, header);
+
+	      /* Save the adler32 of the preset dictionary: */
+	      if (s.strstart !== 0) {
+	        putShortMSB(s, strm.adler >>> 16);
+	        putShortMSB(s, strm.adler & 0xffff);
+	      }
+	      strm.adler = 1; // adler32(0L, Z_NULL, 0);
+	    }
+	  }
+
+	//#ifdef GZIP
+	  if (s.status === EXTRA_STATE) {
+	    if (s.gzhead.extra/* != Z_NULL*/) {
+	      beg = s.pending;  /* start of bytes to update crc */
+
+	      while (s.gzindex < (s.gzhead.extra.length & 0xffff)) {
+	        if (s.pending === s.pending_buf_size) {
+	          if (s.gzhead.hcrc && s.pending > beg) {
+	            strm.adler = crc32(strm.adler, s.pending_buf, s.pending - beg, beg);
+	          }
+	          flush_pending(strm);
+	          beg = s.pending;
+	          if (s.pending === s.pending_buf_size) {
+	            break;
+	          }
+	        }
+	        put_byte(s, s.gzhead.extra[s.gzindex] & 0xff);
+	        s.gzindex++;
+	      }
+	      if (s.gzhead.hcrc && s.pending > beg) {
+	        strm.adler = crc32(strm.adler, s.pending_buf, s.pending - beg, beg);
+	      }
+	      if (s.gzindex === s.gzhead.extra.length) {
+	        s.gzindex = 0;
+	        s.status = NAME_STATE;
+	      }
+	    }
+	    else {
+	      s.status = NAME_STATE;
+	    }
+	  }
+	  if (s.status === NAME_STATE) {
+	    if (s.gzhead.name/* != Z_NULL*/) {
+	      beg = s.pending;  /* start of bytes to update crc */
+	      //int val;
+
+	      do {
+	        if (s.pending === s.pending_buf_size) {
+	          if (s.gzhead.hcrc && s.pending > beg) {
+	            strm.adler = crc32(strm.adler, s.pending_buf, s.pending - beg, beg);
+	          }
+	          flush_pending(strm);
+	          beg = s.pending;
+	          if (s.pending === s.pending_buf_size) {
+	            val = 1;
+	            break;
+	          }
+	        }
+	        // JS specific: little magic to add zero terminator to end of string
+	        if (s.gzindex < s.gzhead.name.length) {
+	          val = s.gzhead.name.charCodeAt(s.gzindex++) & 0xff;
+	        } else {
+	          val = 0;
+	        }
+	        put_byte(s, val);
+	      } while (val !== 0);
+
+	      if (s.gzhead.hcrc && s.pending > beg) {
+	        strm.adler = crc32(strm.adler, s.pending_buf, s.pending - beg, beg);
+	      }
+	      if (val === 0) {
+	        s.gzindex = 0;
+	        s.status = COMMENT_STATE;
+	      }
+	    }
+	    else {
+	      s.status = COMMENT_STATE;
+	    }
+	  }
+	  if (s.status === COMMENT_STATE) {
+	    if (s.gzhead.comment/* != Z_NULL*/) {
+	      beg = s.pending;  /* start of bytes to update crc */
+	      //int val;
+
+	      do {
+	        if (s.pending === s.pending_buf_size) {
+	          if (s.gzhead.hcrc && s.pending > beg) {
+	            strm.adler = crc32(strm.adler, s.pending_buf, s.pending - beg, beg);
+	          }
+	          flush_pending(strm);
+	          beg = s.pending;
+	          if (s.pending === s.pending_buf_size) {
+	            val = 1;
+	            break;
+	          }
+	        }
+	        // JS specific: little magic to add zero terminator to end of string
+	        if (s.gzindex < s.gzhead.comment.length) {
+	          val = s.gzhead.comment.charCodeAt(s.gzindex++) & 0xff;
+	        } else {
+	          val = 0;
+	        }
+	        put_byte(s, val);
+	      } while (val !== 0);
+
+	      if (s.gzhead.hcrc && s.pending > beg) {
+	        strm.adler = crc32(strm.adler, s.pending_buf, s.pending - beg, beg);
+	      }
+	      if (val === 0) {
+	        s.status = HCRC_STATE;
+	      }
+	    }
+	    else {
+	      s.status = HCRC_STATE;
+	    }
+	  }
+	  if (s.status === HCRC_STATE) {
+	    if (s.gzhead.hcrc) {
+	      if (s.pending + 2 > s.pending_buf_size) {
+	        flush_pending(strm);
+	      }
+	      if (s.pending + 2 <= s.pending_buf_size) {
+	        put_byte(s, strm.adler & 0xff);
+	        put_byte(s, (strm.adler >> 8) & 0xff);
+	        strm.adler = 0; //crc32(0L, Z_NULL, 0);
+	        s.status = BUSY_STATE;
+	      }
+	    }
+	    else {
+	      s.status = BUSY_STATE;
+	    }
+	  }
+	//#endif
+
+	  /* Flush as much pending output as possible */
+	  if (s.pending !== 0) {
+	    flush_pending(strm);
+	    if (strm.avail_out === 0) {
+	      /* Since avail_out is 0, deflate will be called again with
+	       * more output space, but possibly with both pending and
+	       * avail_in equal to zero. There won't be anything to do,
+	       * but this is not an error situation so make sure we
+	       * return OK instead of BUF_ERROR at next call of deflate:
+	       */
+	      s.last_flush = -1;
+	      return Z_OK;
+	    }
+
+	    /* Make sure there is something to do and avoid duplicate consecutive
+	     * flushes. For repeated and useless calls with Z_FINISH, we keep
+	     * returning Z_STREAM_END instead of Z_BUF_ERROR.
+	     */
+	  } else if (strm.avail_in === 0 && rank(flush) <= rank(old_flush) &&
+	    flush !== Z_FINISH) {
+	    return err(strm, Z_BUF_ERROR);
+	  }
+
+	  /* User must not provide more input after the first FINISH: */
+	  if (s.status === FINISH_STATE && strm.avail_in !== 0) {
+	    return err(strm, Z_BUF_ERROR);
+	  }
+
+	  /* Start a new block or continue the current one.
+	   */
+	  if (strm.avail_in !== 0 || s.lookahead !== 0 ||
+	    (flush !== Z_NO_FLUSH && s.status !== FINISH_STATE)) {
+	    var bstate = (s.strategy === Z_HUFFMAN_ONLY) ? deflate_huff(s, flush) :
+	      (s.strategy === Z_RLE ? deflate_rle(s, flush) :
+	        configuration_table[s.level].func(s, flush));
+
+	    if (bstate === BS_FINISH_STARTED || bstate === BS_FINISH_DONE) {
+	      s.status = FINISH_STATE;
+	    }
+	    if (bstate === BS_NEED_MORE || bstate === BS_FINISH_STARTED) {
+	      if (strm.avail_out === 0) {
+	        s.last_flush = -1;
+	        /* avoid BUF_ERROR next call, see above */
+	      }
+	      return Z_OK;
+	      /* If flush != Z_NO_FLUSH && avail_out == 0, the next call
+	       * of deflate should use the same flush parameter to make sure
+	       * that the flush is complete. So we don't have to output an
+	       * empty block here, this will be done at next call. This also
+	       * ensures that for a very small output buffer, we emit at most
+	       * one empty block.
+	       */
+	    }
+	    if (bstate === BS_BLOCK_DONE) {
+	      if (flush === Z_PARTIAL_FLUSH) {
+	        trees._tr_align(s);
+	      }
+	      else if (flush !== Z_BLOCK) { /* FULL_FLUSH or SYNC_FLUSH */
+
+	        trees._tr_stored_block(s, 0, 0, false);
+	        /* For a full flush, this empty block will be recognized
+	         * as a special marker by inflate_sync().
+	         */
+	        if (flush === Z_FULL_FLUSH) {
+	          /*** CLEAR_HASH(s); ***/             /* forget history */
+	          zero(s.head); // Fill with NIL (= 0);
+
+	          if (s.lookahead === 0) {
+	            s.strstart = 0;
+	            s.block_start = 0;
+	            s.insert = 0;
+	          }
+	        }
+	      }
+	      flush_pending(strm);
+	      if (strm.avail_out === 0) {
+	        s.last_flush = -1; /* avoid BUF_ERROR at next call, see above */
+	        return Z_OK;
+	      }
+	    }
+	  }
+	  //Assert(strm->avail_out > 0, "bug2");
+	  //if (strm.avail_out <= 0) { throw new Error("bug2");}
+
+	  if (flush !== Z_FINISH) { return Z_OK; }
+	  if (s.wrap <= 0) { return Z_STREAM_END; }
+
+	  /* Write the trailer */
+	  if (s.wrap === 2) {
+	    put_byte(s, strm.adler & 0xff);
+	    put_byte(s, (strm.adler >> 8) & 0xff);
+	    put_byte(s, (strm.adler >> 16) & 0xff);
+	    put_byte(s, (strm.adler >> 24) & 0xff);
+	    put_byte(s, strm.total_in & 0xff);
+	    put_byte(s, (strm.total_in >> 8) & 0xff);
+	    put_byte(s, (strm.total_in >> 16) & 0xff);
+	    put_byte(s, (strm.total_in >> 24) & 0xff);
+	  }
+	  else
+	  {
+	    putShortMSB(s, strm.adler >>> 16);
+	    putShortMSB(s, strm.adler & 0xffff);
+	  }
+
+	  flush_pending(strm);
+	  /* If avail_out is zero, the application will call deflate again
+	   * to flush the rest.
+	   */
+	  if (s.wrap > 0) { s.wrap = -s.wrap; }
+	  /* write the trailer only once! */
+	  return s.pending !== 0 ? Z_OK : Z_STREAM_END;
+	}
+
+	function deflateEnd(strm) {
+	  var status;
+
+	  if (!strm/*== Z_NULL*/ || !strm.state/*== Z_NULL*/) {
+	    return Z_STREAM_ERROR;
+	  }
+
+	  status = strm.state.status;
+	  if (status !== INIT_STATE &&
+	    status !== EXTRA_STATE &&
+	    status !== NAME_STATE &&
+	    status !== COMMENT_STATE &&
+	    status !== HCRC_STATE &&
+	    status !== BUSY_STATE &&
+	    status !== FINISH_STATE
+	  ) {
+	    return err(strm, Z_STREAM_ERROR);
+	  }
+
+	  strm.state = null;
+
+	  return status === BUSY_STATE ? err(strm, Z_DATA_ERROR) : Z_OK;
+	}
+
+	/* =========================================================================
+	 * Copy the source state to the destination state
+	 */
+	//function deflateCopy(dest, source) {
+	//
+	//}
+
+	exports.deflateInit = deflateInit;
+	exports.deflateInit2 = deflateInit2;
+	exports.deflateReset = deflateReset;
+	exports.deflateResetKeep = deflateResetKeep;
+	exports.deflateSetHeader = deflateSetHeader;
+	exports.deflate = deflate;
+	exports.deflateEnd = deflateEnd;
+	exports.deflateInfo = 'pako deflate (from Nodeca project)';
+
+	/* Not implemented
+	exports.deflateBound = deflateBound;
+	exports.deflateCopy = deflateCopy;
+	exports.deflateSetDictionary = deflateSetDictionary;
+	exports.deflateParams = deflateParams;
+	exports.deflatePending = deflatePending;
+	exports.deflatePrime = deflatePrime;
+	exports.deflateTune = deflateTune;
+	*/
+
+
+/***/ },
+/* 52 */
+/***/ function(module, exports) {
+
+	'use strict';
+
+
+	var TYPED_OK =  (typeof Uint8Array !== 'undefined') &&
+	                (typeof Uint16Array !== 'undefined') &&
+	                (typeof Int32Array !== 'undefined');
+
+
+	exports.assign = function (obj /*from1, from2, from3, ...*/) {
+	  var sources = Array.prototype.slice.call(arguments, 1);
+	  while (sources.length) {
+	    var source = sources.shift();
+	    if (!source) { continue; }
+
+	    if (typeof source !== 'object') {
+	      throw new TypeError(source + 'must be non-object');
+	    }
+
+	    for (var p in source) {
+	      if (source.hasOwnProperty(p)) {
+	        obj[p] = source[p];
+	      }
+	    }
+	  }
+
+	  return obj;
+	};
+
+
+	// reduce buffer size, avoiding mem copy
+	exports.shrinkBuf = function (buf, size) {
+	  if (buf.length === size) { return buf; }
+	  if (buf.subarray) { return buf.subarray(0, size); }
+	  buf.length = size;
+	  return buf;
+	};
+
+
+	var fnTyped = {
+	  arraySet: function (dest, src, src_offs, len, dest_offs) {
+	    if (src.subarray && dest.subarray) {
+	      dest.set(src.subarray(src_offs, src_offs+len), dest_offs);
+	      return;
+	    }
+	    // Fallback to ordinary array
+	    for (var i=0; i<len; i++) {
+	      dest[dest_offs + i] = src[src_offs + i];
+	    }
+	  },
+	  // Join array of chunks to single array.
+	  flattenChunks: function(chunks) {
+	    var i, l, len, pos, chunk, result;
+
+	    // calculate data length
+	    len = 0;
+	    for (i=0, l=chunks.length; i<l; i++) {
+	      len += chunks[i].length;
+	    }
+
+	    // join chunks
+	    result = new Uint8Array(len);
+	    pos = 0;
+	    for (i=0, l=chunks.length; i<l; i++) {
+	      chunk = chunks[i];
+	      result.set(chunk, pos);
+	      pos += chunk.length;
+	    }
+
+	    return result;
+	  }
+	};
+
+	var fnUntyped = {
+	  arraySet: function (dest, src, src_offs, len, dest_offs) {
+	    for (var i=0; i<len; i++) {
+	      dest[dest_offs + i] = src[src_offs + i];
+	    }
+	  },
+	  // Join array of chunks to single array.
+	  flattenChunks: function(chunks) {
+	    return [].concat.apply([], chunks);
+	  }
+	};
+
+
+	// Enable/Disable typed arrays use, for testing
+	//
+	exports.setTyped = function (on) {
+	  if (on) {
+	    exports.Buf8  = Uint8Array;
+	    exports.Buf16 = Uint16Array;
+	    exports.Buf32 = Int32Array;
+	    exports.assign(exports, fnTyped);
+	  } else {
+	    exports.Buf8  = Array;
+	    exports.Buf16 = Array;
+	    exports.Buf32 = Array;
+	    exports.assign(exports, fnUntyped);
+	  }
+	};
+
+	exports.setTyped(TYPED_OK);
+
+
+/***/ },
+/* 53 */
+/***/ function(module, exports, __webpack_require__) {
+
+	'use strict';
+
+
+	var utils = __webpack_require__(52);
+
+	/* Public constants ==========================================================*/
+	/* ===========================================================================*/
+
+
+	//var Z_FILTERED          = 1;
+	//var Z_HUFFMAN_ONLY      = 2;
+	//var Z_RLE               = 3;
+	var Z_FIXED               = 4;
+	//var Z_DEFAULT_STRATEGY  = 0;
+
+	/* Possible values of the data_type field (though see inflate()) */
+	var Z_BINARY              = 0;
+	var Z_TEXT                = 1;
+	//var Z_ASCII             = 1; // = Z_TEXT
+	var Z_UNKNOWN             = 2;
+
+	/*============================================================================*/
+
+
+	function zero(buf) { var len = buf.length; while (--len >= 0) { buf[len] = 0; } }
+
+	// From zutil.h
+
+	var STORED_BLOCK = 0;
+	var STATIC_TREES = 1;
+	var DYN_TREES    = 2;
+	/* The three kinds of block type */
+
+	var MIN_MATCH    = 3;
+	var MAX_MATCH    = 258;
+	/* The minimum and maximum match lengths */
+
+	// From deflate.h
+	/* ===========================================================================
+	 * Internal compression state.
+	 */
+
+	var LENGTH_CODES  = 29;
+	/* number of length codes, not counting the special END_BLOCK code */
+
+	var LITERALS      = 256;
+	/* number of literal bytes 0..255 */
+
+	var L_CODES       = LITERALS + 1 + LENGTH_CODES;
+	/* number of Literal or Length codes, including the END_BLOCK code */
+
+	var D_CODES       = 30;
+	/* number of distance codes */
+
+	var BL_CODES      = 19;
+	/* number of codes used to transfer the bit lengths */
+
+	var HEAP_SIZE     = 2*L_CODES + 1;
+	/* maximum heap size */
+
+	var MAX_BITS      = 15;
+	/* All codes must not exceed MAX_BITS bits */
+
+	var Buf_size      = 16;
+	/* size of bit buffer in bi_buf */
+
+
+	/* ===========================================================================
+	 * Constants
+	 */
+
+	var MAX_BL_BITS = 7;
+	/* Bit length codes must not exceed MAX_BL_BITS bits */
+
+	var END_BLOCK   = 256;
+	/* end of block literal code */
+
+	var REP_3_6     = 16;
+	/* repeat previous bit length 3-6 times (2 bits of repeat count) */
+
+	var REPZ_3_10   = 17;
+	/* repeat a zero length 3-10 times  (3 bits of repeat count) */
+
+	var REPZ_11_138 = 18;
+	/* repeat a zero length 11-138 times  (7 bits of repeat count) */
+
+	var extra_lbits =   /* extra bits for each length code */
+	  [0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,0];
+
+	var extra_dbits =   /* extra bits for each distance code */
+	  [0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13];
+
+	var extra_blbits =  /* extra bits for each bit length code */
+	  [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,3,7];
+
+	var bl_order =
+	  [16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15];
+	/* The lengths of the bit length codes are sent in order of decreasing
+	 * probability, to avoid transmitting the lengths for unused bit length codes.
+	 */
+
+	/* ===========================================================================
+	 * Local data. These are initialized only once.
+	 */
+
+	// We pre-fill arrays with 0 to avoid uninitialized gaps
+
+	var DIST_CODE_LEN = 512; /* see definition of array dist_code below */
+
+	// !!!! Use flat array insdead of structure, Freq = i*2, Len = i*2+1
+	var static_ltree  = new Array((L_CODES+2) * 2);
+	zero(static_ltree);
+	/* The static literal tree. Since the bit lengths are imposed, there is no
+	 * need for the L_CODES extra codes used during heap construction. However
+	 * The codes 286 and 287 are needed to build a canonical tree (see _tr_init
+	 * below).
+	 */
+
+	var static_dtree  = new Array(D_CODES * 2);
+	zero(static_dtree);
+	/* The static distance tree. (Actually a trivial tree since all codes use
+	 * 5 bits.)
+	 */
+
+	var _dist_code    = new Array(DIST_CODE_LEN);
+	zero(_dist_code);
+	/* Distance codes. The first 256 values correspond to the distances
+	 * 3 .. 258, the last 256 values correspond to the top 8 bits of
+	 * the 15 bit distances.
+	 */
+
+	var _length_code  = new Array(MAX_MATCH-MIN_MATCH+1);
+	zero(_length_code);
+	/* length code for each normalized match length (0 == MIN_MATCH) */
+
+	var base_length   = new Array(LENGTH_CODES);
+	zero(base_length);
+	/* First normalized length for each code (0 = MIN_MATCH) */
+
+	var base_dist     = new Array(D_CODES);
+	zero(base_dist);
+	/* First normalized distance for each code (0 = distance of 1) */
+
+
+	var StaticTreeDesc = function (static_tree, extra_bits, extra_base, elems, max_length) {
+
+	  this.static_tree  = static_tree;  /* static tree or NULL */
+	  this.extra_bits   = extra_bits;   /* extra bits for each code or NULL */
+	  this.extra_base   = extra_base;   /* base index for extra_bits */
+	  this.elems        = elems;        /* max number of elements in the tree */
+	  this.max_length   = max_length;   /* max bit length for the codes */
+
+	  // show if `static_tree` has data or dummy - needed for monomorphic objects
+	  this.has_stree    = static_tree && static_tree.length;
+	};
+
+
+	var static_l_desc;
+	var static_d_desc;
+	var static_bl_desc;
+
+
+	var TreeDesc = function(dyn_tree, stat_desc) {
+	  this.dyn_tree = dyn_tree;     /* the dynamic tree */
+	  this.max_code = 0;            /* largest code with non zero frequency */
+	  this.stat_desc = stat_desc;   /* the corresponding static tree */
+	};
+
+
+
+	function d_code(dist) {
+	  return dist < 256 ? _dist_code[dist] : _dist_code[256 + (dist >>> 7)];
+	}
+
+
+	/* ===========================================================================
+	 * Output a short LSB first on the stream.
+	 * IN assertion: there is enough room in pendingBuf.
+	 */
+	function put_short (s, w) {
+	//    put_byte(s, (uch)((w) & 0xff));
+	//    put_byte(s, (uch)((ush)(w) >> 8));
+	  s.pending_buf[s.pending++] = (w) & 0xff;
+	  s.pending_buf[s.pending++] = (w >>> 8) & 0xff;
+	}
+
+
+	/* ===========================================================================
+	 * Send a value on a given number of bits.
+	 * IN assertion: length <= 16 and value fits in length bits.
+	 */
+	function send_bits(s, value, length) {
+	  if (s.bi_valid > (Buf_size - length)) {
+	    s.bi_buf |= (value << s.bi_valid) & 0xffff;
+	    put_short(s, s.bi_buf);
+	    s.bi_buf = value >> (Buf_size - s.bi_valid);
+	    s.bi_valid += length - Buf_size;
+	  } else {
+	    s.bi_buf |= (value << s.bi_valid) & 0xffff;
+	    s.bi_valid += length;
+	  }
+	}
+
+
+	function send_code(s, c, tree) {
+	  send_bits(s, tree[c*2]/*.Code*/, tree[c*2 + 1]/*.Len*/);
+	}
+
+
+	/* ===========================================================================
+	 * Reverse the first len bits of a code, using straightforward code (a faster
+	 * method would use a table)
+	 * IN assertion: 1 <= len <= 15
+	 */
+	function bi_reverse(code, len) {
+	  var res = 0;
+	  do {
+	    res |= code & 1;
+	    code >>>= 1;
+	    res <<= 1;
+	  } while (--len > 0);
+	  return res >>> 1;
+	}
+
+
+	/* ===========================================================================
+	 * Flush the bit buffer, keeping at most 7 bits in it.
+	 */
+	function bi_flush(s) {
+	  if (s.bi_valid === 16) {
+	    put_short(s, s.bi_buf);
+	    s.bi_buf = 0;
+	    s.bi_valid = 0;
+
+	  } else if (s.bi_valid >= 8) {
+	    s.pending_buf[s.pending++] = s.bi_buf & 0xff;
+	    s.bi_buf >>= 8;
+	    s.bi_valid -= 8;
+	  }
+	}
+
+
+	/* ===========================================================================
+	 * Compute the optimal bit lengths for a tree and update the total bit length
+	 * for the current block.
+	 * IN assertion: the fields freq and dad are set, heap[heap_max] and
+	 *    above are the tree nodes sorted by increasing frequency.
+	 * OUT assertions: the field len is set to the optimal bit length, the
+	 *     array bl_count contains the frequencies for each bit length.
+	 *     The length opt_len is updated; static_len is also updated if stree is
+	 *     not null.
+	 */
+	function gen_bitlen(s, desc)
+	//    deflate_state *s;
+	//    tree_desc *desc;    /* the tree descriptor */
+	{
+	  var tree            = desc.dyn_tree;
+	  var max_code        = desc.max_code;
+	  var stree           = desc.stat_desc.static_tree;
+	  var has_stree       = desc.stat_desc.has_stree;
+	  var extra           = desc.stat_desc.extra_bits;
+	  var base            = desc.stat_desc.extra_base;
+	  var max_length      = desc.stat_desc.max_length;
+	  var h;              /* heap index */
+	  var n, m;           /* iterate over the tree elements */
+	  var bits;           /* bit length */
+	  var xbits;          /* extra bits */
+	  var f;              /* frequency */
+	  var overflow = 0;   /* number of elements with bit length too large */
+
+	  for (bits = 0; bits <= MAX_BITS; bits++) {
+	    s.bl_count[bits] = 0;
+	  }
+
+	  /* In a first pass, compute the optimal bit lengths (which may
+	   * overflow in the case of the bit length tree).
+	   */
+	  tree[s.heap[s.heap_max]*2 + 1]/*.Len*/ = 0; /* root of the heap */
+
+	  for (h = s.heap_max+1; h < HEAP_SIZE; h++) {
+	    n = s.heap[h];
+	    bits = tree[tree[n*2 +1]/*.Dad*/ * 2 + 1]/*.Len*/ + 1;
+	    if (bits > max_length) {
+	      bits = max_length;
+	      overflow++;
+	    }
+	    tree[n*2 + 1]/*.Len*/ = bits;
+	    /* We overwrite tree[n].Dad which is no longer needed */
+
+	    if (n > max_code) { continue; } /* not a leaf node */
+
+	    s.bl_count[bits]++;
+	    xbits = 0;
+	    if (n >= base) {
+	      xbits = extra[n-base];
+	    }
+	    f = tree[n * 2]/*.Freq*/;
+	    s.opt_len += f * (bits + xbits);
+	    if (has_stree) {
+	      s.static_len += f * (stree[n*2 + 1]/*.Len*/ + xbits);
+	    }
+	  }
+	  if (overflow === 0) { return; }
+
+	  // Trace((stderr,"\nbit length overflow\n"));
+	  /* This happens for example on obj2 and pic of the Calgary corpus */
+
+	  /* Find the first bit length which could increase: */
+	  do {
+	    bits = max_length-1;
+	    while (s.bl_count[bits] === 0) { bits--; }
+	    s.bl_count[bits]--;      /* move one leaf down the tree */
+	    s.bl_count[bits+1] += 2; /* move one overflow item as its brother */
+	    s.bl_count[max_length]--;
+	    /* The brother of the overflow item also moves one step up,
+	     * but this does not affect bl_count[max_length]
+	     */
+	    overflow -= 2;
+	  } while (overflow > 0);
+
+	  /* Now recompute all bit lengths, scanning in increasing frequency.
+	   * h is still equal to HEAP_SIZE. (It is simpler to reconstruct all
+	   * lengths instead of fixing only the wrong ones. This idea is taken
+	   * from 'ar' written by Haruhiko Okumura.)
+	   */
+	  for (bits = max_length; bits !== 0; bits--) {
+	    n = s.bl_count[bits];
+	    while (n !== 0) {
+	      m = s.heap[--h];
+	      if (m > max_code) { continue; }
+	      if (tree[m*2 + 1]/*.Len*/ !== bits) {
+	        // Trace((stderr,"code %d bits %d->%d\n", m, tree[m].Len, bits));
+	        s.opt_len += (bits - tree[m*2 + 1]/*.Len*/)*tree[m*2]/*.Freq*/;
+	        tree[m*2 + 1]/*.Len*/ = bits;
+	      }
+	      n--;
+	    }
+	  }
+	}
+
+
+	/* ===========================================================================
+	 * Generate the codes for a given tree and bit counts (which need not be
+	 * optimal).
+	 * IN assertion: the array bl_count contains the bit length statistics for
+	 * the given tree and the field len is set for all tree elements.
+	 * OUT assertion: the field code is set for all tree elements of non
+	 *     zero code length.
+	 */
+	function gen_codes(tree, max_code, bl_count)
+	//    ct_data *tree;             /* the tree to decorate */
+	//    int max_code;              /* largest code with non zero frequency */
+	//    ushf *bl_count;            /* number of codes at each bit length */
+	{
+	  var next_code = new Array(MAX_BITS+1); /* next code value for each bit length */
+	  var code = 0;              /* running code value */
+	  var bits;                  /* bit index */
+	  var n;                     /* code index */
+
+	  /* The distribution counts are first used to generate the code values
+	   * without bit reversal.
+	   */
+	  for (bits = 1; bits <= MAX_BITS; bits++) {
+	    next_code[bits] = code = (code + bl_count[bits-1]) << 1;
+	  }
+	  /* Check that the bit counts in bl_count are consistent. The last code
+	   * must be all ones.
+	   */
+	  //Assert (code + bl_count[MAX_BITS]-1 == (1<<MAX_BITS)-1,
+	  //        "inconsistent bit counts");
+	  //Tracev((stderr,"\ngen_codes: max_code %d ", max_code));
+
+	  for (n = 0;  n <= max_code; n++) {
+	    var len = tree[n*2 + 1]/*.Len*/;
+	    if (len === 0) { continue; }
+	    /* Now reverse the bits */
+	    tree[n*2]/*.Code*/ = bi_reverse(next_code[len]++, len);
+
+	    //Tracecv(tree != static_ltree, (stderr,"\nn %3d %c l %2d c %4x (%x) ",
+	    //     n, (isgraph(n) ? n : ' '), len, tree[n].Code, next_code[len]-1));
+	  }
+	}
+
+
+	/* ===========================================================================
+	 * Initialize the various 'constant' tables.
+	 */
+	function tr_static_init() {
+	  var n;        /* iterates over tree elements */
+	  var bits;     /* bit counter */
+	  var length;   /* length value */
+	  var code;     /* code value */
+	  var dist;     /* distance index */
+	  var bl_count = new Array(MAX_BITS+1);
+	  /* number of codes at each bit length for an optimal tree */
+
+	  // do check in _tr_init()
+	  //if (static_init_done) return;
+
+	  /* For some embedded targets, global variables are not initialized: */
+	/*#ifdef NO_INIT_GLOBAL_POINTERS
+	  static_l_desc.static_tree = static_ltree;
+	  static_l_desc.extra_bits = extra_lbits;
+	  static_d_desc.static_tree = static_dtree;
+	  static_d_desc.extra_bits = extra_dbits;
+	  static_bl_desc.extra_bits = extra_blbits;
+	#endif*/
+
+	  /* Initialize the mapping length (0..255) -> length code (0..28) */
+	  length = 0;
+	  for (code = 0; code < LENGTH_CODES-1; code++) {
+	    base_length[code] = length;
+	    for (n = 0; n < (1<<extra_lbits[code]); n++) {
+	      _length_code[length++] = code;
+	    }
+	  }
+	  //Assert (length == 256, "tr_static_init: length != 256");
+	  /* Note that the length 255 (match length 258) can be represented
+	   * in two different ways: code 284 + 5 bits or code 285, so we
+	   * overwrite length_code[255] to use the best encoding:
+	   */
+	  _length_code[length-1] = code;
+
+	  /* Initialize the mapping dist (0..32K) -> dist code (0..29) */
+	  dist = 0;
+	  for (code = 0 ; code < 16; code++) {
+	    base_dist[code] = dist;
+	    for (n = 0; n < (1<<extra_dbits[code]); n++) {
+	      _dist_code[dist++] = code;
+	    }
+	  }
+	  //Assert (dist == 256, "tr_static_init: dist != 256");
+	  dist >>= 7; /* from now on, all distances are divided by 128 */
+	  for (; code < D_CODES; code++) {
+	    base_dist[code] = dist << 7;
+	    for (n = 0; n < (1<<(extra_dbits[code]-7)); n++) {
+	      _dist_code[256 + dist++] = code;
+	    }
+	  }
+	  //Assert (dist == 256, "tr_static_init: 256+dist != 512");
+
+	  /* Construct the codes of the static literal tree */
+	  for (bits = 0; bits <= MAX_BITS; bits++) {
+	    bl_count[bits] = 0;
+	  }
+
+	  n = 0;
+	  while (n <= 143) {
+	    static_ltree[n*2 + 1]/*.Len*/ = 8;
+	    n++;
+	    bl_count[8]++;
+	  }
+	  while (n <= 255) {
+	    static_ltree[n*2 + 1]/*.Len*/ = 9;
+	    n++;
+	    bl_count[9]++;
+	  }
+	  while (n <= 279) {
+	    static_ltree[n*2 + 1]/*.Len*/ = 7;
+	    n++;
+	    bl_count[7]++;
+	  }
+	  while (n <= 287) {
+	    static_ltree[n*2 + 1]/*.Len*/ = 8;
+	    n++;
+	    bl_count[8]++;
+	  }
+	  /* Codes 286 and 287 do not exist, but we must include them in the
+	   * tree construction to get a canonical Huffman tree (longest code
+	   * all ones)
+	   */
+	  gen_codes(static_ltree, L_CODES+1, bl_count);
+
+	  /* The static distance tree is trivial: */
+	  for (n = 0; n < D_CODES; n++) {
+	    static_dtree[n*2 + 1]/*.Len*/ = 5;
+	    static_dtree[n*2]/*.Code*/ = bi_reverse(n, 5);
+	  }
+
+	  // Now data ready and we can init static trees
+	  static_l_desc = new StaticTreeDesc(static_ltree, extra_lbits, LITERALS+1, L_CODES, MAX_BITS);
+	  static_d_desc = new StaticTreeDesc(static_dtree, extra_dbits, 0,          D_CODES, MAX_BITS);
+	  static_bl_desc =new StaticTreeDesc(new Array(0), extra_blbits, 0,         BL_CODES, MAX_BL_BITS);
+
+	  //static_init_done = true;
+	}
+
+
+	/* ===========================================================================
+	 * Initialize a new block.
+	 */
+	function init_block(s) {
+	  var n; /* iterates over tree elements */
+
+	  /* Initialize the trees. */
+	  for (n = 0; n < L_CODES;  n++) { s.dyn_ltree[n*2]/*.Freq*/ = 0; }
+	  for (n = 0; n < D_CODES;  n++) { s.dyn_dtree[n*2]/*.Freq*/ = 0; }
+	  for (n = 0; n < BL_CODES; n++) { s.bl_tree[n*2]/*.Freq*/ = 0; }
+
+	  s.dyn_ltree[END_BLOCK*2]/*.Freq*/ = 1;
+	  s.opt_len = s.static_len = 0;
+	  s.last_lit = s.matches = 0;
+	}
+
+
+	/* ===========================================================================
+	 * Flush the bit buffer and align the output on a byte boundary
+	 */
+	function bi_windup(s)
+	{
+	  if (s.bi_valid > 8) {
+	    put_short(s, s.bi_buf);
+	  } else if (s.bi_valid > 0) {
+	    //put_byte(s, (Byte)s->bi_buf);
+	    s.pending_buf[s.pending++] = s.bi_buf;
+	  }
+	  s.bi_buf = 0;
+	  s.bi_valid = 0;
+	}
+
+	/* ===========================================================================
+	 * Copy a stored block, storing first the length and its
+	 * one's complement if requested.
+	 */
+	function copy_block(s, buf, len, header)
+	//DeflateState *s;
+	//charf    *buf;    /* the input data */
+	//unsigned len;     /* its length */
+	//int      header;  /* true if block header must be written */
+	{
+	  bi_windup(s);        /* align on byte boundary */
+
+	  if (header) {
+	    put_short(s, len);
+	    put_short(s, ~len);
+	  }
+	//  while (len--) {
+	//    put_byte(s, *buf++);
+	//  }
+	  utils.arraySet(s.pending_buf, s.window, buf, len, s.pending);
+	  s.pending += len;
+	}
+
+	/* ===========================================================================
+	 * Compares to subtrees, using the tree depth as tie breaker when
+	 * the subtrees have equal frequency. This minimizes the worst case length.
+	 */
+	function smaller(tree, n, m, depth) {
+	  var _n2 = n*2;
+	  var _m2 = m*2;
+	  return (tree[_n2]/*.Freq*/ < tree[_m2]/*.Freq*/ ||
+	         (tree[_n2]/*.Freq*/ === tree[_m2]/*.Freq*/ && depth[n] <= depth[m]));
+	}
+
+	/* ===========================================================================
+	 * Restore the heap property by moving down the tree starting at node k,
+	 * exchanging a node with the smallest of its two sons if necessary, stopping
+	 * when the heap property is re-established (each father smaller than its
+	 * two sons).
+	 */
+	function pqdownheap(s, tree, k)
+	//    deflate_state *s;
+	//    ct_data *tree;  /* the tree to restore */
+	//    int k;               /* node to move down */
+	{
+	  var v = s.heap[k];
+	  var j = k << 1;  /* left son of k */
+	  while (j <= s.heap_len) {
+	    /* Set j to the smallest of the two sons: */
+	    if (j < s.heap_len &&
+	      smaller(tree, s.heap[j+1], s.heap[j], s.depth)) {
+	      j++;
+	    }
+	    /* Exit if v is smaller than both sons */
+	    if (smaller(tree, v, s.heap[j], s.depth)) { break; }
+
+	    /* Exchange v with the smallest son */
+	    s.heap[k] = s.heap[j];
+	    k = j;
+
+	    /* And continue down the tree, setting j to the left son of k */
+	    j <<= 1;
+	  }
+	  s.heap[k] = v;
+	}
+
+
+	// inlined manually
+	// var SMALLEST = 1;
+
+	/* ===========================================================================
+	 * Send the block data compressed using the given Huffman trees
+	 */
+	function compress_block(s, ltree, dtree)
+	//    deflate_state *s;
+	//    const ct_data *ltree; /* literal tree */
+	//    const ct_data *dtree; /* distance tree */
+	{
+	  var dist;           /* distance of matched string */
+	  var lc;             /* match length or unmatched char (if dist == 0) */
+	  var lx = 0;         /* running index in l_buf */
+	  var code;           /* the code to send */
+	  var extra;          /* number of extra bits to send */
+
+	  if (s.last_lit !== 0) {
+	    do {
+	      dist = (s.pending_buf[s.d_buf + lx*2] << 8) | (s.pending_buf[s.d_buf + lx*2 + 1]);
+	      lc = s.pending_buf[s.l_buf + lx];
+	      lx++;
+
+	      if (dist === 0) {
+	        send_code(s, lc, ltree); /* send a literal byte */
+	        //Tracecv(isgraph(lc), (stderr," '%c' ", lc));
+	      } else {
+	        /* Here, lc is the match length - MIN_MATCH */
+	        code = _length_code[lc];
+	        send_code(s, code+LITERALS+1, ltree); /* send the length code */
+	        extra = extra_lbits[code];
+	        if (extra !== 0) {
+	          lc -= base_length[code];
+	          send_bits(s, lc, extra);       /* send the extra length bits */
+	        }
+	        dist--; /* dist is now the match distance - 1 */
+	        code = d_code(dist);
+	        //Assert (code < D_CODES, "bad d_code");
+
+	        send_code(s, code, dtree);       /* send the distance code */
+	        extra = extra_dbits[code];
+	        if (extra !== 0) {
+	          dist -= base_dist[code];
+	          send_bits(s, dist, extra);   /* send the extra distance bits */
+	        }
+	      } /* literal or match pair ? */
+
+	      /* Check that the overlay between pending_buf and d_buf+l_buf is ok: */
+	      //Assert((uInt)(s->pending) < s->lit_bufsize + 2*lx,
+	      //       "pendingBuf overflow");
+
+	    } while (lx < s.last_lit);
+	  }
+
+	  send_code(s, END_BLOCK, ltree);
+	}
+
+
+	/* ===========================================================================
+	 * Construct one Huffman tree and assigns the code bit strings and lengths.
+	 * Update the total bit length for the current block.
+	 * IN assertion: the field freq is set for all tree elements.
+	 * OUT assertions: the fields len and code are set to the optimal bit length
+	 *     and corresponding code. The length opt_len is updated; static_len is
+	 *     also updated if stree is not null. The field max_code is set.
+	 */
+	function build_tree(s, desc)
+	//    deflate_state *s;
+	//    tree_desc *desc; /* the tree descriptor */
+	{
+	  var tree     = desc.dyn_tree;
+	  var stree    = desc.stat_desc.static_tree;
+	  var has_stree = desc.stat_desc.has_stree;
+	  var elems    = desc.stat_desc.elems;
+	  var n, m;          /* iterate over heap elements */
+	  var max_code = -1; /* largest code with non zero frequency */
+	  var node;          /* new node being created */
+
+	  /* Construct the initial heap, with least frequent element in
+	   * heap[SMALLEST]. The sons of heap[n] are heap[2*n] and heap[2*n+1].
+	   * heap[0] is not used.
+	   */
+	  s.heap_len = 0;
+	  s.heap_max = HEAP_SIZE;
+
+	  for (n = 0; n < elems; n++) {
+	    if (tree[n * 2]/*.Freq*/ !== 0) {
+	      s.heap[++s.heap_len] = max_code = n;
+	      s.depth[n] = 0;
+
+	    } else {
+	      tree[n*2 + 1]/*.Len*/ = 0;
+	    }
+	  }
+
+	  /* The pkzip format requires that at least one distance code exists,
+	   * and that at least one bit should be sent even if there is only one
+	   * possible code. So to avoid special checks later on we force at least
+	   * two codes of non zero frequency.
+	   */
+	  while (s.heap_len < 2) {
+	    node = s.heap[++s.heap_len] = (max_code < 2 ? ++max_code : 0);
+	    tree[node * 2]/*.Freq*/ = 1;
+	    s.depth[node] = 0;
+	    s.opt_len--;
+
+	    if (has_stree) {
+	      s.static_len -= stree[node*2 + 1]/*.Len*/;
+	    }
+	    /* node is 0 or 1 so it does not have extra bits */
+	  }
+	  desc.max_code = max_code;
+
+	  /* The elements heap[heap_len/2+1 .. heap_len] are leaves of the tree,
+	   * establish sub-heaps of increasing lengths:
+	   */
+	  for (n = (s.heap_len >> 1/*int /2*/); n >= 1; n--) { pqdownheap(s, tree, n); }
+
+	  /* Construct the Huffman tree by repeatedly combining the least two
+	   * frequent nodes.
+	   */
+	  node = elems;              /* next internal node of the tree */
+	  do {
+	    //pqremove(s, tree, n);  /* n = node of least frequency */
+	    /*** pqremove ***/
+	    n = s.heap[1/*SMALLEST*/];
+	    s.heap[1/*SMALLEST*/] = s.heap[s.heap_len--];
+	    pqdownheap(s, tree, 1/*SMALLEST*/);
+	    /***/
+
+	    m = s.heap[1/*SMALLEST*/]; /* m = node of next least frequency */
+
+	    s.heap[--s.heap_max] = n; /* keep the nodes sorted by frequency */
+	    s.heap[--s.heap_max] = m;
+
+	    /* Create a new node father of n and m */
+	    tree[node * 2]/*.Freq*/ = tree[n * 2]/*.Freq*/ + tree[m * 2]/*.Freq*/;
+	    s.depth[node] = (s.depth[n] >= s.depth[m] ? s.depth[n] : s.depth[m]) + 1;
+	    tree[n*2 + 1]/*.Dad*/ = tree[m*2 + 1]/*.Dad*/ = node;
+
+	    /* and insert the new node in the heap */
+	    s.heap[1/*SMALLEST*/] = node++;
+	    pqdownheap(s, tree, 1/*SMALLEST*/);
+
+	  } while (s.heap_len >= 2);
+
+	  s.heap[--s.heap_max] = s.heap[1/*SMALLEST*/];
+
+	  /* At this point, the fields freq and dad are set. We can now
+	   * generate the bit lengths.
+	   */
+	  gen_bitlen(s, desc);
+
+	  /* The field len is now set, we can generate the bit codes */
+	  gen_codes(tree, max_code, s.bl_count);
+	}
+
+
+	/* ===========================================================================
+	 * Scan a literal or distance tree to determine the frequencies of the codes
+	 * in the bit length tree.
+	 */
+	function scan_tree(s, tree, max_code)
+	//    deflate_state *s;
+	//    ct_data *tree;   /* the tree to be scanned */
+	//    int max_code;    /* and its largest code of non zero frequency */
+	{
+	  var n;                     /* iterates over all tree elements */
+	  var prevlen = -1;          /* last emitted length */
+	  var curlen;                /* length of current code */
+
+	  var nextlen = tree[0*2 + 1]/*.Len*/; /* length of next code */
+
+	  var count = 0;             /* repeat count of the current code */
+	  var max_count = 7;         /* max repeat count */
+	  var min_count = 4;         /* min repeat count */
+
+	  if (nextlen === 0) {
+	    max_count = 138;
+	    min_count = 3;
+	  }
+	  tree[(max_code+1)*2 + 1]/*.Len*/ = 0xffff; /* guard */
+
+	  for (n = 0; n <= max_code; n++) {
+	    curlen = nextlen;
+	    nextlen = tree[(n+1)*2 + 1]/*.Len*/;
+
+	    if (++count < max_count && curlen === nextlen) {
+	      continue;
+
+	    } else if (count < min_count) {
+	      s.bl_tree[curlen * 2]/*.Freq*/ += count;
+
+	    } else if (curlen !== 0) {
+
+	      if (curlen !== prevlen) { s.bl_tree[curlen * 2]/*.Freq*/++; }
+	      s.bl_tree[REP_3_6*2]/*.Freq*/++;
+
+	    } else if (count <= 10) {
+	      s.bl_tree[REPZ_3_10*2]/*.Freq*/++;
+
+	    } else {
+	      s.bl_tree[REPZ_11_138*2]/*.Freq*/++;
+	    }
+
+	    count = 0;
+	    prevlen = curlen;
+
+	    if (nextlen === 0) {
+	      max_count = 138;
+	      min_count = 3;
+
+	    } else if (curlen === nextlen) {
+	      max_count = 6;
+	      min_count = 3;
+
+	    } else {
+	      max_count = 7;
+	      min_count = 4;
+	    }
+	  }
+	}
+
+
+	/* ===========================================================================
+	 * Send a literal or distance tree in compressed form, using the codes in
+	 * bl_tree.
+	 */
+	function send_tree(s, tree, max_code)
+	//    deflate_state *s;
+	//    ct_data *tree; /* the tree to be scanned */
+	//    int max_code;       /* and its largest code of non zero frequency */
+	{
+	  var n;                     /* iterates over all tree elements */
+	  var prevlen = -1;          /* last emitted length */
+	  var curlen;                /* length of current code */
+
+	  var nextlen = tree[0*2 + 1]/*.Len*/; /* length of next code */
+
+	  var count = 0;             /* repeat count of the current code */
+	  var max_count = 7;         /* max repeat count */
+	  var min_count = 4;         /* min repeat count */
+
+	  /* tree[max_code+1].Len = -1; */  /* guard already set */
+	  if (nextlen === 0) {
+	    max_count = 138;
+	    min_count = 3;
+	  }
+
+	  for (n = 0; n <= max_code; n++) {
+	    curlen = nextlen;
+	    nextlen = tree[(n+1)*2 + 1]/*.Len*/;
+
+	    if (++count < max_count && curlen === nextlen) {
+	      continue;
+
+	    } else if (count < min_count) {
+	      do { send_code(s, curlen, s.bl_tree); } while (--count !== 0);
+
+	    } else if (curlen !== 0) {
+	      if (curlen !== prevlen) {
+	        send_code(s, curlen, s.bl_tree);
+	        count--;
+	      }
+	      //Assert(count >= 3 && count <= 6, " 3_6?");
+	      send_code(s, REP_3_6, s.bl_tree);
+	      send_bits(s, count-3, 2);
+
+	    } else if (count <= 10) {
+	      send_code(s, REPZ_3_10, s.bl_tree);
+	      send_bits(s, count-3, 3);
+
+	    } else {
+	      send_code(s, REPZ_11_138, s.bl_tree);
+	      send_bits(s, count-11, 7);
+	    }
+
+	    count = 0;
+	    prevlen = curlen;
+	    if (nextlen === 0) {
+	      max_count = 138;
+	      min_count = 3;
+
+	    } else if (curlen === nextlen) {
+	      max_count = 6;
+	      min_count = 3;
+
+	    } else {
+	      max_count = 7;
+	      min_count = 4;
+	    }
+	  }
+	}
+
+
+	/* ===========================================================================
+	 * Construct the Huffman tree for the bit lengths and return the index in
+	 * bl_order of the last bit length code to send.
+	 */
+	function build_bl_tree(s) {
+	  var max_blindex;  /* index of last bit length code of non zero freq */
+
+	  /* Determine the bit length frequencies for literal and distance trees */
+	  scan_tree(s, s.dyn_ltree, s.l_desc.max_code);
+	  scan_tree(s, s.dyn_dtree, s.d_desc.max_code);
+
+	  /* Build the bit length tree: */
+	  build_tree(s, s.bl_desc);
+	  /* opt_len now includes the length of the tree representations, except
+	   * the lengths of the bit lengths codes and the 5+5+4 bits for the counts.
+	   */
+
+	  /* Determine the number of bit length codes to send. The pkzip format
+	   * requires that at least 4 bit length codes be sent. (appnote.txt says
+	   * 3 but the actual value used is 4.)
+	   */
+	  for (max_blindex = BL_CODES-1; max_blindex >= 3; max_blindex--) {
+	    if (s.bl_tree[bl_order[max_blindex]*2 + 1]/*.Len*/ !== 0) {
+	      break;
+	    }
+	  }
+	  /* Update opt_len to include the bit length tree and counts */
+	  s.opt_len += 3*(max_blindex+1) + 5+5+4;
+	  //Tracev((stderr, "\ndyn trees: dyn %ld, stat %ld",
+	  //        s->opt_len, s->static_len));
+
+	  return max_blindex;
+	}
+
+
+	/* ===========================================================================
+	 * Send the header for a block using dynamic Huffman trees: the counts, the
+	 * lengths of the bit length codes, the literal tree and the distance tree.
+	 * IN assertion: lcodes >= 257, dcodes >= 1, blcodes >= 4.
+	 */
+	function send_all_trees(s, lcodes, dcodes, blcodes)
+	//    deflate_state *s;
+	//    int lcodes, dcodes, blcodes; /* number of codes for each tree */
+	{
+	  var rank;                    /* index in bl_order */
+
+	  //Assert (lcodes >= 257 && dcodes >= 1 && blcodes >= 4, "not enough codes");
+	  //Assert (lcodes <= L_CODES && dcodes <= D_CODES && blcodes <= BL_CODES,
+	  //        "too many codes");
+	  //Tracev((stderr, "\nbl counts: "));
+	  send_bits(s, lcodes-257, 5); /* not +255 as stated in appnote.txt */
+	  send_bits(s, dcodes-1,   5);
+	  send_bits(s, blcodes-4,  4); /* not -3 as stated in appnote.txt */
+	  for (rank = 0; rank < blcodes; rank++) {
+	    //Tracev((stderr, "\nbl code %2d ", bl_order[rank]));
+	    send_bits(s, s.bl_tree[bl_order[rank]*2 + 1]/*.Len*/, 3);
+	  }
+	  //Tracev((stderr, "\nbl tree: sent %ld", s->bits_sent));
+
+	  send_tree(s, s.dyn_ltree, lcodes-1); /* literal tree */
+	  //Tracev((stderr, "\nlit tree: sent %ld", s->bits_sent));
+
+	  send_tree(s, s.dyn_dtree, dcodes-1); /* distance tree */
+	  //Tracev((stderr, "\ndist tree: sent %ld", s->bits_sent));
+	}
+
+
+	/* ===========================================================================
+	 * Check if the data type is TEXT or BINARY, using the following algorithm:
+	 * - TEXT if the two conditions below are satisfied:
+	 *    a) There are no non-portable control characters belonging to the
+	 *       "black list" (0..6, 14..25, 28..31).
+	 *    b) There is at least one printable character belonging to the
+	 *       "white list" (9 {TAB}, 10 {LF}, 13 {CR}, 32..255).
+	 * - BINARY otherwise.
+	 * - The following partially-portable control characters form a
+	 *   "gray list" that is ignored in this detection algorithm:
+	 *   (7 {BEL}, 8 {BS}, 11 {VT}, 12 {FF}, 26 {SUB}, 27 {ESC}).
+	 * IN assertion: the fields Freq of dyn_ltree are set.
+	 */
+	function detect_data_type(s) {
+	  /* black_mask is the bit mask of black-listed bytes
+	   * set bits 0..6, 14..25, and 28..31
+	   * 0xf3ffc07f = binary 11110011111111111100000001111111
+	   */
+	  var black_mask = 0xf3ffc07f;
+	  var n;
+
+	  /* Check for non-textual ("black-listed") bytes. */
+	  for (n = 0; n <= 31; n++, black_mask >>>= 1) {
+	    if ((black_mask & 1) && (s.dyn_ltree[n*2]/*.Freq*/ !== 0)) {
+	      return Z_BINARY;
+	    }
+	  }
+
+	  /* Check for textual ("white-listed") bytes. */
+	  if (s.dyn_ltree[9 * 2]/*.Freq*/ !== 0 || s.dyn_ltree[10 * 2]/*.Freq*/ !== 0 ||
+	      s.dyn_ltree[13 * 2]/*.Freq*/ !== 0) {
+	    return Z_TEXT;
+	  }
+	  for (n = 32; n < LITERALS; n++) {
+	    if (s.dyn_ltree[n * 2]/*.Freq*/ !== 0) {
+	      return Z_TEXT;
+	    }
+	  }
+
+	  /* There are no "black-listed" or "white-listed" bytes:
+	   * this stream either is empty or has tolerated ("gray-listed") bytes only.
+	   */
+	  return Z_BINARY;
+	}
+
+
+	var static_init_done = false;
+
+	/* ===========================================================================
+	 * Initialize the tree data structures for a new zlib stream.
+	 */
+	function _tr_init(s)
+	{
+
+	  if (!static_init_done) {
+	    tr_static_init();
+	    static_init_done = true;
+	  }
+
+	  s.l_desc  = new TreeDesc(s.dyn_ltree, static_l_desc);
+	  s.d_desc  = new TreeDesc(s.dyn_dtree, static_d_desc);
+	  s.bl_desc = new TreeDesc(s.bl_tree, static_bl_desc);
+
+	  s.bi_buf = 0;
+	  s.bi_valid = 0;
+
+	  /* Initialize the first block of the first file: */
+	  init_block(s);
+	}
+
+
+	/* ===========================================================================
+	 * Send a stored block
+	 */
+	function _tr_stored_block(s, buf, stored_len, last)
+	//DeflateState *s;
+	//charf *buf;       /* input block */
+	//ulg stored_len;   /* length of input block */
+	//int last;         /* one if this is the last block for a file */
+	{
+	  send_bits(s, (STORED_BLOCK<<1)+(last ? 1 : 0), 3);    /* send block type */
+	  copy_block(s, buf, stored_len, true); /* with header */
+	}
+
+
+	/* ===========================================================================
+	 * Send one empty static block to give enough lookahead for inflate.
+	 * This takes 10 bits, of which 7 may remain in the bit buffer.
+	 */
+	function _tr_align(s) {
+	  send_bits(s, STATIC_TREES<<1, 3);
+	  send_code(s, END_BLOCK, static_ltree);
+	  bi_flush(s);
+	}
+
+
+	/* ===========================================================================
+	 * Determine the best encoding for the current block: dynamic trees, static
+	 * trees or store, and output the encoded block to the zip file.
+	 */
+	function _tr_flush_block(s, buf, stored_len, last)
+	//DeflateState *s;
+	//charf *buf;       /* input block, or NULL if too old */
+	//ulg stored_len;   /* length of input block */
+	//int last;         /* one if this is the last block for a file */
+	{
+	  var opt_lenb, static_lenb;  /* opt_len and static_len in bytes */
+	  var max_blindex = 0;        /* index of last bit length code of non zero freq */
+
+	  /* Build the Huffman trees unless a stored block is forced */
+	  if (s.level > 0) {
+
+	    /* Check if the file is binary or text */
+	    if (s.strm.data_type === Z_UNKNOWN) {
+	      s.strm.data_type = detect_data_type(s);
+	    }
+
+	    /* Construct the literal and distance trees */
+	    build_tree(s, s.l_desc);
+	    // Tracev((stderr, "\nlit data: dyn %ld, stat %ld", s->opt_len,
+	    //        s->static_len));
+
+	    build_tree(s, s.d_desc);
+	    // Tracev((stderr, "\ndist data: dyn %ld, stat %ld", s->opt_len,
+	    //        s->static_len));
+	    /* At this point, opt_len and static_len are the total bit lengths of
+	     * the compressed block data, excluding the tree representations.
+	     */
+
+	    /* Build the bit length tree for the above two trees, and get the index
+	     * in bl_order of the last bit length code to send.
+	     */
+	    max_blindex = build_bl_tree(s);
+
+	    /* Determine the best encoding. Compute the block lengths in bytes. */
+	    opt_lenb = (s.opt_len+3+7) >>> 3;
+	    static_lenb = (s.static_len+3+7) >>> 3;
+
+	    // Tracev((stderr, "\nopt %lu(%lu) stat %lu(%lu) stored %lu lit %u ",
+	    //        opt_lenb, s->opt_len, static_lenb, s->static_len, stored_len,
+	    //        s->last_lit));
+
+	    if (static_lenb <= opt_lenb) { opt_lenb = static_lenb; }
+
+	  } else {
+	    // Assert(buf != (char*)0, "lost buf");
+	    opt_lenb = static_lenb = stored_len + 5; /* force a stored block */
+	  }
+
+	  if ((stored_len+4 <= opt_lenb) && (buf !== -1)) {
+	    /* 4: two words for the lengths */
+
+	    /* The test buf != NULL is only necessary if LIT_BUFSIZE > WSIZE.
+	     * Otherwise we can't have processed more than WSIZE input bytes since
+	     * the last block flush, because compression would have been
+	     * successful. If LIT_BUFSIZE <= WSIZE, it is never too late to
+	     * transform a block into a stored block.
+	     */
+	    _tr_stored_block(s, buf, stored_len, last);
+
+	  } else if (s.strategy === Z_FIXED || static_lenb === opt_lenb) {
+
+	    send_bits(s, (STATIC_TREES<<1) + (last ? 1 : 0), 3);
+	    compress_block(s, static_ltree, static_dtree);
+
+	  } else {
+	    send_bits(s, (DYN_TREES<<1) + (last ? 1 : 0), 3);
+	    send_all_trees(s, s.l_desc.max_code+1, s.d_desc.max_code+1, max_blindex+1);
+	    compress_block(s, s.dyn_ltree, s.dyn_dtree);
+	  }
+	  // Assert (s->compressed_len == s->bits_sent, "bad compressed size");
+	  /* The above check is made mod 2^32, for files larger than 512 MB
+	   * and uLong implemented on 32 bits.
+	   */
+	  init_block(s);
+
+	  if (last) {
+	    bi_windup(s);
+	  }
+	  // Tracev((stderr,"\ncomprlen %lu(%lu) ", s->compressed_len>>3,
+	  //       s->compressed_len-7*last));
+	}
+
+	/* ===========================================================================
+	 * Save the match info and tally the frequency counts. Return true if
+	 * the current block must be flushed.
+	 */
+	function _tr_tally(s, dist, lc)
+	//    deflate_state *s;
+	//    unsigned dist;  /* distance of matched string */
+	//    unsigned lc;    /* match length-MIN_MATCH or unmatched char (if dist==0) */
+	{
+	  //var out_length, in_length, dcode;
+
+	  s.pending_buf[s.d_buf + s.last_lit * 2]     = (dist >>> 8) & 0xff;
+	  s.pending_buf[s.d_buf + s.last_lit * 2 + 1] = dist & 0xff;
+
+	  s.pending_buf[s.l_buf + s.last_lit] = lc & 0xff;
+	  s.last_lit++;
+
+	  if (dist === 0) {
+	    /* lc is the unmatched char */
+	    s.dyn_ltree[lc*2]/*.Freq*/++;
+	  } else {
+	    s.matches++;
+	    /* Here, lc is the match length - MIN_MATCH */
+	    dist--;             /* dist = match distance - 1 */
+	    //Assert((ush)dist < (ush)MAX_DIST(s) &&
+	    //       (ush)lc <= (ush)(MAX_MATCH-MIN_MATCH) &&
+	    //       (ush)d_code(dist) < (ush)D_CODES,  "_tr_tally: bad match");
+
+	    s.dyn_ltree[(_length_code[lc]+LITERALS+1) * 2]/*.Freq*/++;
+	    s.dyn_dtree[d_code(dist) * 2]/*.Freq*/++;
+	  }
+
+	// (!) This block is disabled in zlib defailts,
+	// don't enable it for binary compatibility
+
+	//#ifdef TRUNCATE_BLOCK
+	//  /* Try to guess if it is profitable to stop the current block here */
+	//  if ((s.last_lit & 0x1fff) === 0 && s.level > 2) {
+	//    /* Compute an upper bound for the compressed length */
+	//    out_length = s.last_lit*8;
+	//    in_length = s.strstart - s.block_start;
+	//
+	//    for (dcode = 0; dcode < D_CODES; dcode++) {
+	//      out_length += s.dyn_dtree[dcode*2]/*.Freq*/ * (5 + extra_dbits[dcode]);
+	//    }
+	//    out_length >>>= 3;
+	//    //Tracev((stderr,"\nlast_lit %u, in %ld, out ~%ld(%ld%%) ",
+	//    //       s->last_lit, in_length, out_length,
+	//    //       100L - out_length*100L/in_length));
+	//    if (s.matches < (s.last_lit>>1)/*int /2*/ && out_length < (in_length>>1)/*int /2*/) {
+	//      return true;
+	//    }
+	//  }
+	//#endif
+
+	  return (s.last_lit === s.lit_bufsize-1);
+	  /* We avoid equality with lit_bufsize because of wraparound at 64K
+	   * on 16 bit machines and because stored blocks are restricted to
+	   * 64K-1 bytes.
+	   */
+	}
+
+	exports._tr_init  = _tr_init;
+	exports._tr_stored_block = _tr_stored_block;
+	exports._tr_flush_block  = _tr_flush_block;
+	exports._tr_tally = _tr_tally;
+	exports._tr_align = _tr_align;
+
+
+/***/ },
+/* 54 */
+/***/ function(module, exports) {
+
+	'use strict';
+
+	// Note: adler32 takes 12% for level 0 and 2% for level 6.
+	// It doesn't worth to make additional optimizationa as in original.
+	// Small size is preferable.
+
+	function adler32(adler, buf, len, pos) {
+	  var s1 = (adler & 0xffff) |0,
+	      s2 = ((adler >>> 16) & 0xffff) |0,
+	      n = 0;
+
+	  while (len !== 0) {
+	    // Set limit ~ twice less than 5552, to keep
+	    // s2 in 31-bits, because we force signed ints.
+	    // in other case %= will fail.
+	    n = len > 2000 ? 2000 : len;
+	    len -= n;
+
+	    do {
+	      s1 = (s1 + buf[pos++]) |0;
+	      s2 = (s2 + s1) |0;
+	    } while (--n);
+
+	    s1 %= 65521;
+	    s2 %= 65521;
+	  }
+
+	  return (s1 | (s2 << 16)) |0;
+	}
+
+
+	module.exports = adler32;
+
+
+/***/ },
+/* 55 */
+/***/ function(module, exports) {
+
+	'use strict';
+
+	// Note: we can't get significant speed boost here.
+	// So write code to minimize size - no pregenerated tables
+	// and array tools dependencies.
+
+
+	// Use ordinary array, since untyped makes no boost here
+	function makeTable() {
+	  var c, table = [];
+
+	  for (var n =0; n < 256; n++) {
+	    c = n;
+	    for (var k =0; k < 8; k++) {
+	      c = ((c&1) ? (0xEDB88320 ^ (c >>> 1)) : (c >>> 1));
+	    }
+	    table[n] = c;
+	  }
+
+	  return table;
+	}
+
+	// Create table on load. Just 255 signed longs. Not a problem.
+	var crcTable = makeTable();
+
+
+	function crc32(crc, buf, len, pos) {
+	  var t = crcTable,
+	      end = pos + len;
+
+	  crc = crc ^ (-1);
+
+	  for (var i = pos; i < end; i++) {
+	    crc = (crc >>> 8) ^ t[(crc ^ buf[i]) & 0xFF];
+	  }
+
+	  return (crc ^ (-1)); // >>> 0;
+	}
+
+
+	module.exports = crc32;
+
+
+/***/ },
+/* 56 */
+/***/ function(module, exports, __webpack_require__) {
+
+	'use strict';
+
+
+	var utils = __webpack_require__(52);
+	var adler32 = __webpack_require__(54);
+	var crc32   = __webpack_require__(55);
+	var inflate_fast = __webpack_require__(57);
+	var inflate_table = __webpack_require__(58);
+
+	var CODES = 0;
+	var LENS = 1;
+	var DISTS = 2;
+
+	/* Public constants ==========================================================*/
+	/* ===========================================================================*/
+
+
+	/* Allowed flush values; see deflate() and inflate() below for details */
+	//var Z_NO_FLUSH      = 0;
+	//var Z_PARTIAL_FLUSH = 1;
+	//var Z_SYNC_FLUSH    = 2;
+	//var Z_FULL_FLUSH    = 3;
+	var Z_FINISH        = 4;
+	var Z_BLOCK         = 5;
+	var Z_TREES         = 6;
+
+
+	/* Return codes for the compression/decompression functions. Negative values
+	 * are errors, positive values are used for special but normal events.
+	 */
+	var Z_OK            = 0;
+	var Z_STREAM_END    = 1;
+	var Z_NEED_DICT     = 2;
+	//var Z_ERRNO         = -1;
+	var Z_STREAM_ERROR  = -2;
+	var Z_DATA_ERROR    = -3;
+	var Z_MEM_ERROR     = -4;
+	var Z_BUF_ERROR     = -5;
+	//var Z_VERSION_ERROR = -6;
+
+	/* The deflate compression method */
+	var Z_DEFLATED  = 8;
+
+
+	/* STATES ====================================================================*/
+	/* ===========================================================================*/
+
+
+	var    HEAD = 1;       /* i: waiting for magic header */
+	var    FLAGS = 2;      /* i: waiting for method and flags (gzip) */
+	var    TIME = 3;       /* i: waiting for modification time (gzip) */
+	var    OS = 4;         /* i: waiting for extra flags and operating system (gzip) */
+	var    EXLEN = 5;      /* i: waiting for extra length (gzip) */
+	var    EXTRA = 6;      /* i: waiting for extra bytes (gzip) */
+	var    NAME = 7;       /* i: waiting for end of file name (gzip) */
+	var    COMMENT = 8;    /* i: waiting for end of comment (gzip) */
+	var    HCRC = 9;       /* i: waiting for header crc (gzip) */
+	var    DICTID = 10;    /* i: waiting for dictionary check value */
+	var    DICT = 11;      /* waiting for inflateSetDictionary() call */
+	var        TYPE = 12;      /* i: waiting for type bits, including last-flag bit */
+	var        TYPEDO = 13;    /* i: same, but skip check to exit inflate on new block */
+	var        STORED = 14;    /* i: waiting for stored size (length and complement) */
+	var        COPY_ = 15;     /* i/o: same as COPY below, but only first time in */
+	var        COPY = 16;      /* i/o: waiting for input or output to copy stored block */
+	var        TABLE = 17;     /* i: waiting for dynamic block table lengths */
+	var        LENLENS = 18;   /* i: waiting for code length code lengths */
+	var        CODELENS = 19;  /* i: waiting for length/lit and distance code lengths */
+	var            LEN_ = 20;      /* i: same as LEN below, but only first time in */
+	var            LEN = 21;       /* i: waiting for length/lit/eob code */
+	var            LENEXT = 22;    /* i: waiting for length extra bits */
+	var            DIST = 23;      /* i: waiting for distance code */
+	var            DISTEXT = 24;   /* i: waiting for distance extra bits */
+	var            MATCH = 25;     /* o: waiting for output space to copy string */
+	var            LIT = 26;       /* o: waiting for output space to write literal */
+	var    CHECK = 27;     /* i: waiting for 32-bit check value */
+	var    LENGTH = 28;    /* i: waiting for 32-bit length (gzip) */
+	var    DONE = 29;      /* finished check, done -- remain here until reset */
+	var    BAD = 30;       /* got a data error -- remain here until reset */
+	var    MEM = 31;       /* got an inflate() memory error -- remain here until reset */
+	var    SYNC = 32;      /* looking for synchronization bytes to restart inflate() */
+
+	/* ===========================================================================*/
+
+
+
+	var ENOUGH_LENS = 852;
+	var ENOUGH_DISTS = 592;
+	//var ENOUGH =  (ENOUGH_LENS+ENOUGH_DISTS);
+
+	var MAX_WBITS = 15;
+	/* 32K LZ77 window */
+	var DEF_WBITS = MAX_WBITS;
+
+
+	function ZSWAP32(q) {
+	  return  (((q >>> 24) & 0xff) +
+	          ((q >>> 8) & 0xff00) +
+	          ((q & 0xff00) << 8) +
+	          ((q & 0xff) << 24));
+	}
+
+
+	function InflateState() {
+	  this.mode = 0;             /* current inflate mode */
+	  this.last = false;          /* true if processing last block */
+	  this.wrap = 0;              /* bit 0 true for zlib, bit 1 true for gzip */
+	  this.havedict = false;      /* true if dictionary provided */
+	  this.flags = 0;             /* gzip header method and flags (0 if zlib) */
+	  this.dmax = 0;              /* zlib header max distance (INFLATE_STRICT) */
+	  this.check = 0;             /* protected copy of check value */
+	  this.total = 0;             /* protected copy of output count */
+	  // TODO: may be {}
+	  this.head = null;           /* where to save gzip header information */
+
+	  /* sliding window */
+	  this.wbits = 0;             /* log base 2 of requested window size */
+	  this.wsize = 0;             /* window size or zero if not using window */
+	  this.whave = 0;             /* valid bytes in the window */
+	  this.wnext = 0;             /* window write index */
+	  this.window = null;         /* allocated sliding window, if needed */
+
+	  /* bit accumulator */
+	  this.hold = 0;              /* input bit accumulator */
+	  this.bits = 0;              /* number of bits in "in" */
+
+	  /* for string and stored block copying */
+	  this.length = 0;            /* literal or length of data to copy */
+	  this.offset = 0;            /* distance back to copy string from */
+
+	  /* for table and code decoding */
+	  this.extra = 0;             /* extra bits needed */
+
+	  /* fixed and dynamic code tables */
+	  this.lencode = null;          /* starting table for length/literal codes */
+	  this.distcode = null;         /* starting table for distance codes */
+	  this.lenbits = 0;           /* index bits for lencode */
+	  this.distbits = 0;          /* index bits for distcode */
+
+	  /* dynamic table building */
+	  this.ncode = 0;             /* number of code length code lengths */
+	  this.nlen = 0;              /* number of length code lengths */
+	  this.ndist = 0;             /* number of distance code lengths */
+	  this.have = 0;              /* number of code lengths in lens[] */
+	  this.next = null;              /* next available space in codes[] */
+
+	  this.lens = new utils.Buf16(320); /* temporary storage for code lengths */
+	  this.work = new utils.Buf16(288); /* work area for code table building */
+
+	  /*
+	   because we don't have pointers in js, we use lencode and distcode directly
+	   as buffers so we don't need codes
+	  */
+	  //this.codes = new utils.Buf32(ENOUGH);       /* space for code tables */
+	  this.lendyn = null;              /* dynamic table for length/literal codes (JS specific) */
+	  this.distdyn = null;             /* dynamic table for distance codes (JS specific) */
+	  this.sane = 0;                   /* if false, allow invalid distance too far */
+	  this.back = 0;                   /* bits back of last unprocessed length/lit */
+	  this.was = 0;                    /* initial length of match */
+	}
+
+	function inflateResetKeep(strm) {
+	  var state;
+
+	  if (!strm || !strm.state) { return Z_STREAM_ERROR; }
+	  state = strm.state;
+	  strm.total_in = strm.total_out = state.total = 0;
+	  strm.msg = ''; /*Z_NULL*/
+	  if (state.wrap) {       /* to support ill-conceived Java test suite */
+	    strm.adler = state.wrap & 1;
+	  }
+	  state.mode = HEAD;
+	  state.last = 0;
+	  state.havedict = 0;
+	  state.dmax = 32768;
+	  state.head = null/*Z_NULL*/;
+	  state.hold = 0;
+	  state.bits = 0;
+	  //state.lencode = state.distcode = state.next = state.codes;
+	  state.lencode = state.lendyn = new utils.Buf32(ENOUGH_LENS);
+	  state.distcode = state.distdyn = new utils.Buf32(ENOUGH_DISTS);
+
+	  state.sane = 1;
+	  state.back = -1;
+	  //Tracev((stderr, "inflate: reset\n"));
+	  return Z_OK;
+	}
+
+	function inflateReset(strm) {
+	  var state;
+
+	  if (!strm || !strm.state) { return Z_STREAM_ERROR; }
+	  state = strm.state;
+	  state.wsize = 0;
+	  state.whave = 0;
+	  state.wnext = 0;
+	  return inflateResetKeep(strm);
+
+	}
+
+	function inflateReset2(strm, windowBits) {
+	  var wrap;
+	  var state;
+
+	  /* get the state */
+	  if (!strm || !strm.state) { return Z_STREAM_ERROR; }
+	  state = strm.state;
+
+	  /* extract wrap request from windowBits parameter */
+	  if (windowBits < 0) {
+	    wrap = 0;
+	    windowBits = -windowBits;
+	  }
+	  else {
+	    wrap = (windowBits >> 4) + 1;
+	    if (windowBits < 48) {
+	      windowBits &= 15;
+	    }
+	  }
+
+	  /* set number of window bits, free window if different */
+	  if (windowBits && (windowBits < 8 || windowBits > 15)) {
+	    return Z_STREAM_ERROR;
+	  }
+	  if (state.window !== null && state.wbits !== windowBits) {
+	    state.window = null;
+	  }
+
+	  /* update state and reset the rest of it */
+	  state.wrap = wrap;
+	  state.wbits = windowBits;
+	  return inflateReset(strm);
+	}
+
+	function inflateInit2(strm, windowBits) {
+	  var ret;
+	  var state;
+
+	  if (!strm) { return Z_STREAM_ERROR; }
+	  //strm.msg = Z_NULL;                 /* in case we return an error */
+
+	  state = new InflateState();
+
+	  //if (state === Z_NULL) return Z_MEM_ERROR;
+	  //Tracev((stderr, "inflate: allocated\n"));
+	  strm.state = state;
+	  state.window = null/*Z_NULL*/;
+	  ret = inflateReset2(strm, windowBits);
+	  if (ret !== Z_OK) {
+	    strm.state = null/*Z_NULL*/;
+	  }
+	  return ret;
+	}
+
+	function inflateInit(strm) {
+	  return inflateInit2(strm, DEF_WBITS);
+	}
+
+
+	/*
+	 Return state with length and distance decoding tables and index sizes set to
+	 fixed code decoding.  Normally this returns fixed tables from inffixed.h.
+	 If BUILDFIXED is defined, then instead this routine builds the tables the
+	 first time it's called, and returns those tables the first time and
+	 thereafter.  This reduces the size of the code by about 2K bytes, in
+	 exchange for a little execution time.  However, BUILDFIXED should not be
+	 used for threaded applications, since the rewriting of the tables and virgin
+	 may not be thread-safe.
+	 */
+	var virgin = true;
+
+	var lenfix, distfix; // We have no pointers in JS, so keep tables separate
+
+	function fixedtables(state) {
+	  /* build fixed huffman tables if first call (may not be thread safe) */
+	  if (virgin) {
+	    var sym;
+
+	    lenfix = new utils.Buf32(512);
+	    distfix = new utils.Buf32(32);
+
+	    /* literal/length table */
+	    sym = 0;
+	    while (sym < 144) { state.lens[sym++] = 8; }
+	    while (sym < 256) { state.lens[sym++] = 9; }
+	    while (sym < 280) { state.lens[sym++] = 7; }
+	    while (sym < 288) { state.lens[sym++] = 8; }
+
+	    inflate_table(LENS,  state.lens, 0, 288, lenfix,   0, state.work, {bits: 9});
+
+	    /* distance table */
+	    sym = 0;
+	    while (sym < 32) { state.lens[sym++] = 5; }
+
+	    inflate_table(DISTS, state.lens, 0, 32,   distfix, 0, state.work, {bits: 5});
+
+	    /* do this just once */
+	    virgin = false;
+	  }
+
+	  state.lencode = lenfix;
+	  state.lenbits = 9;
+	  state.distcode = distfix;
+	  state.distbits = 5;
+	}
+
+
+	/*
+	 Update the window with the last wsize (normally 32K) bytes written before
+	 returning.  If window does not exist yet, create it.  This is only called
+	 when a window is already in use, or when output has been written during this
+	 inflate call, but the end of the deflate stream has not been reached yet.
+	 It is also called to create a window for dictionary data when a dictionary
+	 is loaded.
+
+	 Providing output buffers larger than 32K to inflate() should provide a speed
+	 advantage, since only the last 32K of output is copied to the sliding window
+	 upon return from inflate(), and since all distances after the first 32K of
+	 output will fall in the output data, making match copies simpler and faster.
+	 The advantage may be dependent on the size of the processor's data caches.
+	 */
+	function updatewindow(strm, src, end, copy) {
+	  var dist;
+	  var state = strm.state;
+
+	  /* if it hasn't been done already, allocate space for the window */
+	  if (state.window === null) {
+	    state.wsize = 1 << state.wbits;
+	    state.wnext = 0;
+	    state.whave = 0;
+
+	    state.window = new utils.Buf8(state.wsize);
+	  }
+
+	  /* copy state->wsize or less output bytes into the circular window */
+	  if (copy >= state.wsize) {
+	    utils.arraySet(state.window,src, end - state.wsize, state.wsize, 0);
+	    state.wnext = 0;
+	    state.whave = state.wsize;
+	  }
+	  else {
+	    dist = state.wsize - state.wnext;
+	    if (dist > copy) {
+	      dist = copy;
+	    }
+	    //zmemcpy(state->window + state->wnext, end - copy, dist);
+	    utils.arraySet(state.window,src, end - copy, dist, state.wnext);
+	    copy -= dist;
+	    if (copy) {
+	      //zmemcpy(state->window, end - copy, copy);
+	      utils.arraySet(state.window,src, end - copy, copy, 0);
+	      state.wnext = copy;
+	      state.whave = state.wsize;
+	    }
+	    else {
+	      state.wnext += dist;
+	      if (state.wnext === state.wsize) { state.wnext = 0; }
+	      if (state.whave < state.wsize) { state.whave += dist; }
+	    }
+	  }
+	  return 0;
+	}
+
+	function inflate(strm, flush) {
+	  var state;
+	  var input, output;          // input/output buffers
+	  var next;                   /* next input INDEX */
+	  var put;                    /* next output INDEX */
+	  var have, left;             /* available input and output */
+	  var hold;                   /* bit buffer */
+	  var bits;                   /* bits in bit buffer */
+	  var _in, _out;              /* save starting available input and output */
+	  var copy;                   /* number of stored or match bytes to copy */
+	  var from;                   /* where to copy match bytes from */
+	  var from_source;
+	  var here = 0;               /* current decoding table entry */
+	  var here_bits, here_op, here_val; // paked "here" denormalized (JS specific)
+	  //var last;                   /* parent table entry */
+	  var last_bits, last_op, last_val; // paked "last" denormalized (JS specific)
+	  var len;                    /* length to copy for repeats, bits to drop */
+	  var ret;                    /* return code */
+	  var hbuf = new utils.Buf8(4);    /* buffer for gzip header crc calculation */
+	  var opts;
+
+	  var n; // temporary var for NEED_BITS
+
+	  var order = /* permutation of code lengths */
+	    [16, 17, 18, 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15];
+
+
+	  if (!strm || !strm.state || !strm.output ||
+	      (!strm.input && strm.avail_in !== 0)) {
+	    return Z_STREAM_ERROR;
+	  }
+
+	  state = strm.state;
+	  if (state.mode === TYPE) { state.mode = TYPEDO; }    /* skip check */
+
+
+	  //--- LOAD() ---
+	  put = strm.next_out;
+	  output = strm.output;
+	  left = strm.avail_out;
+	  next = strm.next_in;
+	  input = strm.input;
+	  have = strm.avail_in;
+	  hold = state.hold;
+	  bits = state.bits;
+	  //---
+
+	  _in = have;
+	  _out = left;
+	  ret = Z_OK;
+
+	  inf_leave: // goto emulation
+	  for (;;) {
+	    switch (state.mode) {
+	    case HEAD:
+	      if (state.wrap === 0) {
+	        state.mode = TYPEDO;
+	        break;
+	      }
+	      //=== NEEDBITS(16);
+	      while (bits < 16) {
+	        if (have === 0) { break inf_leave; }
+	        have--;
+	        hold += input[next++] << bits;
+	        bits += 8;
+	      }
+	      //===//
+	      if ((state.wrap & 2) && hold === 0x8b1f) {  /* gzip header */
+	        state.check = 0/*crc32(0L, Z_NULL, 0)*/;
+	        //=== CRC2(state.check, hold);
+	        hbuf[0] = hold & 0xff;
+	        hbuf[1] = (hold >>> 8) & 0xff;
+	        state.check = crc32(state.check, hbuf, 2, 0);
+	        //===//
+
+	        //=== INITBITS();
+	        hold = 0;
+	        bits = 0;
+	        //===//
+	        state.mode = FLAGS;
+	        break;
+	      }
+	      state.flags = 0;           /* expect zlib header */
+	      if (state.head) {
+	        state.head.done = false;
+	      }
+	      if (!(state.wrap & 1) ||   /* check if zlib header allowed */
+	        (((hold & 0xff)/*BITS(8)*/ << 8) + (hold >> 8)) % 31) {
+	        strm.msg = 'incorrect header check';
+	        state.mode = BAD;
+	        break;
+	      }
+	      if ((hold & 0x0f)/*BITS(4)*/ !== Z_DEFLATED) {
+	        strm.msg = 'unknown compression method';
+	        state.mode = BAD;
+	        break;
+	      }
+	      //--- DROPBITS(4) ---//
+	      hold >>>= 4;
+	      bits -= 4;
+	      //---//
+	      len = (hold & 0x0f)/*BITS(4)*/ + 8;
+	      if (state.wbits === 0) {
+	        state.wbits = len;
+	      }
+	      else if (len > state.wbits) {
+	        strm.msg = 'invalid window size';
+	        state.mode = BAD;
+	        break;
+	      }
+	      state.dmax = 1 << len;
+	      //Tracev((stderr, "inflate:   zlib header ok\n"));
+	      strm.adler = state.check = 1/*adler32(0L, Z_NULL, 0)*/;
+	      state.mode = hold & 0x200 ? DICTID : TYPE;
+	      //=== INITBITS();
+	      hold = 0;
+	      bits = 0;
+	      //===//
+	      break;
+	    case FLAGS:
+	      //=== NEEDBITS(16); */
+	      while (bits < 16) {
+	        if (have === 0) { break inf_leave; }
+	        have--;
+	        hold += input[next++] << bits;
+	        bits += 8;
+	      }
+	      //===//
+	      state.flags = hold;
+	      if ((state.flags & 0xff) !== Z_DEFLATED) {
+	        strm.msg = 'unknown compression method';
+	        state.mode = BAD;
+	        break;
+	      }
+	      if (state.flags & 0xe000) {
+	        strm.msg = 'unknown header flags set';
+	        state.mode = BAD;
+	        break;
+	      }
+	      if (state.head) {
+	        state.head.text = ((hold >> 8) & 1);
+	      }
+	      if (state.flags & 0x0200) {
+	        //=== CRC2(state.check, hold);
+	        hbuf[0] = hold & 0xff;
+	        hbuf[1] = (hold >>> 8) & 0xff;
+	        state.check = crc32(state.check, hbuf, 2, 0);
+	        //===//
+	      }
+	      //=== INITBITS();
+	      hold = 0;
+	      bits = 0;
+	      //===//
+	      state.mode = TIME;
+	      /* falls through */
+	    case TIME:
+	      //=== NEEDBITS(32); */
+	      while (bits < 32) {
+	        if (have === 0) { break inf_leave; }
+	        have--;
+	        hold += input[next++] << bits;
+	        bits += 8;
+	      }
+	      //===//
+	      if (state.head) {
+	        state.head.time = hold;
+	      }
+	      if (state.flags & 0x0200) {
+	        //=== CRC4(state.check, hold)
+	        hbuf[0] = hold & 0xff;
+	        hbuf[1] = (hold >>> 8) & 0xff;
+	        hbuf[2] = (hold >>> 16) & 0xff;
+	        hbuf[3] = (hold >>> 24) & 0xff;
+	        state.check = crc32(state.check, hbuf, 4, 0);
+	        //===
+	      }
+	      //=== INITBITS();
+	      hold = 0;
+	      bits = 0;
+	      //===//
+	      state.mode = OS;
+	      /* falls through */
+	    case OS:
+	      //=== NEEDBITS(16); */
+	      while (bits < 16) {
+	        if (have === 0) { break inf_leave; }
+	        have--;
+	        hold += input[next++] << bits;
+	        bits += 8;
+	      }
+	      //===//
+	      if (state.head) {
+	        state.head.xflags = (hold & 0xff);
+	        state.head.os = (hold >> 8);
+	      }
+	      if (state.flags & 0x0200) {
+	        //=== CRC2(state.check, hold);
+	        hbuf[0] = hold & 0xff;
+	        hbuf[1] = (hold >>> 8) & 0xff;
+	        state.check = crc32(state.check, hbuf, 2, 0);
+	        //===//
+	      }
+	      //=== INITBITS();
+	      hold = 0;
+	      bits = 0;
+	      //===//
+	      state.mode = EXLEN;
+	      /* falls through */
+	    case EXLEN:
+	      if (state.flags & 0x0400) {
+	        //=== NEEDBITS(16); */
+	        while (bits < 16) {
+	          if (have === 0) { break inf_leave; }
+	          have--;
+	          hold += input[next++] << bits;
+	          bits += 8;
+	        }
+	        //===//
+	        state.length = hold;
+	        if (state.head) {
+	          state.head.extra_len = hold;
+	        }
+	        if (state.flags & 0x0200) {
+	          //=== CRC2(state.check, hold);
+	          hbuf[0] = hold & 0xff;
+	          hbuf[1] = (hold >>> 8) & 0xff;
+	          state.check = crc32(state.check, hbuf, 2, 0);
+	          //===//
+	        }
+	        //=== INITBITS();
+	        hold = 0;
+	        bits = 0;
+	        //===//
+	      }
+	      else if (state.head) {
+	        state.head.extra = null/*Z_NULL*/;
+	      }
+	      state.mode = EXTRA;
+	      /* falls through */
+	    case EXTRA:
+	      if (state.flags & 0x0400) {
+	        copy = state.length;
+	        if (copy > have) { copy = have; }
+	        if (copy) {
+	          if (state.head) {
+	            len = state.head.extra_len - state.length;
+	            if (!state.head.extra) {
+	              // Use untyped array for more conveniend processing later
+	              state.head.extra = new Array(state.head.extra_len);
+	            }
+	            utils.arraySet(
+	              state.head.extra,
+	              input,
+	              next,
+	              // extra field is limited to 65536 bytes
+	              // - no need for additional size check
+	              copy,
+	              /*len + copy > state.head.extra_max - len ? state.head.extra_max : copy,*/
+	              len
+	            );
+	            //zmemcpy(state.head.extra + len, next,
+	            //        len + copy > state.head.extra_max ?
+	            //        state.head.extra_max - len : copy);
+	          }
+	          if (state.flags & 0x0200) {
+	            state.check = crc32(state.check, input, copy, next);
+	          }
+	          have -= copy;
+	          next += copy;
+	          state.length -= copy;
+	        }
+	        if (state.length) { break inf_leave; }
+	      }
+	      state.length = 0;
+	      state.mode = NAME;
+	      /* falls through */
+	    case NAME:
+	      if (state.flags & 0x0800) {
+	        if (have === 0) { break inf_leave; }
+	        copy = 0;
+	        do {
+	          // TODO: 2 or 1 bytes?
+	          len = input[next + copy++];
+	          /* use constant limit because in js we should not preallocate memory */
+	          if (state.head && len &&
+	              (state.length < 65536 /*state.head.name_max*/)) {
+	            state.head.name += String.fromCharCode(len);
+	          }
+	        } while (len && copy < have);
+
+	        if (state.flags & 0x0200) {
+	          state.check = crc32(state.check, input, copy, next);
+	        }
+	        have -= copy;
+	        next += copy;
+	        if (len) { break inf_leave; }
+	      }
+	      else if (state.head) {
+	        state.head.name = null;
+	      }
+	      state.length = 0;
+	      state.mode = COMMENT;
+	      /* falls through */
+	    case COMMENT:
+	      if (state.flags & 0x1000) {
+	        if (have === 0) { break inf_leave; }
+	        copy = 0;
+	        do {
+	          len = input[next + copy++];
+	          /* use constant limit because in js we should not preallocate memory */
+	          if (state.head && len &&
+	              (state.length < 65536 /*state.head.comm_max*/)) {
+	            state.head.comment += String.fromCharCode(len);
+	          }
+	        } while (len && copy < have);
+	        if (state.flags & 0x0200) {
+	          state.check = crc32(state.check, input, copy, next);
+	        }
+	        have -= copy;
+	        next += copy;
+	        if (len) { break inf_leave; }
+	      }
+	      else if (state.head) {
+	        state.head.comment = null;
+	      }
+	      state.mode = HCRC;
+	      /* falls through */
+	    case HCRC:
+	      if (state.flags & 0x0200) {
+	        //=== NEEDBITS(16); */
+	        while (bits < 16) {
+	          if (have === 0) { break inf_leave; }
+	          have--;
+	          hold += input[next++] << bits;
+	          bits += 8;
+	        }
+	        //===//
+	        if (hold !== (state.check & 0xffff)) {
+	          strm.msg = 'header crc mismatch';
+	          state.mode = BAD;
+	          break;
+	        }
+	        //=== INITBITS();
+	        hold = 0;
+	        bits = 0;
+	        //===//
+	      }
+	      if (state.head) {
+	        state.head.hcrc = ((state.flags >> 9) & 1);
+	        state.head.done = true;
+	      }
+	      strm.adler = state.check = 0 /*crc32(0L, Z_NULL, 0)*/;
+	      state.mode = TYPE;
+	      break;
+	    case DICTID:
+	      //=== NEEDBITS(32); */
+	      while (bits < 32) {
+	        if (have === 0) { break inf_leave; }
+	        have--;
+	        hold += input[next++] << bits;
+	        bits += 8;
+	      }
+	      //===//
+	      strm.adler = state.check = ZSWAP32(hold);
+	      //=== INITBITS();
+	      hold = 0;
+	      bits = 0;
+	      //===//
+	      state.mode = DICT;
+	      /* falls through */
+	    case DICT:
+	      if (state.havedict === 0) {
+	        //--- RESTORE() ---
+	        strm.next_out = put;
+	        strm.avail_out = left;
+	        strm.next_in = next;
+	        strm.avail_in = have;
+	        state.hold = hold;
+	        state.bits = bits;
+	        //---
+	        return Z_NEED_DICT;
+	      }
+	      strm.adler = state.check = 1/*adler32(0L, Z_NULL, 0)*/;
+	      state.mode = TYPE;
+	      /* falls through */
+	    case TYPE:
+	      if (flush === Z_BLOCK || flush === Z_TREES) { break inf_leave; }
+	      /* falls through */
+	    case TYPEDO:
+	      if (state.last) {
+	        //--- BYTEBITS() ---//
+	        hold >>>= bits & 7;
+	        bits -= bits & 7;
+	        //---//
+	        state.mode = CHECK;
+	        break;
+	      }
+	      //=== NEEDBITS(3); */
+	      while (bits < 3) {
+	        if (have === 0) { break inf_leave; }
+	        have--;
+	        hold += input[next++] << bits;
+	        bits += 8;
+	      }
+	      //===//
+	      state.last = (hold & 0x01)/*BITS(1)*/;
+	      //--- DROPBITS(1) ---//
+	      hold >>>= 1;
+	      bits -= 1;
+	      //---//
+
+	      switch ((hold & 0x03)/*BITS(2)*/) {
+	      case 0:                             /* stored block */
+	        //Tracev((stderr, "inflate:     stored block%s\n",
+	        //        state.last ? " (last)" : ""));
+	        state.mode = STORED;
+	        break;
+	      case 1:                             /* fixed block */
+	        fixedtables(state);
+	        //Tracev((stderr, "inflate:     fixed codes block%s\n",
+	        //        state.last ? " (last)" : ""));
+	        state.mode = LEN_;             /* decode codes */
+	        if (flush === Z_TREES) {
+	          //--- DROPBITS(2) ---//
+	          hold >>>= 2;
+	          bits -= 2;
+	          //---//
+	          break inf_leave;
+	        }
+	        break;
+	      case 2:                             /* dynamic block */
+	        //Tracev((stderr, "inflate:     dynamic codes block%s\n",
+	        //        state.last ? " (last)" : ""));
+	        state.mode = TABLE;
+	        break;
+	      case 3:
+	        strm.msg = 'invalid block type';
+	        state.mode = BAD;
+	      }
+	      //--- DROPBITS(2) ---//
+	      hold >>>= 2;
+	      bits -= 2;
+	      //---//
+	      break;
+	    case STORED:
+	      //--- BYTEBITS() ---// /* go to byte boundary */
+	      hold >>>= bits & 7;
+	      bits -= bits & 7;
+	      //---//
+	      //=== NEEDBITS(32); */
+	      while (bits < 32) {
+	        if (have === 0) { break inf_leave; }
+	        have--;
+	        hold += input[next++] << bits;
+	        bits += 8;
+	      }
+	      //===//
+	      if ((hold & 0xffff) !== ((hold >>> 16) ^ 0xffff)) {
+	        strm.msg = 'invalid stored block lengths';
+	        state.mode = BAD;
+	        break;
+	      }
+	      state.length = hold & 0xffff;
+	      //Tracev((stderr, "inflate:       stored length %u\n",
+	      //        state.length));
+	      //=== INITBITS();
+	      hold = 0;
+	      bits = 0;
+	      //===//
+	      state.mode = COPY_;
+	      if (flush === Z_TREES) { break inf_leave; }
+	      /* falls through */
+	    case COPY_:
+	      state.mode = COPY;
+	      /* falls through */
+	    case COPY:
+	      copy = state.length;
+	      if (copy) {
+	        if (copy > have) { copy = have; }
+	        if (copy > left) { copy = left; }
+	        if (copy === 0) { break inf_leave; }
+	        //--- zmemcpy(put, next, copy); ---
+	        utils.arraySet(output, input, next, copy, put);
+	        //---//
+	        have -= copy;
+	        next += copy;
+	        left -= copy;
+	        put += copy;
+	        state.length -= copy;
+	        break;
+	      }
+	      //Tracev((stderr, "inflate:       stored end\n"));
+	      state.mode = TYPE;
+	      break;
+	    case TABLE:
+	      //=== NEEDBITS(14); */
+	      while (bits < 14) {
+	        if (have === 0) { break inf_leave; }
+	        have--;
+	        hold += input[next++] << bits;
+	        bits += 8;
+	      }
+	      //===//
+	      state.nlen = (hold & 0x1f)/*BITS(5)*/ + 257;
+	      //--- DROPBITS(5) ---//
+	      hold >>>= 5;
+	      bits -= 5;
+	      //---//
+	      state.ndist = (hold & 0x1f)/*BITS(5)*/ + 1;
+	      //--- DROPBITS(5) ---//
+	      hold >>>= 5;
+	      bits -= 5;
+	      //---//
+	      state.ncode = (hold & 0x0f)/*BITS(4)*/ + 4;
+	      //--- DROPBITS(4) ---//
+	      hold >>>= 4;
+	      bits -= 4;
+	      //---//
+	//#ifndef PKZIP_BUG_WORKAROUND
+	      if (state.nlen > 286 || state.ndist > 30) {
+	        strm.msg = 'too many length or distance symbols';
+	        state.mode = BAD;
+	        break;
+	      }
+	//#endif
+	      //Tracev((stderr, "inflate:       table sizes ok\n"));
+	      state.have = 0;
+	      state.mode = LENLENS;
+	      /* falls through */
+	    case LENLENS:
+	      while (state.have < state.ncode) {
+	        //=== NEEDBITS(3);
+	        while (bits < 3) {
+	          if (have === 0) { break inf_leave; }
+	          have--;
+	          hold += input[next++] << bits;
+	          bits += 8;
+	        }
+	        //===//
+	        state.lens[order[state.have++]] = (hold & 0x07);//BITS(3);
+	        //--- DROPBITS(3) ---//
+	        hold >>>= 3;
+	        bits -= 3;
+	        //---//
+	      }
+	      while (state.have < 19) {
+	        state.lens[order[state.have++]] = 0;
+	      }
+	      // We have separate tables & no pointers. 2 commented lines below not needed.
+	      //state.next = state.codes;
+	      //state.lencode = state.next;
+	      // Switch to use dynamic table
+	      state.lencode = state.lendyn;
+	      state.lenbits = 7;
+
+	      opts = {bits: state.lenbits};
+	      ret = inflate_table(CODES, state.lens, 0, 19, state.lencode, 0, state.work, opts);
+	      state.lenbits = opts.bits;
+
+	      if (ret) {
+	        strm.msg = 'invalid code lengths set';
+	        state.mode = BAD;
+	        break;
+	      }
+	      //Tracev((stderr, "inflate:       code lengths ok\n"));
+	      state.have = 0;
+	      state.mode = CODELENS;
+	      /* falls through */
+	    case CODELENS:
+	      while (state.have < state.nlen + state.ndist) {
+	        for (;;) {
+	          here = state.lencode[hold & ((1 << state.lenbits) - 1)];/*BITS(state.lenbits)*/
+	          here_bits = here >>> 24;
+	          here_op = (here >>> 16) & 0xff;
+	          here_val = here & 0xffff;
+
+	          if ((here_bits) <= bits) { break; }
+	          //--- PULLBYTE() ---//
+	          if (have === 0) { break inf_leave; }
+	          have--;
+	          hold += input[next++] << bits;
+	          bits += 8;
+	          //---//
+	        }
+	        if (here_val < 16) {
+	          //--- DROPBITS(here.bits) ---//
+	          hold >>>= here_bits;
+	          bits -= here_bits;
+	          //---//
+	          state.lens[state.have++] = here_val;
+	        }
+	        else {
+	          if (here_val === 16) {
+	            //=== NEEDBITS(here.bits + 2);
+	            n = here_bits + 2;
+	            while (bits < n) {
+	              if (have === 0) { break inf_leave; }
+	              have--;
+	              hold += input[next++] << bits;
+	              bits += 8;
+	            }
+	            //===//
+	            //--- DROPBITS(here.bits) ---//
+	            hold >>>= here_bits;
+	            bits -= here_bits;
+	            //---//
+	            if (state.have === 0) {
+	              strm.msg = 'invalid bit length repeat';
+	              state.mode = BAD;
+	              break;
+	            }
+	            len = state.lens[state.have - 1];
+	            copy = 3 + (hold & 0x03);//BITS(2);
+	            //--- DROPBITS(2) ---//
+	            hold >>>= 2;
+	            bits -= 2;
+	            //---//
+	          }
+	          else if (here_val === 17) {
+	            //=== NEEDBITS(here.bits + 3);
+	            n = here_bits + 3;
+	            while (bits < n) {
+	              if (have === 0) { break inf_leave; }
+	              have--;
+	              hold += input[next++] << bits;
+	              bits += 8;
+	            }
+	            //===//
+	            //--- DROPBITS(here.bits) ---//
+	            hold >>>= here_bits;
+	            bits -= here_bits;
+	            //---//
+	            len = 0;
+	            copy = 3 + (hold & 0x07);//BITS(3);
+	            //--- DROPBITS(3) ---//
+	            hold >>>= 3;
+	            bits -= 3;
+	            //---//
+	          }
+	          else {
+	            //=== NEEDBITS(here.bits + 7);
+	            n = here_bits + 7;
+	            while (bits < n) {
+	              if (have === 0) { break inf_leave; }
+	              have--;
+	              hold += input[next++] << bits;
+	              bits += 8;
+	            }
+	            //===//
+	            //--- DROPBITS(here.bits) ---//
+	            hold >>>= here_bits;
+	            bits -= here_bits;
+	            //---//
+	            len = 0;
+	            copy = 11 + (hold & 0x7f);//BITS(7);
+	            //--- DROPBITS(7) ---//
+	            hold >>>= 7;
+	            bits -= 7;
+	            //---//
+	          }
+	          if (state.have + copy > state.nlen + state.ndist) {
+	            strm.msg = 'invalid bit length repeat';
+	            state.mode = BAD;
+	            break;
+	          }
+	          while (copy--) {
+	            state.lens[state.have++] = len;
+	          }
+	        }
+	      }
+
+	      /* handle error breaks in while */
+	      if (state.mode === BAD) { break; }
+
+	      /* check for end-of-block code (better have one) */
+	      if (state.lens[256] === 0) {
+	        strm.msg = 'invalid code -- missing end-of-block';
+	        state.mode = BAD;
+	        break;
+	      }
+
+	      /* build code tables -- note: do not change the lenbits or distbits
+	         values here (9 and 6) without reading the comments in inftrees.h
+	         concerning the ENOUGH constants, which depend on those values */
+	      state.lenbits = 9;
+
+	      opts = {bits: state.lenbits};
+	      ret = inflate_table(LENS, state.lens, 0, state.nlen, state.lencode, 0, state.work, opts);
+	      // We have separate tables & no pointers. 2 commented lines below not needed.
+	      // state.next_index = opts.table_index;
+	      state.lenbits = opts.bits;
+	      // state.lencode = state.next;
+
+	      if (ret) {
+	        strm.msg = 'invalid literal/lengths set';
+	        state.mode = BAD;
+	        break;
+	      }
+
+	      state.distbits = 6;
+	      //state.distcode.copy(state.codes);
+	      // Switch to use dynamic table
+	      state.distcode = state.distdyn;
+	      opts = {bits: state.distbits};
+	      ret = inflate_table(DISTS, state.lens, state.nlen, state.ndist, state.distcode, 0, state.work, opts);
+	      // We have separate tables & no pointers. 2 commented lines below not needed.
+	      // state.next_index = opts.table_index;
+	      state.distbits = opts.bits;
+	      // state.distcode = state.next;
+
+	      if (ret) {
+	        strm.msg = 'invalid distances set';
+	        state.mode = BAD;
+	        break;
+	      }
+	      //Tracev((stderr, 'inflate:       codes ok\n'));
+	      state.mode = LEN_;
+	      if (flush === Z_TREES) { break inf_leave; }
+	      /* falls through */
+	    case LEN_:
+	      state.mode = LEN;
+	      /* falls through */
+	    case LEN:
+	      if (have >= 6 && left >= 258) {
+	        //--- RESTORE() ---
+	        strm.next_out = put;
+	        strm.avail_out = left;
+	        strm.next_in = next;
+	        strm.avail_in = have;
+	        state.hold = hold;
+	        state.bits = bits;
+	        //---
+	        inflate_fast(strm, _out);
+	        //--- LOAD() ---
+	        put = strm.next_out;
+	        output = strm.output;
+	        left = strm.avail_out;
+	        next = strm.next_in;
+	        input = strm.input;
+	        have = strm.avail_in;
+	        hold = state.hold;
+	        bits = state.bits;
+	        //---
+
+	        if (state.mode === TYPE) {
+	          state.back = -1;
+	        }
+	        break;
+	      }
+	      state.back = 0;
+	      for (;;) {
+	        here = state.lencode[hold & ((1 << state.lenbits) -1)];  /*BITS(state.lenbits)*/
+	        here_bits = here >>> 24;
+	        here_op = (here >>> 16) & 0xff;
+	        here_val = here & 0xffff;
+
+	        if (here_bits <= bits) { break; }
+	        //--- PULLBYTE() ---//
+	        if (have === 0) { break inf_leave; }
+	        have--;
+	        hold += input[next++] << bits;
+	        bits += 8;
+	        //---//
+	      }
+	      if (here_op && (here_op & 0xf0) === 0) {
+	        last_bits = here_bits;
+	        last_op = here_op;
+	        last_val = here_val;
+	        for (;;) {
+	          here = state.lencode[last_val +
+	                  ((hold & ((1 << (last_bits + last_op)) -1))/*BITS(last.bits + last.op)*/ >> last_bits)];
+	          here_bits = here >>> 24;
+	          here_op = (here >>> 16) & 0xff;
+	          here_val = here & 0xffff;
+
+	          if ((last_bits + here_bits) <= bits) { break; }
+	          //--- PULLBYTE() ---//
+	          if (have === 0) { break inf_leave; }
+	          have--;
+	          hold += input[next++] << bits;
+	          bits += 8;
+	          //---//
+	        }
+	        //--- DROPBITS(last.bits) ---//
+	        hold >>>= last_bits;
+	        bits -= last_bits;
+	        //---//
+	        state.back += last_bits;
+	      }
+	      //--- DROPBITS(here.bits) ---//
+	      hold >>>= here_bits;
+	      bits -= here_bits;
+	      //---//
+	      state.back += here_bits;
+	      state.length = here_val;
+	      if (here_op === 0) {
+	        //Tracevv((stderr, here.val >= 0x20 && here.val < 0x7f ?
+	        //        "inflate:         literal '%c'\n" :
+	        //        "inflate:         literal 0x%02x\n", here.val));
+	        state.mode = LIT;
+	        break;
+	      }
+	      if (here_op & 32) {
+	        //Tracevv((stderr, "inflate:         end of block\n"));
+	        state.back = -1;
+	        state.mode = TYPE;
+	        break;
+	      }
+	      if (here_op & 64) {
+	        strm.msg = 'invalid literal/length code';
+	        state.mode = BAD;
+	        break;
+	      }
+	      state.extra = here_op & 15;
+	      state.mode = LENEXT;
+	      /* falls through */
+	    case LENEXT:
+	      if (state.extra) {
+	        //=== NEEDBITS(state.extra);
+	        n = state.extra;
+	        while (bits < n) {
+	          if (have === 0) { break inf_leave; }
+	          have--;
+	          hold += input[next++] << bits;
+	          bits += 8;
+	        }
+	        //===//
+	        state.length += hold & ((1 << state.extra) -1)/*BITS(state.extra)*/;
+	        //--- DROPBITS(state.extra) ---//
+	        hold >>>= state.extra;
+	        bits -= state.extra;
+	        //---//
+	        state.back += state.extra;
+	      }
+	      //Tracevv((stderr, "inflate:         length %u\n", state.length));
+	      state.was = state.length;
+	      state.mode = DIST;
+	      /* falls through */
+	    case DIST:
+	      for (;;) {
+	        here = state.distcode[hold & ((1 << state.distbits) -1)];/*BITS(state.distbits)*/
+	        here_bits = here >>> 24;
+	        here_op = (here >>> 16) & 0xff;
+	        here_val = here & 0xffff;
+
+	        if ((here_bits) <= bits) { break; }
+	        //--- PULLBYTE() ---//
+	        if (have === 0) { break inf_leave; }
+	        have--;
+	        hold += input[next++] << bits;
+	        bits += 8;
+	        //---//
+	      }
+	      if ((here_op & 0xf0) === 0) {
+	        last_bits = here_bits;
+	        last_op = here_op;
+	        last_val = here_val;
+	        for (;;) {
+	          here = state.distcode[last_val +
+	                  ((hold & ((1 << (last_bits + last_op)) -1))/*BITS(last.bits + last.op)*/ >> last_bits)];
+	          here_bits = here >>> 24;
+	          here_op = (here >>> 16) & 0xff;
+	          here_val = here & 0xffff;
+
+	          if ((last_bits + here_bits) <= bits) { break; }
+	          //--- PULLBYTE() ---//
+	          if (have === 0) { break inf_leave; }
+	          have--;
+	          hold += input[next++] << bits;
+	          bits += 8;
+	          //---//
+	        }
+	        //--- DROPBITS(last.bits) ---//
+	        hold >>>= last_bits;
+	        bits -= last_bits;
+	        //---//
+	        state.back += last_bits;
+	      }
+	      //--- DROPBITS(here.bits) ---//
+	      hold >>>= here_bits;
+	      bits -= here_bits;
+	      //---//
+	      state.back += here_bits;
+	      if (here_op & 64) {
+	        strm.msg = 'invalid distance code';
+	        state.mode = BAD;
+	        break;
+	      }
+	      state.offset = here_val;
+	      state.extra = (here_op) & 15;
+	      state.mode = DISTEXT;
+	      /* falls through */
+	    case DISTEXT:
+	      if (state.extra) {
+	        //=== NEEDBITS(state.extra);
+	        n = state.extra;
+	        while (bits < n) {
+	          if (have === 0) { break inf_leave; }
+	          have--;
+	          hold += input[next++] << bits;
+	          bits += 8;
+	        }
+	        //===//
+	        state.offset += hold & ((1 << state.extra) -1)/*BITS(state.extra)*/;
+	        //--- DROPBITS(state.extra) ---//
+	        hold >>>= state.extra;
+	        bits -= state.extra;
+	        //---//
+	        state.back += state.extra;
+	      }
+	//#ifdef INFLATE_STRICT
+	      if (state.offset > state.dmax) {
+	        strm.msg = 'invalid distance too far back';
+	        state.mode = BAD;
+	        break;
+	      }
+	//#endif
+	      //Tracevv((stderr, "inflate:         distance %u\n", state.offset));
+	      state.mode = MATCH;
+	      /* falls through */
+	    case MATCH:
+	      if (left === 0) { break inf_leave; }
+	      copy = _out - left;
+	      if (state.offset > copy) {         /* copy from window */
+	        copy = state.offset - copy;
+	        if (copy > state.whave) {
+	          if (state.sane) {
+	            strm.msg = 'invalid distance too far back';
+	            state.mode = BAD;
+	            break;
+	          }
+	// (!) This block is disabled in zlib defailts,
+	// don't enable it for binary compatibility
+	//#ifdef INFLATE_ALLOW_INVALID_DISTANCE_TOOFAR_ARRR
+	//          Trace((stderr, "inflate.c too far\n"));
+	//          copy -= state.whave;
+	//          if (copy > state.length) { copy = state.length; }
+	//          if (copy > left) { copy = left; }
+	//          left -= copy;
+	//          state.length -= copy;
+	//          do {
+	//            output[put++] = 0;
+	//          } while (--copy);
+	//          if (state.length === 0) { state.mode = LEN; }
+	//          break;
+	//#endif
+	        }
+	        if (copy > state.wnext) {
+	          copy -= state.wnext;
+	          from = state.wsize - copy;
+	        }
+	        else {
+	          from = state.wnext - copy;
+	        }
+	        if (copy > state.length) { copy = state.length; }
+	        from_source = state.window;
+	      }
+	      else {                              /* copy from output */
+	        from_source = output;
+	        from = put - state.offset;
+	        copy = state.length;
+	      }
+	      if (copy > left) { copy = left; }
+	      left -= copy;
+	      state.length -= copy;
+	      do {
+	        output[put++] = from_source[from++];
+	      } while (--copy);
+	      if (state.length === 0) { state.mode = LEN; }
+	      break;
+	    case LIT:
+	      if (left === 0) { break inf_leave; }
+	      output[put++] = state.length;
+	      left--;
+	      state.mode = LEN;
+	      break;
+	    case CHECK:
+	      if (state.wrap) {
+	        //=== NEEDBITS(32);
+	        while (bits < 32) {
+	          if (have === 0) { break inf_leave; }
+	          have--;
+	          // Use '|' insdead of '+' to make sure that result is signed
+	          hold |= input[next++] << bits;
+	          bits += 8;
+	        }
+	        //===//
+	        _out -= left;
+	        strm.total_out += _out;
+	        state.total += _out;
+	        if (_out) {
+	          strm.adler = state.check =
+	              /*UPDATE(state.check, put - _out, _out);*/
+	              (state.flags ? crc32(state.check, output, _out, put - _out) : adler32(state.check, output, _out, put - _out));
+
+	        }
+	        _out = left;
+	        // NB: crc32 stored as signed 32-bit int, ZSWAP32 returns signed too
+	        if ((state.flags ? hold : ZSWAP32(hold)) !== state.check) {
+	          strm.msg = 'incorrect data check';
+	          state.mode = BAD;
+	          break;
+	        }
+	        //=== INITBITS();
+	        hold = 0;
+	        bits = 0;
+	        //===//
+	        //Tracev((stderr, "inflate:   check matches trailer\n"));
+	      }
+	      state.mode = LENGTH;
+	      /* falls through */
+	    case LENGTH:
+	      if (state.wrap && state.flags) {
+	        //=== NEEDBITS(32);
+	        while (bits < 32) {
+	          if (have === 0) { break inf_leave; }
+	          have--;
+	          hold += input[next++] << bits;
+	          bits += 8;
+	        }
+	        //===//
+	        if (hold !== (state.total & 0xffffffff)) {
+	          strm.msg = 'incorrect length check';
+	          state.mode = BAD;
+	          break;
+	        }
+	        //=== INITBITS();
+	        hold = 0;
+	        bits = 0;
+	        //===//
+	        //Tracev((stderr, "inflate:   length matches trailer\n"));
+	      }
+	      state.mode = DONE;
+	      /* falls through */
+	    case DONE:
+	      ret = Z_STREAM_END;
+	      break inf_leave;
+	    case BAD:
+	      ret = Z_DATA_ERROR;
+	      break inf_leave;
+	    case MEM:
+	      return Z_MEM_ERROR;
+	    case SYNC:
+	      /* falls through */
+	    default:
+	      return Z_STREAM_ERROR;
+	    }
+	  }
+
+	  // inf_leave <- here is real place for "goto inf_leave", emulated via "break inf_leave"
+
+	  /*
+	     Return from inflate(), updating the total counts and the check value.
+	     If there was no progress during the inflate() call, return a buffer
+	     error.  Call updatewindow() to create and/or update the window state.
+	     Note: a memory error from inflate() is non-recoverable.
+	   */
+
+	  //--- RESTORE() ---
+	  strm.next_out = put;
+	  strm.avail_out = left;
+	  strm.next_in = next;
+	  strm.avail_in = have;
+	  state.hold = hold;
+	  state.bits = bits;
+	  //---
+
+	  if (state.wsize || (_out !== strm.avail_out && state.mode < BAD &&
+	                      (state.mode < CHECK || flush !== Z_FINISH))) {
+	    if (updatewindow(strm, strm.output, strm.next_out, _out - strm.avail_out)) {
+	      state.mode = MEM;
+	      return Z_MEM_ERROR;
+	    }
+	  }
+	  _in -= strm.avail_in;
+	  _out -= strm.avail_out;
+	  strm.total_in += _in;
+	  strm.total_out += _out;
+	  state.total += _out;
+	  if (state.wrap && _out) {
+	    strm.adler = state.check = /*UPDATE(state.check, strm.next_out - _out, _out);*/
+	      (state.flags ? crc32(state.check, output, _out, strm.next_out - _out) : adler32(state.check, output, _out, strm.next_out - _out));
+	  }
+	  strm.data_type = state.bits + (state.last ? 64 : 0) +
+	                    (state.mode === TYPE ? 128 : 0) +
+	                    (state.mode === LEN_ || state.mode === COPY_ ? 256 : 0);
+	  if (((_in === 0 && _out === 0) || flush === Z_FINISH) && ret === Z_OK) {
+	    ret = Z_BUF_ERROR;
+	  }
+	  return ret;
+	}
+
+	function inflateEnd(strm) {
+
+	  if (!strm || !strm.state /*|| strm->zfree == (free_func)0*/) {
+	    return Z_STREAM_ERROR;
+	  }
+
+	  var state = strm.state;
+	  if (state.window) {
+	    state.window = null;
+	  }
+	  strm.state = null;
+	  return Z_OK;
+	}
+
+	function inflateGetHeader(strm, head) {
+	  var state;
+
+	  /* check state */
+	  if (!strm || !strm.state) { return Z_STREAM_ERROR; }
+	  state = strm.state;
+	  if ((state.wrap & 2) === 0) { return Z_STREAM_ERROR; }
+
+	  /* save header structure */
+	  state.head = head;
+	  head.done = false;
+	  return Z_OK;
+	}
+
+
+	exports.inflateReset = inflateReset;
+	exports.inflateReset2 = inflateReset2;
+	exports.inflateResetKeep = inflateResetKeep;
+	exports.inflateInit = inflateInit;
+	exports.inflateInit2 = inflateInit2;
+	exports.inflate = inflate;
+	exports.inflateEnd = inflateEnd;
+	exports.inflateGetHeader = inflateGetHeader;
+	exports.inflateInfo = 'pako inflate (from Nodeca project)';
+
+	/* Not implemented
+	exports.inflateCopy = inflateCopy;
+	exports.inflateGetDictionary = inflateGetDictionary;
+	exports.inflateMark = inflateMark;
+	exports.inflatePrime = inflatePrime;
+	exports.inflateSetDictionary = inflateSetDictionary;
+	exports.inflateSync = inflateSync;
+	exports.inflateSyncPoint = inflateSyncPoint;
+	exports.inflateUndermine = inflateUndermine;
+	*/
+
+
+/***/ },
+/* 57 */
+/***/ function(module, exports) {
+
+	'use strict';
+
+	// See state defs from inflate.js
+	var BAD = 30;       /* got a data error -- remain here until reset */
+	var TYPE = 12;      /* i: waiting for type bits, including last-flag bit */
+
+	/*
+	   Decode literal, length, and distance codes and write out the resulting
+	   literal and match bytes until either not enough input or output is
+	   available, an end-of-block is encountered, or a data error is encountered.
+	   When large enough input and output buffers are supplied to inflate(), for
+	   example, a 16K input buffer and a 64K output buffer, more than 95% of the
+	   inflate execution time is spent in this routine.
+
+	   Entry assumptions:
+
+	        state.mode === LEN
+	        strm.avail_in >= 6
+	        strm.avail_out >= 258
+	        start >= strm.avail_out
+	        state.bits < 8
+
+	   On return, state.mode is one of:
+
+	        LEN -- ran out of enough output space or enough available input
+	        TYPE -- reached end of block code, inflate() to interpret next block
+	        BAD -- error in block data
+
+	   Notes:
+
+	    - The maximum input bits used by a length/distance pair is 15 bits for the
+	      length code, 5 bits for the length extra, 15 bits for the distance code,
+	      and 13 bits for the distance extra.  This totals 48 bits, or six bytes.
+	      Therefore if strm.avail_in >= 6, then there is enough input to avoid
+	      checking for available input while decoding.
+
+	    - The maximum bytes that a single length/distance pair can output is 258
+	      bytes, which is the maximum length that can be coded.  inflate_fast()
+	      requires strm.avail_out >= 258 for each loop to avoid checking for
+	      output space.
+	 */
+	module.exports = function inflate_fast(strm, start) {
+	  var state;
+	  var _in;                    /* local strm.input */
+	  var last;                   /* have enough input while in < last */
+	  var _out;                   /* local strm.output */
+	  var beg;                    /* inflate()'s initial strm.output */
+	  var end;                    /* while out < end, enough space available */
+	//#ifdef INFLATE_STRICT
+	  var dmax;                   /* maximum distance from zlib header */
+	//#endif
+	  var wsize;                  /* window size or zero if not using window */
+	  var whave;                  /* valid bytes in the window */
+	  var wnext;                  /* window write index */
+	  // Use `s_window` instead `window`, avoid conflict with instrumentation tools
+	  var s_window;               /* allocated sliding window, if wsize != 0 */
+	  var hold;                   /* local strm.hold */
+	  var bits;                   /* local strm.bits */
+	  var lcode;                  /* local strm.lencode */
+	  var dcode;                  /* local strm.distcode */
+	  var lmask;                  /* mask for first level of length codes */
+	  var dmask;                  /* mask for first level of distance codes */
+	  var here;                   /* retrieved table entry */
+	  var op;                     /* code bits, operation, extra bits, or */
+	                              /*  window position, window bytes to copy */
+	  var len;                    /* match length, unused bytes */
+	  var dist;                   /* match distance */
+	  var from;                   /* where to copy match from */
+	  var from_source;
+
+
+	  var input, output; // JS specific, because we have no pointers
+
+	  /* copy state to local variables */
+	  state = strm.state;
+	  //here = state.here;
+	  _in = strm.next_in;
+	  input = strm.input;
+	  last = _in + (strm.avail_in - 5);
+	  _out = strm.next_out;
+	  output = strm.output;
+	  beg = _out - (start - strm.avail_out);
+	  end = _out + (strm.avail_out - 257);
+	//#ifdef INFLATE_STRICT
+	  dmax = state.dmax;
+	//#endif
+	  wsize = state.wsize;
+	  whave = state.whave;
+	  wnext = state.wnext;
+	  s_window = state.window;
+	  hold = state.hold;
+	  bits = state.bits;
+	  lcode = state.lencode;
+	  dcode = state.distcode;
+	  lmask = (1 << state.lenbits) - 1;
+	  dmask = (1 << state.distbits) - 1;
+
+
+	  /* decode literals and length/distances until end-of-block or not enough
+	     input data or output space */
+
+	  top:
+	  do {
+	    if (bits < 15) {
+	      hold += input[_in++] << bits;
+	      bits += 8;
+	      hold += input[_in++] << bits;
+	      bits += 8;
+	    }
+
+	    here = lcode[hold & lmask];
+
+	    dolen:
+	    for (;;) { // Goto emulation
+	      op = here >>> 24/*here.bits*/;
+	      hold >>>= op;
+	      bits -= op;
+	      op = (here >>> 16) & 0xff/*here.op*/;
+	      if (op === 0) {                          /* literal */
+	        //Tracevv((stderr, here.val >= 0x20 && here.val < 0x7f ?
+	        //        "inflate:         literal '%c'\n" :
+	        //        "inflate:         literal 0x%02x\n", here.val));
+	        output[_out++] = here & 0xffff/*here.val*/;
+	      }
+	      else if (op & 16) {                     /* length base */
+	        len = here & 0xffff/*here.val*/;
+	        op &= 15;                           /* number of extra bits */
+	        if (op) {
+	          if (bits < op) {
+	            hold += input[_in++] << bits;
+	            bits += 8;
+	          }
+	          len += hold & ((1 << op) - 1);
+	          hold >>>= op;
+	          bits -= op;
+	        }
+	        //Tracevv((stderr, "inflate:         length %u\n", len));
+	        if (bits < 15) {
+	          hold += input[_in++] << bits;
+	          bits += 8;
+	          hold += input[_in++] << bits;
+	          bits += 8;
+	        }
+	        here = dcode[hold & dmask];
+
+	        dodist:
+	        for (;;) { // goto emulation
+	          op = here >>> 24/*here.bits*/;
+	          hold >>>= op;
+	          bits -= op;
+	          op = (here >>> 16) & 0xff/*here.op*/;
+
+	          if (op & 16) {                      /* distance base */
+	            dist = here & 0xffff/*here.val*/;
+	            op &= 15;                       /* number of extra bits */
+	            if (bits < op) {
+	              hold += input[_in++] << bits;
+	              bits += 8;
+	              if (bits < op) {
+	                hold += input[_in++] << bits;
+	                bits += 8;
+	              }
+	            }
+	            dist += hold & ((1 << op) - 1);
+	//#ifdef INFLATE_STRICT
+	            if (dist > dmax) {
+	              strm.msg = 'invalid distance too far back';
+	              state.mode = BAD;
+	              break top;
+	            }
+	//#endif
+	            hold >>>= op;
+	            bits -= op;
+	            //Tracevv((stderr, "inflate:         distance %u\n", dist));
+	            op = _out - beg;                /* max distance in output */
+	            if (dist > op) {                /* see if copy from window */
+	              op = dist - op;               /* distance back in window */
+	              if (op > whave) {
+	                if (state.sane) {
+	                  strm.msg = 'invalid distance too far back';
+	                  state.mode = BAD;
+	                  break top;
+	                }
+
+	// (!) This block is disabled in zlib defailts,
+	// don't enable it for binary compatibility
+	//#ifdef INFLATE_ALLOW_INVALID_DISTANCE_TOOFAR_ARRR
+	//                if (len <= op - whave) {
+	//                  do {
+	//                    output[_out++] = 0;
+	//                  } while (--len);
+	//                  continue top;
+	//                }
+	//                len -= op - whave;
+	//                do {
+	//                  output[_out++] = 0;
+	//                } while (--op > whave);
+	//                if (op === 0) {
+	//                  from = _out - dist;
+	//                  do {
+	//                    output[_out++] = output[from++];
+	//                  } while (--len);
+	//                  continue top;
+	//                }
+	//#endif
+	              }
+	              from = 0; // window index
+	              from_source = s_window;
+	              if (wnext === 0) {           /* very common case */
+	                from += wsize - op;
+	                if (op < len) {         /* some from window */
+	                  len -= op;
+	                  do {
+	                    output[_out++] = s_window[from++];
+	                  } while (--op);
+	                  from = _out - dist;  /* rest from output */
+	                  from_source = output;
+	                }
+	              }
+	              else if (wnext < op) {      /* wrap around window */
+	                from += wsize + wnext - op;
+	                op -= wnext;
+	                if (op < len) {         /* some from end of window */
+	                  len -= op;
+	                  do {
+	                    output[_out++] = s_window[from++];
+	                  } while (--op);
+	                  from = 0;
+	                  if (wnext < len) {  /* some from start of window */
+	                    op = wnext;
+	                    len -= op;
+	                    do {
+	                      output[_out++] = s_window[from++];
+	                    } while (--op);
+	                    from = _out - dist;      /* rest from output */
+	                    from_source = output;
+	                  }
+	                }
+	              }
+	              else {                      /* contiguous in window */
+	                from += wnext - op;
+	                if (op < len) {         /* some from window */
+	                  len -= op;
+	                  do {
+	                    output[_out++] = s_window[from++];
+	                  } while (--op);
+	                  from = _out - dist;  /* rest from output */
+	                  from_source = output;
+	                }
+	              }
+	              while (len > 2) {
+	                output[_out++] = from_source[from++];
+	                output[_out++] = from_source[from++];
+	                output[_out++] = from_source[from++];
+	                len -= 3;
+	              }
+	              if (len) {
+	                output[_out++] = from_source[from++];
+	                if (len > 1) {
+	                  output[_out++] = from_source[from++];
+	                }
+	              }
+	            }
+	            else {
+	              from = _out - dist;          /* copy direct from output */
+	              do {                        /* minimum length is three */
+	                output[_out++] = output[from++];
+	                output[_out++] = output[from++];
+	                output[_out++] = output[from++];
+	                len -= 3;
+	              } while (len > 2);
+	              if (len) {
+	                output[_out++] = output[from++];
+	                if (len > 1) {
+	                  output[_out++] = output[from++];
+	                }
+	              }
+	            }
+	          }
+	          else if ((op & 64) === 0) {          /* 2nd level distance code */
+	            here = dcode[(here & 0xffff)/*here.val*/ + (hold & ((1 << op) - 1))];
+	            continue dodist;
+	          }
+	          else {
+	            strm.msg = 'invalid distance code';
+	            state.mode = BAD;
+	            break top;
+	          }
+
+	          break; // need to emulate goto via "continue"
+	        }
+	      }
+	      else if ((op & 64) === 0) {              /* 2nd level length code */
+	        here = lcode[(here & 0xffff)/*here.val*/ + (hold & ((1 << op) - 1))];
+	        continue dolen;
+	      }
+	      else if (op & 32) {                     /* end-of-block */
+	        //Tracevv((stderr, "inflate:         end of block\n"));
+	        state.mode = TYPE;
+	        break top;
+	      }
+	      else {
+	        strm.msg = 'invalid literal/length code';
+	        state.mode = BAD;
+	        break top;
+	      }
+
+	      break; // need to emulate goto via "continue"
+	    }
+	  } while (_in < last && _out < end);
+
+	  /* return unused bytes (on entry, bits < 8, so in won't go too far back) */
+	  len = bits >> 3;
+	  _in -= len;
+	  bits -= len << 3;
+	  hold &= (1 << bits) - 1;
+
+	  /* update state and return */
+	  strm.next_in = _in;
+	  strm.next_out = _out;
+	  strm.avail_in = (_in < last ? 5 + (last - _in) : 5 - (_in - last));
+	  strm.avail_out = (_out < end ? 257 + (end - _out) : 257 - (_out - end));
+	  state.hold = hold;
+	  state.bits = bits;
+	  return;
+	};
+
+
+/***/ },
+/* 58 */
+/***/ function(module, exports, __webpack_require__) {
+
+	'use strict';
+
+
+	var utils = __webpack_require__(52);
+
+	var MAXBITS = 15;
+	var ENOUGH_LENS = 852;
+	var ENOUGH_DISTS = 592;
+	//var ENOUGH = (ENOUGH_LENS+ENOUGH_DISTS);
+
+	var CODES = 0;
+	var LENS = 1;
+	var DISTS = 2;
+
+	var lbase = [ /* Length codes 257..285 base */
+	  3, 4, 5, 6, 7, 8, 9, 10, 11, 13, 15, 17, 19, 23, 27, 31,
+	  35, 43, 51, 59, 67, 83, 99, 115, 131, 163, 195, 227, 258, 0, 0
+	];
+
+	var lext = [ /* Length codes 257..285 extra */
+	  16, 16, 16, 16, 16, 16, 16, 16, 17, 17, 17, 17, 18, 18, 18, 18,
+	  19, 19, 19, 19, 20, 20, 20, 20, 21, 21, 21, 21, 16, 72, 78
+	];
+
+	var dbase = [ /* Distance codes 0..29 base */
+	  1, 2, 3, 4, 5, 7, 9, 13, 17, 25, 33, 49, 65, 97, 129, 193,
+	  257, 385, 513, 769, 1025, 1537, 2049, 3073, 4097, 6145,
+	  8193, 12289, 16385, 24577, 0, 0
+	];
+
+	var dext = [ /* Distance codes 0..29 extra */
+	  16, 16, 16, 16, 17, 17, 18, 18, 19, 19, 20, 20, 21, 21, 22, 22,
+	  23, 23, 24, 24, 25, 25, 26, 26, 27, 27,
+	  28, 28, 29, 29, 64, 64
+	];
+
+	module.exports = function inflate_table(type, lens, lens_index, codes, table, table_index, work, opts)
+	{
+	  var bits = opts.bits;
+	      //here = opts.here; /* table entry for duplication */
+
+	  var len = 0;               /* a code's length in bits */
+	  var sym = 0;               /* index of code symbols */
+	  var min = 0, max = 0;          /* minimum and maximum code lengths */
+	  var root = 0;              /* number of index bits for root table */
+	  var curr = 0;              /* number of index bits for current table */
+	  var drop = 0;              /* code bits to drop for sub-table */
+	  var left = 0;                   /* number of prefix codes available */
+	  var used = 0;              /* code entries in table used */
+	  var huff = 0;              /* Huffman code */
+	  var incr;              /* for incrementing code, index */
+	  var fill;              /* index for replicating entries */
+	  var low;               /* low bits for current root entry */
+	  var mask;              /* mask for low root bits */
+	  var next;             /* next available space in table */
+	  var base = null;     /* base value table to use */
+	  var base_index = 0;
+	//  var shoextra;    /* extra bits table to use */
+	  var end;                    /* use base and extra for symbol > end */
+	  var count = new utils.Buf16(MAXBITS+1); //[MAXBITS+1];    /* number of codes of each length */
+	  var offs = new utils.Buf16(MAXBITS+1); //[MAXBITS+1];     /* offsets in table for each length */
+	  var extra = null;
+	  var extra_index = 0;
+
+	  var here_bits, here_op, here_val;
+
+	  /*
+	   Process a set of code lengths to create a canonical Huffman code.  The
+	   code lengths are lens[0..codes-1].  Each length corresponds to the
+	   symbols 0..codes-1.  The Huffman code is generated by first sorting the
+	   symbols by length from short to long, and retaining the symbol order
+	   for codes with equal lengths.  Then the code starts with all zero bits
+	   for the first code of the shortest length, and the codes are integer
+	   increments for the same length, and zeros are appended as the length
+	   increases.  For the deflate format, these bits are stored backwards
+	   from their more natural integer increment ordering, and so when the
+	   decoding tables are built in the large loop below, the integer codes
+	   are incremented backwards.
+
+	   This routine assumes, but does not check, that all of the entries in
+	   lens[] are in the range 0..MAXBITS.  The caller must assure this.
+	   1..MAXBITS is interpreted as that code length.  zero means that that
+	   symbol does not occur in this code.
+
+	   The codes are sorted by computing a count of codes for each length,
+	   creating from that a table of starting indices for each length in the
+	   sorted table, and then entering the symbols in order in the sorted
+	   table.  The sorted table is work[], with that space being provided by
+	   the caller.
+
+	   The length counts are used for other purposes as well, i.e. finding
+	   the minimum and maximum length codes, determining if there are any
+	   codes at all, checking for a valid set of lengths, and looking ahead
+	   at length counts to determine sub-table sizes when building the
+	   decoding tables.
+	   */
+
+	  /* accumulate lengths for codes (assumes lens[] all in 0..MAXBITS) */
+	  for (len = 0; len <= MAXBITS; len++) {
+	    count[len] = 0;
+	  }
+	  for (sym = 0; sym < codes; sym++) {
+	    count[lens[lens_index + sym]]++;
+	  }
+
+	  /* bound code lengths, force root to be within code lengths */
+	  root = bits;
+	  for (max = MAXBITS; max >= 1; max--) {
+	    if (count[max] !== 0) { break; }
+	  }
+	  if (root > max) {
+	    root = max;
+	  }
+	  if (max === 0) {                     /* no symbols to code at all */
+	    //table.op[opts.table_index] = 64;  //here.op = (var char)64;    /* invalid code marker */
+	    //table.bits[opts.table_index] = 1;   //here.bits = (var char)1;
+	    //table.val[opts.table_index++] = 0;   //here.val = (var short)0;
+	    table[table_index++] = (1 << 24) | (64 << 16) | 0;
+
+
+	    //table.op[opts.table_index] = 64;
+	    //table.bits[opts.table_index] = 1;
+	    //table.val[opts.table_index++] = 0;
+	    table[table_index++] = (1 << 24) | (64 << 16) | 0;
+
+	    opts.bits = 1;
+	    return 0;     /* no symbols, but wait for decoding to report error */
+	  }
+	  for (min = 1; min < max; min++) {
+	    if (count[min] !== 0) { break; }
+	  }
+	  if (root < min) {
+	    root = min;
+	  }
+
+	  /* check for an over-subscribed or incomplete set of lengths */
+	  left = 1;
+	  for (len = 1; len <= MAXBITS; len++) {
+	    left <<= 1;
+	    left -= count[len];
+	    if (left < 0) {
+	      return -1;
+	    }        /* over-subscribed */
+	  }
+	  if (left > 0 && (type === CODES || max !== 1)) {
+	    return -1;                      /* incomplete set */
+	  }
+
+	  /* generate offsets into symbol table for each length for sorting */
+	  offs[1] = 0;
+	  for (len = 1; len < MAXBITS; len++) {
+	    offs[len + 1] = offs[len] + count[len];
+	  }
+
+	  /* sort symbols by length, by symbol order within each length */
+	  for (sym = 0; sym < codes; sym++) {
+	    if (lens[lens_index + sym] !== 0) {
+	      work[offs[lens[lens_index + sym]]++] = sym;
+	    }
+	  }
+
+	  /*
+	   Create and fill in decoding tables.  In this loop, the table being
+	   filled is at next and has curr index bits.  The code being used is huff
+	   with length len.  That code is converted to an index by dropping drop
+	   bits off of the bottom.  For codes where len is less than drop + curr,
+	   those top drop + curr - len bits are incremented through all values to
+	   fill the table with replicated entries.
+
+	   root is the number of index bits for the root table.  When len exceeds
+	   root, sub-tables are created pointed to by the root entry with an index
+	   of the low root bits of huff.  This is saved in low to check for when a
+	   new sub-table should be started.  drop is zero when the root table is
+	   being filled, and drop is root when sub-tables are being filled.
+
+	   When a new sub-table is needed, it is necessary to look ahead in the
+	   code lengths to determine what size sub-table is needed.  The length
+	   counts are used for this, and so count[] is decremented as codes are
+	   entered in the tables.
+
+	   used keeps track of how many table entries have been allocated from the
+	   provided *table space.  It is checked for LENS and DIST tables against
+	   the constants ENOUGH_LENS and ENOUGH_DISTS to guard against changes in
+	   the initial root table size constants.  See the comments in inftrees.h
+	   for more information.
+
+	   sym increments through all symbols, and the loop terminates when
+	   all codes of length max, i.e. all codes, have been processed.  This
+	   routine permits incomplete codes, so another loop after this one fills
+	   in the rest of the decoding tables with invalid code markers.
+	   */
+
+	  /* set up for code type */
+	  // poor man optimization - use if-else instead of switch,
+	  // to avoid deopts in old v8
+	  if (type === CODES) {
+	    base = extra = work;    /* dummy value--not used */
+	    end = 19;
+
+	  } else if (type === LENS) {
+	    base = lbase;
+	    base_index -= 257;
+	    extra = lext;
+	    extra_index -= 257;
+	    end = 256;
+
+	  } else {                    /* DISTS */
+	    base = dbase;
+	    extra = dext;
+	    end = -1;
+	  }
+
+	  /* initialize opts for loop */
+	  huff = 0;                   /* starting code */
+	  sym = 0;                    /* starting code symbol */
+	  len = min;                  /* starting code length */
+	  next = table_index;              /* current table to fill in */
+	  curr = root;                /* current table index bits */
+	  drop = 0;                   /* current bits to drop from code for index */
+	  low = -1;                   /* trigger new sub-table when len > root */
+	  used = 1 << root;          /* use root table entries */
+	  mask = used - 1;            /* mask for comparing low */
+
+	  /* check available table space */
+	  if ((type === LENS && used > ENOUGH_LENS) ||
+	    (type === DISTS && used > ENOUGH_DISTS)) {
+	    return 1;
+	  }
+
+	  var i=0;
+	  /* process all codes and make table entries */
+	  for (;;) {
+	    i++;
+	    /* create table entry */
+	    here_bits = len - drop;
+	    if (work[sym] < end) {
+	      here_op = 0;
+	      here_val = work[sym];
+	    }
+	    else if (work[sym] > end) {
+	      here_op = extra[extra_index + work[sym]];
+	      here_val = base[base_index + work[sym]];
+	    }
+	    else {
+	      here_op = 32 + 64;         /* end of block */
+	      here_val = 0;
+	    }
+
+	    /* replicate for those indices with low len bits equal to huff */
+	    incr = 1 << (len - drop);
+	    fill = 1 << curr;
+	    min = fill;                 /* save offset to next table */
+	    do {
+	      fill -= incr;
+	      table[next + (huff >> drop) + fill] = (here_bits << 24) | (here_op << 16) | here_val |0;
+	    } while (fill !== 0);
+
+	    /* backwards increment the len-bit code huff */
+	    incr = 1 << (len - 1);
+	    while (huff & incr) {
+	      incr >>= 1;
+	    }
+	    if (incr !== 0) {
+	      huff &= incr - 1;
+	      huff += incr;
+	    } else {
+	      huff = 0;
+	    }
+
+	    /* go to next symbol, update count, len */
+	    sym++;
+	    if (--count[len] === 0) {
+	      if (len === max) { break; }
+	      len = lens[lens_index + work[sym]];
+	    }
+
+	    /* create new sub-table if needed */
+	    if (len > root && (huff & mask) !== low) {
+	      /* if first time, transition to sub-tables */
+	      if (drop === 0) {
+	        drop = root;
+	      }
+
+	      /* increment past last table */
+	      next += min;            /* here min is 1 << curr */
+
+	      /* determine length of next table */
+	      curr = len - drop;
+	      left = 1 << curr;
+	      while (curr + drop < max) {
+	        left -= count[curr + drop];
+	        if (left <= 0) { break; }
+	        curr++;
+	        left <<= 1;
+	      }
+
+	      /* check for enough space */
+	      used += 1 << curr;
+	      if ((type === LENS && used > ENOUGH_LENS) ||
+	        (type === DISTS && used > ENOUGH_DISTS)) {
+	        return 1;
+	      }
+
+	      /* point entry in root table to sub-table */
+	      low = huff & mask;
+	      /*table.op[low] = curr;
+	      table.bits[low] = root;
+	      table.val[low] = next - opts.table_index;*/
+	      table[low] = (root << 24) | (curr << 16) | (next - table_index) |0;
+	    }
+	  }
+
+	  /* fill in remaining table entry if code is incomplete (guaranteed to have
+	   at most one remaining entry, since if the code is incomplete, the
+	   maximum code length that was allowed to get this far is one bit) */
+	  if (huff !== 0) {
+	    //table.op[next + huff] = 64;            /* invalid code marker */
+	    //table.bits[next + huff] = len - drop;
+	    //table.val[next + huff] = 0;
+	    table[next + huff] = ((len - drop) << 24) | (64 << 16) |0;
+	  }
+
+	  /* set return parameters */
+	  //opts.table_index += used;
+	  opts.bits = root;
+	  return 0;
+	};
+
+
+/***/ },
+/* 59 */
+/***/ function(module, exports) {
+
+	module.exports = {
+
+	  /* Allowed flush values; see deflate() and inflate() below for details */
+	  Z_NO_FLUSH:         0,
+	  Z_PARTIAL_FLUSH:    1,
+	  Z_SYNC_FLUSH:       2,
+	  Z_FULL_FLUSH:       3,
+	  Z_FINISH:           4,
+	  Z_BLOCK:            5,
+	  Z_TREES:            6,
+
+	  /* Return codes for the compression/decompression functions. Negative values
+	  * are errors, positive values are used for special but normal events.
+	  */
+	  Z_OK:               0,
+	  Z_STREAM_END:       1,
+	  Z_NEED_DICT:        2,
+	  Z_ERRNO:           -1,
+	  Z_STREAM_ERROR:    -2,
+	  Z_DATA_ERROR:      -3,
+	  //Z_MEM_ERROR:     -4,
+	  Z_BUF_ERROR:       -5,
+	  //Z_VERSION_ERROR: -6,
+
+	  /* compression levels */
+	  Z_NO_COMPRESSION:         0,
+	  Z_BEST_SPEED:             1,
+	  Z_BEST_COMPRESSION:       9,
+	  Z_DEFAULT_COMPRESSION:   -1,
+
+
+	  Z_FILTERED:               1,
+	  Z_HUFFMAN_ONLY:           2,
+	  Z_RLE:                    3,
+	  Z_FIXED:                  4,
+	  Z_DEFAULT_STRATEGY:       0,
+
+	  /* Possible values of the data_type field (though see inflate()) */
+	  Z_BINARY:                 0,
+	  Z_TEXT:                   1,
+	  //Z_ASCII:                1, // = Z_TEXT (deprecated)
+	  Z_UNKNOWN:                2,
+
+	  /* The deflate compression method */
+	  Z_DEFLATED:               8
+	  //Z_NULL:                 null // Use -1 or null inline, depending on var type
+	};
+
+
+/***/ },
+/* 60 */
+/***/ function(module, exports, __webpack_require__) {
+
+	/* WEBPACK VAR INJECTION */(function(global, process) {// Copyright Joyent, Inc. and other Node contributors.
+	//
+	// 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.
+
+	var formatRegExp = /%[sdj%]/g;
+	exports.format = function(f) {
+	  if (!isString(f)) {
+	    var objects = [];
+	    for (var i = 0; i < arguments.length; i++) {
+	      objects.push(inspect(arguments[i]));
+	    }
+	    return objects.join(' ');
+	  }
+
+	  var i = 1;
+	  var args = arguments;
+	  var len = args.length;
+	  var str = String(f).replace(formatRegExp, function(x) {
+	    if (x === '%%') return '%';
+	    if (i >= len) return x;
+	    switch (x) {
+	      case '%s': return String(args[i++]);
+	      case '%d': return Number(args[i++]);
+	      case '%j':
+	        try {
+	          return JSON.stringify(args[i++]);
+	        } catch (_) {
+	          return '[Circular]';
+	        }
+	      default:
+	        return x;
+	    }
+	  });
+	  for (var x = args[i]; i < len; x = args[++i]) {
+	    if (isNull(x) || !isObject(x)) {
+	      str += ' ' + x;
+	    } else {
+	      str += ' ' + inspect(x);
+	    }
+	  }
+	  return str;
+	};
+
+
+	// Mark that a method should not be used.
+	// Returns a modified function which warns once by default.
+	// If --no-deprecation is set, then it is a no-op.
+	exports.deprecate = function(fn, msg) {
+	  // Allow for deprecating things in the process of starting up.
+	  if (isUndefined(global.process)) {
+	    return function() {
+	      return exports.deprecate(fn, msg).apply(this, arguments);
+	    };
+	  }
+
+	  if (process.noDeprecation === true) {
+	    return fn;
+	  }
+
+	  var warned = false;
+	  function deprecated() {
+	    if (!warned) {
+	      if (process.throwDeprecation) {
+	        throw new Error(msg);
+	      } else if (process.traceDeprecation) {
+	        console.trace(msg);
+	      } else {
+	        console.error(msg);
+	      }
+	      warned = true;
+	    }
+	    return fn.apply(this, arguments);
+	  }
+
+	  return deprecated;
+	};
+
+
+	var debugs = {};
+	var debugEnviron;
+	exports.debuglog = function(set) {
+	  if (isUndefined(debugEnviron))
+	    debugEnviron = process.env.NODE_DEBUG || '';
+	  set = set.toUpperCase();
+	  if (!debugs[set]) {
+	    if (new RegExp('\\b' + set + '\\b', 'i').test(debugEnviron)) {
+	      var pid = process.pid;
+	      debugs[set] = function() {
+	        var msg = exports.format.apply(exports, arguments);
+	        console.error('%s %d: %s', set, pid, msg);
+	      };
+	    } else {
+	      debugs[set] = function() {};
+	    }
+	  }
+	  return debugs[set];
+	};
+
+
+	/**
+	 * Echos the value of a value. Trys to print the value out
+	 * in the best way possible given the different types.
+	 *
+	 * @param {Object} obj The object to print out.
+	 * @param {Object} opts Optional options object that alters the output.
+	 */
+	/* legacy: obj, showHidden, depth, colors*/
+	function inspect(obj, opts) {
+	  // default options
+	  var ctx = {
+	    seen: [],
+	    stylize: stylizeNoColor
+	  };
+	  // legacy...
+	  if (arguments.length >= 3) ctx.depth = arguments[2];
+	  if (arguments.length >= 4) ctx.colors = arguments[3];
+	  if (isBoolean(opts)) {
+	    // legacy...
+	    ctx.showHidden = opts;
+	  } else if (opts) {
+	    // got an "options" object
+	    exports._extend(ctx, opts);
+	  }
+	  // set default options
+	  if (isUndefined(ctx.showHidden)) ctx.showHidden = false;
+	  if (isUndefined(ctx.depth)) ctx.depth = 2;
+	  if (isUndefined(ctx.colors)) ctx.colors = false;
+	  if (isUndefined(ctx.customInspect)) ctx.customInspect = true;
+	  if (ctx.colors) ctx.stylize = stylizeWithColor;
+	  return formatValue(ctx, obj, ctx.depth);
+	}
+	exports.inspect = inspect;
+
+
+	// http://en.wikipedia.org/wiki/ANSI_escape_code#graphics
+	inspect.colors = {
+	  'bold' : [1, 22],
+	  'italic' : [3, 23],
+	  'underline' : [4, 24],
+	  'inverse' : [7, 27],
+	  'white' : [37, 39],
+	  'grey' : [90, 39],
+	  'black' : [30, 39],
+	  'blue' : [34, 39],
+	  'cyan' : [36, 39],
+	  'green' : [32, 39],
+	  'magenta' : [35, 39],
+	  'red' : [31, 39],
+	  'yellow' : [33, 39]
+	};
+
+	// Don't use 'blue' not visible on cmd.exe
+	inspect.styles = {
+	  'special': 'cyan',
+	  'number': 'yellow',
+	  'boolean': 'yellow',
+	  'undefined': 'grey',
+	  'null': 'bold',
+	  'string': 'green',
+	  'date': 'magenta',
+	  // "name": intentionally not styling
+	  'regexp': 'red'
+	};
+
+
+	function stylizeWithColor(str, styleType) {
+	  var style = inspect.styles[styleType];
+
+	  if (style) {
+	    return '\u001b[' + inspect.colors[style][0] + 'm' + str +
+	           '\u001b[' + inspect.colors[style][1] + 'm';
+	  } else {
+	    return str;
+	  }
+	}
+
+
+	function stylizeNoColor(str, styleType) {
+	  return str;
+	}
+
+
+	function arrayToHash(array) {
+	  var hash = {};
+
+	  array.forEach(function(val, idx) {
+	    hash[val] = true;
+	  });
+
+	  return hash;
+	}
+
+
+	function formatValue(ctx, value, recurseTimes) {
+	  // Provide a hook for user-specified inspect functions.
+	  // Check that value is an object with an inspect function on it
+	  if (ctx.customInspect &&
+	      value &&
+	      isFunction(value.inspect) &&
+	      // Filter out the util module, it's inspect function is special
+	      value.inspect !== exports.inspect &&
+	      // Also filter out any prototype objects using the circular check.
+	      !(value.constructor && value.constructor.prototype === value)) {
+	    var ret = value.inspect(recurseTimes, ctx);
+	    if (!isString(ret)) {
+	      ret = formatValue(ctx, ret, recurseTimes);
+	    }
+	    return ret;
+	  }
+
+	  // Primitive types cannot have properties
+	  var primitive = formatPrimitive(ctx, value);
+	  if (primitive) {
+	    return primitive;
+	  }
+
+	  // Look up the keys of the object.
+	  var keys = Object.keys(value);
+	  var visibleKeys = arrayToHash(keys);
+
+	  if (ctx.showHidden) {
+	    keys = Object.getOwnPropertyNames(value);
+	  }
+
+	  // IE doesn't make error fields non-enumerable
+	  // http://msdn.microsoft.com/en-us/library/ie/dww52sbt(v=vs.94).aspx
+	  if (isError(value)
+	      && (keys.indexOf('message') >= 0 || keys.indexOf('description') >= 0)) {
+	    return formatError(value);
+	  }
+
+	  // Some type of object without properties can be shortcutted.
+	  if (keys.length === 0) {
+	    if (isFunction(value)) {
+	      var name = value.name ? ': ' + value.name : '';
+	      return ctx.stylize('[Function' + name + ']', 'special');
+	    }
+	    if (isRegExp(value)) {
+	      return ctx.stylize(RegExp.prototype.toString.call(value), 'regexp');
+	    }
+	    if (isDate(value)) {
+	      return ctx.stylize(Date.prototype.toString.call(value), 'date');
+	    }
+	    if (isError(value)) {
+	      return formatError(value);
+	    }
+	  }
+
+	  var base = '', array = false, braces = ['{', '}'];
+
+	  // Make Array say that they are Array
+	  if (isArray(value)) {
+	    array = true;
+	    braces = ['[', ']'];
+	  }
+
+	  // Make functions say that they are functions
+	  if (isFunction(value)) {
+	    var n = value.name ? ': ' + value.name : '';
+	    base = ' [Function' + n + ']';
+	  }
+
+	  // Make RegExps say that they are RegExps
+	  if (isRegExp(value)) {
+	    base = ' ' + RegExp.prototype.toString.call(value);
+	  }
+
+	  // Make dates with properties first say the date
+	  if (isDate(value)) {
+	    base = ' ' + Date.prototype.toUTCString.call(value);
+	  }
+
+	  // Make error with message first say the error
+	  if (isError(value)) {
+	    base = ' ' + formatError(value);
+	  }
+
+	  if (keys.length === 0 && (!array || value.length == 0)) {
+	    return braces[0] + base + braces[1];
+	  }
+
+	  if (recurseTimes < 0) {
+	    if (isRegExp(value)) {
+	      return ctx.stylize(RegExp.prototype.toString.call(value), 'regexp');
+	    } else {
+	      return ctx.stylize('[Object]', 'special');
+	    }
+	  }
+
+	  ctx.seen.push(value);
+
+	  var output;
+	  if (array) {
+	    output = formatArray(ctx, value, recurseTimes, visibleKeys, keys);
+	  } else {
+	    output = keys.map(function(key) {
+	      return formatProperty(ctx, value, recurseTimes, visibleKeys, key, array);
+	    });
+	  }
+
+	  ctx.seen.pop();
+
+	  return reduceToSingleString(output, base, braces);
+	}
+
+
+	function formatPrimitive(ctx, value) {
+	  if (isUndefined(value))
+	    return ctx.stylize('undefined', 'undefined');
+	  if (isString(value)) {
+	    var simple = '\'' + JSON.stringify(value).replace(/^"|"$/g, '')
+	                                             .replace(/'/g, "\\'")
+	                                             .replace(/\\"/g, '"') + '\'';
+	    return ctx.stylize(simple, 'string');
+	  }
+	  if (isNumber(value))
+	    return ctx.stylize('' + value, 'number');
+	  if (isBoolean(value))
+	    return ctx.stylize('' + value, 'boolean');
+	  // For some reason typeof null is "object", so special case here.
+	  if (isNull(value))
+	    return ctx.stylize('null', 'null');
+	}
+
+
+	function formatError(value) {
+	  return '[' + Error.prototype.toString.call(value) + ']';
+	}
+
+
+	function formatArray(ctx, value, recurseTimes, visibleKeys, keys) {
+	  var output = [];
+	  for (var i = 0, l = value.length; i < l; ++i) {
+	    if (hasOwnProperty(value, String(i))) {
+	      output.push(formatProperty(ctx, value, recurseTimes, visibleKeys,
+	          String(i), true));
+	    } else {
+	      output.push('');
+	    }
+	  }
+	  keys.forEach(function(key) {
+	    if (!key.match(/^\d+$/)) {
+	      output.push(formatProperty(ctx, value, recurseTimes, visibleKeys,
+	          key, true));
+	    }
+	  });
+	  return output;
+	}
+
+
+	function formatProperty(ctx, value, recurseTimes, visibleKeys, key, array) {
+	  var name, str, desc;
+	  desc = Object.getOwnPropertyDescriptor(value, key) || { value: value[key] };
+	  if (desc.get) {
+	    if (desc.set) {
+	      str = ctx.stylize('[Getter/Setter]', 'special');
+	    } else {
+	      str = ctx.stylize('[Getter]', 'special');
+	    }
+	  } else {
+	    if (desc.set) {
+	      str = ctx.stylize('[Setter]', 'special');
+	    }
+	  }
+	  if (!hasOwnProperty(visibleKeys, key)) {
+	    name = '[' + key + ']';
+	  }
+	  if (!str) {
+	    if (ctx.seen.indexOf(desc.value) < 0) {
+	      if (isNull(recurseTimes)) {
+	        str = formatValue(ctx, desc.value, null);
+	      } else {
+	        str = formatValue(ctx, desc.value, recurseTimes - 1);
+	      }
+	      if (str.indexOf('\n') > -1) {
+	        if (array) {
+	          str = str.split('\n').map(function(line) {
+	            return '  ' + line;
+	          }).join('\n').substr(2);
+	        } else {
+	          str = '\n' + str.split('\n').map(function(line) {
+	            return '   ' + line;
+	          }).join('\n');
+	        }
+	      }
+	    } else {
+	      str = ctx.stylize('[Circular]', 'special');
+	    }
+	  }
+	  if (isUndefined(name)) {
+	    if (array && key.match(/^\d+$/)) {
+	      return str;
+	    }
+	    name = JSON.stringify('' + key);
+	    if (name.match(/^"([a-zA-Z_][a-zA-Z_0-9]*)"$/)) {
+	      name = name.substr(1, name.length - 2);
+	      name = ctx.stylize(name, 'name');
+	    } else {
+	      name = name.replace(/'/g, "\\'")
+	                 .replace(/\\"/g, '"')
+	                 .replace(/(^"|"$)/g, "'");
+	      name = ctx.stylize(name, 'string');
+	    }
+	  }
+
+	  return name + ': ' + str;
+	}
+
+
+	function reduceToSingleString(output, base, braces) {
+	  var numLinesEst = 0;
+	  var length = output.reduce(function(prev, cur) {
+	    numLinesEst++;
+	    if (cur.indexOf('\n') >= 0) numLinesEst++;
+	    return prev + cur.replace(/\u001b\[\d\d?m/g, '').length + 1;
+	  }, 0);
+
+	  if (length > 60) {
+	    return braces[0] +
+	           (base === '' ? '' : base + '\n ') +
+	           ' ' +
+	           output.join(',\n  ') +
+	           ' ' +
+	           braces[1];
+	  }
+
+	  return braces[0] + base + ' ' + output.join(', ') + ' ' + braces[1];
+	}
+
+
+	// NOTE: These type checking functions intentionally don't use `instanceof`
+	// because it is fragile and can be easily faked with `Object.create()`.
+	function isArray(ar) {
+	  return Array.isArray(ar);
+	}
+	exports.isArray = isArray;
+
+	function isBoolean(arg) {
+	  return typeof arg === 'boolean';
+	}
+	exports.isBoolean = isBoolean;
+
+	function isNull(arg) {
+	  return arg === null;
+	}
+	exports.isNull = isNull;
+
+	function isNullOrUndefined(arg) {
+	  return arg == null;
+	}
+	exports.isNullOrUndefined = isNullOrUndefined;
+
+	function isNumber(arg) {
+	  return typeof arg === 'number';
+	}
+	exports.isNumber = isNumber;
+
+	function isString(arg) {
+	  return typeof arg === 'string';
+	}
+	exports.isString = isString;
+
+	function isSymbol(arg) {
+	  return typeof arg === 'symbol';
+	}
+	exports.isSymbol = isSymbol;
+
+	function isUndefined(arg) {
+	  return arg === void 0;
+	}
+	exports.isUndefined = isUndefined;
+
+	function isRegExp(re) {
+	  return isObject(re) && objectToString(re) === '[object RegExp]';
+	}
+	exports.isRegExp = isRegExp;
+
+	function isObject(arg) {
+	  return typeof arg === 'object' && arg !== null;
+	}
+	exports.isObject = isObject;
+
+	function isDate(d) {
+	  return isObject(d) && objectToString(d) === '[object Date]';
+	}
+	exports.isDate = isDate;
+
+	function isError(e) {
+	  return isObject(e) &&
+	      (objectToString(e) === '[object Error]' || e instanceof Error);
+	}
+	exports.isError = isError;
+
+	function isFunction(arg) {
+	  return typeof arg === 'function';
+	}
+	exports.isFunction = isFunction;
+
+	function isPrimitive(arg) {
+	  return arg === null ||
+	         typeof arg === 'boolean' ||
+	         typeof arg === 'number' ||
+	         typeof arg === 'string' ||
+	         typeof arg === 'symbol' ||  // ES6 symbol
+	         typeof arg === 'undefined';
+	}
+	exports.isPrimitive = isPrimitive;
+
+	exports.isBuffer = __webpack_require__(61);
+
+	function objectToString(o) {
+	  return Object.prototype.toString.call(o);
+	}
+
+
+	function pad(n) {
+	  return n < 10 ? '0' + n.toString(10) : n.toString(10);
+	}
+
+
+	var months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep',
+	              'Oct', 'Nov', 'Dec'];
+
+	// 26 Feb 16:19:34
+	function timestamp() {
+	  var d = new Date();
+	  var time = [pad(d.getHours()),
+	              pad(d.getMinutes()),
+	              pad(d.getSeconds())].join(':');
+	  return [d.getDate(), months[d.getMonth()], time].join(' ');
+	}
+
+
+	// log is just a thin wrapper to console.log that prepends a timestamp
+	exports.log = function() {
+	  console.log('%s - %s', timestamp(), exports.format.apply(exports, arguments));
+	};
+
+
+	/**
+	 * Inherit the prototype methods from one constructor into another.
+	 *
+	 * The Function.prototype.inherits from lang.js rewritten as a standalone
+	 * function (not on Function.prototype). NOTE: If this file is to be loaded
+	 * during bootstrapping this function needs to be rewritten using some native
+	 * functions as prototype setup using normal JavaScript does not work as
+	 * expected during bootstrapping (see mirror.js in r114903).
+	 *
+	 * @param {function} ctor Constructor function which needs to inherit the
+	 *     prototype.
+	 * @param {function} superCtor Constructor function to inherit prototype from.
+	 */
+	exports.inherits = __webpack_require__(62);
+
+	exports._extend = function(origin, add) {
+	  // Don't do anything if add isn't an object
+	  if (!add || !isObject(add)) return origin;
+
+	  var keys = Object.keys(add);
+	  var i = keys.length;
+	  while (i--) {
+	    origin[keys[i]] = add[keys[i]];
+	  }
+	  return origin;
+	};
+
+	function hasOwnProperty(obj, prop) {
+	  return Object.prototype.hasOwnProperty.call(obj, prop);
+	}
+
+	/* WEBPACK VAR INJECTION */}.call(exports, (function() { return this; }()), __webpack_require__(30)))
+
+/***/ },
+/* 61 */
+/***/ function(module, exports) {
+
+	module.exports = function isBuffer(arg) {
+	  return arg && typeof arg === 'object'
+	    && typeof arg.copy === 'function'
+	    && typeof arg.fill === 'function'
+	    && typeof arg.readUInt8 === 'function';
+	}
+
+/***/ },
+/* 62 */
+/***/ function(module, exports) {
+
+	if (typeof Object.create === 'function') {
+	  // implementation from standard node.js 'util' module
+	  module.exports = function inherits(ctor, superCtor) {
+	    ctor.super_ = superCtor
+	    ctor.prototype = Object.create(superCtor.prototype, {
+	      constructor: {
+	        value: ctor,
+	        enumerable: false,
+	        writable: true,
+	        configurable: true
+	      }
+	    });
+	  };
+	} else {
+	  // old school shim for old browsers
+	  module.exports = function inherits(ctor, superCtor) {
+	    ctor.super_ = superCtor
+	    var TempCtor = function () {}
+	    TempCtor.prototype = superCtor.prototype
+	    ctor.prototype = new TempCtor()
+	    ctor.prototype.constructor = ctor
+	  }
+	}
+
+
+/***/ },
+/* 63 */
+/***/ function(module, exports, __webpack_require__) {
+
+	// http://wiki.commonjs.org/wiki/Unit_Testing/1.0
+	//
+	// THIS IS NOT TESTED NOR LIKELY TO WORK OUTSIDE V8!
+	//
+	// Originally from narwhal.js (http://narwhaljs.org)
+	// Copyright (c) 2009 Thomas Robinson <280north.com>
+	//
+	// 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 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.
+
+	// when used in node, this will actually load the util module we depend on
+	// versus loading the builtin util module as happens otherwise
+	// this is a bug in node module loading as far as I am concerned
+	var util = __webpack_require__(60);
+
+	var pSlice = Array.prototype.slice;
+	var hasOwn = Object.prototype.hasOwnProperty;
+
+	// 1. The assert module provides functions that throw
+	// AssertionError's when particular conditions are not met. The
+	// assert module must conform to the following interface.
+
+	var assert = module.exports = ok;
+
+	// 2. The AssertionError is defined in assert.
+	// new assert.AssertionError({ message: message,
+	//                             actual: actual,
+	//                             expected: expected })
+
+	assert.AssertionError = function AssertionError(options) {
+	  this.name = 'AssertionError';
+	  this.actual = options.actual;
+	  this.expected = options.expected;
+	  this.operator = options.operator;
+	  if (options.message) {
+	    this.message = options.message;
+	    this.generatedMessage = false;
+	  } else {
+	    this.message = getMessage(this);
+	    this.generatedMessage = true;
+	  }
+	  var stackStartFunction = options.stackStartFunction || fail;
+
+	  if (Error.captureStackTrace) {
+	    Error.captureStackTrace(this, stackStartFunction);
+	  }
+	  else {
+	    // non v8 browsers so we can have a stacktrace
+	    var err = new Error();
+	    if (err.stack) {
+	      var out = err.stack;
+
+	      // try to strip useless frames
+	      var fn_name = stackStartFunction.name;
+	      var idx = out.indexOf('\n' + fn_name);
+	      if (idx >= 0) {
+	        // once we have located the function frame
+	        // we need to strip out everything before it (and its line)
+	        var next_line = out.indexOf('\n', idx + 1);
+	        out = out.substring(next_line + 1);
+	      }
+
+	      this.stack = out;
+	    }
+	  }
+	};
+
+	// assert.AssertionError instanceof Error
+	util.inherits(assert.AssertionError, Error);
+
+	function replacer(key, value) {
+	  if (util.isUndefined(value)) {
+	    return '' + value;
+	  }
+	  if (util.isNumber(value) && !isFinite(value)) {
+	    return value.toString();
+	  }
+	  if (util.isFunction(value) || util.isRegExp(value)) {
+	    return value.toString();
+	  }
+	  return value;
+	}
+
+	function truncate(s, n) {
+	  if (util.isString(s)) {
+	    return s.length < n ? s : s.slice(0, n);
+	  } else {
+	    return s;
+	  }
+	}
+
+	function getMessage(self) {
+	  return truncate(JSON.stringify(self.actual, replacer), 128) + ' ' +
+	         self.operator + ' ' +
+	         truncate(JSON.stringify(self.expected, replacer), 128);
+	}
+
+	// At present only the three keys mentioned above are used and
+	// understood by the spec. Implementations or sub modules can pass
+	// other keys to the AssertionError's constructor - they will be
+	// ignored.
+
+	// 3. All of the following functions must throw an AssertionError
+	// when a corresponding condition is not met, with a message that
+	// may be undefined if not provided.  All assertion methods provide
+	// both the actual and expected values to the assertion error for
+	// display purposes.
+
+	function fail(actual, expected, message, operator, stackStartFunction) {
+	  throw new assert.AssertionError({
+	    message: message,
+	    actual: actual,
+	    expected: expected,
+	    operator: operator,
+	    stackStartFunction: stackStartFunction
+	  });
+	}
+
+	// EXTENSION! allows for well behaved errors defined elsewhere.
+	assert.fail = fail;
+
+	// 4. Pure assertion tests whether a value is truthy, as determined
+	// by !!guard.
+	// assert.ok(guard, message_opt);
+	// This statement is equivalent to assert.equal(true, !!guard,
+	// message_opt);. To test strictly for the value true, use
+	// assert.strictEqual(true, guard, message_opt);.
+
+	function ok(value, message) {
+	  if (!value) fail(value, true, message, '==', assert.ok);
+	}
+	assert.ok = ok;
+
+	// 5. The equality assertion tests shallow, coercive equality with
+	// ==.
+	// assert.equal(actual, expected, message_opt);
+
+	assert.equal = function equal(actual, expected, message) {
+	  if (actual != expected) fail(actual, expected, message, '==', assert.equal);
+	};
+
+	// 6. The non-equality assertion tests for whether two objects are not equal
+	// with != assert.notEqual(actual, expected, message_opt);
+
+	assert.notEqual = function notEqual(actual, expected, message) {
+	  if (actual == expected) {
+	    fail(actual, expected, message, '!=', assert.notEqual);
+	  }
+	};
+
+	// 7. The equivalence assertion tests a deep equality relation.
+	// assert.deepEqual(actual, expected, message_opt);
+
+	assert.deepEqual = function deepEqual(actual, expected, message) {
+	  if (!_deepEqual(actual, expected)) {
+	    fail(actual, expected, message, 'deepEqual', assert.deepEqual);
+	  }
+	};
+
+	function _deepEqual(actual, expected) {
+	  // 7.1. All identical values are equivalent, as determined by ===.
+	  if (actual === expected) {
+	    return true;
+
+	  } else if (util.isBuffer(actual) && util.isBuffer(expected)) {
+	    if (actual.length != expected.length) return false;
+
+	    for (var i = 0; i < actual.length; i++) {
+	      if (actual[i] !== expected[i]) return false;
+	    }
+
+	    return true;
+
+	  // 7.2. If the expected value is a Date object, the actual value is
+	  // equivalent if it is also a Date object that refers to the same time.
+	  } else if (util.isDate(actual) && util.isDate(expected)) {
+	    return actual.getTime() === expected.getTime();
+
+	  // 7.3 If the expected value is a RegExp object, the actual value is
+	  // equivalent if it is also a RegExp object with the same source and
+	  // properties (`global`, `multiline`, `lastIndex`, `ignoreCase`).
+	  } else if (util.isRegExp(actual) && util.isRegExp(expected)) {
+	    return actual.source === expected.source &&
+	           actual.global === expected.global &&
+	           actual.multiline === expected.multiline &&
+	           actual.lastIndex === expected.lastIndex &&
+	           actual.ignoreCase === expected.ignoreCase;
+
+	  // 7.4. Other pairs that do not both pass typeof value == 'object',
+	  // equivalence is determined by ==.
+	  } else if (!util.isObject(actual) && !util.isObject(expected)) {
+	    return actual == expected;
+
+	  // 7.5 For all other Object pairs, including Array objects, equivalence is
+	  // determined by having the same number of owned properties (as verified
+	  // with Object.prototype.hasOwnProperty.call), the same set of keys
+	  // (although not necessarily the same order), equivalent values for every
+	  // corresponding key, and an identical 'prototype' property. Note: this
+	  // accounts for both named and indexed properties on Arrays.
+	  } else {
+	    return objEquiv(actual, expected);
+	  }
+	}
+
+	function isArguments(object) {
+	  return Object.prototype.toString.call(object) == '[object Arguments]';
+	}
+
+	function objEquiv(a, b) {
+	  if (util.isNullOrUndefined(a) || util.isNullOrUndefined(b))
+	    return false;
+	  // an identical 'prototype' property.
+	  if (a.prototype !== b.prototype) return false;
+	  // if one is a primitive, the other must be same
+	  if (util.isPrimitive(a) || util.isPrimitive(b)) {
+	    return a === b;
+	  }
+	  var aIsArgs = isArguments(a),
+	      bIsArgs = isArguments(b);
+	  if ((aIsArgs && !bIsArgs) || (!aIsArgs && bIsArgs))
+	    return false;
+	  if (aIsArgs) {
+	    a = pSlice.call(a);
+	    b = pSlice.call(b);
+	    return _deepEqual(a, b);
+	  }
+	  var ka = objectKeys(a),
+	      kb = objectKeys(b),
+	      key, i;
+	  // having the same number of owned properties (keys incorporates
+	  // hasOwnProperty)
+	  if (ka.length != kb.length)
+	    return false;
+	  //the same set of keys (although not necessarily the same order),
+	  ka.sort();
+	  kb.sort();
+	  //~~~cheap key test
+	  for (i = ka.length - 1; i >= 0; i--) {
+	    if (ka[i] != kb[i])
+	      return false;
+	  }
+	  //equivalent values for every corresponding key, and
+	  //~~~possibly expensive deep test
+	  for (i = ka.length - 1; i >= 0; i--) {
+	    key = ka[i];
+	    if (!_deepEqual(a[key], b[key])) return false;
+	  }
+	  return true;
+	}
+
+	// 8. The non-equivalence assertion tests for any deep inequality.
+	// assert.notDeepEqual(actual, expected, message_opt);
+
+	assert.notDeepEqual = function notDeepEqual(actual, expected, message) {
+	  if (_deepEqual(actual, expected)) {
+	    fail(actual, expected, message, 'notDeepEqual', assert.notDeepEqual);
+	  }
+	};
+
+	// 9. The strict equality assertion tests strict equality, as determined by ===.
+	// assert.strictEqual(actual, expected, message_opt);
+
+	assert.strictEqual = function strictEqual(actual, expected, message) {
+	  if (actual !== expected) {
+	    fail(actual, expected, message, '===', assert.strictEqual);
+	  }
+	};
+
+	// 10. The strict non-equality assertion tests for strict inequality, as
+	// determined by !==.  assert.notStrictEqual(actual, expected, message_opt);
+
+	assert.notStrictEqual = function notStrictEqual(actual, expected, message) {
+	  if (actual === expected) {
+	    fail(actual, expected, message, '!==', assert.notStrictEqual);
+	  }
+	};
+
+	function expectedException(actual, expected) {
+	  if (!actual || !expected) {
+	    return false;
+	  }
+
+	  if (Object.prototype.toString.call(expected) == '[object RegExp]') {
+	    return expected.test(actual);
+	  } else if (actual instanceof expected) {
+	    return true;
+	  } else if (expected.call({}, actual) === true) {
+	    return true;
+	  }
+
+	  return false;
+	}
+
+	function _throws(shouldThrow, block, expected, message) {
+	  var actual;
+
+	  if (util.isString(expected)) {
+	    message = expected;
+	    expected = null;
+	  }
+
+	  try {
+	    block();
+	  } catch (e) {
+	    actual = e;
+	  }
+
+	  message = (expected && expected.name ? ' (' + expected.name + ').' : '.') +
+	            (message ? ' ' + message : '.');
+
+	  if (shouldThrow && !actual) {
+	    fail(actual, expected, 'Missing expected exception' + message);
+	  }
+
+	  if (!shouldThrow && expectedException(actual, expected)) {
+	    fail(actual, expected, 'Got unwanted exception' + message);
+	  }
+
+	  if ((shouldThrow && actual && expected &&
+	      !expectedException(actual, expected)) || (!shouldThrow && actual)) {
+	    throw actual;
+	  }
+	}
+
+	// 11. Expected to throw an error:
+	// assert.throws(block, Error_opt, message_opt);
+
+	assert.throws = function(block, /*optional*/error, /*optional*/message) {
+	  _throws.apply(this, [true].concat(pSlice.call(arguments)));
+	};
+
+	// EXTENSION! This is annoying to write outside this module.
+	assert.doesNotThrow = function(block, /*optional*/message) {
+	  _throws.apply(this, [false].concat(pSlice.call(arguments)));
+	};
+
+	assert.ifError = function(err) { if (err) {throw err;}};
+
+	var objectKeys = Object.keys || function (obj) {
+	  var keys = [];
+	  for (var key in obj) {
+	    if (hasOwn.call(obj, key)) keys.push(key);
+	  }
+	  return keys;
+	};
+
+
+/***/ },
+/* 64 */
+/***/ function(module, exports) {
+
+	// Generated by CoffeeScript 1.7.1
+
+	/*
+	PDFPage - represents a single page in the PDF document
+	By Devon Govett
+	 */
+
+	(function() {
+	  var PDFPage;
+
+	  PDFPage = (function() {
+	    var DEFAULT_MARGINS, SIZES;
+
+	    function PDFPage(document, options) {
+	      var dimensions;
+	      this.document = document;
+	      if (options == null) {
+	        options = {};
+	      }
+	      this.size = options.size || 'letter';
+	      this.layout = options.layout || 'portrait';
+	      if (typeof options.margin === 'number') {
+	        this.margins = {
+	          top: options.margin,
+	          left: options.margin,
+	          bottom: options.margin,
+	          right: options.margin
+	        };
+	      } else {
+	        this.margins = options.margins || DEFAULT_MARGINS;
+	      }
+	      dimensions = Array.isArray(this.size) ? this.size : SIZES[this.size.toUpperCase()];
+	      this.width = dimensions[this.layout === 'portrait' ? 0 : 1];
+	      this.height = dimensions[this.layout === 'portrait' ? 1 : 0];
+	      this.content = this.document.ref();
+	      this.resources = this.document.ref({
+	        ProcSet: ['PDF', 'Text', 'ImageB', 'ImageC', 'ImageI']
+	      });
+	      Object.defineProperties(this, {
+	        fonts: {
+	          get: (function(_this) {
+	            return function() {
+	              var _base;
+	              return (_base = _this.resources.data).Font != null ? _base.Font : _base.Font = {};
+	            };
+	          })(this)
+	        },
+	        xobjects: {
+	          get: (function(_this) {
+	            return function() {
+	              var _base;
+	              return (_base = _this.resources.data).XObject != null ? _base.XObject : _base.XObject = {};
+	            };
+	          })(this)
+	        },
+	        ext_gstates: {
+	          get: (function(_this) {
+	            return function() {
+	              var _base;
+	              return (_base = _this.resources.data).ExtGState != null ? _base.ExtGState : _base.ExtGState = {};
+	            };
+	          })(this)
+	        },
+	        patterns: {
+	          get: (function(_this) {
+	            return function() {
+	              var _base;
+	              return (_base = _this.resources.data).Pattern != null ? _base.Pattern : _base.Pattern = {};
+	            };
+	          })(this)
+	        },
+	        annotations: {
+	          get: (function(_this) {
+	            return function() {
+	              var _base;
+	              return (_base = _this.dictionary.data).Annots != null ? _base.Annots : _base.Annots = [];
+	            };
+	          })(this)
+	        }
+	      });
+	      this.dictionary = this.document.ref({
+	        Type: 'Page',
+	        Parent: this.document._root.data.Pages,
+	        MediaBox: [0, 0, this.width, this.height],
+	        Contents: this.content,
+	        Resources: this.resources
+	      });
+	    }
+
+	    PDFPage.prototype.maxY = function() {
+	      return this.height - this.margins.bottom;
+	    };
+
+	    PDFPage.prototype.write = function(chunk) {
+	      return this.content.write(chunk);
+	    };
+
+	    PDFPage.prototype.end = function() {
+	      this.dictionary.end();
+	      this.resources.end();
+	      return this.content.end();
+	    };
+
+	    DEFAULT_MARGINS = {
+	      top: 72,
+	      left: 72,
+	      bottom: 72,
+	      right: 72
+	    };
+
+	    SIZES = {
+	      '4A0': [4767.87, 6740.79],
+	      '2A0': [3370.39, 4767.87],
+	      A0: [2383.94, 3370.39],
+	      A1: [1683.78, 2383.94],
+	      A2: [1190.55, 1683.78],
+	      A3: [841.89, 1190.55],
+	      A4: [595.28, 841.89],
+	      A5: [419.53, 595.28],
+	      A6: [297.64, 419.53],
+	      A7: [209.76, 297.64],
+	      A8: [147.40, 209.76],
+	      A9: [104.88, 147.40],
+	      A10: [73.70, 104.88],
+	      B0: [2834.65, 4008.19],
+	      B1: [2004.09, 2834.65],
+	      B2: [1417.32, 2004.09],
+	      B3: [1000.63, 1417.32],
+	      B4: [708.66, 1000.63],
+	      B5: [498.90, 708.66],
+	      B6: [354.33, 498.90],
+	      B7: [249.45, 354.33],
+	      B8: [175.75, 249.45],
+	      B9: [124.72, 175.75],
+	      B10: [87.87, 124.72],
+	      C0: [2599.37, 3676.54],
+	      C1: [1836.85, 2599.37],
+	      C2: [1298.27, 1836.85],
+	      C3: [918.43, 1298.27],
+	      C4: [649.13, 918.43],
+	      C5: [459.21, 649.13],
+	      C6: [323.15, 459.21],
+	      C7: [229.61, 323.15],
+	      C8: [161.57, 229.61],
+	      C9: [113.39, 161.57],
+	      C10: [79.37, 113.39],
+	      RA0: [2437.80, 3458.27],
+	      RA1: [1729.13, 2437.80],
+	      RA2: [1218.90, 1729.13],
+	      RA3: [864.57, 1218.90],
+	      RA4: [609.45, 864.57],
+	      SRA0: [2551.18, 3628.35],
+	      SRA1: [1814.17, 2551.18],
+	      SRA2: [1275.59, 1814.17],
+	      SRA3: [907.09, 1275.59],
+	      SRA4: [637.80, 907.09],
+	      EXECUTIVE: [521.86, 756.00],
+	      FOLIO: [612.00, 936.00],
+	      LEGAL: [612.00, 1008.00],
+	      LETTER: [612.00, 792.00],
+	      TABLOID: [792.00, 1224.00]
+	    };
+
+	    return PDFPage;
+
+	  })();
+
+	  module.exports = PDFPage;
+
+	}).call(this);
+
+
+/***/ },
+/* 65 */
+/***/ function(module, exports, __webpack_require__) {
+
+	// Generated by CoffeeScript 1.7.1
+	(function() {
+	  var PDFGradient, PDFLinearGradient, PDFRadialGradient, namedColors, _ref;
+
+	  _ref = __webpack_require__(66), PDFGradient = _ref.PDFGradient, PDFLinearGradient = _ref.PDFLinearGradient, PDFRadialGradient = _ref.PDFRadialGradient;
+
+	  module.exports = {
+	    initColor: function() {
+	      this._opacityRegistry = {};
+	      this._opacityCount = 0;
+	      return this._gradCount = 0;
+	    },
+	    _normalizeColor: function(color) {
+	      var hex, part;
+	      if (color instanceof PDFGradient) {
+	        return color;
+	      }
+	      if (typeof color === 'string') {
+	        if (color.charAt(0) === '#') {
+	          if (color.length === 4) {
+	            color = color.replace(/#([0-9A-F])([0-9A-F])([0-9A-F])/i, "#$1$1$2$2$3$3");
+	          }
+	          hex = parseInt(color.slice(1), 16);
+	          color = [hex >> 16, hex >> 8 & 0xff, hex & 0xff];
+	        } else if (namedColors[color]) {
+	          color = namedColors[color];
+	        }
+	      }
+	      if (Array.isArray(color)) {
+	        if (color.length === 3) {
+	          color = (function() {
+	            var _i, _len, _results;
+	            _results = [];
+	            for (_i = 0, _len = color.length; _i < _len; _i++) {
+	              part = color[_i];
+	              _results.push(part / 255);
+	            }
+	            return _results;
+	          })();
+	        } else if (color.length === 4) {
+	          color = (function() {
+	            var _i, _len, _results;
+	            _results = [];
+	            for (_i = 0, _len = color.length; _i < _len; _i++) {
+	              part = color[_i];
+	              _results.push(part / 100);
+	            }
+	            return _results;
+	          })();
+	        }
+	        return color;
+	      }
+	      return null;
+	    },
+	    _setColor: function(color, stroke) {
+	      var gstate, name, op, space;
+	      color = this._normalizeColor(color);
+	      if (!color) {
+	        return false;
+	      }
+	      if (this._sMasked) {
+	        gstate = this.ref({
+	          Type: 'ExtGState',
+	          SMask: 'None'
+	        });
+	        gstate.end();
+	        name = "Gs" + (++this._opacityCount);
+	        this.page.ext_gstates[name] = gstate;
+	        this.addContent("/" + name + " gs");
+	        this._sMasked = false;
+	      }
+	      op = stroke ? 'SCN' : 'scn';
+	      if (color instanceof PDFGradient) {
+	        this._setColorSpace('Pattern', stroke);
+	        color.apply(op);
+	      } else {
+	        space = color.length === 4 ? 'DeviceCMYK' : 'DeviceRGB';
+	        this._setColorSpace(space, stroke);
+	        color = color.join(' ');
+	        this.addContent("" + color + " " + op);
+	      }
+	      return true;
+	    },
+	    _setColorSpace: function(space, stroke) {
+	      var op;
+	      op = stroke ? 'CS' : 'cs';
+	      return this.addContent("/" + space + " " + op);
+	    },
+	    fillColor: function(color, opacity) {
+	      var set;
+	      if (opacity == null) {
+	        opacity = 1;
+	      }
+	      set = this._setColor(color, false);
+	      if (set) {
+	        this.fillOpacity(opacity);
+	      }
+	      this._fillColor = [color, opacity];
+	      return this;
+	    },
+	    strokeColor: function(color, opacity) {
+	      var set;
+	      if (opacity == null) {
+	        opacity = 1;
+	      }
+	      set = this._setColor(color, true);
+	      if (set) {
+	        this.strokeOpacity(opacity);
+	      }
+	      return this;
+	    },
+	    opacity: function(opacity) {
+	      this._doOpacity(opacity, opacity);
+	      return this;
+	    },
+	    fillOpacity: function(opacity) {
+	      this._doOpacity(opacity, null);
+	      return this;
+	    },
+	    strokeOpacity: function(opacity) {
+	      this._doOpacity(null, opacity);
+	      return this;
+	    },
+	    _doOpacity: function(fillOpacity, strokeOpacity) {
+	      var dictionary, id, key, name, _ref1;
+	      if (!((fillOpacity != null) || (strokeOpacity != null))) {
+	        return;
+	      }
+	      if (fillOpacity != null) {
+	        fillOpacity = Math.max(0, Math.min(1, fillOpacity));
+	      }
+	      if (strokeOpacity != null) {
+	        strokeOpacity = Math.max(0, Math.min(1, strokeOpacity));
+	      }
+	      key = "" + fillOpacity + "_" + strokeOpacity;
+	      if (this._opacityRegistry[key]) {
+	        _ref1 = this._opacityRegistry[key], dictionary = _ref1[0], name = _ref1[1];
+	      } else {
+	        dictionary = {
+	          Type: 'ExtGState'
+	        };
+	        if (fillOpacity != null) {
+	          dictionary.ca = fillOpacity;
+	        }
+	        if (strokeOpacity != null) {
+	          dictionary.CA = strokeOpacity;
+	        }
+	        dictionary = this.ref(dictionary);
+	        dictionary.end();
+	        id = ++this._opacityCount;
+	        name = "Gs" + id;
+	        this._opacityRegistry[key] = [dictionary, name];
+	      }
+	      this.page.ext_gstates[name] = dictionary;
+	      return this.addContent("/" + name + " gs");
+	    },
+	    linearGradient: function(x1, y1, x2, y2) {
+	      return new PDFLinearGradient(this, x1, y1, x2, y2);
+	    },
+	    radialGradient: function(x1, y1, r1, x2, y2, r2) {
+	      return new PDFRadialGradient(this, x1, y1, r1, x2, y2, r2);
+	    }
+	  };
+
+	  namedColors = {
+	    aliceblue: [240, 248, 255],
+	    antiquewhite: [250, 235, 215],
+	    aqua: [0, 255, 255],
+	    aquamarine: [127, 255, 212],
+	    azure: [240, 255, 255],
+	    beige: [245, 245, 220],
+	    bisque: [255, 228, 196],
+	    black: [0, 0, 0],
+	    blanchedalmond: [255, 235, 205],
+	    blue: [0, 0, 255],
+	    blueviolet: [138, 43, 226],
+	    brown: [165, 42, 42],
+	    burlywood: [222, 184, 135],
+	    cadetblue: [95, 158, 160],
+	    chartreuse: [127, 255, 0],
+	    chocolate: [210, 105, 30],
+	    coral: [255, 127, 80],
+	    cornflowerblue: [100, 149, 237],
+	    cornsilk: [255, 248, 220],
+	    crimson: [220, 20, 60],
+	    cyan: [0, 255, 255],
+	    darkblue: [0, 0, 139],
+	    darkcyan: [0, 139, 139],
+	    darkgoldenrod: [184, 134, 11],
+	    darkgray: [169, 169, 169],
+	    darkgreen: [0, 100, 0],
+	    darkgrey: [169, 169, 169],
+	    darkkhaki: [189, 183, 107],
+	    darkmagenta: [139, 0, 139],
+	    darkolivegreen: [85, 107, 47],
+	    darkorange: [255, 140, 0],
+	    darkorchid: [153, 50, 204],
+	    darkred: [139, 0, 0],
+	    darksalmon: [233, 150, 122],
+	    darkseagreen: [143, 188, 143],
+	    darkslateblue: [72, 61, 139],
+	    darkslategray: [47, 79, 79],
+	    darkslategrey: [47, 79, 79],
+	    darkturquoise: [0, 206, 209],
+	    darkviolet: [148, 0, 211],
+	    deeppink: [255, 20, 147],
+	    deepskyblue: [0, 191, 255],
+	    dimgray: [105, 105, 105],
+	    dimgrey: [105, 105, 105],
+	    dodgerblue: [30, 144, 255],
+	    firebrick: [178, 34, 34],
+	    floralwhite: [255, 250, 240],
+	    forestgreen: [34, 139, 34],
+	    fuchsia: [255, 0, 255],
+	    gainsboro: [220, 220, 220],
+	    ghostwhite: [248, 248, 255],
+	    gold: [255, 215, 0],
+	    goldenrod: [218, 165, 32],
+	    gray: [128, 128, 128],
+	    grey: [128, 128, 128],
+	    green: [0, 128, 0],
+	    greenyellow: [173, 255, 47],
+	    honeydew: [240, 255, 240],
+	    hotpink: [255, 105, 180],
+	    indianred: [205, 92, 92],
+	    indigo: [75, 0, 130],
+	    ivory: [255, 255, 240],
+	    khaki: [240, 230, 140],
+	    lavender: [230, 230, 250],
+	    lavenderblush: [255, 240, 245],
+	    lawngreen: [124, 252, 0],
+	    lemonchiffon: [255, 250, 205],
+	    lightblue: [173, 216, 230],
+	    lightcoral: [240, 128, 128],
+	    lightcyan: [224, 255, 255],
+	    lightgoldenrodyellow: [250, 250, 210],
+	    lightgray: [211, 211, 211],
+	    lightgreen: [144, 238, 144],
+	    lightgrey: [211, 211, 211],
+	    lightpink: [255, 182, 193],
+	    lightsalmon: [255, 160, 122],
+	    lightseagreen: [32, 178, 170],
+	    lightskyblue: [135, 206, 250],
+	    lightslategray: [119, 136, 153],
+	    lightslategrey: [119, 136, 153],
+	    lightsteelblue: [176, 196, 222],
+	    lightyellow: [255, 255, 224],
+	    lime: [0, 255, 0],
+	    limegreen: [50, 205, 50],
+	    linen: [250, 240, 230],
+	    magenta: [255, 0, 255],
+	    maroon: [128, 0, 0],
+	    mediumaquamarine: [102, 205, 170],
+	    mediumblue: [0, 0, 205],
+	    mediumorchid: [186, 85, 211],
+	    mediumpurple: [147, 112, 219],
+	    mediumseagreen: [60, 179, 113],
+	    mediumslateblue: [123, 104, 238],
+	    mediumspringgreen: [0, 250, 154],
+	    mediumturquoise: [72, 209, 204],
+	    mediumvioletred: [199, 21, 133],
+	    midnightblue: [25, 25, 112],
+	    mintcream: [245, 255, 250],
+	    mistyrose: [255, 228, 225],
+	    moccasin: [255, 228, 181],
+	    navajowhite: [255, 222, 173],
+	    navy: [0, 0, 128],
+	    oldlace: [253, 245, 230],
+	    olive: [128, 128, 0],
+	    olivedrab: [107, 142, 35],
+	    orange: [255, 165, 0],
+	    orangered: [255, 69, 0],
+	    orchid: [218, 112, 214],
+	    palegoldenrod: [238, 232, 170],
+	    palegreen: [152, 251, 152],
+	    paleturquoise: [175, 238, 238],
+	    palevioletred: [219, 112, 147],
+	    papayawhip: [255, 239, 213],
+	    peachpuff: [255, 218, 185],
+	    peru: [205, 133, 63],
+	    pink: [255, 192, 203],
+	    plum: [221, 160, 221],
+	    powderblue: [176, 224, 230],
+	    purple: [128, 0, 128],
+	    red: [255, 0, 0],
+	    rosybrown: [188, 143, 143],
+	    royalblue: [65, 105, 225],
+	    saddlebrown: [139, 69, 19],
+	    salmon: [250, 128, 114],
+	    sandybrown: [244, 164, 96],
+	    seagreen: [46, 139, 87],
+	    seashell: [255, 245, 238],
+	    sienna: [160, 82, 45],
+	    silver: [192, 192, 192],
+	    skyblue: [135, 206, 235],
+	    slateblue: [106, 90, 205],
+	    slategray: [112, 128, 144],
+	    slategrey: [112, 128, 144],
+	    snow: [255, 250, 250],
+	    springgreen: [0, 255, 127],
+	    steelblue: [70, 130, 180],
+	    tan: [210, 180, 140],
+	    teal: [0, 128, 128],
+	    thistle: [216, 191, 216],
+	    tomato: [255, 99, 71],
+	    turquoise: [64, 224, 208],
+	    violet: [238, 130, 238],
+	    wheat: [245, 222, 179],
+	    white: [255, 255, 255],
+	    whitesmoke: [245, 245, 245],
+	    yellow: [255, 255, 0],
+	    yellowgreen: [154, 205, 50]
+	  };
+
+	}).call(this);
+
+
+/***/ },
+/* 66 */
+/***/ function(module, exports) {
+
+	// Generated by CoffeeScript 1.7.1
+	(function() {
+	  var PDFGradient, PDFLinearGradient, PDFRadialGradient,
+	    __hasProp = {}.hasOwnProperty,
+	    __extends = function(child, parent) { for (var key in parent) { if (__hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; };
+
+	  PDFGradient = (function() {
+	    function PDFGradient(doc) {
+	      this.doc = doc;
+	      this.stops = [];
+	      this.embedded = false;
+	      this.transform = [1, 0, 0, 1, 0, 0];
+	      this._colorSpace = 'DeviceRGB';
+	    }
+
+	    PDFGradient.prototype.stop = function(pos, color, opacity) {
+	      if (opacity == null) {
+	        opacity = 1;
+	      }
+	      opacity = Math.max(0, Math.min(1, opacity));
+	      this.stops.push([pos, this.doc._normalizeColor(color), opacity]);
+	      return this;
+	    };
+
+	    PDFGradient.prototype.embed = function() {
+	      var bounds, dx, dy, encode, fn, form, grad, group, gstate, i, last, m, m0, m1, m11, m12, m2, m21, m22, m3, m4, m5, name, pattern, resources, sMask, shader, stop, stops, v, _i, _j, _len, _ref, _ref1, _ref2;
+	      if (this.embedded || this.stops.length === 0) {
+	        return;
+	      }
+	      this.embedded = true;
+	      last = this.stops[this.stops.length - 1];
+	      if (last[0] < 1) {
+	        this.stops.push([1, last[1], last[2]]);
+	      }
+	      bounds = [];
+	      encode = [];
+	      stops = [];
+	      for (i = _i = 0, _ref = this.stops.length - 1; 0 <= _ref ? _i < _ref : _i > _ref; i = 0 <= _ref ? ++_i : --_i) {
+	        encode.push(0, 1);
+	        if (i + 2 !== this.stops.length) {
+	          bounds.push(this.stops[i + 1][0]);
+	        }
+	        fn = this.doc.ref({
+	          FunctionType: 2,
+	          Domain: [0, 1],
+	          C0: this.stops[i + 0][1],
+	          C1: this.stops[i + 1][1],
+	          N: 1
+	        });
+	        stops.push(fn);
+	        fn.end();
+	      }
+	      if (stops.length === 1) {
+	        fn = stops[0];
+	      } else {
+	        fn = this.doc.ref({
+	          FunctionType: 3,
+	          Domain: [0, 1],
+	          Functions: stops,
+	          Bounds: bounds,
+	          Encode: encode
+	        });
+	        fn.end();
+	      }
+	      this.id = 'Sh' + (++this.doc._gradCount);
+	      m = this.doc._ctm.slice();
+	      m0 = m[0], m1 = m[1], m2 = m[2], m3 = m[3], m4 = m[4], m5 = m[5];
+	      _ref1 = this.transform, m11 = _ref1[0], m12 = _ref1[1], m21 = _ref1[2], m22 = _ref1[3], dx = _ref1[4], dy = _ref1[5];
+	      m[0] = m0 * m11 + m2 * m12;
+	      m[1] = m1 * m11 + m3 * m12;
+	      m[2] = m0 * m21 + m2 * m22;
+	      m[3] = m1 * m21 + m3 * m22;
+	      m[4] = m0 * dx + m2 * dy + m4;
+	      m[5] = m1 * dx + m3 * dy + m5;
+	      shader = this.shader(fn);
+	      shader.end();
+	      pattern = this.doc.ref({
+	        Type: 'Pattern',
+	        PatternType: 2,
+	        Shading: shader,
+	        Matrix: (function() {
+	          var _j, _len, _results;
+	          _results = [];
+	          for (_j = 0, _len = m.length; _j < _len; _j++) {
+	            v = m[_j];
+	            _results.push(+v.toFixed(5));
+	          }
+	          return _results;
+	        })()
+	      });
+	      this.doc.page.patterns[this.id] = pattern;
+	      pattern.end();
+	      if (this.stops.some(function(stop) {
+	        return stop[2] < 1;
+	      })) {
+	        grad = this.opacityGradient();
+	        grad._colorSpace = 'DeviceGray';
+	        _ref2 = this.stops;
+	        for (_j = 0, _len = _ref2.length; _j < _len; _j++) {
+	          stop = _ref2[_j];
+	          grad.stop(stop[0], [stop[2]]);
+	        }
+	        grad = grad.embed();
+	        group = this.doc.ref({
+	          Type: 'Group',
+	          S: 'Transparency',
+	          CS: 'DeviceGray'
+	        });
+	        group.end();
+	        resources = this.doc.ref({
+	          ProcSet: ['PDF', 'Text', 'ImageB', 'ImageC', 'ImageI'],
+	          Shading: {
+	            Sh1: grad.data.Shading
+	          }
+	        });
+	        resources.end();
+	        form = this.doc.ref({
+	          Type: 'XObject',
+	          Subtype: 'Form',
+	          FormType: 1,
+	          BBox: [0, 0, this.doc.page.width, this.doc.page.height],
+	          Group: group,
+	          Resources: resources
+	        });
+	        form.end("/Sh1 sh");
+	        sMask = this.doc.ref({
+	          Type: 'Mask',
+	          S: 'Luminosity',
+	          G: form
+	        });
+	        sMask.end();
+	        gstate = this.doc.ref({
+	          Type: 'ExtGState',
+	          SMask: sMask
+	        });
+	        this.opacity_id = ++this.doc._opacityCount;
+	        name = "Gs" + this.opacity_id;
+	        this.doc.page.ext_gstates[name] = gstate;
+	        gstate.end();
+	      }
+	      return pattern;
+	    };
+
+	    PDFGradient.prototype.apply = function(op) {
+	      if (!this.embedded) {
+	        this.embed();
+	      }
+	      this.doc.addContent("/" + this.id + " " + op);
+	      if (this.opacity_id) {
+	        this.doc.addContent("/Gs" + this.opacity_id + " gs");
+	        return this.doc._sMasked = true;
+	      }
+	    };
+
+	    return PDFGradient;
+
+	  })();
+
+	  PDFLinearGradient = (function(_super) {
+	    __extends(PDFLinearGradient, _super);
+
+	    function PDFLinearGradient(doc, x1, y1, x2, y2) {
+	      this.doc = doc;
+	      this.x1 = x1;
+	      this.y1 = y1;
+	      this.x2 = x2;
+	      this.y2 = y2;
+	      PDFLinearGradient.__super__.constructor.apply(this, arguments);
+	    }
+
+	    PDFLinearGradient.prototype.shader = function(fn) {
+	      return this.doc.ref({
+	        ShadingType: 2,
+	        ColorSpace: this._colorSpace,
+	        Coords: [this.x1, this.y1, this.x2, this.y2],
+	        Function: fn,
+	        Extend: [true, true]
+	      });
+	    };
+
+	    PDFLinearGradient.prototype.opacityGradient = function() {
+	      return new PDFLinearGradient(this.doc, this.x1, this.y1, this.x2, this.y2);
+	    };
+
+	    return PDFLinearGradient;
+
+	  })(PDFGradient);
+
+	  PDFRadialGradient = (function(_super) {
+	    __extends(PDFRadialGradient, _super);
+
+	    function PDFRadialGradient(doc, x1, y1, r1, x2, y2, r2) {
+	      this.doc = doc;
+	      this.x1 = x1;
+	      this.y1 = y1;
+	      this.r1 = r1;
+	      this.x2 = x2;
+	      this.y2 = y2;
+	      this.r2 = r2;
+	      PDFRadialGradient.__super__.constructor.apply(this, arguments);
+	    }
+
+	    PDFRadialGradient.prototype.shader = function(fn) {
+	      return this.doc.ref({
+	        ShadingType: 3,
+	        ColorSpace: this._colorSpace,
+	        Coords: [this.x1, this.y1, this.r1, this.x2, this.y2, this.r2],
+	        Function: fn,
+	        Extend: [true, true]
+	      });
+	    };
+
+	    PDFRadialGradient.prototype.opacityGradient = function() {
+	      return new PDFRadialGradient(this.doc, this.x1, this.y1, this.r1, this.x2, this.y2, this.r2);
+	    };
+
+	    return PDFRadialGradient;
+
+	  })(PDFGradient);
+
+	  module.exports = {
+	    PDFGradient: PDFGradient,
+	    PDFLinearGradient: PDFLinearGradient,
+	    PDFRadialGradient: PDFRadialGradient
+	  };
+
+	}).call(this);
+
+
+/***/ },
+/* 67 */
+/***/ function(module, exports, __webpack_require__) {
+
+	// Generated by CoffeeScript 1.7.1
+	(function() {
+	  var KAPPA, SVGPath,
+	    __slice = [].slice;
+
+	  SVGPath = __webpack_require__(68);
+
+	  KAPPA = 4.0 * ((Math.sqrt(2) - 1.0) / 3.0);
+
+	  module.exports = {
+	    initVector: function() {
+	      this._ctm = [1, 0, 0, 1, 0, 0];
+	      return this._ctmStack = [];
+	    },
+	    save: function() {
+	      this._ctmStack.push(this._ctm.slice());
+	      return this.addContent('q');
+	    },
+	    restore: function() {
+	      this._ctm = this._ctmStack.pop() || [1, 0, 0, 1, 0, 0];
+	      return this.addContent('Q');
+	    },
+	    closePath: function() {
+	      return this.addContent('h');
+	    },
+	    lineWidth: function(w) {
+	      return this.addContent("" + w + " w");
+	    },
+	    _CAP_STYLES: {
+	      BUTT: 0,
+	      ROUND: 1,
+	      SQUARE: 2
+	    },
+	    lineCap: function(c) {
+	      if (typeof c === 'string') {
+	        c = this._CAP_STYLES[c.toUpperCase()];
+	      }
+	      return this.addContent("" + c + " J");
+	    },
+	    _JOIN_STYLES: {
+	      MITER: 0,
+	      ROUND: 1,
+	      BEVEL: 2
+	    },
+	    lineJoin: function(j) {
+	      if (typeof j === 'string') {
+	        j = this._JOIN_STYLES[j.toUpperCase()];
+	      }
+	      return this.addContent("" + j + " j");
+	    },
+	    miterLimit: function(m) {
+	      return this.addContent("" + m + " M");
+	    },
+	    dash: function(length, options) {
+	      var phase, space, _ref;
+	      if (options == null) {
+	        options = {};
+	      }
+	      if (length == null) {
+	        return this;
+	      }
+	      space = (_ref = options.space) != null ? _ref : length;
+	      phase = options.phase || 0;
+	      return this.addContent("[" + length + " " + space + "] " + phase + " d");
+	    },
+	    undash: function() {
+	      return this.addContent("[] 0 d");
+	    },
+	    moveTo: function(x, y) {
+	      return this.addContent("" + x + " " + y + " m");
+	    },
+	    lineTo: function(x, y) {
+	      return this.addContent("" + x + " " + y + " l");
+	    },
+	    bezierCurveTo: function(cp1x, cp1y, cp2x, cp2y, x, y) {
+	      return this.addContent("" + cp1x + " " + cp1y + " " + cp2x + " " + cp2y + " " + x + " " + y + " c");
+	    },
+	    quadraticCurveTo: function(cpx, cpy, x, y) {
+	      return this.addContent("" + cpx + " " + cpy + " " + x + " " + y + " v");
+	    },
+	    rect: function(x, y, w, h) {
+	      return this.addContent("" + x + " " + y + " " + w + " " + h + " re");
+	    },
+	    roundedRect: function(x, y, w, h, r) {
+	      if (r == null) {
+	        r = 0;
+	      }
+	      this.moveTo(x + r, y);
+	      this.lineTo(x + w - r, y);
+	      this.quadraticCurveTo(x + w, y, x + w, y + r);
+	      this.lineTo(x + w, y + h - r);
+	      this.quadraticCurveTo(x + w, y + h, x + w - r, y + h);
+	      this.lineTo(x + r, y + h);
+	      this.quadraticCurveTo(x, y + h, x, y + h - r);
+	      this.lineTo(x, y + r);
+	      return this.quadraticCurveTo(x, y, x + r, y);
+	    },
+	    ellipse: function(x, y, r1, r2) {
+	      var ox, oy, xe, xm, ye, ym;
+	      if (r2 == null) {
+	        r2 = r1;
+	      }
+	      x -= r1;
+	      y -= r2;
+	      ox = r1 * KAPPA;
+	      oy = r2 * KAPPA;
+	      xe = x + r1 * 2;
+	      ye = y + r2 * 2;
+	      xm = x + r1;
+	      ym = y + r2;
+	      this.moveTo(x, ym);
+	      this.bezierCurveTo(x, ym - oy, xm - ox, y, xm, y);
+	      this.bezierCurveTo(xm + ox, y, xe, ym - oy, xe, ym);
+	      this.bezierCurveTo(xe, ym + oy, xm + ox, ye, xm, ye);
+	      this.bezierCurveTo(xm - ox, ye, x, ym + oy, x, ym);
+	      return this.closePath();
+	    },
+	    circle: function(x, y, radius) {
+	      return this.ellipse(x, y, radius);
+	    },
+	    polygon: function() {
+	      var point, points, _i, _len;
+	      points = 1 <= arguments.length ? __slice.call(arguments, 0) : [];
+	      this.moveTo.apply(this, points.shift());
+	      for (_i = 0, _len = points.length; _i < _len; _i++) {
+	        point = points[_i];
+	        this.lineTo.apply(this, point);
+	      }
+	      return this.closePath();
+	    },
+	    path: function(path) {
+	      SVGPath.apply(this, path);
+	      return this;
+	    },
+	    _windingRule: function(rule) {
+	      if (/even-?odd/.test(rule)) {
+	        return '*';
+	      }
+	      return '';
+	    },
+	    fill: function(color, rule) {
+	      if (/(even-?odd)|(non-?zero)/.test(color)) {
+	        rule = color;
+	        color = null;
+	      }
+	      if (color) {
+	        this.fillColor(color);
+	      }
+	      return this.addContent('f' + this._windingRule(rule));
+	    },
+	    stroke: function(color) {
+	      if (color) {
+	        this.strokeColor(color);
+	      }
+	      return this.addContent('S');
+	    },
+	    fillAndStroke: function(fillColor, strokeColor, rule) {
+	      var isFillRule;
+	      if (strokeColor == null) {
+	        strokeColor = fillColor;
+	      }
+	      isFillRule = /(even-?odd)|(non-?zero)/;
+	      if (isFillRule.test(fillColor)) {
+	        rule = fillColor;
+	        fillColor = null;
+	      }
+	      if (isFillRule.test(strokeColor)) {
+	        rule = strokeColor;
+	        strokeColor = fillColor;
+	      }
+	      if (fillColor) {
+	        this.fillColor(fillColor);
+	        this.strokeColor(strokeColor);
+	      }
+	      return this.addContent('B' + this._windingRule(rule));
+	    },
+	    clip: function(rule) {
+	      return this.addContent('W' + this._windingRule(rule) + ' n');
+	    },
+	    transform: function(m11, m12, m21, m22, dx, dy) {
+	      var m, m0, m1, m2, m3, m4, m5, v, values;
+	      m = this._ctm;
+	      m0 = m[0], m1 = m[1], m2 = m[2], m3 = m[3], m4 = m[4], m5 = m[5];
+	      m[0] = m0 * m11 + m2 * m12;
+	      m[1] = m1 * m11 + m3 * m12;
+	      m[2] = m0 * m21 + m2 * m22;
+	      m[3] = m1 * m21 + m3 * m22;
+	      m[4] = m0 * dx + m2 * dy + m4;
+	      m[5] = m1 * dx + m3 * dy + m5;
+	      values = ((function() {
+	        var _i, _len, _ref, _results;
+	        _ref = [m11, m12, m21, m22, dx, dy];
+	        _results = [];
+	        for (_i = 0, _len = _ref.length; _i < _len; _i++) {
+	          v = _ref[_i];
+	          _results.push(+v.toFixed(5));
+	        }
+	        return _results;
+	      })()).join(' ');
+	      return this.addContent("" + values + " cm");
+	    },
+	    translate: function(x, y) {
+	      return this.transform(1, 0, 0, 1, x, y);
+	    },
+	    rotate: function(angle, options) {
+	      var cos, rad, sin, x, x1, y, y1, _ref;
+	      if (options == null) {
+	        options = {};
+	      }
+	      rad = angle * Math.PI / 180;
+	      cos = Math.cos(rad);
+	      sin = Math.sin(rad);
+	      x = y = 0;
+	      if (options.origin != null) {
+	        _ref = options.origin, x = _ref[0], y = _ref[1];
+	        x1 = x * cos - y * sin;
+	        y1 = x * sin + y * cos;
+	        x -= x1;
+	        y -= y1;
+	      }
+	      return this.transform(cos, sin, -sin, cos, x, y);
+	    },
+	    scale: function(xFactor, yFactor, options) {
+	      var x, y, _ref;
+	      if (yFactor == null) {
+	        yFactor = xFactor;
+	      }
+	      if (options == null) {
+	        options = {};
+	      }
+	      if (arguments.length === 2) {
+	        yFactor = xFactor;
+	        options = yFactor;
+	      }
+	      x = y = 0;
+	      if (options.origin != null) {
+	        _ref = options.origin, x = _ref[0], y = _ref[1];
+	        x -= xFactor * x;
+	        y -= yFactor * y;
+	      }
+	      return this.transform(xFactor, 0, 0, yFactor, x, y);
+	    }
+	  };
+
+	}).call(this);
+
+
+/***/ },
+/* 68 */
+/***/ function(module, exports) {
+
+	// Generated by CoffeeScript 1.7.1
+	(function() {
+	  var SVGPath;
+
+	  SVGPath = (function() {
+	    var apply, arcToSegments, cx, cy, parameters, parse, px, py, runners, segmentToBezier, solveArc, sx, sy;
+
+	    function SVGPath() {}
+
+	    SVGPath.apply = function(doc, path) {
+	      var commands;
+	      commands = parse(path);
+	      return apply(commands, doc);
+	    };
+
+	    parameters = {
+	      A: 7,
+	      a: 7,
+	      C: 6,
+	      c: 6,
+	      H: 1,
+	      h: 1,
+	      L: 2,
+	      l: 2,
+	      M: 2,
+	      m: 2,
+	      Q: 4,
+	      q: 4,
+	      S: 4,
+	      s: 4,
+	      T: 2,
+	      t: 2,
+	      V: 1,
+	      v: 1,
+	      Z: 0,
+	      z: 0
+	    };
+
+	    parse = function(path) {
+	      var args, c, cmd, curArg, foundDecimal, params, ret, _i, _len;
+	      ret = [];
+	      args = [];
+	      curArg = "";
+	      foundDecimal = false;
+	      params = 0;
+	      for (_i = 0, _len = path.length; _i < _len; _i++) {
+	        c = path[_i];
+	        if (parameters[c] != null) {
+	          params = parameters[c];
+	          if (cmd) {
+	            if (curArg.length > 0) {
+	              args[args.length] = +curArg;
+	            }
+	            ret[ret.length] = {
+	              cmd: cmd,
+	              args: args
+	            };
+	            args = [];
+	            curArg = "";
+	            foundDecimal = false;
+	          }
+	          cmd = c;
+	        } else if ((c === " " || c === ",") || (c === "-" && curArg.length > 0 && curArg[curArg.length - 1] !== 'e') || (c === "." && foundDecimal)) {
+	          if (curArg.length === 0) {
+	            continue;
+	          }
+	          if (args.length === params) {
+	            ret[ret.length] = {
+	              cmd: cmd,
+	              args: args
+	            };
+	            args = [+curArg];
+	            if (cmd === "M") {
+	              cmd = "L";
+	            }
+	            if (cmd === "m") {
+	              cmd = "l";
+	            }
+	          } else {
+	            args[args.length] = +curArg;
+	          }
+	          foundDecimal = c === ".";
+	          curArg = c === '-' || c === '.' ? c : '';
+	        } else {
+	          curArg += c;
+	          if (c === '.') {
+	            foundDecimal = true;
+	          }
+	        }
+	      }
+	      if (curArg.length > 0) {
+	        if (args.length === params) {
+	          ret[ret.length] = {
+	            cmd: cmd,
+	            args: args
+	          };
+	          args = [+curArg];
+	          if (cmd === "M") {
+	            cmd = "L";
+	          }
+	          if (cmd === "m") {
+	            cmd = "l";
+	          }
+	        } else {
+	          args[args.length] = +curArg;
+	        }
+	      }
+	      ret[ret.length] = {
+	        cmd: cmd,
+	        args: args
+	      };
+	      return ret;
+	    };
+
+	    cx = cy = px = py = sx = sy = 0;
+
+	    apply = function(commands, doc) {
+	      var c, i, _i, _len, _name;
+	      cx = cy = px = py = sx = sy = 0;
+	      for (i = _i = 0, _len = commands.length; _i < _len; i = ++_i) {
+	        c = commands[i];
+	        if (typeof runners[_name = c.cmd] === "function") {
+	          runners[_name](doc, c.args);
+	        }
+	      }
+	      return cx = cy = px = py = 0;
+	    };
+
+	    runners = {
+	      M: function(doc, a) {
+	        cx = a[0];
+	        cy = a[1];
+	        px = py = null;
+	        sx = cx;
+	        sy = cy;
+	        return doc.moveTo(cx, cy);
+	      },
+	      m: function(doc, a) {
+	        cx += a[0];
+	        cy += a[1];
+	        px = py = null;
+	        sx = cx;
+	        sy = cy;
+	        return doc.moveTo(cx, cy);
+	      },
+	      C: function(doc, a) {
+	        cx = a[4];
+	        cy = a[5];
+	        px = a[2];
+	        py = a[3];
+	        return doc.bezierCurveTo.apply(doc, a);
+	      },
+	      c: function(doc, a) {
+	        doc.bezierCurveTo(a[0] + cx, a[1] + cy, a[2] + cx, a[3] + cy, a[4] + cx, a[5] + cy);
+	        px = cx + a[2];
+	        py = cy + a[3];
+	        cx += a[4];
+	        return cy += a[5];
+	      },
+	      S: function(doc, a) {
+	        if (px === null) {
+	          px = cx;
+	          py = cy;
+	        }
+	        doc.bezierCurveTo(cx - (px - cx), cy - (py - cy), a[0], a[1], a[2], a[3]);
+	        px = a[0];
+	        py = a[1];
+	        cx = a[2];
+	        return cy = a[3];
+	      },
+	      s: function(doc, a) {
+	        if (px === null) {
+	          px = cx;
+	          py = cy;
+	        }
+	        doc.bezierCurveTo(cx - (px - cx), cy - (py - cy), cx + a[0], cy + a[1], cx + a[2], cy + a[3]);
+	        px = cx + a[0];
+	        py = cy + a[1];
+	        cx += a[2];
+	        return cy += a[3];
+	      },
+	      Q: function(doc, a) {
+	        px = a[0];
+	        py = a[1];
+	        cx = a[2];
+	        cy = a[3];
+	        return doc.quadraticCurveTo(a[0], a[1], cx, cy);
+	      },
+	      q: function(doc, a) {
+	        doc.quadraticCurveTo(a[0] + cx, a[1] + cy, a[2] + cx, a[3] + cy);
+	        px = cx + a[0];
+	        py = cy + a[1];
+	        cx += a[2];
+	        return cy += a[3];
+	      },
+	      T: function(doc, a) {
+	        if (px === null) {
+	          px = cx;
+	          py = cy;
+	        } else {
+	          px = cx - (px - cx);
+	          py = cy - (py - cy);
+	        }
+	        doc.quadraticCurveTo(px, py, a[0], a[1]);
+	        px = cx - (px - cx);
+	        py = cy - (py - cy);
+	        cx = a[0];
+	        return cy = a[1];
+	      },
+	      t: function(doc, a) {
+	        if (px === null) {
+	          px = cx;
+	          py = cy;
+	        } else {
+	          px = cx - (px - cx);
+	          py = cy - (py - cy);
+	        }
+	        doc.quadraticCurveTo(px, py, cx + a[0], cy + a[1]);
+	        cx += a[0];
+	        return cy += a[1];
+	      },
+	      A: function(doc, a) {
+	        solveArc(doc, cx, cy, a);
+	        cx = a[5];
+	        return cy = a[6];
+	      },
+	      a: function(doc, a) {
+	        a[5] += cx;
+	        a[6] += cy;
+	        solveArc(doc, cx, cy, a);
+	        cx = a[5];
+	        return cy = a[6];
+	      },
+	      L: function(doc, a) {
+	        cx = a[0];
+	        cy = a[1];
+	        px = py = null;
+	        return doc.lineTo(cx, cy);
+	      },
+	      l: function(doc, a) {
+	        cx += a[0];
+	        cy += a[1];
+	        px = py = null;
+	        return doc.lineTo(cx, cy);
+	      },
+	      H: function(doc, a) {
+	        cx = a[0];
+	        px = py = null;
+	        return doc.lineTo(cx, cy);
+	      },
+	      h: function(doc, a) {
+	        cx += a[0];
+	        px = py = null;
+	        return doc.lineTo(cx, cy);
+	      },
+	      V: function(doc, a) {
+	        cy = a[0];
+	        px = py = null;
+	        return doc.lineTo(cx, cy);
+	      },
+	      v: function(doc, a) {
+	        cy += a[0];
+	        px = py = null;
+	        return doc.lineTo(cx, cy);
+	      },
+	      Z: function(doc) {
+	        doc.closePath();
+	        cx = sx;
+	        return cy = sy;
+	      },
+	      z: function(doc) {
+	        doc.closePath();
+	        cx = sx;
+	        return cy = sy;
+	      }
+	    };
+
+	    solveArc = function(doc, x, y, coords) {
+	      var bez, ex, ey, large, rot, rx, ry, seg, segs, sweep, _i, _len, _results;
+	      rx = coords[0], ry = coords[1], rot = coords[2], large = coords[3], sweep = coords[4], ex = coords[5], ey = coords[6];
+	      segs = arcToSegments(ex, ey, rx, ry, large, sweep, rot, x, y);
+	      _results = [];
+	      for (_i = 0, _len = segs.length; _i < _len; _i++) {
+	        seg = segs[_i];
+	        bez = segmentToBezier.apply(null, seg);
+	        _results.push(doc.bezierCurveTo.apply(doc, bez));
+	      }
+	      return _results;
+	    };
+
+	    arcToSegments = function(x, y, rx, ry, large, sweep, rotateX, ox, oy) {
+	      var a00, a01, a10, a11, cos_th, d, i, pl, result, segments, sfactor, sfactor_sq, sin_th, th, th0, th1, th2, th3, th_arc, x0, x1, xc, y0, y1, yc, _i;
+	      th = rotateX * (Math.PI / 180);
+	      sin_th = Math.sin(th);
+	      cos_th = Math.cos(th);
+	      rx = Math.abs(rx);
+	      ry = Math.abs(ry);
+	      px = cos_th * (ox - x) * 0.5 + sin_th * (oy - y) * 0.5;
+	      py = cos_th * (oy - y) * 0.5 - sin_th * (ox - x) * 0.5;
+	      pl = (px * px) / (rx * rx) + (py * py) / (ry * ry);
+	      if (pl > 1) {
+	        pl = Math.sqrt(pl);
+	        rx *= pl;
+	        ry *= pl;
+	      }
+	      a00 = cos_th / rx;
+	      a01 = sin_th / rx;
+	      a10 = (-sin_th) / ry;
+	      a11 = cos_th / ry;
+	      x0 = a00 * ox + a01 * oy;
+	      y0 = a10 * ox + a11 * oy;
+	      x1 = a00 * x + a01 * y;
+	      y1 = a10 * x + a11 * y;
+	      d = (x1 - x0) * (x1 - x0) + (y1 - y0) * (y1 - y0);
+	      sfactor_sq = 1 / d - 0.25;
+	      if (sfactor_sq < 0) {
+	        sfactor_sq = 0;
+	      }
+	      sfactor = Math.sqrt(sfactor_sq);
+	      if (sweep === large) {
+	        sfactor = -sfactor;
+	      }
+	      xc = 0.5 * (x0 + x1) - sfactor * (y1 - y0);
+	      yc = 0.5 * (y0 + y1) + sfactor * (x1 - x0);
+	      th0 = Math.atan2(y0 - yc, x0 - xc);
+	      th1 = Math.atan2(y1 - yc, x1 - xc);
+	      th_arc = th1 - th0;
+	      if (th_arc < 0 && sweep === 1) {
+	        th_arc += 2 * Math.PI;
+	      } else if (th_arc > 0 && sweep === 0) {
+	        th_arc -= 2 * Math.PI;
+	      }
+	      segments = Math.ceil(Math.abs(th_arc / (Math.PI * 0.5 + 0.001)));
+	      result = [];
+	      for (i = _i = 0; 0 <= segments ? _i < segments : _i > segments; i = 0 <= segments ? ++_i : --_i) {
+	        th2 = th0 + i * th_arc / segments;
+	        th3 = th0 + (i + 1) * th_arc / segments;
+	        result[i] = [xc, yc, th2, th3, rx, ry, sin_th, cos_th];
+	      }
+	      return result;
+	    };
+
+	    segmentToBezier = function(cx, cy, th0, th1, rx, ry, sin_th, cos_th) {
+	      var a00, a01, a10, a11, t, th_half, x1, x2, x3, y1, y2, y3;
+	      a00 = cos_th * rx;
+	      a01 = -sin_th * ry;
+	      a10 = sin_th * rx;
+	      a11 = cos_th * ry;
+	      th_half = 0.5 * (th1 - th0);
+	      t = (8 / 3) * Math.sin(th_half * 0.5) * Math.sin(th_half * 0.5) / Math.sin(th_half);
+	      x1 = cx + Math.cos(th0) - t * Math.sin(th0);
+	      y1 = cy + Math.sin(th0) + t * Math.cos(th0);
+	      x3 = cx + Math.cos(th1);
+	      y3 = cy + Math.sin(th1);
+	      x2 = x3 + t * Math.sin(th1);
+	      y2 = y3 - t * Math.cos(th1);
+	      return [a00 * x1 + a01 * y1, a10 * x1 + a11 * y1, a00 * x2 + a01 * y2, a10 * x2 + a11 * y2, a00 * x3 + a01 * y3, a10 * x3 + a11 * y3];
+	    };
+
+	    return SVGPath;
+
+	  })();
+
+	  module.exports = SVGPath;
+
+	}).call(this);
+
+
+/***/ },
+/* 69 */
+/***/ function(module, exports, __webpack_require__) {
+
+	// Generated by CoffeeScript 1.7.1
+	(function() {
+	  var PDFFont;
+
+	  PDFFont = __webpack_require__(70);
+
+	  module.exports = {
+	    initFonts: function() {
+	      this._fontFamilies = {};
+	      this._fontCount = 0;
+	      this._fontSize = 12;
+	      this._font = null;
+	      this._registeredFonts = {};
+	      
+	    },
+	    font: function(src, family, size) {
+	      var cacheKey, font, id, _ref;
+	      if (typeof family === 'number') {
+	        size = family;
+	        family = null;
+	      }
+	      if (typeof src === 'string' && this._registeredFonts[src]) {
+	        cacheKey = src;
+	        _ref = this._registeredFonts[src], src = _ref.src, family = _ref.family;
+	      } else {
+	        cacheKey = family || src;
+	        if (typeof cacheKey !== 'string') {
+	          cacheKey = null;
+	        }
+	      }
+	      if (size != null) {
+	        this.fontSize(size);
+	      }
+	      if (font = this._fontFamilies[cacheKey]) {
+	        this._font = font;
+	        return this;
+	      }
+	      id = 'F' + (++this._fontCount);
+	      this._font = new PDFFont(this, src, family, id);
+	      if (font = this._fontFamilies[this._font.name]) {
+	        this._font = font;
+	        return this;
+	      }
+	      if (cacheKey) {
+	        this._fontFamilies[cacheKey] = this._font;
+	      }
+	      this._fontFamilies[this._font.name] = this._font;
+	      return this;
+	    },
+	    fontSize: function(_fontSize) {
+	      this._fontSize = _fontSize;
+	      return this;
+	    },
+	    currentLineHeight: function(includeGap) {
+	      if (includeGap == null) {
+	        includeGap = false;
+	      }
+	      return this._font.lineHeight(this._fontSize, includeGap);
+	    },
+	    registerFont: function(name, src, family) {
+	      this._registeredFonts[name] = {
+	        src: src,
+	        family: family
+	      };
+	      return this;
+	    }
+	  };
+
+	}).call(this);
+
+
+/***/ },
+/* 70 */
+/***/ function(module, exports, __webpack_require__) {
+
+	/* WEBPACK VAR INJECTION */(function(Buffer, __dirname) {// Generated by CoffeeScript 1.7.1
+
+	/*
+	PDFFont - embeds fonts in PDF documents
+	By Devon Govett
+	 */
+
+	(function() {
+	  var AFMFont, PDFFont, Subset, TTFFont, fs;
+
+	  TTFFont = __webpack_require__(71);
+
+	  AFMFont = __webpack_require__(87);
+
+	  Subset = __webpack_require__(88);
+
+	  fs = __webpack_require__(44);
+
+	  PDFFont = (function() {
+	    var STANDARD_FONTS, toUnicodeCmap;
+
+	    function PDFFont(document, src, family, id) {
+	      this.document = document;
+	      this.id = id;
+	      if (typeof src === 'string') {
+	        if (src in STANDARD_FONTS) {
+	          this.isAFM = true;
+	          this.font = new AFMFont(STANDARD_FONTS[src]());
+	          this.registerAFM(src);
+	          return;
+	        } else if (/\.(ttf|ttc)$/i.test(src)) {
+	          this.font = TTFFont.open(src, family);
+	        } else if (/\.dfont$/i.test(src)) {
+	          this.font = TTFFont.fromDFont(src, family);
+	        } else {
+	          throw new Error('Not a supported font format or standard PDF font.');
+	        }
+	      } else if (Buffer.isBuffer(src)) {
+	        this.font = TTFFont.fromBuffer(src, family);
+	      } else if (src instanceof Uint8Array) {
+	        this.font = TTFFont.fromBuffer(new Buffer(src), family);
+	      } else if (src instanceof ArrayBuffer) {
+	        this.font = TTFFont.fromBuffer(new Buffer(new Uint8Array(src)), family);
+	      } else {
+	        throw new Error('Not a supported font format or standard PDF font.');
+	      }
+	      this.subset = new Subset(this.font);
+	      this.registerTTF();
+	    }
+
+	    STANDARD_FONTS = {
+	      "Courier": function() {
+	        return fs.readFileSync(__dirname + "/font/data/Courier.afm", 'utf8');
+	      },
+	      "Courier-Bold": function() {
+	        return fs.readFileSync(__dirname + "/font/data/Courier-Bold.afm", 'utf8');
+	      },
+	      "Courier-Oblique": function() {
+	        return fs.readFileSync(__dirname + "/font/data/Courier-Oblique.afm", 'utf8');
+	      },
+	      "Courier-BoldOblique": function() {
+	        return fs.readFileSync(__dirname + "/font/data/Courier-BoldOblique.afm", 'utf8');
+	      },
+	      "Helvetica": function() {
+	        return fs.readFileSync(__dirname + "/font/data/Helvetica.afm", 'utf8');
+	      },
+	      "Helvetica-Bold": function() {
+	        return fs.readFileSync(__dirname + "/font/data/Helvetica-Bold.afm", 'utf8');
+	      },
+	      "Helvetica-Oblique": function() {
+	        return fs.readFileSync(__dirname + "/font/data/Helvetica-Oblique.afm", 'utf8');
+	      },
+	      "Helvetica-BoldOblique": function() {
+	        return fs.readFileSync(__dirname + "/font/data/Helvetica-BoldOblique.afm", 'utf8');
+	      },
+	      "Times-Roman": function() {
+	        return fs.readFileSync(__dirname + "/font/data/Times-Roman.afm", 'utf8');
+	      },
+	      "Times-Bold": function() {
+	        return fs.readFileSync(__dirname + "/font/data/Times-Bold.afm", 'utf8');
+	      },
+	      "Times-Italic": function() {
+	        return fs.readFileSync(__dirname + "/font/data/Times-Italic.afm", 'utf8');
+	      },
+	      "Times-BoldItalic": function() {
+	        return fs.readFileSync(__dirname + "/font/data/Times-BoldItalic.afm", 'utf8');
+	      },
+	      "Symbol": function() {
+	        return fs.readFileSync(__dirname + "/font/data/Symbol.afm", 'utf8');
+	      },
+	      "ZapfDingbats": function() {
+	        return fs.readFileSync(__dirname + "/font/data/ZapfDingbats.afm", 'utf8');
+	      }
+	    };
+
+	    PDFFont.prototype.use = function(characters) {
+	      var _ref;
+	      return (_ref = this.subset) != null ? _ref.use(characters) : void 0;
+	    };
+
+	    PDFFont.prototype.embed = function() {
+	      if (this.embedded || (this.dictionary == null)) {
+	        return;
+	      }
+	      if (this.isAFM) {
+	        this.embedAFM();
+	      } else {
+	        this.embedTTF();
+	      }
+	      return this.embedded = true;
+	    };
+
+	    PDFFont.prototype.encode = function(text) {
+	      var _ref;
+	      if (this.isAFM) {
+	        return this.font.encodeText(text);
+	      } else {
+	        return ((_ref = this.subset) != null ? _ref.encodeText(text) : void 0) || text;
+	      }
+	    };
+
+	    PDFFont.prototype.ref = function() {
+	      return this.dictionary != null ? this.dictionary : this.dictionary = this.document.ref();
+	    };
+
+	    PDFFont.prototype.registerTTF = function() {
+	      var e, hi, low, raw, _ref;
+	      this.name = this.font.name.postscriptName;
+	      this.scaleFactor = 1000.0 / this.font.head.unitsPerEm;
+	      this.bbox = (function() {
+	        var _i, _len, _ref, _results;
+	        _ref = this.font.bbox;
+	        _results = [];
+	        for (_i = 0, _len = _ref.length; _i < _len; _i++) {
+	          e = _ref[_i];
+	          _results.push(Math.round(e * this.scaleFactor));
+	        }
+	        return _results;
+	      }).call(this);
+	      this.stemV = 0;
+	      if (this.font.post.exists) {
+	        raw = this.font.post.italic_angle;
+	        hi = raw >> 16;
+	        low = raw & 0xFF;
+	        if (hi & 0x8000 !== 0) {
+	          hi = -((hi ^ 0xFFFF) + 1);
+	        }
+	        this.italicAngle = +("" + hi + "." + low);
+	      } else {
+	        this.italicAngle = 0;
+	      }
+	      this.ascender = Math.round(this.font.ascender * this.scaleFactor);
+	      this.decender = Math.round(this.font.decender * this.scaleFactor);
+	      this.lineGap = Math.round(this.font.lineGap * this.scaleFactor);
+	      this.capHeight = (this.font.os2.exists && this.font.os2.capHeight) || this.ascender;
+	      this.xHeight = (this.font.os2.exists && this.font.os2.xHeight) || 0;
+	      this.familyClass = (this.font.os2.exists && this.font.os2.familyClass || 0) >> 8;
+	      this.isSerif = (_ref = this.familyClass) === 1 || _ref === 2 || _ref === 3 || _ref === 4 || _ref === 5 || _ref === 7;
+	      this.isScript = this.familyClass === 10;
+	      this.flags = 0;
+	      if (this.font.post.isFixedPitch) {
+	        this.flags |= 1 << 0;
+	      }
+	      if (this.isSerif) {
+	        this.flags |= 1 << 1;
+	      }
+	      if (this.isScript) {
+	        this.flags |= 1 << 3;
+	      }
+	      if (this.italicAngle !== 0) {
+	        this.flags |= 1 << 6;
+	      }
+	      this.flags |= 1 << 5;
+	      if (!this.font.cmap.unicode) {
+	        throw new Error('No unicode cmap for font');
+	      }
+	    };
+
+	    PDFFont.prototype.embedTTF = function() {
+	      var charWidths, cmap, code, data, descriptor, firstChar, fontfile, glyph;
+	      data = this.subset.encode();
+	      fontfile = this.document.ref();
+	      fontfile.write(data);
+	      fontfile.data.Length1 = fontfile.uncompressedLength;
+	      fontfile.end();
+	      descriptor = this.document.ref({
+	        Type: 'FontDescriptor',
+	        FontName: this.subset.postscriptName,
+	        FontFile2: fontfile,
+	        FontBBox: this.bbox,
+	        Flags: this.flags,
+	        StemV: this.stemV,
+	        ItalicAngle: this.italicAngle,
+	        Ascent: this.ascender,
+	        Descent: this.decender,
+	        CapHeight: this.capHeight,
+	        XHeight: this.xHeight
+	      });
+	      descriptor.end();
+	      firstChar = +Object.keys(this.subset.cmap)[0];
+	      charWidths = (function() {
+	        var _ref, _results;
+	        _ref = this.subset.cmap;
+	        _results = [];
+	        for (code in _ref) {
+	          glyph = _ref[code];
+	          _results.push(Math.round(this.font.widthOfGlyph(glyph)));
+	        }
+	        return _results;
+	      }).call(this);
+	      cmap = this.document.ref();
+	      cmap.end(toUnicodeCmap(this.subset.subset));
+	      this.dictionary.data = {
+	        Type: 'Font',
+	        BaseFont: this.subset.postscriptName,
+	        Subtype: 'TrueType',
+	        FontDescriptor: descriptor,
+	        FirstChar: firstChar,
+	        LastChar: firstChar + charWidths.length - 1,
+	        Widths: charWidths,
+	        Encoding: 'MacRomanEncoding',
+	        ToUnicode: cmap
+	      };
+	      return this.dictionary.end();
+	    };
+
+	    toUnicodeCmap = function(map) {
+	      var code, codes, range, unicode, unicodeMap, _i, _len;
+	      unicodeMap = '/CIDInit /ProcSet findresource begin\n12 dict begin\nbegincmap\n/CIDSystemInfo <<\n  /Registry (Adobe)\n  /Ordering (UCS)\n  /Supplement 0\n>> def\n/CMapName /Adobe-Identity-UCS def\n/CMapType 2 def\n1 begincodespacerange\n<00><ff>\nendcodespacerange';
+	      codes = Object.keys(map).sort(function(a, b) {
+	        return a - b;
+	      });
+	      range = [];
+	      for (_i = 0, _len = codes.length; _i < _len; _i++) {
+	        code = codes[_i];
+	        if (range.length >= 100) {
+	          unicodeMap += "\n" + range.length + " beginbfchar\n" + (range.join('\n')) + "\nendbfchar";
+	          range = [];
+	        }
+	        unicode = ('0000' + map[code].toString(16)).slice(-4);
+	        code = (+code).toString(16);
+	        range.push("<" + code + "><" + unicode + ">");
+	      }
+	      if (range.length) {
+	        unicodeMap += "\n" + range.length + " beginbfchar\n" + (range.join('\n')) + "\nendbfchar\n";
+	      }
+	      return unicodeMap += 'endcmap\nCMapName currentdict /CMap defineresource pop\nend\nend';
+	    };
+
+	    PDFFont.prototype.registerAFM = function(name) {
+	      var _ref;
+	      this.name = name;
+	      return _ref = this.font, this.ascender = _ref.ascender, this.decender = _ref.decender, this.bbox = _ref.bbox, this.lineGap = _ref.lineGap, _ref;
+	    };
+
+	    PDFFont.prototype.embedAFM = function() {
+	      this.dictionary.data = {
+	        Type: 'Font',
+	        BaseFont: this.name,
+	        Subtype: 'Type1',
+	        Encoding: 'WinAnsiEncoding'
+	      };
+	      return this.dictionary.end();
+	    };
+
+	    PDFFont.prototype.widthOfString = function(string, size) {
+	      var charCode, i, scale, width, _i, _ref;
+	      string = '' + string;
+	      width = 0;
+	      for (i = _i = 0, _ref = string.length; 0 <= _ref ? _i < _ref : _i > _ref; i = 0 <= _ref ? ++_i : --_i) {
+	        charCode = string.charCodeAt(i);
+	        width += this.font.widthOfGlyph(this.font.characterToGlyph(charCode)) || 0;
+	      }
+	      scale = size / 1000;
+	      return width * scale;
+	    };
+
+	    PDFFont.prototype.lineHeight = function(size, includeGap) {
+	      var gap;
+	      if (includeGap == null) {
+	        includeGap = false;
+	      }
+	      gap = includeGap ? this.lineGap : 0;
+	      return (this.ascender + gap - this.decender) / 1000 * size;
+	    };
+
+	    return PDFFont;
+
+	  })();
+
+	  module.exports = PDFFont;
+
+	}).call(this);
+
+	/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(2).Buffer, "/"))
+
+/***/ },
+/* 71 */
+/***/ function(module, exports, __webpack_require__) {
+
+	// Generated by CoffeeScript 1.7.1
+	(function() {
+	  var CmapTable, DFont, Data, Directory, GlyfTable, HeadTable, HheaTable, HmtxTable, LocaTable, MaxpTable, NameTable, OS2Table, PostTable, TTFFont, fs;
+
+	  fs = __webpack_require__(44);
+
+	  Data = __webpack_require__(72);
+
+	  DFont = __webpack_require__(73);
+
+	  Directory = __webpack_require__(74);
+
+	  NameTable = __webpack_require__(75);
+
+	  HeadTable = __webpack_require__(78);
+
+	  CmapTable = __webpack_require__(79);
+
+	  HmtxTable = __webpack_require__(80);
+
+	  HheaTable = __webpack_require__(81);
+
+	  MaxpTable = __webpack_require__(82);
+
+	  PostTable = __webpack_require__(83);
+
+	  OS2Table = __webpack_require__(84);
+
+	  LocaTable = __webpack_require__(85);
+
+	  GlyfTable = __webpack_require__(86);
+
+	  TTFFont = (function() {
+	    TTFFont.open = function(filename, name) {
+	      var contents;
+	      contents = fs.readFileSync(filename);
+	      return new TTFFont(contents, name);
+	    };
+
+	    TTFFont.fromDFont = function(filename, family) {
+	      var dfont;
+	      dfont = DFont.open(filename);
+	      return new TTFFont(dfont.getNamedFont(family));
+	    };
+
+	    TTFFont.fromBuffer = function(buffer, family) {
+	      var dfont, e, ttf;
+	      try {
+	        ttf = new TTFFont(buffer, family);
+	        if (!(ttf.head.exists && ttf.name.exists && ttf.cmap.exists)) {
+	          dfont = new DFont(buffer);
+	          ttf = new TTFFont(dfont.getNamedFont(family));
+	          if (!(ttf.head.exists && ttf.name.exists && ttf.cmap.exists)) {
+	            throw new Error('Invalid TTF file in DFont');
+	          }
+	        }
+	        return ttf;
+	      } catch (_error) {
+	        e = _error;
+	        throw new Error('Unknown font format in buffer: ' + e.message);
+	      }
+	    };
+
+	    function TTFFont(rawData, name) {
+	      var data, i, numFonts, offset, offsets, version, _i, _j, _len;
+	      this.rawData = rawData;
+	      data = this.contents = new Data(this.rawData);
+	      if (data.readString(4) === 'ttcf') {
+	        if (!name) {
+	          throw new Error("Must specify a font name for TTC files.");
+	        }
+	        version = data.readInt();
+	        numFonts = data.readInt();
+	        offsets = [];
+	        for (i = _i = 0; 0 <= numFonts ? _i < numFonts : _i > numFonts; i = 0 <= numFonts ? ++_i : --_i) {
+	          offsets[i] = data.readInt();
+	        }
+	        for (i = _j = 0, _len = offsets.length; _j < _len; i = ++_j) {
+	          offset = offsets[i];
+	          data.pos = offset;
+	          this.parse();
+	          if (this.name.postscriptName === name) {
+	            return;
+	          }
+	        }
+	        throw new Error("Font " + name + " not found in TTC file.");
+	      } else {
+	        data.pos = 0;
+	        this.parse();
+	      }
+	    }
+
+	    TTFFont.prototype.parse = function() {
+	      this.directory = new Directory(this.contents);
+	      this.head = new HeadTable(this);
+	      this.name = new NameTable(this);
+	      this.cmap = new CmapTable(this);
+	      this.hhea = new HheaTable(this);
+	      this.maxp = new MaxpTable(this);
+	      this.hmtx = new HmtxTable(this);
+	      this.post = new PostTable(this);
+	      this.os2 = new OS2Table(this);
+	      this.loca = new LocaTable(this);
+	      this.glyf = new GlyfTable(this);
+	      this.ascender = (this.os2.exists && this.os2.ascender) || this.hhea.ascender;
+	      this.decender = (this.os2.exists && this.os2.decender) || this.hhea.decender;
+	      this.lineGap = (this.os2.exists && this.os2.lineGap) || this.hhea.lineGap;
+	      return this.bbox = [this.head.xMin, this.head.yMin, this.head.xMax, this.head.yMax];
+	    };
+
+	    TTFFont.prototype.characterToGlyph = function(character) {
+	      var _ref;
+	      return ((_ref = this.cmap.unicode) != null ? _ref.codeMap[character] : void 0) || 0;
+	    };
+
+	    TTFFont.prototype.widthOfGlyph = function(glyph) {
+	      var scale;
+	      scale = 1000.0 / this.head.unitsPerEm;
+	      return this.hmtx.forGlyph(glyph).advance * scale;
+	    };
+
+	    return TTFFont;
+
+	  })();
+
+	  module.exports = TTFFont;
+
+	}).call(this);
+
+
+/***/ },
+/* 72 */
+/***/ function(module, exports) {
+
+	// Generated by CoffeeScript 1.7.1
+	(function() {
+	  var Data;
+
+	  Data = (function() {
+	    function Data(data) {
+	      this.data = data != null ? data : [];
+	      this.pos = 0;
+	      this.length = this.data.length;
+	    }
+
+	    Data.prototype.readByte = function() {
+	      return this.data[this.pos++];
+	    };
+
+	    Data.prototype.writeByte = function(byte) {
+	      return this.data[this.pos++] = byte;
+	    };
+
+	    Data.prototype.byteAt = function(index) {
+	      return this.data[index];
+	    };
+
+	    Data.prototype.readBool = function() {
+	      return !!this.readByte();
+	    };
+
+	    Data.prototype.writeBool = function(val) {
+	      return this.writeByte(val ? 1 : 0);
+	    };
+
+	    Data.prototype.readUInt32 = function() {
+	      var b1, b2, b3, b4;
+	      b1 = this.readByte() * 0x1000000;
+	      b2 = this.readByte() << 16;
+	      b3 = this.readByte() << 8;
+	      b4 = this.readByte();
+	      return b1 + b2 + b3 + b4;
+	    };
+
+	    Data.prototype.writeUInt32 = function(val) {
+	      this.writeByte((val >>> 24) & 0xff);
+	      this.writeByte((val >> 16) & 0xff);
+	      this.writeByte((val >> 8) & 0xff);
+	      return this.writeByte(val & 0xff);
+	    };
+
+	    Data.prototype.readInt32 = function() {
+	      var int;
+	      int = this.readUInt32();
+	      if (int >= 0x80000000) {
+	        return int - 0x100000000;
+	      } else {
+	        return int;
+	      }
+	    };
+
+	    Data.prototype.writeInt32 = function(val) {
+	      if (val < 0) {
+	        val += 0x100000000;
+	      }
+	      return this.writeUInt32(val);
+	    };
+
+	    Data.prototype.readUInt16 = function() {
+	      var b1, b2;
+	      b1 = this.readByte() << 8;
+	      b2 = this.readByte();
+	      return b1 | b2;
+	    };
+
+	    Data.prototype.writeUInt16 = function(val) {
+	      this.writeByte((val >> 8) & 0xff);
+	      return this.writeByte(val & 0xff);
+	    };
+
+	    Data.prototype.readInt16 = function() {
+	      var int;
+	      int = this.readUInt16();
+	      if (int >= 0x8000) {
+	        return int - 0x10000;
+	      } else {
+	        return int;
+	      }
+	    };
+
+	    Data.prototype.writeInt16 = function(val) {
+	      if (val < 0) {
+	        val += 0x10000;
+	      }
+	      return this.writeUInt16(val);
+	    };
+
+	    Data.prototype.readString = function(length) {
+	      var i, ret, _i;
+	      ret = [];
+	      for (i = _i = 0; 0 <= length ? _i < length : _i > length; i = 0 <= length ? ++_i : --_i) {
+	        ret[i] = String.fromCharCode(this.readByte());
+	      }
+	      return ret.join('');
+	    };
+
+	    Data.prototype.writeString = function(val) {
+	      var i, _i, _ref, _results;
+	      _results = [];
+	      for (i = _i = 0, _ref = val.length; 0 <= _ref ? _i < _ref : _i > _ref; i = 0 <= _ref ? ++_i : --_i) {
+	        _results.push(this.writeByte(val.charCodeAt(i)));
+	      }
+	      return _results;
+	    };
+
+	    Data.prototype.stringAt = function(pos, length) {
+	      this.pos = pos;
+	      return this.readString(length);
+	    };
+
+	    Data.prototype.readShort = function() {
+	      return this.readInt16();
+	    };
+
+	    Data.prototype.writeShort = function(val) {
+	      return this.writeInt16(val);
+	    };
+
+	    Data.prototype.readLongLong = function() {
+	      var b1, b2, b3, b4, b5, b6, b7, b8;
+	      b1 = this.readByte();
+	      b2 = this.readByte();
+	      b3 = this.readByte();
+	      b4 = this.readByte();
+	      b5 = this.readByte();
+	      b6 = this.readByte();
+	      b7 = this.readByte();
+	      b8 = this.readByte();
+	      if (b1 & 0x80) {
+	        return ((b1 ^ 0xff) * 0x100000000000000 + (b2 ^ 0xff) * 0x1000000000000 + (b3 ^ 0xff) * 0x10000000000 + (b4 ^ 0xff) * 0x100000000 + (b5 ^ 0xff) * 0x1000000 + (b6 ^ 0xff) * 0x10000 + (b7 ^ 0xff) * 0x100 + (b8 ^ 0xff) + 1) * -1;
+	      }
+	      return b1 * 0x100000000000000 + b2 * 0x1000000000000 + b3 * 0x10000000000 + b4 * 0x100000000 + b5 * 0x1000000 + b6 * 0x10000 + b7 * 0x100 + b8;
+	    };
+
+	    Data.prototype.writeLongLong = function(val) {
+	      var high, low;
+	      high = Math.floor(val / 0x100000000);
+	      low = val & 0xffffffff;
+	      this.writeByte((high >> 24) & 0xff);
+	      this.writeByte((high >> 16) & 0xff);
+	      this.writeByte((high >> 8) & 0xff);
+	      this.writeByte(high & 0xff);
+	      this.writeByte((low >> 24) & 0xff);
+	      this.writeByte((low >> 16) & 0xff);
+	      this.writeByte((low >> 8) & 0xff);
+	      return this.writeByte(low & 0xff);
+	    };
+
+	    Data.prototype.readInt = function() {
+	      return this.readInt32();
+	    };
+
+	    Data.prototype.writeInt = function(val) {
+	      return this.writeInt32(val);
+	    };
+
+	    Data.prototype.slice = function(start, end) {
+	      return this.data.slice(start, end);
+	    };
+
+	    Data.prototype.read = function(bytes) {
+	      var buf, i, _i;
+	      buf = [];
+	      for (i = _i = 0; 0 <= bytes ? _i < bytes : _i > bytes; i = 0 <= bytes ? ++_i : --_i) {
+	        buf.push(this.readByte());
+	      }
+	      return buf;
+	    };
+
+	    Data.prototype.write = function(bytes) {
+	      var byte, _i, _len, _results;
+	      _results = [];
+	      for (_i = 0, _len = bytes.length; _i < _len; _i++) {
+	        byte = bytes[_i];
+	        _results.push(this.writeByte(byte));
+	      }
+	      return _results;
+	    };
+
+	    return Data;
+
+	  })();
+
+	  module.exports = Data;
+
+	}).call(this);
+
+
+/***/ },
+/* 73 */
+/***/ function(module, exports, __webpack_require__) {
+
+	// Generated by CoffeeScript 1.7.1
+	(function() {
+	  var DFont, Data, Directory, NameTable, fs;
+
+	  fs = __webpack_require__(44);
+
+	  Data = __webpack_require__(72);
+
+	  Directory = __webpack_require__(74);
+
+	  NameTable = __webpack_require__(75);
+
+	  DFont = (function() {
+	    DFont.open = function(filename) {
+	      var contents;
+	      contents = fs.readFileSync(filename);
+	      return new DFont(contents);
+	    };
+
+	    function DFont(contents) {
+	      this.contents = new Data(contents);
+	      this.parse(this.contents);
+	    }
+
+	    DFont.prototype.parse = function(data) {
+	      var attr, b2, b3, b4, dataLength, dataOffset, dataOfs, entry, font, handle, i, id, j, len, length, mapLength, mapOffset, maxIndex, maxTypeIndex, name, nameListOffset, nameOfs, p, pos, refListOffset, type, typeListOffset, _i, _j;
+	      dataOffset = data.readInt();
+	      mapOffset = data.readInt();
+	      dataLength = data.readInt();
+	      mapLength = data.readInt();
+	      this.map = {};
+	      data.pos = mapOffset + 24;
+	      typeListOffset = data.readShort() + mapOffset;
+	      nameListOffset = data.readShort() + mapOffset;
+	      data.pos = typeListOffset;
+	      maxIndex = data.readShort();
+	      for (i = _i = 0; _i <= maxIndex; i = _i += 1) {
+	        type = data.readString(4);
+	        maxTypeIndex = data.readShort();
+	        refListOffset = data.readShort();
+	        this.map[type] = {
+	          list: [],
+	          named: {}
+	        };
+	        pos = data.pos;
+	        data.pos = typeListOffset + refListOffset;
+	        for (j = _j = 0; _j <= maxTypeIndex; j = _j += 1) {
+	          id = data.readShort();
+	          nameOfs = data.readShort();
+	          attr = data.readByte();
+	          b2 = data.readByte() << 16;
+	          b3 = data.readByte() << 8;
+	          b4 = data.readByte();
+	          dataOfs = dataOffset + (0 | b2 | b3 | b4);
+	          handle = data.readUInt32();
+	          entry = {
+	            id: id,
+	            attributes: attr,
+	            offset: dataOfs,
+	            handle: handle
+	          };
+	          p = data.pos;
+	          if (nameOfs !== -1 && (nameListOffset + nameOfs < mapOffset + mapLength)) {
+	            data.pos = nameListOffset + nameOfs;
+	            len = data.readByte();
+	            entry.name = data.readString(len);
+	          } else if (type === 'sfnt') {
+	            data.pos = entry.offset;
+	            length = data.readUInt32();
+	            font = {};
+	            font.contents = new Data(data.slice(data.pos, data.pos + length));
+	            font.directory = new Directory(font.contents);
+	            name = new NameTable(font);
+	            entry.name = name.fontName[0].raw;
+	          }
+	          data.pos = p;
+	          this.map[type].list.push(entry);
+	          if (entry.name) {
+	            this.map[type].named[entry.name] = entry;
+	          }
+	        }
+	        data.pos = pos;
+	      }
+	    };
+
+	    DFont.prototype.getNamedFont = function(name) {
+	      var data, entry, length, pos, ret, _ref;
+	      data = this.contents;
+	      pos = data.pos;
+	      entry = (_ref = this.map.sfnt) != null ? _ref.named[name] : void 0;
+	      if (!entry) {
+	        throw new Error("Font " + name + " not found in DFont file.");
+	      }
+	      data.pos = entry.offset;
+	      length = data.readUInt32();
+	      ret = data.slice(data.pos, data.pos + length);
+	      data.pos = pos;
+	      return ret;
+	    };
+
+	    return DFont;
+
+	  })();
+
+	  module.exports = DFont;
+
+	}).call(this);
+
+
+/***/ },
+/* 74 */
+/***/ function(module, exports, __webpack_require__) {
+
+	/* WEBPACK VAR INJECTION */(function(Buffer) {// Generated by CoffeeScript 1.7.1
+	(function() {
+	  var Data, Directory,
+	    __slice = [].slice;
+
+	  Data = __webpack_require__(72);
+
+	  Directory = (function() {
+	    var checksum;
+
+	    function Directory(data) {
+	      var entry, i, _i, _ref;
+	      this.scalarType = data.readInt();
+	      this.tableCount = data.readShort();
+	      this.searchRange = data.readShort();
+	      this.entrySelector = data.readShort();
+	      this.rangeShift = data.readShort();
+	      this.tables = {};
+	      for (i = _i = 0, _ref = this.tableCount; 0 <= _ref ? _i < _ref : _i > _ref; i = 0 <= _ref ? ++_i : --_i) {
+	        entry = {
+	          tag: data.readString(4),
+	          checksum: data.readInt(),
+	          offset: data.readInt(),
+	          length: data.readInt()
+	        };
+	        this.tables[entry.tag] = entry;
+	      }
+	    }
+
+	    Directory.prototype.encode = function(tables) {
+	      var adjustment, directory, directoryLength, entrySelector, headOffset, log2, offset, rangeShift, searchRange, sum, table, tableCount, tableData, tag;
+	      tableCount = Object.keys(tables).length;
+	      log2 = Math.log(2);
+	      searchRange = Math.floor(Math.log(tableCount) / log2) * 16;
+	      entrySelector = Math.floor(searchRange / log2);
+	      rangeShift = tableCount * 16 - searchRange;
+	      directory = new Data;
+	      directory.writeInt(this.scalarType);
+	      directory.writeShort(tableCount);
+	      directory.writeShort(searchRange);
+	      directory.writeShort(entrySelector);
+	      directory.writeShort(rangeShift);
+	      directoryLength = tableCount * 16;
+	      offset = directory.pos + directoryLength;
+	      headOffset = null;
+	      tableData = [];
+	      for (tag in tables) {
+	        table = tables[tag];
+	        directory.writeString(tag);
+	        directory.writeInt(checksum(table));
+	        directory.writeInt(offset);
+	        directory.writeInt(table.length);
+	        tableData = tableData.concat(table);
+	        if (tag === 'head') {
+	          headOffset = offset;
+	        }
+	        offset += table.length;
+	        while (offset % 4) {
+	          tableData.push(0);
+	          offset++;
+	        }
+	      }
+	      directory.write(tableData);
+	      sum = checksum(directory.data);
+	      adjustment = 0xB1B0AFBA - sum;
+	      directory.pos = headOffset + 8;
+	      directory.writeUInt32(adjustment);
+	      return new Buffer(directory.data);
+	    };
+
+	    checksum = function(data) {
+	      var i, sum, tmp, _i, _ref;
+	      data = __slice.call(data);
+	      while (data.length % 4) {
+	        data.push(0);
+	      }
+	      tmp = new Data(data);
+	      sum = 0;
+	      for (i = _i = 0, _ref = data.length; _i < _ref; i = _i += 4) {
+	        sum += tmp.readUInt32();
+	      }
+	      return sum & 0xFFFFFFFF;
+	    };
+
+	    return Directory;
+
+	  })();
+
+	  module.exports = Directory;
+
+	}).call(this);
+
+	/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(2).Buffer))
+
+/***/ },
+/* 75 */
+/***/ function(module, exports, __webpack_require__) {
+
+	// Generated by CoffeeScript 1.7.1
+	(function() {
+	  var Data, NameEntry, NameTable, Table, utils,
+	    __hasProp = {}.hasOwnProperty,
+	    __extends = function(child, parent) { for (var key in parent) { if (__hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; };
+
+	  Table = __webpack_require__(76);
+
+	  Data = __webpack_require__(72);
+
+	  utils = __webpack_require__(77);
+
+	  NameTable = (function(_super) {
+	    var subsetTag;
+
+	    __extends(NameTable, _super);
+
+	    function NameTable() {
+	      return NameTable.__super__.constructor.apply(this, arguments);
+	    }
+
+	    NameTable.prototype.tag = 'name';
+
+	    NameTable.prototype.parse = function(data) {
+	      var count, entries, entry, format, i, name, stringOffset, strings, text, _i, _j, _len, _name;
+	      data.pos = this.offset;
+	      format = data.readShort();
+	      count = data.readShort();
+	      stringOffset = data.readShort();
+	      entries = [];
+	      for (i = _i = 0; 0 <= count ? _i < count : _i > count; i = 0 <= count ? ++_i : --_i) {
+	        entries.push({
+	          platformID: data.readShort(),
+	          encodingID: data.readShort(),
+	          languageID: data.readShort(),
+	          nameID: data.readShort(),
+	          length: data.readShort(),
+	          offset: this.offset + stringOffset + data.readShort()
+	        });
+	      }
+	      strings = {};
+	      for (i = _j = 0, _len = entries.length; _j < _len; i = ++_j) {
+	        entry = entries[i];
+	        data.pos = entry.offset;
+	        text = data.readString(entry.length);
+	        name = new NameEntry(text, entry);
+	        if (strings[_name = entry.nameID] == null) {
+	          strings[_name] = [];
+	        }
+	        strings[entry.nameID].push(name);
+	      }
+	      this.strings = strings;
+	      this.copyright = strings[0];
+	      this.fontFamily = strings[1];
+	      this.fontSubfamily = strings[2];
+	      this.uniqueSubfamily = strings[3];
+	      this.fontName = strings[4];
+	      this.version = strings[5];
+	      this.postscriptName = strings[6][0].raw.replace(/[\x00-\x19\x80-\xff]/g, "");
+	      this.trademark = strings[7];
+	      this.manufacturer = strings[8];
+	      this.designer = strings[9];
+	      this.description = strings[10];
+	      this.vendorUrl = strings[11];
+	      this.designerUrl = strings[12];
+	      this.license = strings[13];
+	      this.licenseUrl = strings[14];
+	      this.preferredFamily = strings[15];
+	      this.preferredSubfamily = strings[17];
+	      this.compatibleFull = strings[18];
+	      return this.sampleText = strings[19];
+	    };
+
+	    subsetTag = "AAAAAA";
+
+	    NameTable.prototype.encode = function() {
+	      var id, list, nameID, nameTable, postscriptName, strCount, strTable, string, strings, table, val, _i, _len, _ref;
+	      strings = {};
+	      _ref = this.strings;
+	      for (id in _ref) {
+	        val = _ref[id];
+	        strings[id] = val;
+	      }
+	      postscriptName = new NameEntry("" + subsetTag + "+" + this.postscriptName, {
+	        platformID: 1,
+	        encodingID: 0,
+	        languageID: 0
+	      });
+	      strings[6] = [postscriptName];
+	      subsetTag = utils.successorOf(subsetTag);
+	      strCount = 0;
+	      for (id in strings) {
+	        list = strings[id];
+	        if (list != null) {
+	          strCount += list.length;
+	        }
+	      }
+	      table = new Data;
+	      strTable = new Data;
+	      table.writeShort(0);
+	      table.writeShort(strCount);
+	      table.writeShort(6 + 12 * strCount);
+	      for (nameID in strings) {
+	        list = strings[nameID];
+	        if (list != null) {
+	          for (_i = 0, _len = list.length; _i < _len; _i++) {
+	            string = list[_i];
+	            table.writeShort(string.platformID);
+	            table.writeShort(string.encodingID);
+	            table.writeShort(string.languageID);
+	            table.writeShort(nameID);
+	            table.writeShort(string.length);
+	            table.writeShort(strTable.pos);
+	            strTable.writeString(string.raw);
+	          }
+	        }
+	      }
+	      return nameTable = {
+	        postscriptName: postscriptName.raw,
+	        table: table.data.concat(strTable.data)
+	      };
+	    };
+
+	    return NameTable;
+
+	  })(Table);
+
+	  module.exports = NameTable;
+
+	  NameEntry = (function() {
+	    function NameEntry(raw, entry) {
+	      this.raw = raw;
+	      this.length = this.raw.length;
+	      this.platformID = entry.platformID;
+	      this.encodingID = entry.encodingID;
+	      this.languageID = entry.languageID;
+	    }
+
+	    return NameEntry;
+
+	  })();
+
+	}).call(this);
+
+
+/***/ },
+/* 76 */
+/***/ function(module, exports) {
+
+	// Generated by CoffeeScript 1.7.1
+	(function() {
+	  var Table;
+
+	  Table = (function() {
+	    function Table(file) {
+	      var info;
+	      this.file = file;
+	      info = this.file.directory.tables[this.tag];
+	      this.exists = !!info;
+	      if (info) {
+	        this.offset = info.offset, this.length = info.length;
+	        this.parse(this.file.contents);
+	      }
+	    }
+
+	    Table.prototype.parse = function() {};
+
+	    Table.prototype.encode = function() {};
+
+	    Table.prototype.raw = function() {
+	      if (!this.exists) {
+	        return null;
+	      }
+	      this.file.contents.pos = this.offset;
+	      return this.file.contents.read(this.length);
+	    };
+
+	    return Table;
+
+	  })();
+
+	  module.exports = Table;
+
+	}).call(this);
+
+
+/***/ },
+/* 77 */
+/***/ function(module, exports) {
+
+	// Generated by CoffeeScript 1.7.1
+
+	/*
+	 * An implementation of Ruby's string.succ method.
+	 * By Devon Govett
+	 *
+	 * Returns the successor to str. The successor is calculated by incrementing characters starting 
+	 * from the rightmost alphanumeric (or the rightmost character if there are no alphanumerics) in the
+	 * string. Incrementing a digit always results in another digit, and incrementing a letter results in
+	 * another letter of the same case.
+	 *
+	 * If the increment generates a carry, the character to the left of it is incremented. This 
+	 * process repeats until there is no carry, adding an additional character if necessary.
+	 *
+	 * succ("abcd")      == "abce"
+	 * succ("THX1138")   == "THX1139"
+	 * succ("<<koala>>") == "<<koalb>>"
+	 * succ("1999zzz")   == "2000aaa"
+	 * succ("ZZZ9999")   == "AAAA0000"
+	 */
+
+	(function() {
+	  exports.successorOf = function(input) {
+	    var added, alphabet, carry, i, index, isUpperCase, last, length, next, result;
+	    alphabet = 'abcdefghijklmnopqrstuvwxyz';
+	    length = alphabet.length;
+	    result = input;
+	    i = input.length;
+	    while (i >= 0) {
+	      last = input.charAt(--i);
+	      if (isNaN(last)) {
+	        index = alphabet.indexOf(last.toLowerCase());
+	        if (index === -1) {
+	          next = last;
+	          carry = true;
+	        } else {
+	          next = alphabet.charAt((index + 1) % length);
+	          isUpperCase = last === last.toUpperCase();
+	          if (isUpperCase) {
+	            next = next.toUpperCase();
+	          }
+	          carry = index + 1 >= length;
+	          if (carry && i === 0) {
+	            added = isUpperCase ? 'A' : 'a';
+	            result = added + next + result.slice(1);
+	            break;
+	          }
+	        }
+	      } else {
+	        next = +last + 1;
+	        carry = next > 9;
+	        if (carry) {
+	          next = 0;
+	        }
+	        if (carry && i === 0) {
+	          result = '1' + next + result.slice(1);
+	          break;
+	        }
+	      }
+	      result = result.slice(0, i) + next + result.slice(i + 1);
+	      if (!carry) {
+	        break;
+	      }
+	    }
+	    return result;
+	  };
+
+	  exports.invert = function(object) {
+	    var key, ret, val;
+	    ret = {};
+	    for (key in object) {
+	      val = object[key];
+	      ret[val] = key;
+	    }
+	    return ret;
+	  };
+
+	}).call(this);
+
+
+/***/ },
+/* 78 */
+/***/ function(module, exports, __webpack_require__) {
+
+	// Generated by CoffeeScript 1.7.1
+	(function() {
+	  var Data, HeadTable, Table,
+	    __hasProp = {}.hasOwnProperty,
+	    __extends = function(child, parent) { for (var key in parent) { if (__hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; };
+
+	  Table = __webpack_require__(76);
+
+	  Data = __webpack_require__(72);
+
+	  HeadTable = (function(_super) {
+	    __extends(HeadTable, _super);
+
+	    function HeadTable() {
+	      return HeadTable.__super__.constructor.apply(this, arguments);
+	    }
+
+	    HeadTable.prototype.tag = 'head';
+
+	    HeadTable.prototype.parse = function(data) {
+	      data.pos = this.offset;
+	      this.version = data.readInt();
+	      this.revision = data.readInt();
+	      this.checkSumAdjustment = data.readInt();
+	      this.magicNumber = data.readInt();
+	      this.flags = data.readShort();
+	      this.unitsPerEm = data.readShort();
+	      this.created = data.readLongLong();
+	      this.modified = data.readLongLong();
+	      this.xMin = data.readShort();
+	      this.yMin = data.readShort();
+	      this.xMax = data.readShort();
+	      this.yMax = data.readShort();
+	      this.macStyle = data.readShort();
+	      this.lowestRecPPEM = data.readShort();
+	      this.fontDirectionHint = data.readShort();
+	      this.indexToLocFormat = data.readShort();
+	      return this.glyphDataFormat = data.readShort();
+	    };
+
+	    HeadTable.prototype.encode = function(loca) {
+	      var table;
+	      table = new Data;
+	      table.writeInt(this.version);
+	      table.writeInt(this.revision);
+	      table.writeInt(this.checkSumAdjustment);
+	      table.writeInt(this.magicNumber);
+	      table.writeShort(this.flags);
+	      table.writeShort(this.unitsPerEm);
+	      table.writeLongLong(this.created);
+	      table.writeLongLong(this.modified);
+	      table.writeShort(this.xMin);
+	      table.writeShort(this.yMin);
+	      table.writeShort(this.xMax);
+	      table.writeShort(this.yMax);
+	      table.writeShort(this.macStyle);
+	      table.writeShort(this.lowestRecPPEM);
+	      table.writeShort(this.fontDirectionHint);
+	      table.writeShort(loca.type);
+	      table.writeShort(this.glyphDataFormat);
+	      return table.data;
+	    };
+
+	    return HeadTable;
+
+	  })(Table);
+
+	  module.exports = HeadTable;
+
+	}).call(this);
+
+
+/***/ },
+/* 79 */
+/***/ function(module, exports, __webpack_require__) {
+
+	// Generated by CoffeeScript 1.7.1
+	(function() {
+	  var CmapEntry, CmapTable, Data, Table,
+	    __hasProp = {}.hasOwnProperty,
+	    __extends = function(child, parent) { for (var key in parent) { if (__hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; };
+
+	  Table = __webpack_require__(76);
+
+	  Data = __webpack_require__(72);
+
+	  CmapTable = (function(_super) {
+	    __extends(CmapTable, _super);
+
+	    function CmapTable() {
+	      return CmapTable.__super__.constructor.apply(this, arguments);
+	    }
+
+	    CmapTable.prototype.tag = 'cmap';
+
+	    CmapTable.prototype.parse = function(data) {
+	      var entry, i, tableCount, _i;
+	      data.pos = this.offset;
+	      this.version = data.readUInt16();
+	      tableCount = data.readUInt16();
+	      this.tables = [];
+	      this.unicode = null;
+	      for (i = _i = 0; 0 <= tableCount ? _i < tableCount : _i > tableCount; i = 0 <= tableCount ? ++_i : --_i) {
+	        entry = new CmapEntry(data, this.offset);
+	        this.tables.push(entry);
+	        if (entry.isUnicode) {
+	          if (this.unicode == null) {
+	            this.unicode = entry;
+	          }
+	        }
+	      }
+	      return true;
+	    };
+
+	    CmapTable.encode = function(charmap, encoding) {
+	      var result, table;
+	      if (encoding == null) {
+	        encoding = 'macroman';
+	      }
+	      result = CmapEntry.encode(charmap, encoding);
+	      table = new Data;
+	      table.writeUInt16(0);
+	      table.writeUInt16(1);
+	      result.table = table.data.concat(result.subtable);
+	      return result;
+	    };
+
+	    return CmapTable;
+
+	  })(Table);
+
+	  CmapEntry = (function() {
+	    function CmapEntry(data, offset) {
+	      var code, count, endCode, glyphId, glyphIds, i, idDelta, idRangeOffset, index, saveOffset, segCount, segCountX2, start, startCode, tail, _i, _j, _k, _len;
+	      this.platformID = data.readUInt16();
+	      this.encodingID = data.readShort();
+	      this.offset = offset + data.readInt();
+	      saveOffset = data.pos;
+	      data.pos = this.offset;
+	      this.format = data.readUInt16();
+	      this.length = data.readUInt16();
+	      this.language = data.readUInt16();
+	      this.isUnicode = (this.platformID === 3 && this.encodingID === 1 && this.format === 4) || this.platformID === 0 && this.format === 4;
+	      this.codeMap = {};
+	      switch (this.format) {
+	        case 0:
+	          for (i = _i = 0; _i < 256; i = ++_i) {
+	            this.codeMap[i] = data.readByte();
+	          }
+	          break;
+	        case 4:
+	          segCountX2 = data.readUInt16();
+	          segCount = segCountX2 / 2;
+	          data.pos += 6;
+	          endCode = (function() {
+	            var _j, _results;
+	            _results = [];
+	            for (i = _j = 0; 0 <= segCount ? _j < segCount : _j > segCount; i = 0 <= segCount ? ++_j : --_j) {
+	              _results.push(data.readUInt16());
+	            }
+	            return _results;
+	          })();
+	          data.pos += 2;
+	          startCode = (function() {
+	            var _j, _results;
+	            _results = [];
+	            for (i = _j = 0; 0 <= segCount ? _j < segCount : _j > segCount; i = 0 <= segCount ? ++_j : --_j) {
+	              _results.push(data.readUInt16());
+	            }
+	            return _results;
+	          })();
+	          idDelta = (function() {
+	            var _j, _results;
+	            _results = [];
+	            for (i = _j = 0; 0 <= segCount ? _j < segCount : _j > segCount; i = 0 <= segCount ? ++_j : --_j) {
+	              _results.push(data.readUInt16());
+	            }
+	            return _results;
+	          })();
+	          idRangeOffset = (function() {
+	            var _j, _results;
+	            _results = [];
+	            for (i = _j = 0; 0 <= segCount ? _j < segCount : _j > segCount; i = 0 <= segCount ? ++_j : --_j) {
+	              _results.push(data.readUInt16());
+	            }
+	            return _results;
+	          })();
+	          count = (this.length - data.pos + this.offset) / 2;
+	          glyphIds = (function() {
+	            var _j, _results;
+	            _results = [];
+	            for (i = _j = 0; 0 <= count ? _j < count : _j > count; i = 0 <= count ? ++_j : --_j) {
+	              _results.push(data.readUInt16());
+	            }
+	            return _results;
+	          })();
+	          for (i = _j = 0, _len = endCode.length; _j < _len; i = ++_j) {
+	            tail = endCode[i];
+	            start = startCode[i];
+	            for (code = _k = start; start <= tail ? _k <= tail : _k >= tail; code = start <= tail ? ++_k : --_k) {
+	              if (idRangeOffset[i] === 0) {
+	                glyphId = code + idDelta[i];
+	              } else {
+	                index = idRangeOffset[i] / 2 + (code - start) - (segCount - i);
+	                glyphId = glyphIds[index] || 0;
+	                if (glyphId !== 0) {
+	                  glyphId += idDelta[i];
+	                }
+	              }
+	              this.codeMap[code] = glyphId & 0xFFFF;
+	            }
+	          }
+	      }
+	      data.pos = saveOffset;
+	    }
+
+	    CmapEntry.encode = function(charmap, encoding) {
+	      var charMap, code, codeMap, codes, delta, deltas, diff, endCode, endCodes, entrySelector, glyphIDs, i, id, indexes, last, map, nextID, offset, old, rangeOffsets, rangeShift, result, searchRange, segCount, segCountX2, startCode, startCodes, startGlyph, subtable, _i, _j, _k, _l, _len, _len1, _len2, _len3, _len4, _len5, _len6, _len7, _m, _n, _name, _o, _p, _q;
+	      subtable = new Data;
+	      codes = Object.keys(charmap).sort(function(a, b) {
+	        return a - b;
+	      });
+	      switch (encoding) {
+	        case 'macroman':
+	          id = 0;
+	          indexes = (function() {
+	            var _i, _results;
+	            _results = [];
+	            for (i = _i = 0; _i < 256; i = ++_i) {
+	              _results.push(0);
+	            }
+	            return _results;
+	          })();
+	          map = {
+	            0: 0
+	          };
+	          codeMap = {};
+	          for (_i = 0, _len = codes.length; _i < _len; _i++) {
+	            code = codes[_i];
+	            if (map[_name = charmap[code]] == null) {
+	              map[_name] = ++id;
+	            }
+	            codeMap[code] = {
+	              old: charmap[code],
+	              "new": map[charmap[code]]
+	            };
+	            indexes[code] = map[charmap[code]];
+	          }
+	          subtable.writeUInt16(1);
+	          subtable.writeUInt16(0);
+	          subtable.writeUInt32(12);
+	          subtable.writeUInt16(0);
+	          subtable.writeUInt16(262);
+	          subtable.writeUInt16(0);
+	          subtable.write(indexes);
+	          return result = {
+	            charMap: codeMap,
+	            subtable: subtable.data,
+	            maxGlyphID: id + 1
+	          };
+	        case 'unicode':
+	          startCodes = [];
+	          endCodes = [];
+	          nextID = 0;
+	          map = {};
+	          charMap = {};
+	          last = diff = null;
+	          for (_j = 0, _len1 = codes.length; _j < _len1; _j++) {
+	            code = codes[_j];
+	            old = charmap[code];
+	            if (map[old] == null) {
+	              map[old] = ++nextID;
+	            }
+	            charMap[code] = {
+	              old: old,
+	              "new": map[old]
+	            };
+	            delta = map[old] - code;
+	            if ((last == null) || delta !== diff) {
+	              if (last) {
+	                endCodes.push(last);
+	              }
+	              startCodes.push(code);
+	              diff = delta;
+	            }
+	            last = code;
+	          }
+	          if (last) {
+	            endCodes.push(last);
+	          }
+	          endCodes.push(0xFFFF);
+	          startCodes.push(0xFFFF);
+	          segCount = startCodes.length;
+	          segCountX2 = segCount * 2;
+	          searchRange = 2 * Math.pow(Math.log(segCount) / Math.LN2, 2);
+	          entrySelector = Math.log(searchRange / 2) / Math.LN2;
+	          rangeShift = 2 * segCount - searchRange;
+	          deltas = [];
+	          rangeOffsets = [];
+	          glyphIDs = [];
+	          for (i = _k = 0, _len2 = startCodes.length; _k < _len2; i = ++_k) {
+	            startCode = startCodes[i];
+	            endCode = endCodes[i];
+	            if (startCode === 0xFFFF) {
+	              deltas.push(0);
+	              rangeOffsets.push(0);
+	              break;
+	            }
+	            startGlyph = charMap[startCode]["new"];
+	            if (startCode - startGlyph >= 0x8000) {
+	              deltas.push(0);
+	              rangeOffsets.push(2 * (glyphIDs.length + segCount - i));
+	              for (code = _l = startCode; startCode <= endCode ? _l <= endCode : _l >= endCode; code = startCode <= endCode ? ++_l : --_l) {
+	                glyphIDs.push(charMap[code]["new"]);
+	              }
+	            } else {
+	              deltas.push(startGlyph - startCode);
+	              rangeOffsets.push(0);
+	            }
+	          }
+	          subtable.writeUInt16(3);
+	          subtable.writeUInt16(1);
+	          subtable.writeUInt32(12);
+	          subtable.writeUInt16(4);
+	          subtable.writeUInt16(16 + segCount * 8 + glyphIDs.length * 2);
+	          subtable.writeUInt16(0);
+	          subtable.writeUInt16(segCountX2);
+	          subtable.writeUInt16(searchRange);
+	          subtable.writeUInt16(entrySelector);
+	          subtable.writeUInt16(rangeShift);
+	          for (_m = 0, _len3 = endCodes.length; _m < _len3; _m++) {
+	            code = endCodes[_m];
+	            subtable.writeUInt16(code);
+	          }
+	          subtable.writeUInt16(0);
+	          for (_n = 0, _len4 = startCodes.length; _n < _len4; _n++) {
+	            code = startCodes[_n];
+	            subtable.writeUInt16(code);
+	          }
+	          for (_o = 0, _len5 = deltas.length; _o < _len5; _o++) {
+	            delta = deltas[_o];
+	            subtable.writeUInt16(delta);
+	          }
+	          for (_p = 0, _len6 = rangeOffsets.length; _p < _len6; _p++) {
+	            offset = rangeOffsets[_p];
+	            subtable.writeUInt16(offset);
+	          }
+	          for (_q = 0, _len7 = glyphIDs.length; _q < _len7; _q++) {
+	            id = glyphIDs[_q];
+	            subtable.writeUInt16(id);
+	          }
+	          return result = {
+	            charMap: charMap,
+	            subtable: subtable.data,
+	            maxGlyphID: nextID + 1
+	          };
+	      }
+	    };
+
+	    return CmapEntry;
+
+	  })();
+
+	  module.exports = CmapTable;
+
+	}).call(this);
+
+
+/***/ },
+/* 80 */
+/***/ function(module, exports, __webpack_require__) {
+
+	// Generated by CoffeeScript 1.7.1
+	(function() {
+	  var Data, HmtxTable, Table,
+	    __hasProp = {}.hasOwnProperty,
+	    __extends = function(child, parent) { for (var key in parent) { if (__hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; };
+
+	  Table = __webpack_require__(76);
+
+	  Data = __webpack_require__(72);
+
+	  HmtxTable = (function(_super) {
+	    __extends(HmtxTable, _super);
+
+	    function HmtxTable() {
+	      return HmtxTable.__super__.constructor.apply(this, arguments);
+	    }
+
+	    HmtxTable.prototype.tag = 'hmtx';
+
+	    HmtxTable.prototype.parse = function(data) {
+	      var i, last, lsbCount, m, _i, _j, _ref, _results;
+	      data.pos = this.offset;
+	      this.metrics = [];
+	      for (i = _i = 0, _ref = this.file.hhea.numberOfMetrics; 0 <= _ref ? _i < _ref : _i > _ref; i = 0 <= _ref ? ++_i : --_i) {
+	        this.metrics.push({
+	          advance: data.readUInt16(),
+	          lsb: data.readInt16()
+	        });
+	      }
+	      lsbCount = this.file.maxp.numGlyphs - this.file.hhea.numberOfMetrics;
+	      this.leftSideBearings = (function() {
+	        var _j, _results;
+	        _results = [];
+	        for (i = _j = 0; 0 <= lsbCount ? _j < lsbCount : _j > lsbCount; i = 0 <= lsbCount ? ++_j : --_j) {
+	          _results.push(data.readInt16());
+	        }
+	        return _results;
+	      })();
+	      this.widths = (function() {
+	        var _j, _len, _ref1, _results;
+	        _ref1 = this.metrics;
+	        _results = [];
+	        for (_j = 0, _len = _ref1.length; _j < _len; _j++) {
+	          m = _ref1[_j];
+	          _results.push(m.advance);
+	        }
+	        return _results;
+	      }).call(this);
+	      last = this.widths[this.widths.length - 1];
+	      _results = [];
+	      for (i = _j = 0; 0 <= lsbCount ? _j < lsbCount : _j > lsbCount; i = 0 <= lsbCount ? ++_j : --_j) {
+	        _results.push(this.widths.push(last));
+	      }
+	      return _results;
+	    };
+
+	    HmtxTable.prototype.forGlyph = function(id) {
+	      var metrics;
+	      if (id in this.metrics) {
+	        return this.metrics[id];
+	      }
+	      return metrics = {
+	        advance: this.metrics[this.metrics.length - 1].advance,
+	        lsb: this.leftSideBearings[id - this.metrics.length]
+	      };
+	    };
+
+	    HmtxTable.prototype.encode = function(mapping) {
+	      var id, metric, table, _i, _len;
+	      table = new Data;
+	      for (_i = 0, _len = mapping.length; _i < _len; _i++) {
+	        id = mapping[_i];
+	        metric = this.forGlyph(id);
+	        table.writeUInt16(metric.advance);
+	        table.writeUInt16(metric.lsb);
+	      }
+	      return table.data;
+	    };
+
+	    return HmtxTable;
+
+	  })(Table);
+
+	  module.exports = HmtxTable;
+
+	}).call(this);
+
+
+/***/ },
+/* 81 */
+/***/ function(module, exports, __webpack_require__) {
+
+	// Generated by CoffeeScript 1.7.1
+	(function() {
+	  var Data, HheaTable, Table,
+	    __hasProp = {}.hasOwnProperty,
+	    __extends = function(child, parent) { for (var key in parent) { if (__hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; };
+
+	  Table = __webpack_require__(76);
+
+	  Data = __webpack_require__(72);
+
+	  HheaTable = (function(_super) {
+	    __extends(HheaTable, _super);
+
+	    function HheaTable() {
+	      return HheaTable.__super__.constructor.apply(this, arguments);
+	    }
+
+	    HheaTable.prototype.tag = 'hhea';
+
+	    HheaTable.prototype.parse = function(data) {
+	      data.pos = this.offset;
+	      this.version = data.readInt();
+	      this.ascender = data.readShort();
+	      this.decender = data.readShort();
+	      this.lineGap = data.readShort();
+	      this.advanceWidthMax = data.readShort();
+	      this.minLeftSideBearing = data.readShort();
+	      this.minRightSideBearing = data.readShort();
+	      this.xMaxExtent = data.readShort();
+	      this.caretSlopeRise = data.readShort();
+	      this.caretSlopeRun = data.readShort();
+	      this.caretOffset = data.readShort();
+	      data.pos += 4 * 2;
+	      this.metricDataFormat = data.readShort();
+	      return this.numberOfMetrics = data.readUInt16();
+	    };
+
+	    HheaTable.prototype.encode = function(ids) {
+	      var i, table, _i, _ref;
+	      table = new Data;
+	      table.writeInt(this.version);
+	      table.writeShort(this.ascender);
+	      table.writeShort(this.decender);
+	      table.writeShort(this.lineGap);
+	      table.writeShort(this.advanceWidthMax);
+	      table.writeShort(this.minLeftSideBearing);
+	      table.writeShort(this.minRightSideBearing);
+	      table.writeShort(this.xMaxExtent);
+	      table.writeShort(this.caretSlopeRise);
+	      table.writeShort(this.caretSlopeRun);
+	      table.writeShort(this.caretOffset);
+	      for (i = _i = 0, _ref = 4 * 2; 0 <= _ref ? _i < _ref : _i > _ref; i = 0 <= _ref ? ++_i : --_i) {
+	        table.writeByte(0);
+	      }
+	      table.writeShort(this.metricDataFormat);
+	      table.writeUInt16(ids.length);
+	      return table.data;
+	    };
+
+	    return HheaTable;
+
+	  })(Table);
+
+	  module.exports = HheaTable;
+
+	}).call(this);
+
+
+/***/ },
+/* 82 */
+/***/ function(module, exports, __webpack_require__) {
+
+	// Generated by CoffeeScript 1.7.1
+	(function() {
+	  var Data, MaxpTable, Table,
+	    __hasProp = {}.hasOwnProperty,
+	    __extends = function(child, parent) { for (var key in parent) { if (__hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; };
+
+	  Table = __webpack_require__(76);
+
+	  Data = __webpack_require__(72);
+
+	  MaxpTable = (function(_super) {
+	    __extends(MaxpTable, _super);
+
+	    function MaxpTable() {
+	      return MaxpTable.__super__.constructor.apply(this, arguments);
+	    }
+
+	    MaxpTable.prototype.tag = 'maxp';
+
+	    MaxpTable.prototype.parse = function(data) {
+	      data.pos = this.offset;
+	      this.version = data.readInt();
+	      this.numGlyphs = data.readUInt16();
+	      this.maxPoints = data.readUInt16();
+	      this.maxContours = data.readUInt16();
+	      this.maxCompositePoints = data.readUInt16();
+	      this.maxComponentContours = data.readUInt16();
+	      this.maxZones = data.readUInt16();
+	      this.maxTwilightPoints = data.readUInt16();
+	      this.maxStorage = data.readUInt16();
+	      this.maxFunctionDefs = data.readUInt16();
+	      this.maxInstructionDefs = data.readUInt16();
+	      this.maxStackElements = data.readUInt16();
+	      this.maxSizeOfInstructions = data.readUInt16();
+	      this.maxComponentElements = data.readUInt16();
+	      return this.maxComponentDepth = data.readUInt16();
+	    };
+
+	    MaxpTable.prototype.encode = function(ids) {
+	      var table;
+	      table = new Data;
+	      table.writeInt(this.version);
+	      table.writeUInt16(ids.length);
+	      table.writeUInt16(this.maxPoints);
+	      table.writeUInt16(this.maxContours);
+	      table.writeUInt16(this.maxCompositePoints);
+	      table.writeUInt16(this.maxComponentContours);
+	      table.writeUInt16(this.maxZones);
+	      table.writeUInt16(this.maxTwilightPoints);
+	      table.writeUInt16(this.maxStorage);
+	      table.writeUInt16(this.maxFunctionDefs);
+	      table.writeUInt16(this.maxInstructionDefs);
+	      table.writeUInt16(this.maxStackElements);
+	      table.writeUInt16(this.maxSizeOfInstructions);
+	      table.writeUInt16(this.maxComponentElements);
+	      table.writeUInt16(this.maxComponentDepth);
+	      return table.data;
+	    };
+
+	    return MaxpTable;
+
+	  })(Table);
+
+	  module.exports = MaxpTable;
+
+	}).call(this);
+
+
+/***/ },
+/* 83 */
+/***/ function(module, exports, __webpack_require__) {
+
+	// Generated by CoffeeScript 1.7.1
+	(function() {
+	  var Data, PostTable, Table,
+	    __hasProp = {}.hasOwnProperty,
+	    __extends = function(child, parent) { for (var key in parent) { if (__hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; };
+
+	  Table = __webpack_require__(76);
+
+	  Data = __webpack_require__(72);
+
+	  PostTable = (function(_super) {
+	    var POSTSCRIPT_GLYPHS;
+
+	    __extends(PostTable, _super);
+
+	    function PostTable() {
+	      return PostTable.__super__.constructor.apply(this, arguments);
+	    }
+
+	    PostTable.prototype.tag = 'post';
+
+	    PostTable.prototype.parse = function(data) {
+	      var i, length, numberOfGlyphs, _i, _results;
+	      data.pos = this.offset;
+	      this.format = data.readInt();
+	      this.italicAngle = data.readInt();
+	      this.underlinePosition = data.readShort();
+	      this.underlineThickness = data.readShort();
+	      this.isFixedPitch = data.readInt();
+	      this.minMemType42 = data.readInt();
+	      this.maxMemType42 = data.readInt();
+	      this.minMemType1 = data.readInt();
+	      this.maxMemType1 = data.readInt();
+	      switch (this.format) {
+	        case 0x00010000:
+	          break;
+	        case 0x00020000:
+	          numberOfGlyphs = data.readUInt16();
+	          this.glyphNameIndex = [];
+	          for (i = _i = 0; 0 <= numberOfGlyphs ? _i < numberOfGlyphs : _i > numberOfGlyphs; i = 0 <= numberOfGlyphs ? ++_i : --_i) {
+	            this.glyphNameIndex.push(data.readUInt16());
+	          }
+	          this.names = [];
+	          _results = [];
+	          while (data.pos < this.offset + this.length) {
+	            length = data.readByte();
+	            _results.push(this.names.push(data.readString(length)));
+	          }
+	          return _results;
+	          break;
+	        case 0x00025000:
+	          numberOfGlyphs = data.readUInt16();
+	          return this.offsets = data.read(numberOfGlyphs);
+	        case 0x00030000:
+	          break;
+	        case 0x00040000:
+	          return this.map = (function() {
+	            var _j, _ref, _results1;
+	            _results1 = [];
+	            for (i = _j = 0, _ref = this.file.maxp.numGlyphs; 0 <= _ref ? _j < _ref : _j > _ref; i = 0 <= _ref ? ++_j : --_j) {
+	              _results1.push(data.readUInt32());
+	            }
+	            return _results1;
+	          }).call(this);
+	      }
+	    };
+
+	    PostTable.prototype.glyphFor = function(code) {
+	      var index;
+	      switch (this.format) {
+	        case 0x00010000:
+	          return POSTSCRIPT_GLYPHS[code] || '.notdef';
+	        case 0x00020000:
+	          index = this.glyphNameIndex[code];
+	          if (index <= 257) {
+	            return POSTSCRIPT_GLYPHS[index];
+	          } else {
+	            return this.names[index - 258] || '.notdef';
+	          }
+	          break;
+	        case 0x00025000:
+	          return POSTSCRIPT_GLYPHS[code + this.offsets[code]] || '.notdef';
+	        case 0x00030000:
+	          return '.notdef';
+	        case 0x00040000:
+	          return this.map[code] || 0xFFFF;
+	      }
+	    };
+
+	    PostTable.prototype.encode = function(mapping) {
+	      var id, index, indexes, position, post, raw, string, strings, table, _i, _j, _k, _len, _len1, _len2;
+	      if (!this.exists) {
+	        return null;
+	      }
+	      raw = this.raw();
+	      if (this.format === 0x00030000) {
+	        return raw;
+	      }
+	      table = new Data(raw.slice(0, 32));
+	      table.writeUInt32(0x00020000);
+	      table.pos = 32;
+	      indexes = [];
+	      strings = [];
+	      for (_i = 0, _len = mapping.length; _i < _len; _i++) {
+	        id = mapping[_i];
+	        post = this.glyphFor(id);
+	        position = POSTSCRIPT_GLYPHS.indexOf(post);
+	        if (position !== -1) {
+	          indexes.push(position);
+	        } else {
+	          indexes.push(257 + strings.length);
+	          strings.push(post);
+	        }
+	      }
+	      table.writeUInt16(Object.keys(mapping).length);
+	      for (_j = 0, _len1 = indexes.length; _j < _len1; _j++) {
+	        index = indexes[_j];
+	        table.writeUInt16(index);
+	      }
+	      for (_k = 0, _len2 = strings.length; _k < _len2; _k++) {
+	        string = strings[_k];
+	        table.writeByte(string.length);
+	        table.writeString(string);
+	      }
+	      return table.data;
+	    };
+
+	    POSTSCRIPT_GLYPHS = '.notdef .null nonmarkingreturn space exclam quotedbl numbersign dollar percent\nampersand quotesingle parenleft parenright asterisk plus comma hyphen period slash\nzero one two three four five six seven eight nine colon semicolon less equal greater\nquestion 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\nbracketleft backslash bracketright asciicircum underscore grave\na 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\nbraceleft bar braceright asciitilde Adieresis Aring Ccedilla Eacute Ntilde Odieresis\nUdieresis aacute agrave acircumflex adieresis atilde aring ccedilla eacute egrave\necircumflex edieresis iacute igrave icircumflex idieresis ntilde oacute ograve\nocircumflex odieresis otilde uacute ugrave ucircumflex udieresis dagger degree cent\nsterling section bullet paragraph germandbls registered copyright trademark acute\ndieresis notequal AE Oslash infinity plusminus lessequal greaterequal yen mu\npartialdiff summation product pi integral ordfeminine ordmasculine Omega ae oslash\nquestiondown exclamdown logicalnot radical florin approxequal Delta guillemotleft\nguillemotright ellipsis nonbreakingspace Agrave Atilde Otilde OE oe endash emdash\nquotedblleft quotedblright quoteleft quoteright divide lozenge ydieresis Ydieresis\nfraction currency guilsinglleft guilsinglright fi fl daggerdbl periodcentered\nquotesinglbase quotedblbase perthousand Acircumflex Ecircumflex Aacute Edieresis\nEgrave Iacute Icircumflex Idieresis Igrave Oacute Ocircumflex apple Ograve Uacute\nUcircumflex Ugrave dotlessi circumflex tilde macron breve dotaccent ring cedilla\nhungarumlaut ogonek caron Lslash lslash Scaron scaron Zcaron zcaron brokenbar Eth\neth Yacute yacute Thorn thorn minus multiply onesuperior twosuperior threesuperior\nonehalf onequarter threequarters franc Gbreve gbreve Idotaccent Scedilla scedilla\nCacute cacute Ccaron ccaron dcroat'.split(/\s+/g);
+
+	    return PostTable;
+
+	  })(Table);
+
+	  module.exports = PostTable;
+
+	}).call(this);
+
+
+/***/ },
+/* 84 */
+/***/ function(module, exports, __webpack_require__) {
+
+	// Generated by CoffeeScript 1.7.1
+	(function() {
+	  var OS2Table, Table,
+	    __hasProp = {}.hasOwnProperty,
+	    __extends = function(child, parent) { for (var key in parent) { if (__hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; };
+
+	  Table = __webpack_require__(76);
+
+	  OS2Table = (function(_super) {
+	    __extends(OS2Table, _super);
+
+	    function OS2Table() {
+	      return OS2Table.__super__.constructor.apply(this, arguments);
+	    }
+
+	    OS2Table.prototype.tag = 'OS/2';
+
+	    OS2Table.prototype.parse = function(data) {
+	      var i;
+	      data.pos = this.offset;
+	      this.version = data.readUInt16();
+	      this.averageCharWidth = data.readShort();
+	      this.weightClass = data.readUInt16();
+	      this.widthClass = data.readUInt16();
+	      this.type = data.readShort();
+	      this.ySubscriptXSize = data.readShort();
+	      this.ySubscriptYSize = data.readShort();
+	      this.ySubscriptXOffset = data.readShort();
+	      this.ySubscriptYOffset = data.readShort();
+	      this.ySuperscriptXSize = data.readShort();
+	      this.ySuperscriptYSize = data.readShort();
+	      this.ySuperscriptXOffset = data.readShort();
+	      this.ySuperscriptYOffset = data.readShort();
+	      this.yStrikeoutSize = data.readShort();
+	      this.yStrikeoutPosition = data.readShort();
+	      this.familyClass = data.readShort();
+	      this.panose = (function() {
+	        var _i, _results;
+	        _results = [];
+	        for (i = _i = 0; _i < 10; i = ++_i) {
+	          _results.push(data.readByte());
+	        }
+	        return _results;
+	      })();
+	      this.charRange = (function() {
+	        var _i, _results;
+	        _results = [];
+	        for (i = _i = 0; _i < 4; i = ++_i) {
+	          _results.push(data.readInt());
+	        }
+	        return _results;
+	      })();
+	      this.vendorID = data.readString(4);
+	      this.selection = data.readShort();
+	      this.firstCharIndex = data.readShort();
+	      this.lastCharIndex = data.readShort();
+	      if (this.version > 0) {
+	        this.ascent = data.readShort();
+	        this.descent = data.readShort();
+	        this.lineGap = data.readShort();
+	        this.winAscent = data.readShort();
+	        this.winDescent = data.readShort();
+	        this.codePageRange = (function() {
+	          var _i, _results;
+	          _results = [];
+	          for (i = _i = 0; _i < 2; i = ++_i) {
+	            _results.push(data.readInt());
+	          }
+	          return _results;
+	        })();
+	        if (this.version > 1) {
+	          this.xHeight = data.readShort();
+	          this.capHeight = data.readShort();
+	          this.defaultChar = data.readShort();
+	          this.breakChar = data.readShort();
+	          return this.maxContext = data.readShort();
+	        }
+	      }
+	    };
+
+	    OS2Table.prototype.encode = function() {
+	      return this.raw();
+	    };
+
+	    return OS2Table;
+
+	  })(Table);
+
+	  module.exports = OS2Table;
+
+	}).call(this);
+
+
+/***/ },
+/* 85 */
+/***/ function(module, exports, __webpack_require__) {
+
+	// Generated by CoffeeScript 1.7.1
+	(function() {
+	  var Data, LocaTable, Table,
+	    __hasProp = {}.hasOwnProperty,
+	    __extends = function(child, parent) { for (var key in parent) { if (__hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; };
+
+	  Table = __webpack_require__(76);
+
+	  Data = __webpack_require__(72);
+
+	  LocaTable = (function(_super) {
+	    __extends(LocaTable, _super);
+
+	    function LocaTable() {
+	      return LocaTable.__super__.constructor.apply(this, arguments);
+	    }
+
+	    LocaTable.prototype.tag = 'loca';
+
+	    LocaTable.prototype.parse = function(data) {
+	      var format, i;
+	      data.pos = this.offset;
+	      format = this.file.head.indexToLocFormat;
+	      if (format === 0) {
+	        return this.offsets = (function() {
+	          var _i, _ref, _results;
+	          _results = [];
+	          for (i = _i = 0, _ref = this.length; _i < _ref; i = _i += 2) {
+	            _results.push(data.readUInt16() * 2);
+	          }
+	          return _results;
+	        }).call(this);
+	      } else {
+	        return this.offsets = (function() {
+	          var _i, _ref, _results;
+	          _results = [];
+	          for (i = _i = 0, _ref = this.length; _i < _ref; i = _i += 4) {
+	            _results.push(data.readUInt32());
+	          }
+	          return _results;
+	        }).call(this);
+	      }
+	    };
+
+	    LocaTable.prototype.indexOf = function(id) {
+	      return this.offsets[id];
+	    };
+
+	    LocaTable.prototype.lengthOf = function(id) {
+	      return this.offsets[id + 1] - this.offsets[id];
+	    };
+
+	    LocaTable.prototype.encode = function(offsets) {
+	      var o, offset, ret, table, _i, _j, _k, _len, _len1, _len2, _ref;
+	      table = new Data;
+	      for (_i = 0, _len = offsets.length; _i < _len; _i++) {
+	        offset = offsets[_i];
+	        if (!(offset > 0xFFFF)) {
+	          continue;
+	        }
+	        _ref = this.offsets;
+	        for (_j = 0, _len1 = _ref.length; _j < _len1; _j++) {
+	          o = _ref[_j];
+	          table.writeUInt32(o);
+	        }
+	        return ret = {
+	          format: 1,
+	          table: table.data
+	        };
+	      }
+	      for (_k = 0, _len2 = offsets.length; _k < _len2; _k++) {
+	        o = offsets[_k];
+	        table.writeUInt16(o / 2);
+	      }
+	      return ret = {
+	        format: 0,
+	        table: table.data
+	      };
+	    };
+
+	    return LocaTable;
+
+	  })(Table);
+
+	  module.exports = LocaTable;
+
+	}).call(this);
+
+
+/***/ },
+/* 86 */
+/***/ function(module, exports, __webpack_require__) {
+
+	// Generated by CoffeeScript 1.7.1
+	(function() {
+	  var CompoundGlyph, Data, GlyfTable, SimpleGlyph, Table,
+	    __hasProp = {}.hasOwnProperty,
+	    __extends = function(child, parent) { for (var key in parent) { if (__hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; },
+	    __slice = [].slice;
+
+	  Table = __webpack_require__(76);
+
+	  Data = __webpack_require__(72);
+
+	  GlyfTable = (function(_super) {
+	    __extends(GlyfTable, _super);
+
+	    function GlyfTable() {
+	      return GlyfTable.__super__.constructor.apply(this, arguments);
+	    }
+
+	    GlyfTable.prototype.tag = 'glyf';
+
+	    GlyfTable.prototype.parse = function(data) {
+	      return this.cache = {};
+	    };
+
+	    GlyfTable.prototype.glyphFor = function(id) {
+	      var data, index, length, loca, numberOfContours, raw, xMax, xMin, yMax, yMin;
+	      if (id in this.cache) {
+	        return this.cache[id];
+	      }
+	      loca = this.file.loca;
+	      data = this.file.contents;
+	      index = loca.indexOf(id);
+	      length = loca.lengthOf(id);
+	      if (length === 0) {
+	        return this.cache[id] = null;
+	      }
+	      data.pos = this.offset + index;
+	      raw = new Data(data.read(length));
+	      numberOfContours = raw.readShort();
+	      xMin = raw.readShort();
+	      yMin = raw.readShort();
+	      xMax = raw.readShort();
+	      yMax = raw.readShort();
+	      if (numberOfContours === -1) {
+	        this.cache[id] = new CompoundGlyph(raw, xMin, yMin, xMax, yMax);
+	      } else {
+	        this.cache[id] = new SimpleGlyph(raw, numberOfContours, xMin, yMin, xMax, yMax);
+	      }
+	      return this.cache[id];
+	    };
+
+	    GlyfTable.prototype.encode = function(glyphs, mapping, old2new) {
+	      var glyph, id, offsets, table, _i, _len;
+	      table = [];
+	      offsets = [];
+	      for (_i = 0, _len = mapping.length; _i < _len; _i++) {
+	        id = mapping[_i];
+	        glyph = glyphs[id];
+	        offsets.push(table.length);
+	        if (glyph) {
+	          table = table.concat(glyph.encode(old2new));
+	        }
+	      }
+	      offsets.push(table.length);
+	      return {
+	        table: table,
+	        offsets: offsets
+	      };
+	    };
+
+	    return GlyfTable;
+
+	  })(Table);
+
+	  SimpleGlyph = (function() {
+	    function SimpleGlyph(raw, numberOfContours, xMin, yMin, xMax, yMax) {
+	      this.raw = raw;
+	      this.numberOfContours = numberOfContours;
+	      this.xMin = xMin;
+	      this.yMin = yMin;
+	      this.xMax = xMax;
+	      this.yMax = yMax;
+	      this.compound = false;
+	    }
+
+	    SimpleGlyph.prototype.encode = function() {
+	      return this.raw.data;
+	    };
+
+	    return SimpleGlyph;
+
+	  })();
+
+	  CompoundGlyph = (function() {
+	    var ARG_1_AND_2_ARE_WORDS, MORE_COMPONENTS, WE_HAVE_AN_X_AND_Y_SCALE, WE_HAVE_A_SCALE, WE_HAVE_A_TWO_BY_TWO, WE_HAVE_INSTRUCTIONS;
+
+	    ARG_1_AND_2_ARE_WORDS = 0x0001;
+
+	    WE_HAVE_A_SCALE = 0x0008;
+
+	    MORE_COMPONENTS = 0x0020;
+
+	    WE_HAVE_AN_X_AND_Y_SCALE = 0x0040;
+
+	    WE_HAVE_A_TWO_BY_TWO = 0x0080;
+
+	    WE_HAVE_INSTRUCTIONS = 0x0100;
+
+	    function CompoundGlyph(raw, xMin, yMin, xMax, yMax) {
+	      var data, flags;
+	      this.raw = raw;
+	      this.xMin = xMin;
+	      this.yMin = yMin;
+	      this.xMax = xMax;
+	      this.yMax = yMax;
+	      this.compound = true;
+	      this.glyphIDs = [];
+	      this.glyphOffsets = [];
+	      data = this.raw;
+	      while (true) {
+	        flags = data.readShort();
+	        this.glyphOffsets.push(data.pos);
+	        this.glyphIDs.push(data.readShort());
+	        if (!(flags & MORE_COMPONENTS)) {
+	          break;
+	        }
+	        if (flags & ARG_1_AND_2_ARE_WORDS) {
+	          data.pos += 4;
+	        } else {
+	          data.pos += 2;
+	        }
+	        if (flags & WE_HAVE_A_TWO_BY_TWO) {
+	          data.pos += 8;
+	        } else if (flags & WE_HAVE_AN_X_AND_Y_SCALE) {
+	          data.pos += 4;
+	        } else if (flags & WE_HAVE_A_SCALE) {
+	          data.pos += 2;
+	        }
+	      }
+	    }
+
+	    CompoundGlyph.prototype.encode = function(mapping) {
+	      var i, id, result, _i, _len, _ref;
+	      result = new Data(__slice.call(this.raw.data));
+	      _ref = this.glyphIDs;
+	      for (i = _i = 0, _len = _ref.length; _i < _len; i = ++_i) {
+	        id = _ref[i];
+	        result.pos = this.glyphOffsets[i];
+	        result.writeShort(mapping[id]);
+	      }
+	      return result.data;
+	    };
+
+	    return CompoundGlyph;
+
+	  })();
+
+	  module.exports = GlyfTable;
+
+	}).call(this);
+
+
+/***/ },
+/* 87 */
+/***/ function(module, exports, __webpack_require__) {
+
+	// Generated by CoffeeScript 1.7.1
+	(function() {
+	  var AFMFont, fs;
+
+	  fs = __webpack_require__(44);
+
+	  AFMFont = (function() {
+	    var WIN_ANSI_MAP, characters;
+
+	    AFMFont.open = function(filename) {
+	      return new AFMFont(fs.readFileSync(filename, 'utf8'));
+	    };
+
+	    function AFMFont(contents) {
+	      var e, i;
+	      this.contents = contents;
+	      this.attributes = {};
+	      this.glyphWidths = {};
+	      this.boundingBoxes = {};
+	      this.parse();
+	      this.charWidths = (function() {
+	        var _i, _results;
+	        _results = [];
+	        for (i = _i = 0; _i <= 255; i = ++_i) {
+	          _results.push(this.glyphWidths[characters[i]]);
+	        }
+	        return _results;
+	      }).call(this);
+	      this.bbox = (function() {
+	        var _i, _len, _ref, _results;
+	        _ref = this.attributes['FontBBox'].split(/\s+/);
+	        _results = [];
+	        for (_i = 0, _len = _ref.length; _i < _len; _i++) {
+	          e = _ref[_i];
+	          _results.push(+e);
+	        }
+	        return _results;
+	      }).call(this);
+	      this.ascender = +(this.attributes['Ascender'] || 0);
+	      this.decender = +(this.attributes['Descender'] || 0);
+	      this.lineGap = (this.bbox[3] - this.bbox[1]) - (this.ascender - this.decender);
+	    }
+
+	    AFMFont.prototype.parse = function() {
+	      var a, key, line, match, name, section, value, _i, _len, _ref;
+	      section = '';
+	      _ref = this.contents.split('\n');
+	      for (_i = 0, _len = _ref.length; _i < _len; _i++) {
+	        line = _ref[_i];
+	        if (match = line.match(/^Start(\w+)/)) {
+	          section = match[1];
+	          continue;
+	        } else if (match = line.match(/^End(\w+)/)) {
+	          section = '';
+	          continue;
+	        }
+	        switch (section) {
+	          case 'FontMetrics':
+	            match = line.match(/(^\w+)\s+(.*)/);
+	            key = match[1];
+	            value = match[2];
+	            if (a = this.attributes[key]) {
+	              if (!Array.isArray(a)) {
+	                a = this.attributes[key] = [a];
+	              }
+	              a.push(value);
+	            } else {
+	              this.attributes[key] = value;
+	            }
+	            break;
+	          case 'CharMetrics':
+	            if (!/^CH?\s/.test(line)) {
+	              continue;
+	            }
+	            name = line.match(/\bN\s+(\.?\w+)\s*;/)[1];
+	            this.glyphWidths[name] = +line.match(/\bWX\s+(\d+)\s*;/)[1];
+	        }
+	      }
+	    };
+
+	    WIN_ANSI_MAP = {
+	      402: 131,
+	      8211: 150,
+	      8212: 151,
+	      8216: 145,
+	      8217: 146,
+	      8218: 130,
+	      8220: 147,
+	      8221: 148,
+	      8222: 132,
+	      8224: 134,
+	      8225: 135,
+	      8226: 149,
+	      8230: 133,
+	      8364: 128,
+	      8240: 137,
+	      8249: 139,
+	      8250: 155,
+	      710: 136,
+	      8482: 153,
+	      338: 140,
+	      339: 156,
+	      732: 152,
+	      352: 138,
+	      353: 154,
+	      376: 159,
+	      381: 142,
+	      382: 158
+	    };
+
+	    AFMFont.prototype.encodeText = function(text) {
+	      var char, i, string, _i, _ref;
+	      string = '';
+	      for (i = _i = 0, _ref = text.length; 0 <= _ref ? _i < _ref : _i > _ref; i = 0 <= _ref ? ++_i : --_i) {
+	        char = text.charCodeAt(i);
+	        char = WIN_ANSI_MAP[char] || char;
+	        string += String.fromCharCode(char);
+	      }
+	      return string;
+	    };
+
+	    AFMFont.prototype.characterToGlyph = function(character) {
+	      return characters[WIN_ANSI_MAP[character] || character];
+	    };
+
+	    AFMFont.prototype.widthOfGlyph = function(glyph) {
+	      return this.glyphWidths[glyph];
+	    };
+
+	    characters = '.notdef       .notdef        .notdef        .notdef\n.notdef       .notdef        .notdef        .notdef\n.notdef       .notdef        .notdef        .notdef\n.notdef       .notdef        .notdef        .notdef\n.notdef       .notdef        .notdef        .notdef\n.notdef       .notdef        .notdef        .notdef\n.notdef       .notdef        .notdef        .notdef\n.notdef       .notdef        .notdef        .notdef\n\nspace         exclam         quotedbl       numbersign\ndollar        percent        ampersand      quotesingle\nparenleft     parenright     asterisk       plus\ncomma         hyphen         period         slash\nzero          one            two            three\nfour          five           six            seven\neight         nine           colon          semicolon\nless          equal          greater        question\n\nat            A              B              C\nD             E              F              G\nH             I              J              K\nL             M              N              O\nP             Q              R              S\nT             U              V              W\nX             Y              Z              bracketleft\nbackslash     bracketright   asciicircum    underscore\n\ngrave         a              b              c\nd             e              f              g\nh             i              j              k\nl             m              n              o\np             q              r              s\nt             u              v              w\nx             y              z              braceleft\nbar           braceright     asciitilde     .notdef\n\nEuro          .notdef        quotesinglbase florin\nquotedblbase  ellipsis       dagger         daggerdbl\ncircumflex    perthousand    Scaron         guilsinglleft\nOE            .notdef        Zcaron         .notdef\n.notdef       quoteleft      quoteright     quotedblleft\nquotedblright bullet         endash         emdash\ntilde         trademark      scaron         guilsinglright\noe            .notdef        zcaron         ydieresis\n\nspace         exclamdown     cent           sterling\ncurrency      yen            brokenbar      section\ndieresis      copyright      ordfeminine    guillemotleft\nlogicalnot    hyphen         registered     macron\ndegree        plusminus      twosuperior    threesuperior\nacute         mu             paragraph      periodcentered\ncedilla       onesuperior    ordmasculine   guillemotright\nonequarter    onehalf        threequarters  questiondown\n\nAgrave        Aacute         Acircumflex    Atilde\nAdieresis     Aring          AE             Ccedilla\nEgrave        Eacute         Ecircumflex    Edieresis\nIgrave        Iacute         Icircumflex    Idieresis\nEth           Ntilde         Ograve         Oacute\nOcircumflex   Otilde         Odieresis      multiply\nOslash        Ugrave         Uacute         Ucircumflex\nUdieresis     Yacute         Thorn          germandbls\n\nagrave        aacute         acircumflex    atilde\nadieresis     aring          ae             ccedilla\negrave        eacute         ecircumflex    edieresis\nigrave        iacute         icircumflex    idieresis\neth           ntilde         ograve         oacute\nocircumflex   otilde         odieresis      divide\noslash        ugrave         uacute         ucircumflex\nudieresis     yacute         thorn          ydieresis'.split(/\s+/);
+
+	    return AFMFont;
+
+	  })();
+
+	  module.exports = AFMFont;
+
+	}).call(this);
+
+
+/***/ },
+/* 88 */
+/***/ function(module, exports, __webpack_require__) {
+
+	// Generated by CoffeeScript 1.7.1
+	(function() {
+	  var CmapTable, Subset, utils,
+	    __indexOf = [].indexOf || function(item) { for (var i = 0, l = this.length; i < l; i++) { if (i in this && this[i] === item) return i; } return -1; };
+
+	  CmapTable = __webpack_require__(79);
+
+	  utils = __webpack_require__(77);
+
+	  Subset = (function() {
+	    function Subset(font) {
+	      this.font = font;
+	      this.subset = {};
+	      this.unicodes = {};
+	      this.next = 33;
+	    }
+
+	    Subset.prototype.use = function(character) {
+	      var i, _i, _ref;
+	      if (typeof character === 'string') {
+	        for (i = _i = 0, _ref = character.length; 0 <= _ref ? _i < _ref : _i > _ref; i = 0 <= _ref ? ++_i : --_i) {
+	          this.use(character.charCodeAt(i));
+	        }
+	        return;
+	      }
+	      if (!this.unicodes[character]) {
+	        this.subset[this.next] = character;
+	        return this.unicodes[character] = this.next++;
+	      }
+	    };
+
+	    Subset.prototype.encodeText = function(text) {
+	      var char, i, string, _i, _ref;
+	      string = '';
+	      for (i = _i = 0, _ref = text.length; 0 <= _ref ? _i < _ref : _i > _ref; i = 0 <= _ref ? ++_i : --_i) {
+	        char = this.unicodes[text.charCodeAt(i)];
+	        string += String.fromCharCode(char);
+	      }
+	      return string;
+	    };
+
+	    Subset.prototype.generateCmap = function() {
+	      var mapping, roman, unicode, unicodeCmap, _ref;
+	      unicodeCmap = this.font.cmap.tables[0].codeMap;
+	      mapping = {};
+	      _ref = this.subset;
+	      for (roman in _ref) {
+	        unicode = _ref[roman];
+	        mapping[roman] = unicodeCmap[unicode];
+	      }
+	      return mapping;
+	    };
+
+	    Subset.prototype.glyphIDs = function() {
+	      var ret, roman, unicode, unicodeCmap, val, _ref;
+	      unicodeCmap = this.font.cmap.tables[0].codeMap;
+	      ret = [0];
+	      _ref = this.subset;
+	      for (roman in _ref) {
+	        unicode = _ref[roman];
+	        val = unicodeCmap[unicode];
+	        if ((val != null) && __indexOf.call(ret, val) < 0) {
+	          ret.push(val);
+	        }
+	      }
+	      return ret.sort();
+	    };
+
+	    Subset.prototype.glyphsFor = function(glyphIDs) {
+	      var additionalIDs, glyph, glyphs, id, _i, _len, _ref;
+	      glyphs = {};
+	      for (_i = 0, _len = glyphIDs.length; _i < _len; _i++) {
+	        id = glyphIDs[_i];
+	        glyphs[id] = this.font.glyf.glyphFor(id);
+	      }
+	      additionalIDs = [];
+	      for (id in glyphs) {
+	        glyph = glyphs[id];
+	        if (glyph != null ? glyph.compound : void 0) {
+	          additionalIDs.push.apply(additionalIDs, glyph.glyphIDs);
+	        }
+	      }
+	      if (additionalIDs.length > 0) {
+	        _ref = this.glyphsFor(additionalIDs);
+	        for (id in _ref) {
+	          glyph = _ref[id];
+	          glyphs[id] = glyph;
+	        }
+	      }
+	      return glyphs;
+	    };
+
+	    Subset.prototype.encode = function() {
+	      var cmap, code, glyf, glyphs, id, ids, loca, name, new2old, newIDs, nextGlyphID, old2new, oldID, oldIDs, tables, _ref, _ref1;
+	      cmap = CmapTable.encode(this.generateCmap(), 'unicode');
+	      glyphs = this.glyphsFor(this.glyphIDs());
+	      old2new = {
+	        0: 0
+	      };
+	      _ref = cmap.charMap;
+	      for (code in _ref) {
+	        ids = _ref[code];
+	        old2new[ids.old] = ids["new"];
+	      }
+	      nextGlyphID = cmap.maxGlyphID;
+	      for (oldID in glyphs) {
+	        if (!(oldID in old2new)) {
+	          old2new[oldID] = nextGlyphID++;
+	        }
+	      }
+	      new2old = utils.invert(old2new);
+	      newIDs = Object.keys(new2old).sort(function(a, b) {
+	        return a - b;
+	      });
+	      oldIDs = (function() {
+	        var _i, _len, _results;
+	        _results = [];
+	        for (_i = 0, _len = newIDs.length; _i < _len; _i++) {
+	          id = newIDs[_i];
+	          _results.push(new2old[id]);
+	        }
+	        return _results;
+	      })();
+	      glyf = this.font.glyf.encode(glyphs, oldIDs, old2new);
+	      loca = this.font.loca.encode(glyf.offsets);
+	      name = this.font.name.encode();
+	      this.postscriptName = name.postscriptName;
+	      this.cmap = {};
+	      _ref1 = cmap.charMap;
+	      for (code in _ref1) {
+	        ids = _ref1[code];
+	        this.cmap[code] = ids.old;
+	      }
+	      tables = {
+	        cmap: cmap.table,
+	        glyf: glyf.table,
+	        loca: loca.table,
+	        hmtx: this.font.hmtx.encode(oldIDs),
+	        hhea: this.font.hhea.encode(oldIDs),
+	        maxp: this.font.maxp.encode(oldIDs),
+	        post: this.font.post.encode(oldIDs),
+	        name: name.table,
+	        head: this.font.head.encode(loca)
+	      };
+	      if (this.font.os2.exists) {
+	        tables['OS/2'] = this.font.os2.raw();
+	      }
+	      return this.font.directory.encode(tables);
+	    };
+
+	    return Subset;
+
+	  })();
+
+	  module.exports = Subset;
+
+	}).call(this);
+
+
+/***/ },
+/* 89 */
+/***/ function(module, exports, __webpack_require__) {
+
+	// Generated by CoffeeScript 1.7.1
+	(function() {
+	  var LineWrapper;
+
+	  LineWrapper = __webpack_require__(90);
+
+	  module.exports = {
+	    initText: function() {
+	      this.x = 0;
+	      this.y = 0;
+	      return this._lineGap = 0;
+	    },
+	    lineGap: function(_lineGap) {
+	      this._lineGap = _lineGap;
+	      return this;
+	    },
+	    moveDown: function(lines) {
+	      if (lines == null) {
+	        lines = 1;
+	      }
+	      this.y += this.currentLineHeight(true) * lines + this._lineGap;
+	      return this;
+	    },
+	    moveUp: function(lines) {
+	      if (lines == null) {
+	        lines = 1;
+	      }
+	      this.y -= this.currentLineHeight(true) * lines + this._lineGap;
+	      return this;
+	    },
+	    _text: function(text, x, y, options, lineCallback) {
+	      var line, wrapper, _i, _len, _ref;
+	      options = this._initOptions(x, y, options);
+	      text = '' + text;
+	      if (options.wordSpacing) {
+	        text = text.replace(/\s{2,}/g, ' ');
+	      }
+	      if (options.width) {
+	        wrapper = this._wrapper;
+	        if (!wrapper) {
+	          wrapper = new LineWrapper(this, options);
+	          wrapper.on('line', lineCallback);
+	        }
+	        this._wrapper = options.continued ? wrapper : null;
+	        this._textOptions = options.continued ? options : null;
+	        wrapper.wrap(text, options);
+	      } else {
+	        _ref = text.split('\n');
+	        for (_i = 0, _len = _ref.length; _i < _len; _i++) {
+	          line = _ref[_i];
+	          lineCallback(line, options);
+	        }
+	      }
+	      return this;
+	    },
+	    text: function(text, x, y, options) {
+	      return this._text(text, x, y, options, this._line.bind(this));
+	    },
+	    widthOfString: function(string, options) {
+	      if (options == null) {
+	        options = {};
+	      }
+	      return this._font.widthOfString(string, this._fontSize) + (options.characterSpacing || 0) * (string.length - 1);
+	    },
+	    heightOfString: function(text, options) {
+	      var height, lineGap, x, y;
+	      if (options == null) {
+	        options = {};
+	      }
+	      x = this.x, y = this.y;
+	      options = this._initOptions(options);
+	      options.height = Infinity;
+	      lineGap = options.lineGap || this._lineGap || 0;
+	      this._text(text, this.x, this.y, options, (function(_this) {
+	        return function(line, options) {
+	          return _this.y += _this.currentLineHeight(true) + lineGap;
+	        };
+	      })(this));
+	      height = this.y - y;
+	      this.x = x;
+	      this.y = y;
+	      return height;
+	    },
+	    list: function(list, x, y, options, wrapper) {
+	      var flatten, i, indent, itemIndent, items, level, levels, r;
+	      options = this._initOptions(x, y, options);
+	      r = Math.round((this._font.ascender / 1000 * this._fontSize) / 3);
+	      indent = options.textIndent || r * 5;
+	      itemIndent = options.bulletIndent || r * 8;
+	      level = 1;
+	      items = [];
+	      levels = [];
+	      flatten = function(list) {
+	        var i, item, _i, _len, _results;
+	        _results = [];
+	        for (i = _i = 0, _len = list.length; _i < _len; i = ++_i) {
+	          item = list[i];
+	          if (Array.isArray(item)) {
+	            level++;
+	            flatten(item);
+	            _results.push(level--);
+	          } else {
+	            items.push(item);
+	            _results.push(levels.push(level));
+	          }
+	        }
+	        return _results;
+	      };
+	      flatten(list);
+	      wrapper = new LineWrapper(this, options);
+	      wrapper.on('line', this._line.bind(this));
+	      level = 1;
+	      i = 0;
+	      wrapper.on('firstLine', (function(_this) {
+	        return function() {
+	          var diff, l;
+	          if ((l = levels[i++]) !== level) {
+	            diff = itemIndent * (l - level);
+	            _this.x += diff;
+	            wrapper.lineWidth -= diff;
+	            level = l;
+	          }
+	          _this.circle(_this.x - indent + r, _this.y + r + (r / 2), r);
+	          return _this.fill();
+	        };
+	      })(this));
+	      wrapper.on('sectionStart', (function(_this) {
+	        return function() {
+	          var pos;
+	          pos = indent + itemIndent * (level - 1);
+	          _this.x += pos;
+	          return wrapper.lineWidth -= pos;
+	        };
+	      })(this));
+	      wrapper.on('sectionEnd', (function(_this) {
+	        return function() {
+	          var pos;
+	          pos = indent + itemIndent * (level - 1);
+	          _this.x -= pos;
+	          return wrapper.lineWidth += pos;
+	        };
+	      })(this));
+	      wrapper.wrap(items.join('\n'), options);
+	      return this;
+	    },
+	    _initOptions: function(x, y, options) {
+	      var key, margins, val, _ref;
+	      if (x == null) {
+	        x = {};
+	      }
+	      if (options == null) {
+	        options = {};
+	      }
+	      if (typeof x === 'object') {
+	        options = x;
+	        x = null;
+	      }
+	      options = (function() {
+	        var k, opts, v;
+	        opts = {};
+	        for (k in options) {
+	          v = options[k];
+	          opts[k] = v;
+	        }
+	        return opts;
+	      })();
+	      if (this._textOptions) {
+	        _ref = this._textOptions;
+	        for (key in _ref) {
+	          val = _ref[key];
+	          if (key !== 'continued') {
+	            if (options[key] == null) {
+	              options[key] = val;
+	            }
+	          }
+	        }
+	      }
+	      if (x != null) {
+	        this.x = x;
+	      }
+	      if (y != null) {
+	        this.y = y;
+	      }
+	      if (options.lineBreak !== false) {
+	        margins = this.page.margins;
+	        if (options.width == null) {
+	          options.width = this.page.width - this.x - margins.right;
+	        }
+	      }
+	      options.columns || (options.columns = 0);
+	      if (options.columnGap == null) {
+	        options.columnGap = 18;
+	      }
+	      return options;
+	    },
+	    _line: function(text, options, wrapper) {
+	      var lineGap;
+	      if (options == null) {
+	        options = {};
+	      }
+	      this._fragment(text, this.x, this.y, options);
+	      lineGap = options.lineGap || this._lineGap || 0;
+	      if (!wrapper) {
+	        return this.x += this.widthOfString(text);
+	      } else {
+	        return this.y += this.currentLineHeight(true) + lineGap;
+	      }
+	    },
+	    _fragment: function(text, x, y, options) {
+	      var align, characterSpacing, commands, d, encoded, i, lineWidth, lineY, mode, renderedWidth, spaceWidth, textWidth, word, wordSpacing, words, _base, _i, _len, _name;
+	      text = '' + text;
+	      if (text.length === 0) {
+	        return;
+	      }
+	      align = options.align || 'left';
+	      wordSpacing = options.wordSpacing || 0;
+	      characterSpacing = options.characterSpacing || 0;
+	      if (options.width) {
+	        switch (align) {
+	          case 'right':
+	            textWidth = this.widthOfString(text.replace(/\s+$/, ''), options);
+	            x += options.lineWidth - textWidth;
+	            break;
+	          case 'center':
+	            x += options.lineWidth / 2 - options.textWidth / 2;
+	            break;
+	          case 'justify':
+	            words = text.trim().split(/\s+/);
+	            textWidth = this.widthOfString(text.replace(/\s+/g, ''), options);
+	            spaceWidth = this.widthOfString(' ') + characterSpacing;
+	            wordSpacing = Math.max(0, (options.lineWidth - textWidth) / Math.max(1, words.length - 1) - spaceWidth);
+	        }
+	      }
+	      renderedWidth = options.textWidth + (wordSpacing * (options.wordCount - 1)) + (characterSpacing * (text.length - 1));
+	      if (options.link) {
+	        this.link(x, y, renderedWidth, this.currentLineHeight(), options.link);
+	      }
+	      if (options.underline || options.strike) {
+	        this.save();
+	        if (!options.stroke) {
+	          this.strokeColor.apply(this, this._fillColor);
+	        }
+	        lineWidth = this._fontSize < 10 ? 0.5 : Math.floor(this._fontSize / 10);
+	        this.lineWidth(lineWidth);
+	        d = options.underline ? 1 : 2;
+	        lineY = y + this.currentLineHeight() / d;
+	        if (options.underline) {
+	          lineY -= lineWidth;
+	        }
+	        this.moveTo(x, lineY);
+	        this.lineTo(x + renderedWidth, lineY);
+	        this.stroke();
+	        this.restore();
+	      }
+	      this.save();
+	      this.transform(1, 0, 0, -1, 0, this.page.height);
+	      y = this.page.height - y - (this._font.ascender / 1000 * this._fontSize);
+	      if ((_base = this.page.fonts)[_name = this._font.id] == null) {
+	        _base[_name] = this._font.ref();
+	      }
+	      this._font.use(text);
+	      this.addContent("BT");
+	      this.addContent("" + x + " " + y + " Td");
+	      this.addContent("/" + this._font.id + " " + this._fontSize + " Tf");
+	      mode = options.fill && options.stroke ? 2 : options.stroke ? 1 : 0;
+	      if (mode) {
+	        this.addContent("" + mode + " Tr");
+	      }
+	      if (characterSpacing) {
+	        this.addContent("" + characterSpacing + " Tc");
+	      }
+	      if (wordSpacing) {
+	        words = text.trim().split(/\s+/);
+	        wordSpacing += this.widthOfString(' ') + characterSpacing;
+	        wordSpacing *= 1000 / this._fontSize;
+	        commands = [];
+	        for (_i = 0, _len = words.length; _i < _len; _i++) {
+	          word = words[_i];
+	          encoded = this._font.encode(word);
+	          encoded = ((function() {
+	            var _j, _ref, _results;
+	            _results = [];
+	            for (i = _j = 0, _ref = encoded.length; _j < _ref; i = _j += 1) {
+	              _results.push(encoded.charCodeAt(i).toString(16));
+	            }
+	            return _results;
+	          })()).join('');
+	          commands.push("<" + encoded + "> " + (-wordSpacing));
+	        }
+	        this.addContent("[" + (commands.join(' ')) + "] TJ");
+	      } else {
+	        encoded = this._font.encode(text);
+	        encoded = ((function() {
+	          var _j, _ref, _results;
+	          _results = [];
+	          for (i = _j = 0, _ref = encoded.length; _j < _ref; i = _j += 1) {
+	            _results.push(encoded.charCodeAt(i).toString(16));
+	          }
+	          return _results;
+	        })()).join('');
+	        this.addContent("<" + encoded + "> Tj");
+	      }
+	      this.addContent("ET");
+	      return this.restore();
+	    }
+	  };
+
+	}).call(this);
+
+
+/***/ },
+/* 90 */
+/***/ function(module, exports, __webpack_require__) {
+
+	// Generated by CoffeeScript 1.7.1
+	(function() {
+	  var EventEmitter, LineBreaker, LineWrapper,
+	    __hasProp = {}.hasOwnProperty,
+	    __extends = function(child, parent) { for (var key in parent) { if (__hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; };
+
+	  EventEmitter = __webpack_require__(26).EventEmitter;
+
+	  LineBreaker = __webpack_require__(91);
+
+	  LineWrapper = (function(_super) {
+	    __extends(LineWrapper, _super);
+
+	    function LineWrapper(document, options) {
+	      var _ref;
+	      this.document = document;
+	      this.indent = options.indent || 0;
+	      this.characterSpacing = options.characterSpacing || 0;
+	      this.wordSpacing = options.wordSpacing === 0;
+	      this.columns = options.columns || 1;
+	      this.columnGap = (_ref = options.columnGap) != null ? _ref : 18;
+	      this.lineWidth = (options.width - (this.columnGap * (this.columns - 1))) / this.columns;
+	      this.spaceLeft = this.lineWidth;
+	      this.startX = this.document.x;
+	      this.startY = this.document.y;
+	      this.column = 1;
+	      this.ellipsis = options.ellipsis;
+	      this.continuedX = 0;
+	      if (options.height != null) {
+	        this.height = options.height;
+	        this.maxY = this.startY + options.height;
+	      } else {
+	        this.maxY = this.document.page.maxY();
+	      }
+	      this.on('firstLine', (function(_this) {
+	        return function(options) {
+	          var indent;
+	          indent = _this.continuedX || _this.indent;
+	          _this.document.x += indent;
+	          _this.lineWidth -= indent;
+	          return _this.once('line', function() {
+	            _this.document.x -= indent;
+	            _this.lineWidth += indent;
+	            if (options.continued && !_this.continuedX) {
+	              _this.continuedX = _this.indent;
+	            }
+	            if (!options.continued) {
+	              return _this.continuedX = 0;
+	            }
+	          });
+	        };
+	      })(this));
+	      this.on('lastLine', (function(_this) {
+	        return function(options) {
+	          var align;
+	          align = options.align;
+	          if (align === 'justify') {
+	            options.align = 'left';
+	          }
+	          _this.lastLine = true;
+	          return _this.once('line', function() {
+	            _this.document.y += options.paragraphGap || 0;
+	            options.align = align;
+	            return _this.lastLine = false;
+	          });
+	        };
+	      })(this));
+	    }
+
+	    LineWrapper.prototype.wordWidth = function(word) {
+	      return this.document.widthOfString(word, this) + this.characterSpacing + this.wordSpacing;
+	    };
+
+	    LineWrapper.prototype.eachWord = function(text, fn) {
+	      var bk, breaker, fbk, l, last, lbk, shouldContinue, w, word, wordWidths;
+	      breaker = new LineBreaker(text);
+	      last = null;
+	      wordWidths = {};
+	      while (bk = breaker.nextBreak()) {
+	        word = text.slice((last != null ? last.position : void 0) || 0, bk.position);
+	        w = wordWidths[word] != null ? wordWidths[word] : wordWidths[word] = this.wordWidth(word);
+	        if (w > this.lineWidth + this.continuedX) {
+	          lbk = last;
+	          fbk = {};
+	          while (word.length) {
+	            l = word.length;
+	            while (w > this.spaceLeft) {
+	              w = this.wordWidth(word.slice(0, --l));
+	            }
+	            fbk.required = l < word.length;
+	            shouldContinue = fn(word.slice(0, l), w, fbk, lbk);
+	            lbk = {
+	              required: false
+	            };
+	            word = word.slice(l);
+	            w = this.wordWidth(word);
+	            if (shouldContinue === false) {
+	              break;
+	            }
+	          }
+	        } else {
+	          shouldContinue = fn(word, w, bk, last);
+	        }
+	        if (shouldContinue === false) {
+	          break;
+	        }
+	        last = bk;
+	      }
+	    };
+
+	    LineWrapper.prototype.wrap = function(text, options) {
+	      var buffer, emitLine, lc, nextY, textWidth, wc, y;
+	      if (options.indent != null) {
+	        this.indent = options.indent;
+	      }
+	      if (options.characterSpacing != null) {
+	        this.characterSpacing = options.characterSpacing;
+	      }
+	      if (options.wordSpacing != null) {
+	        this.wordSpacing = options.wordSpacing;
+	      }
+	      if (options.ellipsis != null) {
+	        this.ellipsis = options.ellipsis;
+	      }
+	      nextY = this.document.y + this.document.currentLineHeight(true);
+	      if (this.document.y > this.maxY || nextY > this.maxY) {
+	        this.nextSection();
+	      }
+	      buffer = '';
+	      textWidth = 0;
+	      wc = 0;
+	      lc = 0;
+	      y = this.document.y;
+	      emitLine = (function(_this) {
+	        return function() {
+	          options.textWidth = textWidth + _this.wordSpacing * (wc - 1);
+	          options.wordCount = wc;
+	          options.lineWidth = _this.lineWidth;
+	          y = _this.document.y;
+	          _this.emit('line', buffer, options, _this);
+	          return lc++;
+	        };
+	      })(this);
+	      this.emit('sectionStart', options, this);
+	      this.eachWord(text, (function(_this) {
+	        return function(word, w, bk, last) {
+	          var lh, shouldContinue;
+	          if ((last == null) || last.required) {
+	            _this.emit('firstLine', options, _this);
+	            _this.spaceLeft = _this.lineWidth;
+	          }
+	          if (w <= _this.spaceLeft) {
+	            buffer += word;
+	            textWidth += w;
+	            wc++;
+	          }
+	          if (bk.required || w > _this.spaceLeft) {
+	            if (bk.required) {
+	              _this.emit('lastLine', options, _this);
+	            }
+	            lh = _this.document.currentLineHeight(true);
+	            if ((_this.height != null) && _this.ellipsis && _this.document.y + lh * 2 > _this.maxY && _this.column >= _this.columns) {
+	              if (_this.ellipsis === true) {
+	                _this.ellipsis = '…';
+	              }
+	              buffer = buffer.replace(/\s+$/, '');
+	              textWidth = _this.wordWidth(buffer + _this.ellipsis);
+	              while (textWidth > _this.lineWidth) {
+	                buffer = buffer.slice(0, -1).replace(/\s+$/, '');
+	                textWidth = _this.wordWidth(buffer + _this.ellipsis);
+	              }
+	              buffer = buffer + _this.ellipsis;
+	            }
+	            emitLine();
+	            if (_this.document.y + lh > _this.maxY) {
+	              shouldContinue = _this.nextSection();
+	              if (!shouldContinue) {
+	                wc = 0;
+	                buffer = '';
+	                return false;
+	              }
+	            }
+	            if (bk.required) {
+	              if (w > _this.spaceLeft) {
+	                buffer = word;
+	                textWidth = w;
+	                wc = 1;
+	                emitLine();
+	              }
+	              _this.spaceLeft = _this.lineWidth;
+	              buffer = '';
+	              textWidth = 0;
+	              return wc = 0;
+	            } else {
+	              _this.spaceLeft = _this.lineWidth - w;
+	              buffer = word;
+	              textWidth = w;
+	              return wc = 1;
+	            }
+	          } else {
+	            return _this.spaceLeft -= w;
+	          }
+	        };
+	      })(this));
+	      if (wc > 0) {
+	        this.emit('lastLine', options, this);
+	        emitLine();
+	      }
+	      this.emit('sectionEnd', options, this);
+	      if (options.continued === true) {
+	        if (lc > 1) {
+	          this.continuedX = 0;
+	        }
+	        this.continuedX += options.textWidth;
+	        return this.document.y = y;
+	      } else {
+	        return this.document.x = this.startX;
+	      }
+	    };
+
+	    LineWrapper.prototype.nextSection = function(options) {
+	      var _ref;
+	      this.emit('sectionEnd', options, this);
+	      if (++this.column > this.columns) {
+	        if (this.height != null) {
+	          return false;
+	        }
+	        this.document.addPage();
+	        this.column = 1;
+	        this.startY = this.document.page.margins.top;
+	        this.maxY = this.document.page.maxY();
+	        this.document.x = this.startX;
+	        if (this.document._fillColor) {
+	          (_ref = this.document).fillColor.apply(_ref, this.document._fillColor);
+	        }
+	        this.emit('pageBreak', options, this);
+	      } else {
+	        this.document.x += this.lineWidth + this.columnGap;
+	        this.document.y = this.startY;
+	        this.emit('columnBreak', options, this);
+	      }
+	      this.emit('sectionStart', options, this);
+	      return true;
+	    };
+
+	    return LineWrapper;
+
+	  })(EventEmitter);
+
+	  module.exports = LineWrapper;
+
+	}).call(this);
+
+
+/***/ },
+/* 91 */
+/***/ function(module, exports, __webpack_require__) {
+
+	// Generated by CoffeeScript 1.7.1
+	(function() {
+	  var AI, AL, BA, BK, CB, CI_BRK, CJ, CP_BRK, CR, DI_BRK, ID, IN_BRK, LF, LineBreaker, NL, NS, PR_BRK, SA, SG, SP, UnicodeTrie, WJ, XX, characterClasses, classTrie, pairTable, _ref, _ref1;
+
+	  UnicodeTrie = __webpack_require__(92);
+
+	  classTrie = new UnicodeTrie(__webpack_require__(93));
+
+	  _ref = __webpack_require__(94), BK = _ref.BK, CR = _ref.CR, LF = _ref.LF, NL = _ref.NL, CB = _ref.CB, BA = _ref.BA, SP = _ref.SP, WJ = _ref.WJ, SP = _ref.SP, BK = _ref.BK, LF = _ref.LF, NL = _ref.NL, AI = _ref.AI, AL = _ref.AL, SA = _ref.SA, SG = _ref.SG, XX = _ref.XX, CJ = _ref.CJ, ID = _ref.ID, NS = _ref.NS, characterClasses = _ref.characterClasses;
+
+	  _ref1 = __webpack_require__(95), DI_BRK = _ref1.DI_BRK, IN_BRK = _ref1.IN_BRK, CI_BRK = _ref1.CI_BRK, CP_BRK = _ref1.CP_BRK, PR_BRK = _ref1.PR_BRK, pairTable = _ref1.pairTable;
+
+	  LineBreaker = (function() {
+	    var Break, mapClass, mapFirst;
+
+	    function LineBreaker(string) {
+	      this.string = string;
+	      this.pos = 0;
+	      this.lastPos = 0;
+	      this.curClass = null;
+	      this.nextClass = null;
+	    }
+
+	    LineBreaker.prototype.nextCodePoint = function() {
+	      var code, next;
+	      code = this.string.charCodeAt(this.pos++);
+	      next = this.string.charCodeAt(this.pos);
+	      if ((0xd800 <= code && code <= 0xdbff) && (0xdc00 <= next && next <= 0xdfff)) {
+	        this.pos++;
+	        return ((code - 0xd800) * 0x400) + (next - 0xdc00) + 0x10000;
+	      }
+	      return code;
+	    };
+
+	    mapClass = function(c) {
+	      switch (c) {
+	        case AI:
+	          return AL;
+	        case SA:
+	        case SG:
+	        case XX:
+	          return AL;
+	        case CJ:
+	          return NS;
+	        default:
+	          return c;
+	      }
+	    };
+
+	    mapFirst = function(c) {
+	      switch (c) {
+	        case LF:
+	        case NL:
+	          return BK;
+	        case CB:
+	          return BA;
+	        case SP:
+	          return WJ;
+	        default:
+	          return c;
+	      }
+	    };
+
+	    LineBreaker.prototype.nextCharClass = function(first) {
+	      if (first == null) {
+	        first = false;
+	      }
+	      return mapClass(classTrie.get(this.nextCodePoint()));
+	    };
+
+	    Break = (function() {
+	      function Break(position, required) {
+	        this.position = position;
+	        this.required = required != null ? required : false;
+	      }
+
+	      return Break;
+
+	    })();
+
+	    LineBreaker.prototype.nextBreak = function() {
+	      var cur, lastClass, shouldBreak;
+	      if (this.curClass == null) {
+	        this.curClass = mapFirst(this.nextCharClass());
+	      }
+	      while (this.pos < this.string.length) {
+	        this.lastPos = this.pos;
+	        lastClass = this.nextClass;
+	        this.nextClass = this.nextCharClass();
+	        if (this.curClass === BK || (this.curClass === CR && this.nextClass !== LF)) {
+	          this.curClass = mapFirst(mapClass(this.nextClass));
+	          return new Break(this.lastPos, true);
+	        }
+	        cur = (function() {
+	          switch (this.nextClass) {
+	            case SP:
+	              return this.curClass;
+	            case BK:
+	            case LF:
+	            case NL:
+	              return BK;
+	            case CR:
+	              return CR;
+	            case CB:
+	              return BA;
+	          }
+	        }).call(this);
+	        if (cur != null) {
+	          this.curClass = cur;
+	          if (this.nextClass === CB) {
+	            return new Break(this.lastPos);
+	          }
+	          continue;
+	        }
+	        shouldBreak = false;
+	        switch (pairTable[this.curClass][this.nextClass]) {
+	          case DI_BRK:
+	            shouldBreak = true;
+	            break;
+	          case IN_BRK:
+	            shouldBreak = lastClass === SP;
+	            break;
+	          case CI_BRK:
+	            shouldBreak = lastClass === SP;
+	            if (!shouldBreak) {
+	              continue;
+	            }
+	            break;
+	          case CP_BRK:
+	            if (lastClass !== SP) {
+	              continue;
+	            }
+	        }
+	        this.curClass = this.nextClass;
+	        if (shouldBreak) {
+	          return new Break(this.lastPos);
+	        }
+	      }
+	      if (this.pos >= this.string.length) {
+	        if (this.lastPos < this.string.length) {
+	          this.lastPos = this.string.length;
+	          return new Break(this.string.length);
+	        } else {
+	          return null;
+	        }
+	      }
+	    };
+
+	    return LineBreaker;
+
+	  })();
+
+	  module.exports = LineBreaker;
+
+	}).call(this);
+
+
+/***/ },
+/* 92 */
+/***/ function(module, exports) {
+
+	// Generated by CoffeeScript 1.7.1
+	var UnicodeTrie,
+	  __slice = [].slice;
+
+	UnicodeTrie = (function() {
+	  var DATA_BLOCK_LENGTH, DATA_GRANULARITY, DATA_MASK, INDEX_1_OFFSET, INDEX_2_BLOCK_LENGTH, INDEX_2_BMP_LENGTH, INDEX_2_MASK, INDEX_SHIFT, LSCP_INDEX_2_LENGTH, LSCP_INDEX_2_OFFSET, OMITTED_BMP_INDEX_1_LENGTH, SHIFT_1, SHIFT_1_2, SHIFT_2, UTF8_2B_INDEX_2_LENGTH, UTF8_2B_INDEX_2_OFFSET;
+
+	  SHIFT_1 = 6 + 5;
+
+	  SHIFT_2 = 5;
+
+	  SHIFT_1_2 = SHIFT_1 - SHIFT_2;
+
+	  OMITTED_BMP_INDEX_1_LENGTH = 0x10000 >> SHIFT_1;
+
+	  INDEX_2_BLOCK_LENGTH = 1 << SHIFT_1_2;
+
+	  INDEX_2_MASK = INDEX_2_BLOCK_LENGTH - 1;
+
+	  INDEX_SHIFT = 2;
+
+	  DATA_BLOCK_LENGTH = 1 << SHIFT_2;
+
+	  DATA_MASK = DATA_BLOCK_LENGTH - 1;
+
+	  LSCP_INDEX_2_OFFSET = 0x10000 >> SHIFT_2;
+
+	  LSCP_INDEX_2_LENGTH = 0x400 >> SHIFT_2;
+
+	  INDEX_2_BMP_LENGTH = LSCP_INDEX_2_OFFSET + LSCP_INDEX_2_LENGTH;
+
+	  UTF8_2B_INDEX_2_OFFSET = INDEX_2_BMP_LENGTH;
+
+	  UTF8_2B_INDEX_2_LENGTH = 0x800 >> 6;
+
+	  INDEX_1_OFFSET = UTF8_2B_INDEX_2_OFFSET + UTF8_2B_INDEX_2_LENGTH;
+
+	  DATA_GRANULARITY = 1 << INDEX_SHIFT;
+
+	  function UnicodeTrie(json) {
+	    var _ref, _ref1;
+	    if (json == null) {
+	      json = {};
+	    }
+	    this.data = json.data || [];
+	    this.highStart = (_ref = json.highStart) != null ? _ref : 0;
+	    this.errorValue = (_ref1 = json.errorValue) != null ? _ref1 : -1;
+	  }
+
+	  UnicodeTrie.prototype.get = function(codePoint) {
+	    var index;
+	    if (codePoint < 0 || codePoint > 0x10ffff) {
+	      return this.errorValue;
+	    }
+	    if (codePoint < 0xd800 || (codePoint > 0xdbff && codePoint <= 0xffff)) {
+	      index = (this.data[codePoint >> SHIFT_2] << INDEX_SHIFT) + (codePoint & DATA_MASK);
+	      return this.data[index];
+	    }
+	    if (codePoint <= 0xffff) {
+	      index = (this.data[LSCP_INDEX_2_OFFSET + ((codePoint - 0xd800) >> SHIFT_2)] << INDEX_SHIFT) + (codePoint & DATA_MASK);
+	      return this.data[index];
+	    }
+	    if (codePoint < this.highStart) {
+	      index = this.data[(INDEX_1_OFFSET - OMITTED_BMP_INDEX_1_LENGTH) + (codePoint >> SHIFT_1)];
+	      index = this.data[index + ((codePoint >> SHIFT_2) & INDEX_2_MASK)];
+	      index = (index << INDEX_SHIFT) + (codePoint & DATA_MASK);
+	      return this.data[index];
+	    }
+	    return this.data[this.data.length - DATA_GRANULARITY];
+	  };
+
+	  UnicodeTrie.prototype.toJSON = function() {
+	    var res;
+	    res = {
+	      data: __slice.call(this.data),
+	      highStart: this.highStart,
+	      errorValue: this.errorValue
+	    };
+	    return res;
+	  };
+
+	  return UnicodeTrie;
+
+	})();
+
+	module.exports = UnicodeTrie;
+
+
+/***/ },
+/* 93 */
+/***/ function(module, exports) {
+
+	module.exports = {
+		"data": [
+			1961,
+			1969,
+			1977,
+			1985,
+			2025,
+			2033,
+			2041,
+			2049,
+			2057,
+			2065,
+			2073,
+			2081,
+			2089,
+			2097,
+			2105,
+			2113,
+			2121,
+			2129,
+			2137,
+			2145,
+			2153,
+			2161,
+			2169,
+			2177,
+			2185,
+			2193,
+			2201,
+			2209,
+			2217,
+			2225,
+			2233,
+			2241,
+			2249,
+			2257,
+			2265,
+			2273,
+			2281,
+			2289,
+			2297,
+			2305,
+			2313,
+			2321,
+			2329,
+			2337,
+			2345,
+			2353,
+			2361,
+			2369,
+			2377,
+			2385,
+			2393,
+			2401,
+			2409,
+			2417,
+			2425,
+			2433,
+			2441,
+			2449,
+			2457,
+			2465,
+			2473,
+			2481,
+			2489,
+			2497,
+			2505,
+			2513,
+			2521,
+			2529,
+			2529,
+			2537,
+			2009,
+			2545,
+			2553,
+			2561,
+			2569,
+			2577,
+			2585,
+			2593,
+			2601,
+			2609,
+			2617,
+			2625,
+			2633,
+			2641,
+			2649,
+			2657,
+			2665,
+			2673,
+			2681,
+			2689,
+			2697,
+			2705,
+			2713,
+			2721,
+			2729,
+			2737,
+			2745,
+			2753,
+			2761,
+			2769,
+			2777,
+			2785,
+			2793,
+			2801,
+			2809,
+			2817,
+			2825,
+			2833,
+			2841,
+			2849,
+			2857,
+			2865,
+			2873,
+			2881,
+			2889,
+			2009,
+			2897,
+			2905,
+			2913,
+			2009,
+			2921,
+			2929,
+			2937,
+			2945,
+			2953,
+			2961,
+			2969,
+			2009,
+			2977,
+			2977,
+			2985,
+			2993,
+			3001,
+			3009,
+			3009,
+			3009,
+			3017,
+			3017,
+			3017,
+			3025,
+			3025,
+			3033,
+			3041,
+			3041,
+			3049,
+			3049,
+			3049,
+			3049,
+			3049,
+			3049,
+			3049,
+			3049,
+			3049,
+			3049,
+			3057,
+			3065,
+			3073,
+			3073,
+			3073,
+			3081,
+			3089,
+			3097,
+			3097,
+			3097,
+			3097,
+			3097,
+			3097,
+			3097,
+			3097,
+			3097,
+			3097,
+			3097,
+			3097,
+			3097,
+			3097,
+			3097,
+			3097,
+			3097,
+			3097,
+			3097,
+			3105,
+			3113,
+			3113,
+			3121,
+			3129,
+			3137,
+			3145,
+			3153,
+			3161,
+			3161,
+			3169,
+			3177,
+			3185,
+			3193,
+			3193,
+			3193,
+			3193,
+			3201,
+			3209,
+			3209,
+			3217,
+			3225,
+			3233,
+			3241,
+			3241,
+			3241,
+			3249,
+			3257,
+			3265,
+			3273,
+			3273,
+			3281,
+			3289,
+			3297,
+			2009,
+			2009,
+			3305,
+			3313,
+			3321,
+			3329,
+			3337,
+			3345,
+			3353,
+			3361,
+			3369,
+			3377,
+			3385,
+			3393,
+			2009,
+			2009,
+			3401,
+			3409,
+			3417,
+			3417,
+			3417,
+			3417,
+			3417,
+			3417,
+			3425,
+			3425,
+			3433,
+			3433,
+			3433,
+			3433,
+			3433,
+			3433,
+			3433,
+			3433,
+			3433,
+			3433,
+			3433,
+			3433,
+			3433,
+			3433,
+			3433,
+			3441,
+			3449,
+			3457,
+			3465,
+			3473,
+			3481,
+			3489,
+			3497,
+			3505,
+			3513,
+			3521,
+			3529,
+			3537,
+			3545,
+			3553,
+			3561,
+			3569,
+			3577,
+			3585,
+			3593,
+			3601,
+			3609,
+			3617,
+			3625,
+			3625,
+			3633,
+			3641,
+			3649,
+			3649,
+			3649,
+			3649,
+			3649,
+			3657,
+			3665,
+			3665,
+			3673,
+			3681,
+			3681,
+			3681,
+			3681,
+			3689,
+			3697,
+			3697,
+			3705,
+			3713,
+			3721,
+			3729,
+			3737,
+			3745,
+			3753,
+			3761,
+			3769,
+			3777,
+			3785,
+			3793,
+			3801,
+			3809,
+			3817,
+			3825,
+			3833,
+			3841,
+			3849,
+			3857,
+			3865,
+			3873,
+			3881,
+			3881,
+			3881,
+			3881,
+			3881,
+			3881,
+			3881,
+			3881,
+			3881,
+			3881,
+			3881,
+			3881,
+			3889,
+			3897,
+			3905,
+			3913,
+			3921,
+			3921,
+			3921,
+			3921,
+			3921,
+			3921,
+			3921,
+			3921,
+			3921,
+			3921,
+			3929,
+			2009,
+			2009,
+			2009,
+			2009,
+			2009,
+			3937,
+			3937,
+			3937,
+			3937,
+			3937,
+			3937,
+			3937,
+			3945,
+			3953,
+			3953,
+			3953,
+			3961,
+			3969,
+			3969,
+			3977,
+			3985,
+			3993,
+			4001,
+			2009,
+			2009,
+			4009,
+			4009,
+			4009,
+			4009,
+			4009,
+			4009,
+			4009,
+			4009,
+			4009,
+			4009,
+			4009,
+			4009,
+			4017,
+			4025,
+			4033,
+			4041,
+			4049,
+			4057,
+			4065,
+			4073,
+			4081,
+			4081,
+			4081,
+			4081,
+			4081,
+			4081,
+			4081,
+			4089,
+			4097,
+			4097,
+			4105,
+			4113,
+			4113,
+			4113,
+			4113,
+			4113,
+			4113,
+			4113,
+			4113,
+			4113,
+			4113,
+			4113,
+			4113,
+			4113,
+			4113,
+			4113,
+			4113,
+			4113,
+			4113,
+			4113,
+			4113,
+			4113,
+			4113,
+			4113,
+			4113,
+			4113,
+			4113,
+			4113,
+			4113,
+			4113,
+			4113,
+			4113,
+			4113,
+			4113,
+			4113,
+			4113,
+			4113,
+			4113,
+			4113,
+			4113,
+			4113,
+			4113,
+			4113,
+			4113,
+			4113,
+			4113,
+			4113,
+			4113,
+			4113,
+			4113,
+			4113,
+			4113,
+			4113,
+			4113,
+			4113,
+			4113,
+			4113,
+			4113,
+			4113,
+			4113,
+			4113,
+			4113,
+			4113,
+			4113,
+			4113,
+			4113,
+			4113,
+			4113,
+			4113,
+			4113,
+			4113,
+			4113,
+			4113,
+			4113,
+			4113,
+			4113,
+			4113,
+			4113,
+			4113,
+			4113,
+			4113,
+			4113,
+			4113,
+			4113,
+			4113,
+			4113,
+			4113,
+			4113,
+			4113,
+			4113,
+			4113,
+			4113,
+			4113,
+			4113,
+			4113,
+			4113,
+			4113,
+			4113,
+			4113,
+			4113,
+			4113,
+			4113,
+			4113,
+			4113,
+			4113,
+			4113,
+			4113,
+			4113,
+			4113,
+			4113,
+			4113,
+			4113,
+			4113,
+			4113,
+			4113,
+			4113,
+			4113,
+			4113,
+			4113,
+			4113,
+			4113,
+			4113,
+			4113,
+			4113,
+			4113,
+			4113,
+			4113,
+			4113,
+			4113,
+			4113,
+			4113,
+			4113,
+			4113,
+			4113,
+			4113,
+			4113,
+			4113,
+			4113,
+			4113,
+			4113,
+			4113,
+			4113,
+			4113,
+			4113,
+			4113,
+			4113,
+			4113,
+			4113,
+			4113,
+			4113,
+			4113,
+			4113,
+			4113,
+			4113,
+			4113,
+			4113,
+			4113,
+			4113,
+			4113,
+			4113,
+			4113,
+			4113,
+			4113,
+			4113,
+			4113,
+			4113,
+			4113,
+			4113,
+			4113,
+			4113,
+			4113,
+			4113,
+			4113,
+			4113,
+			4113,
+			4113,
+			4113,
+			4113,
+			4113,
+			4113,
+			4113,
+			4113,
+			4113,
+			4113,
+			4113,
+			4113,
+			4113,
+			4113,
+			4113,
+			4113,
+			4113,
+			4113,
+			4113,
+			4113,
+			4113,
+			4113,
+			4113,
+			4113,
+			4113,
+			4113,
+			4113,
+			4113,
+			4113,
+			4113,
+			4113,
+			4113,
+			4113,
+			4113,
+			4113,
+			4113,
+			4113,
+			4113,
+			4113,
+			4113,
+			4113,
+			4113,
+			4113,
+			4113,
+			4113,
+			4113,
+			4121,
+			4121,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4129,
+			4137,
+			4145,
+			4145,
+			4145,
+			4145,
+			4145,
+			4145,
+			4145,
+			4145,
+			4145,
+			4145,
+			4145,
+			4145,
+			4145,
+			4145,
+			4145,
+			4145,
+			4145,
+			4145,
+			4145,
+			4145,
+			4145,
+			4145,
+			4145,
+			4145,
+			4145,
+			4145,
+			4145,
+			4145,
+			4145,
+			4145,
+			4145,
+			4145,
+			4145,
+			4145,
+			4145,
+			4145,
+			4145,
+			4153,
+			4161,
+			4169,
+			4169,
+			4169,
+			4169,
+			4169,
+			4169,
+			4169,
+			4169,
+			4177,
+			4185,
+			4193,
+			4201,
+			4209,
+			4217,
+			4217,
+			4225,
+			4233,
+			4233,
+			4233,
+			4233,
+			4233,
+			4233,
+			4233,
+			4233,
+			4241,
+			4249,
+			4257,
+			4265,
+			4273,
+			4281,
+			4289,
+			4297,
+			4305,
+			4313,
+			4321,
+			4329,
+			4337,
+			4345,
+			4353,
+			4361,
+			4361,
+			4369,
+			4377,
+			4385,
+			4385,
+			4385,
+			4385,
+			4393,
+			4401,
+			4409,
+			4409,
+			4409,
+			4409,
+			4409,
+			4409,
+			4417,
+			4425,
+			4433,
+			4441,
+			4449,
+			4457,
+			4465,
+			4473,
+			4481,
+			4489,
+			4497,
+			4505,
+			4513,
+			4521,
+			4529,
+			4537,
+			4545,
+			4553,
+			4561,
+			4569,
+			4577,
+			4585,
+			4593,
+			4601,
+			4609,
+			4617,
+			4625,
+			4633,
+			4641,
+			4649,
+			4657,
+			4665,
+			4673,
+			4681,
+			4689,
+			4697,
+			4705,
+			4713,
+			4721,
+			4729,
+			4737,
+			4745,
+			4753,
+			4761,
+			4769,
+			4777,
+			4785,
+			4793,
+			4801,
+			4809,
+			4817,
+			4825,
+			4833,
+			4841,
+			4849,
+			4857,
+			4865,
+			4873,
+			4881,
+			4889,
+			4897,
+			4905,
+			4913,
+			4921,
+			4929,
+			4937,
+			4945,
+			4953,
+			4961,
+			4969,
+			4977,
+			4985,
+			4993,
+			5001,
+			5009,
+			5017,
+			5025,
+			5033,
+			5041,
+			5049,
+			5057,
+			5065,
+			5073,
+			5081,
+			5089,
+			5097,
+			5105,
+			5113,
+			5121,
+			5129,
+			5137,
+			5145,
+			5153,
+			5161,
+			5169,
+			5177,
+			5185,
+			5193,
+			5201,
+			5209,
+			5217,
+			5225,
+			5233,
+			5241,
+			5249,
+			5257,
+			5265,
+			5273,
+			5281,
+			5289,
+			5297,
+			5305,
+			5313,
+			5321,
+			5329,
+			5337,
+			5345,
+			5353,
+			5361,
+			5369,
+			5377,
+			5385,
+			5393,
+			5401,
+			5409,
+			5417,
+			5425,
+			5433,
+			5441,
+			5449,
+			5457,
+			5465,
+			5473,
+			5481,
+			5489,
+			5497,
+			5505,
+			5513,
+			5521,
+			5529,
+			5537,
+			5545,
+			5553,
+			5561,
+			5569,
+			5577,
+			5585,
+			5593,
+			5601,
+			5609,
+			5617,
+			5625,
+			5633,
+			5641,
+			5649,
+			5657,
+			5665,
+			5673,
+			5681,
+			5689,
+			5697,
+			5705,
+			5713,
+			5721,
+			5729,
+			5737,
+			5745,
+			5753,
+			5761,
+			5769,
+			5777,
+			5785,
+			5793,
+			5801,
+			5809,
+			5817,
+			5825,
+			5833,
+			5841,
+			5849,
+			5857,
+			5865,
+			5873,
+			5881,
+			5889,
+			5897,
+			5905,
+			5913,
+			5921,
+			5929,
+			5937,
+			5945,
+			5953,
+			5961,
+			5969,
+			5977,
+			5985,
+			5993,
+			6001,
+			6009,
+			6017,
+			6025,
+			6033,
+			6041,
+			6049,
+			6057,
+			6065,
+			6073,
+			6081,
+			6089,
+			6097,
+			6105,
+			6113,
+			6121,
+			6129,
+			6137,
+			6145,
+			6153,
+			6161,
+			6169,
+			6177,
+			6185,
+			6193,
+			6201,
+			6209,
+			6217,
+			6225,
+			6233,
+			6241,
+			6249,
+			6257,
+			6265,
+			6273,
+			6281,
+			6289,
+			6297,
+			6305,
+			6313,
+			6321,
+			6329,
+			6337,
+			6345,
+			6353,
+			6361,
+			6369,
+			6377,
+			6385,
+			6393,
+			6401,
+			6409,
+			6417,
+			6425,
+			6433,
+			6441,
+			6449,
+			6457,
+			6465,
+			6473,
+			6481,
+			6489,
+			6497,
+			6505,
+			6513,
+			6521,
+			6529,
+			6537,
+			6545,
+			6553,
+			6561,
+			6569,
+			6577,
+			6585,
+			6593,
+			6601,
+			6609,
+			6617,
+			6625,
+			6633,
+			6641,
+			6649,
+			6657,
+			6665,
+			6673,
+			6681,
+			6689,
+			6697,
+			6705,
+			6713,
+			6721,
+			6729,
+			6737,
+			6745,
+			6753,
+			6761,
+			6769,
+			6777,
+			6785,
+			6793,
+			6801,
+			6809,
+			6817,
+			6825,
+			6833,
+			6841,
+			6849,
+			6857,
+			6865,
+			6873,
+			6881,
+			6889,
+			6897,
+			6905,
+			6913,
+			6921,
+			6929,
+			6937,
+			6945,
+			6953,
+			6961,
+			6969,
+			6977,
+			6985,
+			6993,
+			7001,
+			7009,
+			7017,
+			7025,
+			7033,
+			7041,
+			7049,
+			7057,
+			7065,
+			7073,
+			7081,
+			7089,
+			7097,
+			7105,
+			7113,
+			7121,
+			7129,
+			7137,
+			7145,
+			7153,
+			7161,
+			7169,
+			7177,
+			7185,
+			7193,
+			7201,
+			7209,
+			7217,
+			7225,
+			7233,
+			2009,
+			2009,
+			2009,
+			2009,
+			2009,
+			2009,
+			2009,
+			2009,
+			2009,
+			2009,
+			2009,
+			2009,
+			2009,
+			2009,
+			2009,
+			2009,
+			2009,
+			2009,
+			2009,
+			2009,
+			2009,
+			2009,
+			2009,
+			2009,
+			2009,
+			2009,
+			2009,
+			2009,
+			2009,
+			2009,
+			2009,
+			2009,
+			7241,
+			7241,
+			7241,
+			7241,
+			7241,
+			7241,
+			7241,
+			7241,
+			7241,
+			7241,
+			7241,
+			7241,
+			7241,
+			7241,
+			7241,
+			7241,
+			7241,
+			7241,
+			7241,
+			7241,
+			7241,
+			7241,
+			7241,
+			7241,
+			7241,
+			7241,
+			7241,
+			7241,
+			7241,
+			7241,
+			7241,
+			7241,
+			2009,
+			2009,
+			2009,
+			2009,
+			2009,
+			2009,
+			2009,
+			2009,
+			2009,
+			2009,
+			2009,
+			2009,
+			2009,
+			2009,
+			2009,
+			2009,
+			2009,
+			2009,
+			2009,
+			2009,
+			2009,
+			2009,
+			2009,
+			2009,
+			2009,
+			2009,
+			2009,
+			2009,
+			2009,
+			2009,
+			2009,
+			2009,
+			2009,
+			2009,
+			2009,
+			2009,
+			2009,
+			2009,
+			2009,
+			2009,
+			2009,
+			2009,
+			2009,
+			2009,
+			2009,
+			2009,
+			2009,
+			2009,
+			2009,
+			2009,
+			2009,
+			2009,
+			2009,
+			2009,
+			2009,
+			2009,
+			2009,
+			2009,
+			2009,
+			2009,
+			2009,
+			2009,
+			2009,
+			2009,
+			2009,
+			2009,
+			2009,
+			2009,
+			2009,
+			2009,
+			2009,
+			2009,
+			2009,
+			2009,
+			2009,
+			2009,
+			2009,
+			2009,
+			2009,
+			2009,
+			2009,
+			2009,
+			2009,
+			2009,
+			2009,
+			2009,
+			2009,
+			2009,
+			2009,
+			2009,
+			2009,
+			2009,
+			2009,
+			2009,
+			2009,
+			2009,
+			2009,
+			2009,
+			2009,
+			2009,
+			2009,
+			2009,
+			2009,
+			2009,
+			2009,
+			2009,
+			2009,
+			2009,
+			2009,
+			2009,
+			2009,
+			2009,
+			2009,
+			2009,
+			2009,
+			2009,
+			2009,
+			2009,
+			2009,
+			2009,
+			2009,
+			2009,
+			2009,
+			2009,
+			2009,
+			2009,
+			2009,
+			2009,
+			2009,
+			2009,
+			2009,
+			2009,
+			2009,
+			2009,
+			2009,
+			2009,
+			2009,
+			2009,
+			2009,
+			2009,
+			2009,
+			2009,
+			2009,
+			2009,
+			2009,
+			2009,
+			2009,
+			2009,
+			2009,
+			2009,
+			2009,
+			2009,
+			2009,
+			2009,
+			2009,
+			2009,
+			2009,
+			2009,
+			2009,
+			2009,
+			2009,
+			2009,
+			2009,
+			2009,
+			2009,
+			2009,
+			2009,
+			2009,
+			2009,
+			2009,
+			2009,
+			2009,
+			2009,
+			2009,
+			2009,
+			2009,
+			2009,
+			2009,
+			2009,
+			2009,
+			2009,
+			2009,
+			2009,
+			2009,
+			2009,
+			2009,
+			2009,
+			2009,
+			2009,
+			2009,
+			2009,
+			2009,
+			2009,
+			2009,
+			2009,
+			2009,
+			2009,
+			2009,
+			2009,
+			2009,
+			7249,
+			7249,
+			7249,
+			7249,
+			7249,
+			7249,
+			7249,
+			7249,
+			7249,
+			7249,
+			7249,
+			7249,
+			7249,
+			7249,
+			7249,
+			7249,
+			7257,
+			7265,
+			7273,
+			7281,
+			7281,
+			7281,
+			7281,
+			7281,
+			7281,
+			7281,
+			7281,
+			7281,
+			7281,
+			7281,
+			7281,
+			7281,
+			7281,
+			7289,
+			7297,
+			7305,
+			7305,
+			7305,
+			7305,
+			7313,
+			7321,
+			7329,
+			7337,
+			7345,
+			7353,
+			7353,
+			7353,
+			7361,
+			7369,
+			7377,
+			7385,
+			7393,
+			7401,
+			7409,
+			7417,
+			7425,
+			7241,
+			7241,
+			7241,
+			7241,
+			7241,
+			7241,
+			7241,
+			7241,
+			7241,
+			7241,
+			7241,
+			7241,
+			7241,
+			7241,
+			7241,
+			7241,
+			7241,
+			7241,
+			7241,
+			7241,
+			7241,
+			7241,
+			7241,
+			7241,
+			7241,
+			7241,
+			7241,
+			7241,
+			7241,
+			7241,
+			7241,
+			7241,
+			7972,
+			7972,
+			8100,
+			8164,
+			8228,
+			8292,
+			8356,
+			8420,
+			8484,
+			8548,
+			8612,
+			8676,
+			8740,
+			8804,
+			8868,
+			8932,
+			8996,
+			9060,
+			9124,
+			9188,
+			9252,
+			9316,
+			9380,
+			9444,
+			9508,
+			9572,
+			9636,
+			9700,
+			9764,
+			9828,
+			9892,
+			9956,
+			2593,
+			2657,
+			2721,
+			2529,
+			2785,
+			2529,
+			2849,
+			2913,
+			2977,
+			3041,
+			3105,
+			3169,
+			3233,
+			3297,
+			2529,
+			2529,
+			2529,
+			2529,
+			2529,
+			2529,
+			2529,
+			2529,
+			3361,
+			2529,
+			2529,
+			2529,
+			3425,
+			2529,
+			2529,
+			3489,
+			3553,
+			2529,
+			3617,
+			3681,
+			3745,
+			3809,
+			3873,
+			3937,
+			4001,
+			4065,
+			4129,
+			4193,
+			4257,
+			4321,
+			4385,
+			4449,
+			4513,
+			4577,
+			4641,
+			4705,
+			4769,
+			4833,
+			4897,
+			4961,
+			5025,
+			5089,
+			5153,
+			5217,
+			5281,
+			5345,
+			5409,
+			5473,
+			5537,
+			5601,
+			5665,
+			5729,
+			5793,
+			5857,
+			5921,
+			5985,
+			6049,
+			6113,
+			6177,
+			6241,
+			6305,
+			6369,
+			6433,
+			6497,
+			6561,
+			6625,
+			6689,
+			6753,
+			6817,
+			6881,
+			6945,
+			7009,
+			7073,
+			7137,
+			7201,
+			7265,
+			7329,
+			7393,
+			7457,
+			7521,
+			7585,
+			7649,
+			2529,
+			2529,
+			2529,
+			2529,
+			2529,
+			2529,
+			2529,
+			2529,
+			2529,
+			2529,
+			2529,
+			2529,
+			2529,
+			2529,
+			2529,
+			2529,
+			2529,
+			2529,
+			2529,
+			2529,
+			2529,
+			2529,
+			2529,
+			2529,
+			2529,
+			2529,
+			2529,
+			2529,
+			2529,
+			2529,
+			2529,
+			2529,
+			2529,
+			2529,
+			2529,
+			2529,
+			2529,
+			2529,
+			2529,
+			2529,
+			2529,
+			2529,
+			2529,
+			2529,
+			2529,
+			2529,
+			2529,
+			2529,
+			2529,
+			2529,
+			2529,
+			2529,
+			2529,
+			2529,
+			2529,
+			2529,
+			2529,
+			2529,
+			2529,
+			2529,
+			2529,
+			2529,
+			2529,
+			2529,
+			2529,
+			2529,
+			2529,
+			2529,
+			2529,
+			2529,
+			2529,
+			2529,
+			2529,
+			2529,
+			2529,
+			2529,
+			2529,
+			2529,
+			2529,
+			2529,
+			2529,
+			2529,
+			2529,
+			2529,
+			2529,
+			2529,
+			2529,
+			2529,
+			2529,
+			2529,
+			2529,
+			2529,
+			2529,
+			2529,
+			2529,
+			2529,
+			2529,
+			2529,
+			2529,
+			2529,
+			2529,
+			2529,
+			2529,
+			2529,
+			2529,
+			2529,
+			2529,
+			2529,
+			2529,
+			2529,
+			2529,
+			2529,
+			2529,
+			2529,
+			2529,
+			2529,
+			2529,
+			2529,
+			2529,
+			2529,
+			2529,
+			2529,
+			2529,
+			2529,
+			2529,
+			2529,
+			2529,
+			2529,
+			2529,
+			2529,
+			2529,
+			2529,
+			2529,
+			2529,
+			2529,
+			2529,
+			2529,
+			2529,
+			2529,
+			2529,
+			2529,
+			2529,
+			2529,
+			2529,
+			2529,
+			2529,
+			2529,
+			2529,
+			2529,
+			2529,
+			2529,
+			2529,
+			2529,
+			2529,
+			2529,
+			2529,
+			2529,
+			2529,
+			2529,
+			2529,
+			2529,
+			2529,
+			2529,
+			2529,
+			2529,
+			2529,
+			2529,
+			2529,
+			2529,
+			2529,
+			2529,
+			2529,
+			2529,
+			2529,
+			2529,
+			2529,
+			2529,
+			2529,
+			2529,
+			2529,
+			2529,
+			2529,
+			2529,
+			2529,
+			2529,
+			2529,
+			2529,
+			2529,
+			2529,
+			2529,
+			2529,
+			2529,
+			2529,
+			2529,
+			2529,
+			2529,
+			2529,
+			2529,
+			2529,
+			2529,
+			2529,
+			2529,
+			2529,
+			2529,
+			2529,
+			2529,
+			2529,
+			2529,
+			2529,
+			2529,
+			2529,
+			2529,
+			2529,
+			2529,
+			2529,
+			2529,
+			2529,
+			2529,
+			2529,
+			2529,
+			2529,
+			2529,
+			2529,
+			2529,
+			2529,
+			2529,
+			2529,
+			2529,
+			2529,
+			2529,
+			2529,
+			2529,
+			2529,
+			2529,
+			2529,
+			2529,
+			2529,
+			2529,
+			2529,
+			2529,
+			2529,
+			2529,
+			2529,
+			2529,
+			2529,
+			2529,
+			2529,
+			2529,
+			2529,
+			2529,
+			2529,
+			2529,
+			2529,
+			2529,
+			2529,
+			2529,
+			2529,
+			2529,
+			2529,
+			2529,
+			2529,
+			2529,
+			2529,
+			2529,
+			2529,
+			2529,
+			2529,
+			2529,
+			2529,
+			2529,
+			2529,
+			2529,
+			2529,
+			2529,
+			2529,
+			2529,
+			2529,
+			2529,
+			2529,
+			2529,
+			2529,
+			2529,
+			2529,
+			2529,
+			2529,
+			2529,
+			2529,
+			2529,
+			2529,
+			2529,
+			2529,
+			2529,
+			2529,
+			2529,
+			2529,
+			2529,
+			2529,
+			2529,
+			2529,
+			2529,
+			2529,
+			2529,
+			2529,
+			2529,
+			2529,
+			2529,
+			2529,
+			2529,
+			2529,
+			2529,
+			2529,
+			2529,
+			2529,
+			2529,
+			2529,
+			2529,
+			2529,
+			2529,
+			2529,
+			2529,
+			7713,
+			2009,
+			2009,
+			2009,
+			2009,
+			2009,
+			2009,
+			2009,
+			2009,
+			2009,
+			2009,
+			2009,
+			2009,
+			2009,
+			2009,
+			2009,
+			2009,
+			2009,
+			2009,
+			2009,
+			2009,
+			2009,
+			2009,
+			2009,
+			2009,
+			2009,
+			2009,
+			2009,
+			2009,
+			2009,
+			2009,
+			2009,
+			2009,
+			2009,
+			2009,
+			2009,
+			2009,
+			2009,
+			2009,
+			2009,
+			2009,
+			2009,
+			2009,
+			2009,
+			2009,
+			2009,
+			2009,
+			2009,
+			2009,
+			2009,
+			2009,
+			2009,
+			2009,
+			2009,
+			2009,
+			2009,
+			2009,
+			2009,
+			2009,
+			2009,
+			2009,
+			2009,
+			2009,
+			2009,
+			2009,
+			7433,
+			7433,
+			7433,
+			7433,
+			7433,
+			7433,
+			7433,
+			7441,
+			7449,
+			7457,
+			7457,
+			7457,
+			7457,
+			7457,
+			7457,
+			7465,
+			2009,
+			2009,
+			2009,
+			2009,
+			7473,
+			7473,
+			7473,
+			7473,
+			7473,
+			7473,
+			7473,
+			7473,
+			7481,
+			7489,
+			7497,
+			7505,
+			7505,
+			7505,
+			7505,
+			7505,
+			7513,
+			7521,
+			2009,
+			2009,
+			2009,
+			2009,
+			2009,
+			2009,
+			2009,
+			2009,
+			2009,
+			2009,
+			2009,
+			2009,
+			2009,
+			2009,
+			2009,
+			2009,
+			2009,
+			2009,
+			2009,
+			2009,
+			2009,
+			2009,
+			2009,
+			2009,
+			2009,
+			2009,
+			7529,
+			7529,
+			7537,
+			7545,
+			7545,
+			7545,
+			7545,
+			7545,
+			7553,
+			7561,
+			7561,
+			7561,
+			7561,
+			7561,
+			7561,
+			7561,
+			7569,
+			7577,
+			7585,
+			7593,
+			7593,
+			7593,
+			7593,
+			7593,
+			7593,
+			7601,
+			7609,
+			7609,
+			7609,
+			7609,
+			7609,
+			7609,
+			7609,
+			7609,
+			7609,
+			7609,
+			7609,
+			7609,
+			7609,
+			7609,
+			7609,
+			7609,
+			7609,
+			7609,
+			7609,
+			7609,
+			7609,
+			7609,
+			7609,
+			7609,
+			7609,
+			7617,
+			2009,
+			2009,
+			2009,
+			2009,
+			2009,
+			2009,
+			2009,
+			2009,
+			2009,
+			2009,
+			2009,
+			2009,
+			7625,
+			7633,
+			7641,
+			7649,
+			7657,
+			7665,
+			7673,
+			7681,
+			7689,
+			7697,
+			7705,
+			2009,
+			7713,
+			7721,
+			7729,
+			2009,
+			2009,
+			2009,
+			2009,
+			2009,
+			2009,
+			2009,
+			2009,
+			2009,
+			2009,
+			2009,
+			2009,
+			2009,
+			2009,
+			2009,
+			2009,
+			2009,
+			2009,
+			2009,
+			2009,
+			2009,
+			2009,
+			2009,
+			2009,
+			2009,
+			2009,
+			2009,
+			2009,
+			2009,
+			2009,
+			2009,
+			2009,
+			2009,
+			2009,
+			2009,
+			2009,
+			2009,
+			7737,
+			7745,
+			7753,
+			2009,
+			2009,
+			2009,
+			2009,
+			2009,
+			2009,
+			2009,
+			2009,
+			2009,
+			7761,
+			7761,
+			7761,
+			7761,
+			7761,
+			7761,
+			7761,
+			7761,
+			7761,
+			7761,
+			7761,
+			7761,
+			7761,
+			7761,
+			7761,
+			7761,
+			7761,
+			7761,
+			7761,
+			7761,
+			7761,
+			7761,
+			7761,
+			7761,
+			7761,
+			7761,
+			7761,
+			7761,
+			7761,
+			7761,
+			7761,
+			7761,
+			7761,
+			7761,
+			7761,
+			7769,
+			2009,
+			2009,
+			2009,
+			2009,
+			2009,
+			2009,
+			2009,
+			2009,
+			2009,
+			2009,
+			2009,
+			2009,
+			2009,
+			2009,
+			2009,
+			2009,
+			2009,
+			2009,
+			2009,
+			2009,
+			2009,
+			2009,
+			2009,
+			2009,
+			2009,
+			2009,
+			2009,
+			2009,
+			7777,
+			7777,
+			7777,
+			7777,
+			7777,
+			7777,
+			7777,
+			7777,
+			7777,
+			7777,
+			7777,
+			7777,
+			7777,
+			7777,
+			7777,
+			7777,
+			7777,
+			7777,
+			7785,
+			7793,
+			7801,
+			7809,
+			7809,
+			7809,
+			7809,
+			7809,
+			7809,
+			7817,
+			7825,
+			7825,
+			7825,
+			7825,
+			7825,
+			7825,
+			7825,
+			7825,
+			7825,
+			7825,
+			7825,
+			7825,
+			7825,
+			7825,
+			7825,
+			7825,
+			7825,
+			7825,
+			7825,
+			7825,
+			7825,
+			7825,
+			7825,
+			7825,
+			7825,
+			7825,
+			7825,
+			7825,
+			7825,
+			7825,
+			7825,
+			7825,
+			7825,
+			7825,
+			7825,
+			7825,
+			7825,
+			7825,
+			7825,
+			7825,
+			7825,
+			7825,
+			7825,
+			7825,
+			7825,
+			7825,
+			7825,
+			7825,
+			7825,
+			7825,
+			7825,
+			7825,
+			7825,
+			7825,
+			7825,
+			7825,
+			7825,
+			7825,
+			7825,
+			7825,
+			7825,
+			7825,
+			7825,
+			7825,
+			7825,
+			7825,
+			7825,
+			7825,
+			7825,
+			7825,
+			7825,
+			7825,
+			7825,
+			7825,
+			7825,
+			7825,
+			7825,
+			7825,
+			7825,
+			7825,
+			7825,
+			7825,
+			7825,
+			7825,
+			7825,
+			7825,
+			7825,
+			7825,
+			7825,
+			7825,
+			7825,
+			7825,
+			7825,
+			7825,
+			7825,
+			7825,
+			7825,
+			7825,
+			7825,
+			7825,
+			7825,
+			7825,
+			7825,
+			7825,
+			7825,
+			7825,
+			7825,
+			7825,
+			7825,
+			7825,
+			7825,
+			7825,
+			7825,
+			7825,
+			7825,
+			7825,
+			7825,
+			7825,
+			7825,
+			7825,
+			7825,
+			7825,
+			7825,
+			7825,
+			7825,
+			7825,
+			7825,
+			7825,
+			7825,
+			7825,
+			7825,
+			7825,
+			7825,
+			7825,
+			7825,
+			7825,
+			7825,
+			7825,
+			7825,
+			7825,
+			7825,
+			7825,
+			7825,
+			7825,
+			7825,
+			7825,
+			7825,
+			7825,
+			7825,
+			7825,
+			7825,
+			7825,
+			7825,
+			7825,
+			7825,
+			7825,
+			7825,
+			7825,
+			7825,
+			7825,
+			7825,
+			7825,
+			7825,
+			7825,
+			7825,
+			7825,
+			7825,
+			7825,
+			7825,
+			7825,
+			7825,
+			7825,
+			7825,
+			7825,
+			7825,
+			7825,
+			7825,
+			7825,
+			7825,
+			7825,
+			7825,
+			7825,
+			7825,
+			7825,
+			7825,
+			7825,
+			7825,
+			7825,
+			7825,
+			7825,
+			7825,
+			7825,
+			7825,
+			7825,
+			7825,
+			7825,
+			7825,
+			7825,
+			7825,
+			7825,
+			7825,
+			7825,
+			7825,
+			7825,
+			7825,
+			7825,
+			7825,
+			7825,
+			7825,
+			7825,
+			7825,
+			7825,
+			7825,
+			7825,
+			7825,
+			7825,
+			7825,
+			7825,
+			7825,
+			7825,
+			7825,
+			7825,
+			7825,
+			7825,
+			7825,
+			7825,
+			7825,
+			7825,
+			7825,
+			7825,
+			7825,
+			7825,
+			7825,
+			7825,
+			7825,
+			7825,
+			7825,
+			7825,
+			7825,
+			7825,
+			7825,
+			7825,
+			7825,
+			7825,
+			7825,
+			7825,
+			7825,
+			7825,
+			7825,
+			7825,
+			7825,
+			7825,
+			7825,
+			7825,
+			7825,
+			7825,
+			7825,
+			7825,
+			7825,
+			7825,
+			7825,
+			7825,
+			7825,
+			7825,
+			7825,
+			7825,
+			7825,
+			7825,
+			7825,
+			7825,
+			7825,
+			7825,
+			7825,
+			7825,
+			7825,
+			7825,
+			7825,
+			7825,
+			7825,
+			7825,
+			7825,
+			7825,
+			7825,
+			7825,
+			7825,
+			7825,
+			7825,
+			7825,
+			7825,
+			7825,
+			7825,
+			7825,
+			7825,
+			7825,
+			7825,
+			7825,
+			7825,
+			7825,
+			7825,
+			7825,
+			7825,
+			7825,
+			7825,
+			7825,
+			7825,
+			7825,
+			7825,
+			7825,
+			7825,
+			7825,
+			7825,
+			7825,
+			7825,
+			7825,
+			7825,
+			7825,
+			7825,
+			7825,
+			7825,
+			7825,
+			7825,
+			7825,
+			7825,
+			7825,
+			7825,
+			7825,
+			7825,
+			7825,
+			7825,
+			7825,
+			7825,
+			7825,
+			7825,
+			7825,
+			7825,
+			7825,
+			7825,
+			7825,
+			7825,
+			7825,
+			7825,
+			7825,
+			7825,
+			7825,
+			7825,
+			7825,
+			7825,
+			7825,
+			7825,
+			7825,
+			7825,
+			7825,
+			7825,
+			7825,
+			7825,
+			7825,
+			7825,
+			7825,
+			7825,
+			7825,
+			7825,
+			7825,
+			7825,
+			7825,
+			7825,
+			7825,
+			7825,
+			7825,
+			7825,
+			7825,
+			7825,
+			7825,
+			7825,
+			7825,
+			7825,
+			7825,
+			7825,
+			7825,
+			7825,
+			7825,
+			7825,
+			7825,
+			7825,
+			7825,
+			7825,
+			7825,
+			7825,
+			7825,
+			7825,
+			7825,
+			7825,
+			7825,
+			7825,
+			7825,
+			7825,
+			7825,
+			7825,
+			7825,
+			7825,
+			7825,
+			7825,
+			7825,
+			7825,
+			7825,
+			7825,
+			7825,
+			7825,
+			7825,
+			7825,
+			7825,
+			7825,
+			7825,
+			7825,
+			7825,
+			7825,
+			7825,
+			7825,
+			7825,
+			7825,
+			7825,
+			7825,
+			7825,
+			7825,
+			7825,
+			7825,
+			7825,
+			7825,
+			7825,
+			7825,
+			7825,
+			7825,
+			7825,
+			7825,
+			7825,
+			7825,
+			7825,
+			7825,
+			7825,
+			7825,
+			7825,
+			7825,
+			7825,
+			7825,
+			7825,
+			7825,
+			7825,
+			7825,
+			7825,
+			7825,
+			7825,
+			7825,
+			7825,
+			7825,
+			7825,
+			7825,
+			7825,
+			7825,
+			7825,
+			7825,
+			7825,
+			7825,
+			7825,
+			7825,
+			7825,
+			7825,
+			7825,
+			7825,
+			7825,
+			7825,
+			7825,
+			7825,
+			7825,
+			7825,
+			7825,
+			7825,
+			7825,
+			7825,
+			7825,
+			7833,
+			7841,
+			7849,
+			2009,
+			2009,
+			2009,
+			7857,
+			2009,
+			2009,
+			2009,
+			2009,
+			2009,
+			2009,
+			2009,
+			2009,
+			2009,
+			2009,
+			2009,
+			2009,
+			2009,
+			2009,
+			2009,
+			2009,
+			2009,
+			2009,
+			2009,
+			2009,
+			2009,
+			2009,
+			2009,
+			2009,
+			2009,
+			2009,
+			2009,
+			2009,
+			2009,
+			2009,
+			2009,
+			2009,
+			2009,
+			2009,
+			2009,
+			2009,
+			2009,
+			2009,
+			2009,
+			2009,
+			2009,
+			2009,
+			2009,
+			2009,
+			2009,
+			2009,
+			2009,
+			2009,
+			2009,
+			2009,
+			2009,
+			2009,
+			2009,
+			2009,
+			2009,
+			2009,
+			2009,
+			2009,
+			2009,
+			2009,
+			2009,
+			2009,
+			2009,
+			7865,
+			7865,
+			7865,
+			7865,
+			7865,
+			7865,
+			7865,
+			7865,
+			7865,
+			7865,
+			7865,
+			7873,
+			7881,
+			7889,
+			7897,
+			7897,
+			7897,
+			7897,
+			7905,
+			7913,
+			7913,
+			7913,
+			7913,
+			7913,
+			7913,
+			7913,
+			7913,
+			7913,
+			7913,
+			7913,
+			7913,
+			7913,
+			7913,
+			7913,
+			7913,
+			7913,
+			7913,
+			7913,
+			7913,
+			7913,
+			7913,
+			7913,
+			7913,
+			7913,
+			7913,
+			7913,
+			7913,
+			7913,
+			7913,
+			7913,
+			7913,
+			7913,
+			7913,
+			7913,
+			7913,
+			7913,
+			7913,
+			7913,
+			7913,
+			7913,
+			7913,
+			7913,
+			7921,
+			7929,
+			2009,
+			2009,
+			2009,
+			2009,
+			2009,
+			2009,
+			2009,
+			2009,
+			2009,
+			2009,
+			2009,
+			2009,
+			2009,
+			2009,
+			2009,
+			2009,
+			2009,
+			2009,
+			2009,
+			2009,
+			2009,
+			2009,
+			2009,
+			2009,
+			2009,
+			2009,
+			2009,
+			2009,
+			2009,
+			2009,
+			2009,
+			2009,
+			2009,
+			2009,
+			2009,
+			2009,
+			2009,
+			2009,
+			2009,
+			2009,
+			2009,
+			2009,
+			2009,
+			2009,
+			2009,
+			2009,
+			2009,
+			2009,
+			7937,
+			7937,
+			7937,
+			7937,
+			7937,
+			7937,
+			7937,
+			7945,
+			2009,
+			2009,
+			2009,
+			2009,
+			2009,
+			2009,
+			2009,
+			2009,
+			7953,
+			7953,
+			7953,
+			7953,
+			7953,
+			7953,
+			7953,
+			2009,
+			7961,
+			7969,
+			7977,
+			7985,
+			7993,
+			2009,
+			2009,
+			8001,
+			8009,
+			8009,
+			8009,
+			8009,
+			8009,
+			8009,
+			8009,
+			8009,
+			8009,
+			8009,
+			8009,
+			8009,
+			8009,
+			8017,
+			8025,
+			8025,
+			8025,
+			8025,
+			8025,
+			8025,
+			8025,
+			8033,
+			8041,
+			8049,
+			8057,
+			8065,
+			8073,
+			8081,
+			8081,
+			8081,
+			8081,
+			8081,
+			8081,
+			8081,
+			8081,
+			8081,
+			8081,
+			8081,
+			8089,
+			2009,
+			8097,
+			8097,
+			8097,
+			8105,
+			2009,
+			2009,
+			2009,
+			2009,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8113,
+			8121,
+			8129,
+			8137,
+			8137,
+			8137,
+			8137,
+			8137,
+			8137,
+			8137,
+			8137,
+			8137,
+			8137,
+			8137,
+			8137,
+			8137,
+			8137,
+			8145,
+			2009,
+			2009,
+			2009,
+			2009,
+			2009,
+			2009,
+			2009,
+			2009,
+			2009,
+			2009,
+			2009,
+			2009,
+			2009,
+			2009,
+			2009,
+			2009,
+			2009,
+			2009,
+			2009,
+			2009,
+			2009,
+			2009,
+			2009,
+			2009,
+			2009,
+			2009,
+			2009,
+			2009,
+			2009,
+			2009,
+			2009,
+			2009,
+			2009,
+			2009,
+			2009,
+			2009,
+			2009,
+			2009,
+			2009,
+			2009,
+			2009,
+			2009,
+			2009,
+			2009,
+			2009,
+			2009,
+			2009,
+			2009,
+			2009,
+			2009,
+			2009,
+			2009,
+			2009,
+			2009,
+			2009,
+			2009,
+			2009,
+			2009,
+			2009,
+			2009,
+			2009,
+			2009,
+			2009,
+			2009,
+			2009,
+			2009,
+			2009,
+			2009,
+			2009,
+			2009,
+			2009,
+			2009,
+			2009,
+			2009,
+			2009,
+			2009,
+			2009,
+			2009,
+			2009,
+			2009,
+			2009,
+			2009,
+			2009,
+			2009,
+			2009,
+			2009,
+			2009,
+			2009,
+			2009,
+			2009,
+			2009,
+			2009,
+			2009,
+			2009,
+			2009,
+			2009,
+			2009,
+			2009,
+			2009,
+			2009,
+			2009,
+			2009,
+			2009,
+			2009,
+			2009,
+			2009,
+			2009,
+			2009,
+			2009,
+			2009,
+			2009,
+			2009,
+			67496,
+			67496,
+			67496,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			17,
+			34,
+			30,
+			30,
+			33,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			38,
+			6,
+			3,
+			12,
+			9,
+			10,
+			12,
+			3,
+			0,
+			2,
+			12,
+			9,
+			8,
+			16,
+			8,
+			7,
+			11,
+			11,
+			11,
+			11,
+			11,
+			11,
+			11,
+			11,
+			11,
+			11,
+			8,
+			8,
+			12,
+			12,
+			12,
+			6,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			0,
+			9,
+			2,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			0,
+			17,
+			1,
+			12,
+			21,
+			0,
+			0,
+			0,
+			0,
+			0,
+			0,
+			0,
+			0,
+			0,
+			0,
+			0,
+			0,
+			0,
+			0,
+			0,
+			0,
+			0,
+			0,
+			0,
+			0,
+			0,
+			0,
+			0,
+			0,
+			0,
+			0,
+			0,
+			0,
+			0,
+			0,
+			0,
+			0,
+			0,
+			0,
+			0,
+			0,
+			0,
+			0,
+			0,
+			0,
+			0,
+			0,
+			0,
+			0,
+			0,
+			0,
+			0,
+			0,
+			0,
+			0,
+			0,
+			0,
+			0,
+			0,
+			0,
+			0,
+			0,
+			0,
+			0,
+			0,
+			0,
+			0,
+			0,
+			0,
+			39,
+			39,
+			39,
+			39,
+			39,
+			39,
+			39,
+			39,
+			39,
+			39,
+			39,
+			39,
+			39,
+			39,
+			39,
+			39,
+			39,
+			39,
+			39,
+			39,
+			39,
+			39,
+			39,
+			39,
+			39,
+			39,
+			39,
+			39,
+			39,
+			39,
+			39,
+			39,
+			39,
+			39,
+			39,
+			39,
+			39,
+			39,
+			39,
+			39,
+			39,
+			39,
+			39,
+			39,
+			39,
+			39,
+			39,
+			39,
+			39,
+			39,
+			39,
+			39,
+			39,
+			39,
+			39,
+			39,
+			39,
+			39,
+			39,
+			39,
+			39,
+			39,
+			39,
+			39,
+			21,
+			21,
+			21,
+			21,
+			21,
+			35,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			4,
+			0,
+			10,
+			9,
+			9,
+			9,
+			12,
+			29,
+			29,
+			12,
+			29,
+			3,
+			12,
+			17,
+			12,
+			12,
+			10,
+			9,
+			29,
+			29,
+			18,
+			12,
+			29,
+			29,
+			29,
+			29,
+			29,
+			3,
+			29,
+			29,
+			29,
+			0,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			29,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			29,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			29,
+			18,
+			29,
+			29,
+			29,
+			18,
+			29,
+			12,
+			12,
+			29,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			29,
+			29,
+			29,
+			29,
+			12,
+			29,
+			12,
+			18,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			4,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			4,
+			4,
+			4,
+			4,
+			4,
+			4,
+			4,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			8,
+			39,
+			39,
+			39,
+			39,
+			39,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			39,
+			8,
+			17,
+			39,
+			39,
+			39,
+			39,
+			9,
+			39,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			17,
+			21,
+			12,
+			21,
+			21,
+			12,
+			21,
+			21,
+			6,
+			21,
+			39,
+			39,
+			39,
+			39,
+			39,
+			39,
+			39,
+			39,
+			13,
+			13,
+			13,
+			13,
+			13,
+			13,
+			13,
+			13,
+			13,
+			13,
+			13,
+			13,
+			13,
+			13,
+			13,
+			13,
+			13,
+			13,
+			13,
+			13,
+			13,
+			13,
+			13,
+			13,
+			13,
+			13,
+			13,
+			13,
+			13,
+			13,
+			13,
+			13,
+			13,
+			13,
+			13,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			10,
+			10,
+			10,
+			8,
+			8,
+			12,
+			12,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			6,
+			6,
+			6,
+			6,
+			6,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			11,
+			11,
+			11,
+			11,
+			11,
+			11,
+			11,
+			11,
+			11,
+			11,
+			10,
+			11,
+			11,
+			12,
+			12,
+			12,
+			21,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			6,
+			12,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			12,
+			12,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			12,
+			12,
+			21,
+			21,
+			12,
+			21,
+			21,
+			21,
+			21,
+			12,
+			12,
+			11,
+			11,
+			11,
+			11,
+			11,
+			11,
+			11,
+			11,
+			11,
+			11,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			21,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			39,
+			39,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			12,
+			39,
+			39,
+			39,
+			39,
+			39,
+			39,
+			39,
+			39,
+			39,
+			39,
+			39,
+			39,
+			39,
+			39,
+			11,
+			11,
+			11,
+			11,
+			11,
+			11,
+			11,
+			11,
+			11,
+			11,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			12,
+			12,
+			12,
+			12,
+			8,
+			6,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			21,
+			21,
+			21,
+			21,
+			12,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			12,
+			21,
+			21,
+			21,
+			12,
+			21,
+			21,
+			21,
+			21,
+			21,
+			39,
+			39,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			21,
+			21,
+			21,
+			39,
+			39,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			39,
+			39,
+			39,
+			39,
+			39,
+			39,
+			39,
+			39,
+			39,
+			39,
+			39,
+			39,
+			39,
+			39,
+			39,
+			39,
+			39,
+			39,
+			39,
+			39,
+			39,
+			39,
+			39,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			21,
+			21,
+			21,
+			12,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			12,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			21,
+			21,
+			17,
+			17,
+			11,
+			11,
+			11,
+			11,
+			11,
+			11,
+			11,
+			11,
+			11,
+			11,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			39,
+			21,
+			21,
+			21,
+			39,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			39,
+			39,
+			21,
+			12,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			12,
+			39,
+			39,
+			39,
+			39,
+			39,
+			39,
+			39,
+			39,
+			21,
+			39,
+			39,
+			39,
+			39,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			21,
+			21,
+			39,
+			39,
+			11,
+			11,
+			11,
+			11,
+			11,
+			11,
+			11,
+			11,
+			11,
+			11,
+			12,
+			12,
+			10,
+			10,
+			12,
+			12,
+			12,
+			12,
+			12,
+			10,
+			12,
+			9,
+			39,
+			39,
+			39,
+			39,
+			39,
+			21,
+			21,
+			21,
+			39,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			39,
+			39,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			39,
+			39,
+			39,
+			39,
+			39,
+			39,
+			39,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			39,
+			39,
+			39,
+			39,
+			39,
+			39,
+			39,
+			11,
+			11,
+			11,
+			11,
+			11,
+			11,
+			11,
+			11,
+			11,
+			11,
+			21,
+			21,
+			12,
+			12,
+			12,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			39,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			39,
+			39,
+			21,
+			12,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			39,
+			39,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			21,
+			21,
+			39,
+			39,
+			11,
+			11,
+			11,
+			11,
+			11,
+			11,
+			11,
+			11,
+			11,
+			11,
+			12,
+			9,
+			39,
+			39,
+			39,
+			39,
+			39,
+			39,
+			39,
+			39,
+			39,
+			39,
+			39,
+			39,
+			39,
+			39,
+			39,
+			21,
+			21,
+			21,
+			39,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			39,
+			39,
+			21,
+			12,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			39,
+			39,
+			39,
+			39,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			21,
+			21,
+			39,
+			39,
+			11,
+			11,
+			11,
+			11,
+			11,
+			11,
+			11,
+			11,
+			11,
+			11,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			39,
+			39,
+			39,
+			39,
+			39,
+			39,
+			39,
+			39,
+			39,
+			39,
+			21,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			39,
+			39,
+			39,
+			39,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			39,
+			39,
+			12,
+			39,
+			39,
+			39,
+			39,
+			39,
+			39,
+			21,
+			39,
+			39,
+			39,
+			39,
+			39,
+			39,
+			39,
+			39,
+			39,
+			39,
+			39,
+			39,
+			39,
+			39,
+			11,
+			11,
+			11,
+			11,
+			11,
+			11,
+			11,
+			11,
+			11,
+			11,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			9,
+			12,
+			39,
+			39,
+			39,
+			39,
+			39,
+			39,
+			21,
+			21,
+			21,
+			39,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			39,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			21,
+			21,
+			39,
+			39,
+			11,
+			11,
+			11,
+			11,
+			11,
+			11,
+			11,
+			11,
+			11,
+			11,
+			39,
+			39,
+			39,
+			39,
+			39,
+			39,
+			39,
+			39,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			39,
+			39,
+			21,
+			21,
+			39,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			39,
+			39,
+			21,
+			12,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			39,
+			39,
+			39,
+			39,
+			39,
+			39,
+			39,
+			12,
+			12,
+			12,
+			12,
+			21,
+			21,
+			39,
+			39,
+			11,
+			11,
+			11,
+			11,
+			11,
+			11,
+			11,
+			11,
+			11,
+			11,
+			39,
+			12,
+			12,
+			39,
+			39,
+			39,
+			39,
+			39,
+			39,
+			39,
+			39,
+			39,
+			39,
+			39,
+			39,
+			39,
+			39,
+			39,
+			21,
+			21,
+			39,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			12,
+			39,
+			39,
+			39,
+			39,
+			39,
+			39,
+			39,
+			39,
+			21,
+			39,
+			39,
+			39,
+			39,
+			39,
+			39,
+			39,
+			39,
+			12,
+			12,
+			21,
+			21,
+			39,
+			39,
+			11,
+			11,
+			11,
+			11,
+			11,
+			11,
+			11,
+			11,
+			11,
+			11,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			39,
+			39,
+			39,
+			10,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			39,
+			39,
+			21,
+			21,
+			39,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			39,
+			39,
+			39,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			12,
+			39,
+			39,
+			39,
+			39,
+			39,
+			39,
+			39,
+			39,
+			39,
+			39,
+			39,
+			39,
+			36,
+			36,
+			36,
+			36,
+			36,
+			36,
+			36,
+			36,
+			36,
+			36,
+			36,
+			36,
+			36,
+			36,
+			36,
+			36,
+			36,
+			36,
+			36,
+			36,
+			36,
+			36,
+			36,
+			36,
+			36,
+			36,
+			36,
+			36,
+			36,
+			36,
+			36,
+			36,
+			36,
+			36,
+			36,
+			36,
+			36,
+			36,
+			36,
+			36,
+			36,
+			36,
+			36,
+			36,
+			36,
+			36,
+			36,
+			36,
+			36,
+			36,
+			36,
+			36,
+			36,
+			36,
+			36,
+			36,
+			36,
+			36,
+			39,
+			39,
+			39,
+			39,
+			9,
+			36,
+			36,
+			36,
+			36,
+			36,
+			36,
+			36,
+			36,
+			36,
+			36,
+			36,
+			36,
+			36,
+			36,
+			36,
+			12,
+			11,
+			11,
+			11,
+			11,
+			11,
+			11,
+			11,
+			11,
+			11,
+			11,
+			17,
+			17,
+			39,
+			39,
+			39,
+			39,
+			39,
+			36,
+			36,
+			36,
+			36,
+			36,
+			36,
+			36,
+			36,
+			36,
+			36,
+			36,
+			36,
+			36,
+			36,
+			36,
+			36,
+			36,
+			36,
+			36,
+			36,
+			36,
+			36,
+			36,
+			36,
+			36,
+			36,
+			36,
+			36,
+			36,
+			36,
+			36,
+			36,
+			36,
+			36,
+			36,
+			36,
+			36,
+			36,
+			36,
+			36,
+			36,
+			36,
+			36,
+			36,
+			36,
+			36,
+			36,
+			36,
+			36,
+			36,
+			36,
+			36,
+			36,
+			36,
+			36,
+			36,
+			36,
+			36,
+			36,
+			36,
+			36,
+			36,
+			36,
+			36,
+			36,
+			36,
+			36,
+			36,
+			36,
+			36,
+			36,
+			36,
+			36,
+			36,
+			36,
+			36,
+			36,
+			39,
+			39,
+			11,
+			11,
+			11,
+			11,
+			11,
+			11,
+			11,
+			11,
+			11,
+			11,
+			39,
+			39,
+			36,
+			36,
+			36,
+			36,
+			12,
+			18,
+			18,
+			18,
+			18,
+			12,
+			18,
+			18,
+			4,
+			18,
+			18,
+			17,
+			4,
+			6,
+			6,
+			6,
+			6,
+			6,
+			4,
+			12,
+			6,
+			12,
+			12,
+			12,
+			21,
+			21,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			11,
+			11,
+			11,
+			11,
+			11,
+			11,
+			11,
+			11,
+			11,
+			11,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			17,
+			21,
+			12,
+			21,
+			12,
+			21,
+			0,
+			1,
+			0,
+			1,
+			21,
+			21,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			39,
+			39,
+			39,
+			39,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			17,
+			21,
+			21,
+			21,
+			21,
+			21,
+			17,
+			21,
+			21,
+			12,
+			12,
+			12,
+			12,
+			12,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			39,
+			17,
+			17,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			21,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			18,
+			18,
+			17,
+			18,
+			12,
+			12,
+			12,
+			12,
+			12,
+			4,
+			4,
+			39,
+			39,
+			39,
+			39,
+			39,
+			36,
+			36,
+			36,
+			36,
+			36,
+			36,
+			36,
+			36,
+			36,
+			36,
+			36,
+			36,
+			36,
+			36,
+			36,
+			36,
+			36,
+			36,
+			36,
+			36,
+			36,
+			36,
+			36,
+			36,
+			36,
+			36,
+			36,
+			36,
+			36,
+			36,
+			36,
+			36,
+			11,
+			11,
+			11,
+			11,
+			11,
+			11,
+			11,
+			11,
+			11,
+			11,
+			17,
+			17,
+			12,
+			12,
+			12,
+			12,
+			36,
+			36,
+			36,
+			36,
+			36,
+			36,
+			36,
+			36,
+			36,
+			36,
+			36,
+			36,
+			36,
+			36,
+			36,
+			36,
+			36,
+			36,
+			36,
+			36,
+			36,
+			36,
+			36,
+			36,
+			36,
+			36,
+			36,
+			36,
+			36,
+			36,
+			36,
+			36,
+			36,
+			36,
+			36,
+			36,
+			36,
+			36,
+			36,
+			36,
+			36,
+			36,
+			36,
+			36,
+			36,
+			36,
+			36,
+			36,
+			36,
+			36,
+			36,
+			36,
+			36,
+			36,
+			36,
+			36,
+			36,
+			36,
+			36,
+			36,
+			36,
+			36,
+			36,
+			36,
+			11,
+			11,
+			11,
+			11,
+			11,
+			11,
+			11,
+			11,
+			11,
+			11,
+			36,
+			36,
+			36,
+			36,
+			36,
+			36,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			25,
+			25,
+			25,
+			25,
+			25,
+			25,
+			25,
+			25,
+			25,
+			25,
+			25,
+			25,
+			25,
+			25,
+			25,
+			25,
+			25,
+			25,
+			25,
+			25,
+			25,
+			25,
+			25,
+			25,
+			25,
+			25,
+			25,
+			25,
+			25,
+			25,
+			25,
+			25,
+			26,
+			26,
+			26,
+			26,
+			26,
+			26,
+			26,
+			26,
+			26,
+			26,
+			26,
+			26,
+			26,
+			26,
+			26,
+			26,
+			26,
+			26,
+			26,
+			26,
+			26,
+			26,
+			26,
+			26,
+			26,
+			26,
+			26,
+			26,
+			26,
+			26,
+			26,
+			26,
+			26,
+			26,
+			26,
+			26,
+			26,
+			26,
+			26,
+			26,
+			27,
+			27,
+			27,
+			27,
+			27,
+			27,
+			27,
+			27,
+			27,
+			27,
+			27,
+			27,
+			27,
+			27,
+			27,
+			27,
+			27,
+			27,
+			27,
+			27,
+			27,
+			27,
+			27,
+			27,
+			27,
+			27,
+			27,
+			27,
+			27,
+			27,
+			27,
+			27,
+			27,
+			27,
+			27,
+			27,
+			27,
+			27,
+			27,
+			27,
+			27,
+			27,
+			27,
+			27,
+			27,
+			27,
+			27,
+			27,
+			27,
+			27,
+			27,
+			27,
+			27,
+			27,
+			27,
+			27,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			39,
+			39,
+			21,
+			21,
+			21,
+			12,
+			17,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			39,
+			39,
+			39,
+			39,
+			39,
+			39,
+			39,
+			39,
+			39,
+			39,
+			39,
+			17,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			17,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			0,
+			1,
+			39,
+			39,
+			39,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			17,
+			17,
+			17,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			21,
+			21,
+			21,
+			39,
+			39,
+			39,
+			39,
+			39,
+			39,
+			39,
+			39,
+			39,
+			39,
+			39,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			21,
+			21,
+			21,
+			17,
+			17,
+			39,
+			39,
+			39,
+			39,
+			39,
+			39,
+			39,
+			39,
+			39,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			21,
+			21,
+			39,
+			39,
+			39,
+			39,
+			39,
+			39,
+			39,
+			39,
+			39,
+			39,
+			39,
+			39,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			39,
+			21,
+			21,
+			39,
+			39,
+			39,
+			39,
+			39,
+			39,
+			39,
+			39,
+			39,
+			39,
+			39,
+			39,
+			36,
+			36,
+			36,
+			36,
+			36,
+			36,
+			36,
+			36,
+			36,
+			36,
+			36,
+			36,
+			36,
+			36,
+			36,
+			36,
+			36,
+			36,
+			36,
+			36,
+			36,
+			36,
+			36,
+			36,
+			36,
+			36,
+			36,
+			36,
+			36,
+			36,
+			36,
+			36,
+			36,
+			36,
+			36,
+			36,
+			36,
+			36,
+			36,
+			36,
+			36,
+			36,
+			36,
+			36,
+			36,
+			36,
+			36,
+			36,
+			36,
+			36,
+			36,
+			36,
+			17,
+			17,
+			5,
+			36,
+			17,
+			12,
+			17,
+			9,
+			36,
+			36,
+			39,
+			39,
+			11,
+			11,
+			11,
+			11,
+			11,
+			11,
+			11,
+			11,
+			11,
+			11,
+			39,
+			39,
+			39,
+			39,
+			39,
+			39,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			6,
+			6,
+			17,
+			17,
+			18,
+			12,
+			6,
+			6,
+			12,
+			21,
+			21,
+			21,
+			4,
+			39,
+			11,
+			11,
+			11,
+			11,
+			11,
+			11,
+			11,
+			11,
+			11,
+			11,
+			39,
+			39,
+			39,
+			39,
+			39,
+			39,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			21,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			39,
+			39,
+			39,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			39,
+			39,
+			39,
+			39,
+			12,
+			39,
+			39,
+			39,
+			6,
+			6,
+			11,
+			11,
+			11,
+			11,
+			11,
+			11,
+			11,
+			11,
+			11,
+			11,
+			36,
+			36,
+			36,
+			36,
+			36,
+			36,
+			36,
+			36,
+			36,
+			36,
+			36,
+			36,
+			36,
+			36,
+			36,
+			36,
+			36,
+			36,
+			36,
+			36,
+			36,
+			36,
+			36,
+			36,
+			36,
+			36,
+			36,
+			36,
+			36,
+			36,
+			36,
+			36,
+			36,
+			36,
+			36,
+			36,
+			36,
+			36,
+			36,
+			36,
+			36,
+			36,
+			36,
+			36,
+			36,
+			36,
+			36,
+			36,
+			36,
+			36,
+			36,
+			36,
+			36,
+			36,
+			36,
+			36,
+			36,
+			36,
+			39,
+			39,
+			39,
+			39,
+			39,
+			39,
+			11,
+			11,
+			11,
+			11,
+			11,
+			11,
+			11,
+			11,
+			11,
+			11,
+			36,
+			36,
+			36,
+			36,
+			36,
+			36,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			21,
+			21,
+			21,
+			21,
+			21,
+			39,
+			39,
+			12,
+			12,
+			36,
+			36,
+			36,
+			36,
+			36,
+			36,
+			36,
+			36,
+			36,
+			36,
+			36,
+			36,
+			36,
+			36,
+			36,
+			36,
+			36,
+			36,
+			36,
+			36,
+			36,
+			36,
+			36,
+			36,
+			36,
+			36,
+			36,
+			36,
+			36,
+			36,
+			36,
+			36,
+			36,
+			36,
+			36,
+			36,
+			36,
+			36,
+			36,
+			36,
+			36,
+			36,
+			36,
+			36,
+			36,
+			36,
+			36,
+			36,
+			36,
+			36,
+			36,
+			36,
+			36,
+			36,
+			36,
+			36,
+			36,
+			36,
+			36,
+			36,
+			36,
+			39,
+			39,
+			21,
+			11,
+			11,
+			11,
+			11,
+			11,
+			11,
+			11,
+			11,
+			11,
+			11,
+			11,
+			11,
+			11,
+			11,
+			11,
+			11,
+			11,
+			11,
+			11,
+			11,
+			11,
+			11,
+			11,
+			11,
+			11,
+			11,
+			39,
+			39,
+			39,
+			39,
+			39,
+			39,
+			36,
+			36,
+			36,
+			36,
+			36,
+			36,
+			36,
+			36,
+			36,
+			36,
+			36,
+			36,
+			36,
+			36,
+			39,
+			39,
+			39,
+			39,
+			39,
+			39,
+			39,
+			39,
+			39,
+			39,
+			39,
+			39,
+			39,
+			39,
+			39,
+			39,
+			39,
+			39,
+			21,
+			21,
+			21,
+			21,
+			21,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			39,
+			39,
+			39,
+			39,
+			11,
+			11,
+			11,
+			11,
+			11,
+			11,
+			11,
+			11,
+			11,
+			11,
+			17,
+			17,
+			12,
+			17,
+			17,
+			17,
+			17,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			39,
+			39,
+			39,
+			21,
+			21,
+			21,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			12,
+			12,
+			11,
+			11,
+			11,
+			11,
+			11,
+			11,
+			11,
+			11,
+			11,
+			11,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			39,
+			39,
+			39,
+			39,
+			39,
+			39,
+			39,
+			39,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			39,
+			39,
+			39,
+			17,
+			17,
+			17,
+			17,
+			17,
+			11,
+			11,
+			11,
+			11,
+			11,
+			11,
+			11,
+			11,
+			11,
+			11,
+			39,
+			39,
+			39,
+			12,
+			12,
+			12,
+			11,
+			11,
+			11,
+			11,
+			11,
+			11,
+			11,
+			11,
+			11,
+			11,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			17,
+			17,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			39,
+			39,
+			39,
+			39,
+			39,
+			39,
+			39,
+			39,
+			21,
+			21,
+			21,
+			12,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			12,
+			12,
+			12,
+			12,
+			21,
+			12,
+			12,
+			12,
+			12,
+			21,
+			21,
+			21,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			18,
+			12,
+			39,
+			17,
+			17,
+			17,
+			17,
+			17,
+			17,
+			17,
+			4,
+			17,
+			17,
+			17,
+			20,
+			21,
+			21,
+			21,
+			21,
+			17,
+			4,
+			17,
+			17,
+			19,
+			29,
+			29,
+			12,
+			3,
+			3,
+			0,
+			3,
+			3,
+			3,
+			0,
+			3,
+			29,
+			29,
+			12,
+			12,
+			15,
+			15,
+			15,
+			17,
+			30,
+			30,
+			21,
+			21,
+			21,
+			21,
+			21,
+			4,
+			10,
+			10,
+			10,
+			10,
+			10,
+			10,
+			10,
+			10,
+			12,
+			3,
+			3,
+			29,
+			5,
+			5,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			8,
+			0,
+			1,
+			5,
+			5,
+			5,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			17,
+			12,
+			17,
+			17,
+			17,
+			17,
+			12,
+			17,
+			17,
+			17,
+			22,
+			12,
+			12,
+			12,
+			12,
+			39,
+			39,
+			39,
+			39,
+			39,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			12,
+			12,
+			39,
+			39,
+			29,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			0,
+			1,
+			29,
+			12,
+			29,
+			29,
+			29,
+			29,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			0,
+			1,
+			39,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			39,
+			39,
+			39,
+			9,
+			9,
+			9,
+			9,
+			9,
+			9,
+			9,
+			10,
+			9,
+			9,
+			9,
+			9,
+			9,
+			9,
+			9,
+			9,
+			9,
+			9,
+			9,
+			9,
+			9,
+			9,
+			10,
+			9,
+			9,
+			9,
+			9,
+			39,
+			39,
+			39,
+			39,
+			39,
+			39,
+			39,
+			39,
+			39,
+			39,
+			39,
+			39,
+			39,
+			39,
+			39,
+			39,
+			39,
+			39,
+			39,
+			39,
+			39,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			39,
+			39,
+			39,
+			39,
+			39,
+			39,
+			39,
+			39,
+			39,
+			39,
+			39,
+			39,
+			39,
+			39,
+			39,
+			12,
+			12,
+			12,
+			10,
+			12,
+			29,
+			12,
+			12,
+			12,
+			10,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			29,
+			12,
+			12,
+			9,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			29,
+			29,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			29,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			29,
+			29,
+			12,
+			12,
+			12,
+			12,
+			12,
+			29,
+			12,
+			12,
+			29,
+			12,
+			29,
+			29,
+			29,
+			29,
+			29,
+			29,
+			29,
+			29,
+			29,
+			29,
+			29,
+			29,
+			12,
+			12,
+			12,
+			12,
+			29,
+			29,
+			29,
+			29,
+			29,
+			29,
+			29,
+			29,
+			29,
+			29,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			29,
+			29,
+			29,
+			29,
+			29,
+			29,
+			29,
+			29,
+			29,
+			29,
+			29,
+			29,
+			29,
+			29,
+			29,
+			29,
+			29,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			29,
+			12,
+			29,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			29,
+			12,
+			29,
+			29,
+			12,
+			12,
+			12,
+			29,
+			29,
+			12,
+			12,
+			29,
+			12,
+			12,
+			12,
+			29,
+			12,
+			29,
+			9,
+			9,
+			12,
+			29,
+			12,
+			12,
+			12,
+			12,
+			29,
+			12,
+			12,
+			29,
+			29,
+			29,
+			29,
+			12,
+			12,
+			29,
+			12,
+			29,
+			12,
+			29,
+			29,
+			29,
+			29,
+			29,
+			29,
+			12,
+			29,
+			12,
+			12,
+			12,
+			12,
+			12,
+			29,
+			29,
+			29,
+			29,
+			12,
+			12,
+			12,
+			12,
+			29,
+			29,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			29,
+			12,
+			12,
+			12,
+			29,
+			12,
+			12,
+			12,
+			12,
+			12,
+			29,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			29,
+			29,
+			12,
+			12,
+			29,
+			29,
+			29,
+			29,
+			12,
+			12,
+			29,
+			29,
+			12,
+			12,
+			29,
+			29,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			29,
+			29,
+			12,
+			12,
+			29,
+			29,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			29,
+			12,
+			12,
+			12,
+			29,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			29,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			29,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			29,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			14,
+			14,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			0,
+			1,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			14,
+			14,
+			14,
+			14,
+			39,
+			39,
+			39,
+			39,
+			39,
+			39,
+			39,
+			39,
+			39,
+			39,
+			39,
+			39,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			39,
+			39,
+			39,
+			39,
+			39,
+			39,
+			39,
+			39,
+			39,
+			39,
+			39,
+			39,
+			39,
+			39,
+			39,
+			39,
+			39,
+			39,
+			39,
+			39,
+			39,
+			29,
+			29,
+			29,
+			29,
+			29,
+			29,
+			29,
+			29,
+			29,
+			29,
+			29,
+			29,
+			29,
+			29,
+			29,
+			29,
+			29,
+			29,
+			29,
+			29,
+			29,
+			29,
+			29,
+			29,
+			29,
+			29,
+			29,
+			29,
+			29,
+			29,
+			29,
+			29,
+			29,
+			29,
+			29,
+			29,
+			29,
+			29,
+			29,
+			29,
+			29,
+			29,
+			29,
+			29,
+			29,
+			29,
+			29,
+			29,
+			29,
+			29,
+			29,
+			29,
+			29,
+			29,
+			29,
+			29,
+			29,
+			29,
+			29,
+			29,
+			29,
+			29,
+			29,
+			12,
+			29,
+			29,
+			29,
+			29,
+			29,
+			29,
+			29,
+			29,
+			29,
+			29,
+			29,
+			29,
+			29,
+			29,
+			29,
+			29,
+			29,
+			29,
+			29,
+			29,
+			29,
+			29,
+			29,
+			29,
+			29,
+			29,
+			29,
+			29,
+			29,
+			29,
+			29,
+			29,
+			29,
+			29,
+			29,
+			29,
+			29,
+			29,
+			29,
+			29,
+			29,
+			29,
+			29,
+			29,
+			12,
+			12,
+			12,
+			12,
+			29,
+			29,
+			29,
+			29,
+			29,
+			29,
+			29,
+			29,
+			29,
+			29,
+			29,
+			29,
+			29,
+			29,
+			29,
+			29,
+			29,
+			29,
+			29,
+			29,
+			29,
+			29,
+			29,
+			29,
+			29,
+			29,
+			29,
+			29,
+			29,
+			29,
+			29,
+			29,
+			29,
+			29,
+			29,
+			29,
+			29,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			29,
+			29,
+			29,
+			29,
+			29,
+			29,
+			29,
+			29,
+			29,
+			29,
+			29,
+			29,
+			29,
+			29,
+			29,
+			29,
+			12,
+			12,
+			29,
+			29,
+			29,
+			29,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			29,
+			29,
+			12,
+			29,
+			29,
+			29,
+			29,
+			29,
+			29,
+			29,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			29,
+			29,
+			12,
+			12,
+			29,
+			29,
+			12,
+			12,
+			12,
+			12,
+			29,
+			29,
+			12,
+			12,
+			29,
+			29,
+			12,
+			12,
+			12,
+			12,
+			29,
+			29,
+			29,
+			12,
+			12,
+			29,
+			12,
+			12,
+			29,
+			29,
+			29,
+			29,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			29,
+			29,
+			29,
+			29,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			29,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			14,
+			14,
+			14,
+			14,
+			12,
+			29,
+			29,
+			12,
+			12,
+			29,
+			12,
+			12,
+			12,
+			12,
+			29,
+			29,
+			12,
+			12,
+			12,
+			12,
+			14,
+			14,
+			29,
+			29,
+			14,
+			12,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			14,
+			14,
+			14,
+			12,
+			12,
+			12,
+			12,
+			29,
+			12,
+			29,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			29,
+			29,
+			12,
+			29,
+			29,
+			29,
+			12,
+			29,
+			14,
+			29,
+			29,
+			12,
+			29,
+			29,
+			12,
+			29,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			14,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			29,
+			29,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			29,
+			29,
+			29,
+			29,
+			14,
+			12,
+			14,
+			14,
+			14,
+			29,
+			14,
+			14,
+			29,
+			29,
+			29,
+			14,
+			14,
+			29,
+			29,
+			14,
+			29,
+			29,
+			14,
+			14,
+			14,
+			12,
+			29,
+			12,
+			12,
+			12,
+			12,
+			29,
+			29,
+			14,
+			29,
+			29,
+			29,
+			29,
+			29,
+			29,
+			14,
+			14,
+			14,
+			14,
+			14,
+			29,
+			14,
+			14,
+			14,
+			14,
+			29,
+			29,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			12,
+			12,
+			12,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			29,
+			12,
+			12,
+			12,
+			3,
+			3,
+			3,
+			3,
+			12,
+			12,
+			12,
+			6,
+			6,
+			12,
+			12,
+			12,
+			12,
+			0,
+			1,
+			0,
+			1,
+			0,
+			1,
+			0,
+			1,
+			0,
+			1,
+			0,
+			1,
+			0,
+			1,
+			29,
+			29,
+			29,
+			29,
+			29,
+			29,
+			29,
+			29,
+			29,
+			29,
+			29,
+			29,
+			29,
+			29,
+			29,
+			29,
+			29,
+			29,
+			29,
+			29,
+			29,
+			29,
+			29,
+			29,
+			29,
+			29,
+			29,
+			29,
+			29,
+			29,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			0,
+			1,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			0,
+			1,
+			0,
+			1,
+			0,
+			1,
+			0,
+			1,
+			0,
+			1,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			0,
+			1,
+			0,
+			1,
+			0,
+			1,
+			0,
+			1,
+			0,
+			1,
+			0,
+			1,
+			0,
+			1,
+			0,
+			1,
+			0,
+			1,
+			0,
+			1,
+			0,
+			1,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			0,
+			1,
+			0,
+			1,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			0,
+			1,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			29,
+			29,
+			29,
+			29,
+			29,
+			39,
+			39,
+			39,
+			39,
+			39,
+			39,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			21,
+			21,
+			21,
+			12,
+			12,
+			39,
+			39,
+			39,
+			39,
+			39,
+			6,
+			17,
+			17,
+			17,
+			12,
+			6,
+			17,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			17,
+			39,
+			39,
+			39,
+			39,
+			39,
+			39,
+			39,
+			39,
+			39,
+			39,
+			39,
+			39,
+			39,
+			39,
+			21,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			39,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			3,
+			3,
+			3,
+			3,
+			3,
+			3,
+			3,
+			3,
+			3,
+			3,
+			3,
+			3,
+			3,
+			3,
+			17,
+			17,
+			17,
+			17,
+			17,
+			17,
+			17,
+			17,
+			12,
+			17,
+			0,
+			17,
+			12,
+			12,
+			3,
+			3,
+			12,
+			12,
+			3,
+			3,
+			0,
+			1,
+			0,
+			1,
+			0,
+			1,
+			0,
+			1,
+			17,
+			17,
+			17,
+			17,
+			6,
+			12,
+			17,
+			17,
+			12,
+			17,
+			17,
+			12,
+			12,
+			12,
+			12,
+			12,
+			19,
+			19,
+			39,
+			39,
+			39,
+			39,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			1,
+			1,
+			14,
+			14,
+			5,
+			14,
+			14,
+			0,
+			1,
+			0,
+			1,
+			0,
+			1,
+			0,
+			1,
+			0,
+			1,
+			14,
+			14,
+			0,
+			1,
+			0,
+			1,
+			0,
+			1,
+			0,
+			1,
+			5,
+			0,
+			1,
+			1,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			5,
+			5,
+			14,
+			14,
+			14,
+			39,
+			32,
+			14,
+			32,
+			14,
+			32,
+			14,
+			32,
+			14,
+			32,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			32,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			32,
+			14,
+			32,
+			14,
+			32,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			32,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			32,
+			32,
+			39,
+			39,
+			21,
+			21,
+			5,
+			5,
+			5,
+			5,
+			14,
+			5,
+			32,
+			14,
+			32,
+			14,
+			32,
+			14,
+			32,
+			14,
+			32,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			32,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			32,
+			14,
+			32,
+			14,
+			32,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			32,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			32,
+			32,
+			14,
+			14,
+			14,
+			14,
+			5,
+			32,
+			5,
+			5,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			39,
+			39,
+			39,
+			39,
+			39,
+			39,
+			39,
+			39,
+			39,
+			39,
+			39,
+			39,
+			32,
+			32,
+			32,
+			32,
+			32,
+			32,
+			32,
+			32,
+			32,
+			32,
+			32,
+			32,
+			32,
+			32,
+			32,
+			32,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			29,
+			29,
+			29,
+			29,
+			29,
+			29,
+			29,
+			29,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			5,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			39,
+			39,
+			39,
+			39,
+			39,
+			39,
+			39,
+			39,
+			39,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			17,
+			17,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			17,
+			6,
+			17,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			11,
+			11,
+			11,
+			11,
+			11,
+			11,
+			11,
+			11,
+			11,
+			11,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			21,
+			21,
+			21,
+			21,
+			12,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			39,
+			39,
+			39,
+			39,
+			39,
+			39,
+			39,
+			21,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			21,
+			21,
+			12,
+			17,
+			17,
+			17,
+			17,
+			17,
+			39,
+			39,
+			39,
+			39,
+			39,
+			39,
+			39,
+			39,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			21,
+			12,
+			12,
+			12,
+			21,
+			12,
+			12,
+			12,
+			12,
+			21,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			21,
+			21,
+			21,
+			21,
+			21,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			10,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			18,
+			18,
+			6,
+			6,
+			39,
+			39,
+			39,
+			39,
+			39,
+			39,
+			39,
+			39,
+			21,
+			21,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			39,
+			39,
+			39,
+			39,
+			39,
+			39,
+			39,
+			39,
+			39,
+			17,
+			17,
+			11,
+			11,
+			11,
+			11,
+			11,
+			11,
+			11,
+			11,
+			11,
+			11,
+			39,
+			39,
+			39,
+			39,
+			39,
+			39,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			39,
+			39,
+			39,
+			39,
+			11,
+			11,
+			11,
+			11,
+			11,
+			11,
+			11,
+			11,
+			11,
+			11,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			17,
+			17,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			39,
+			39,
+			39,
+			39,
+			39,
+			39,
+			39,
+			39,
+			39,
+			39,
+			39,
+			12,
+			25,
+			25,
+			25,
+			25,
+			25,
+			25,
+			25,
+			25,
+			25,
+			25,
+			25,
+			25,
+			25,
+			25,
+			25,
+			25,
+			25,
+			25,
+			25,
+			25,
+			25,
+			25,
+			25,
+			25,
+			25,
+			25,
+			25,
+			25,
+			25,
+			39,
+			39,
+			39,
+			21,
+			21,
+			21,
+			21,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			17,
+			17,
+			17,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			11,
+			11,
+			11,
+			11,
+			11,
+			11,
+			11,
+			11,
+			11,
+			11,
+			39,
+			39,
+			39,
+			39,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			39,
+			39,
+			39,
+			39,
+			39,
+			39,
+			39,
+			39,
+			39,
+			12,
+			12,
+			12,
+			21,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			21,
+			21,
+			39,
+			39,
+			11,
+			11,
+			11,
+			11,
+			11,
+			11,
+			11,
+			11,
+			11,
+			11,
+			39,
+			39,
+			12,
+			17,
+			17,
+			17,
+			36,
+			36,
+			36,
+			36,
+			36,
+			36,
+			36,
+			36,
+			36,
+			36,
+			36,
+			36,
+			36,
+			36,
+			36,
+			36,
+			36,
+			36,
+			36,
+			36,
+			36,
+			36,
+			36,
+			36,
+			36,
+			36,
+			36,
+			36,
+			36,
+			36,
+			36,
+			36,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			21,
+			21,
+			21,
+			21,
+			21,
+			17,
+			17,
+			12,
+			12,
+			12,
+			21,
+			21,
+			39,
+			39,
+			39,
+			39,
+			39,
+			39,
+			39,
+			39,
+			39,
+			39,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			17,
+			21,
+			21,
+			39,
+			39,
+			11,
+			11,
+			11,
+			11,
+			11,
+			11,
+			11,
+			11,
+			11,
+			11,
+			39,
+			39,
+			39,
+			39,
+			39,
+			39,
+			23,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			23,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			23,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			23,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			23,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			23,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			23,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			23,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			23,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			23,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			23,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			23,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			23,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			23,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			23,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			23,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			23,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			23,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			23,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			23,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			23,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			23,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			23,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			23,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			23,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			23,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			23,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			23,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			23,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			23,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			23,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			23,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			23,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			23,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			23,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			23,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			23,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			23,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			23,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			23,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			23,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			23,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			23,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			23,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			23,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			23,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			23,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			23,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			23,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			23,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			23,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			23,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			23,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			23,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			23,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			23,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			23,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			23,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			23,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			23,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			23,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			23,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			23,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			23,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			23,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			23,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			23,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			23,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			23,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			23,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			23,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			23,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			23,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			23,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			23,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			23,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			23,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			23,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			23,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			23,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			23,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			23,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			23,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			23,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			23,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			23,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			23,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			23,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			23,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			23,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			23,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			23,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			23,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			23,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			23,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			23,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			23,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			23,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			23,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			23,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			23,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			23,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			23,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			23,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			23,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			23,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			23,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			23,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			23,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			23,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			23,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			23,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			23,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			23,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			23,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			23,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			23,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			23,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			23,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			23,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			23,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			23,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			23,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			23,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			23,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			23,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			23,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			23,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			23,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			23,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			23,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			23,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			23,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			23,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			23,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			23,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			23,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			23,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			23,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			23,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			23,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			23,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			23,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			23,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			23,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			23,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			23,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			23,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			23,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			23,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			23,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			23,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			23,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			23,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			23,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			23,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			23,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			23,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			23,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			23,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			23,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			23,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			23,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			23,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			23,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			23,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			23,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			23,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			23,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			23,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			23,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			23,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			23,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			23,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			23,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			23,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			23,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			23,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			23,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			23,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			23,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			23,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			23,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			23,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			23,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			23,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			23,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			23,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			23,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			23,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			23,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			23,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			23,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			23,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			23,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			23,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			23,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			23,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			23,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			23,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			23,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			23,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			23,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			23,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			23,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			23,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			23,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			23,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			23,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			23,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			23,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			23,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			23,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			23,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			23,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			23,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			23,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			23,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			23,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			23,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			23,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			23,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			23,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			23,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			23,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			23,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			23,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			23,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			23,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			23,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			23,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			23,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			23,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			23,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			23,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			23,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			23,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			23,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			23,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			23,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			23,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			23,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			23,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			23,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			23,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			23,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			23,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			23,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			23,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			23,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			23,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			23,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			23,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			23,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			23,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			23,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			23,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			23,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			23,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			23,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			23,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			23,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			23,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			23,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			23,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			23,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			23,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			23,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			23,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			23,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			23,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			23,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			23,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			23,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			23,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			23,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			23,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			23,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			23,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			23,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			23,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			23,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			23,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			23,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			23,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			23,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			23,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			23,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			23,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			23,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			23,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			23,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			23,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			23,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			23,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			23,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			23,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			23,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			23,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			23,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			23,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			23,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			23,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			23,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			23,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			23,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			23,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			23,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			23,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			23,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			23,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			23,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			23,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			23,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			23,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			23,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			23,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			23,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			23,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			23,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			23,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			23,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			23,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			23,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			23,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			23,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			23,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			23,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			23,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			23,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			23,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			23,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			23,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			23,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			23,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			23,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			23,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			23,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			23,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			23,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			23,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			23,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			23,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			23,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			23,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			23,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			23,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			23,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			23,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			23,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			23,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			23,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			23,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			23,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			23,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			23,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			23,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			23,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			23,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			23,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			23,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			23,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			23,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			23,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			23,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			23,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			23,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			23,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			23,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			23,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			23,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			23,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			23,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			23,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			23,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			23,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			23,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			23,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			23,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			23,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			23,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			23,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			23,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			23,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			23,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			23,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			23,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			23,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			23,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			23,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			23,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			23,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			23,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			23,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			23,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			23,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			23,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			23,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			23,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			24,
+			39,
+			39,
+			39,
+			39,
+			39,
+			39,
+			39,
+			39,
+			39,
+			39,
+			39,
+			39,
+			26,
+			26,
+			26,
+			26,
+			26,
+			26,
+			26,
+			26,
+			26,
+			26,
+			26,
+			26,
+			26,
+			26,
+			26,
+			26,
+			26,
+			26,
+			26,
+			26,
+			26,
+			26,
+			26,
+			39,
+			39,
+			39,
+			39,
+			27,
+			27,
+			27,
+			27,
+			27,
+			27,
+			27,
+			27,
+			27,
+			27,
+			27,
+			27,
+			27,
+			27,
+			27,
+			27,
+			27,
+			27,
+			27,
+			27,
+			27,
+			27,
+			27,
+			27,
+			27,
+			27,
+			27,
+			27,
+			27,
+			27,
+			27,
+			27,
+			27,
+			27,
+			27,
+			27,
+			27,
+			27,
+			27,
+			27,
+			27,
+			27,
+			27,
+			27,
+			27,
+			27,
+			27,
+			27,
+			27,
+			39,
+			39,
+			39,
+			39,
+			37,
+			37,
+			37,
+			37,
+			37,
+			37,
+			37,
+			37,
+			37,
+			37,
+			37,
+			37,
+			37,
+			37,
+			37,
+			37,
+			37,
+			37,
+			37,
+			37,
+			37,
+			37,
+			37,
+			37,
+			37,
+			37,
+			37,
+			37,
+			37,
+			37,
+			37,
+			37,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			39,
+			39,
+			39,
+			39,
+			39,
+			13,
+			21,
+			13,
+			13,
+			13,
+			13,
+			13,
+			13,
+			13,
+			13,
+			13,
+			13,
+			12,
+			13,
+			13,
+			13,
+			13,
+			13,
+			13,
+			13,
+			13,
+			13,
+			13,
+			13,
+			13,
+			13,
+			13,
+			13,
+			13,
+			13,
+			13,
+			13,
+			13,
+			13,
+			13,
+			13,
+			13,
+			13,
+			13,
+			13,
+			13,
+			13,
+			13,
+			13,
+			13,
+			13,
+			13,
+			13,
+			13,
+			13,
+			13,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			0,
+			1,
+			39,
+			39,
+			39,
+			39,
+			39,
+			39,
+			39,
+			39,
+			39,
+			39,
+			39,
+			39,
+			39,
+			39,
+			39,
+			39,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			10,
+			12,
+			39,
+			39,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			8,
+			1,
+			1,
+			8,
+			8,
+			6,
+			6,
+			0,
+			1,
+			15,
+			39,
+			39,
+			39,
+			39,
+			39,
+			39,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			39,
+			39,
+			39,
+			39,
+			39,
+			39,
+			39,
+			39,
+			39,
+			14,
+			14,
+			14,
+			14,
+			14,
+			0,
+			1,
+			0,
+			1,
+			0,
+			1,
+			0,
+			1,
+			0,
+			1,
+			0,
+			1,
+			0,
+			1,
+			0,
+			1,
+			14,
+			14,
+			0,
+			1,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			1,
+			14,
+			1,
+			39,
+			5,
+			5,
+			6,
+			6,
+			14,
+			0,
+			1,
+			0,
+			1,
+			0,
+			1,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			9,
+			10,
+			14,
+			39,
+			39,
+			39,
+			39,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			39,
+			39,
+			22,
+			39,
+			6,
+			14,
+			14,
+			9,
+			10,
+			14,
+			14,
+			0,
+			1,
+			14,
+			14,
+			1,
+			14,
+			1,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			5,
+			5,
+			14,
+			14,
+			14,
+			6,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			0,
+			14,
+			1,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			0,
+			14,
+			1,
+			14,
+			0,
+			1,
+			1,
+			0,
+			1,
+			1,
+			5,
+			12,
+			32,
+			32,
+			32,
+			32,
+			32,
+			32,
+			32,
+			32,
+			32,
+			32,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			5,
+			5,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			39,
+			39,
+			39,
+			10,
+			9,
+			14,
+			14,
+			14,
+			9,
+			9,
+			39,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			39,
+			39,
+			39,
+			39,
+			39,
+			39,
+			39,
+			39,
+			39,
+			39,
+			21,
+			21,
+			21,
+			31,
+			29,
+			39,
+			39,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			39,
+			39,
+			39,
+			39,
+			39,
+			17,
+			17,
+			17,
+			39,
+			39,
+			39,
+			39,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			21,
+			39,
+			39,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			39,
+			17,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			17,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			39,
+			39,
+			11,
+			11,
+			11,
+			11,
+			11,
+			11,
+			11,
+			11,
+			11,
+			11,
+			39,
+			39,
+			39,
+			39,
+			39,
+			39,
+			39,
+			39,
+			39,
+			39,
+			39,
+			39,
+			39,
+			39,
+			39,
+			39,
+			39,
+			39,
+			39,
+			39,
+			39,
+			39,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			39,
+			17,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			39,
+			39,
+			39,
+			17,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			39,
+			39,
+			39,
+			39,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			39,
+			39,
+			39,
+			39,
+			39,
+			39,
+			39,
+			39,
+			17,
+			17,
+			17,
+			17,
+			17,
+			17,
+			17,
+			17,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			39,
+			39,
+			39,
+			17,
+			17,
+			17,
+			17,
+			17,
+			17,
+			17,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			39,
+			21,
+			21,
+			21,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			17,
+			17,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			11,
+			11,
+			11,
+			11,
+			11,
+			11,
+			11,
+			11,
+			11,
+			11,
+			39,
+			39,
+			39,
+			39,
+			39,
+			39,
+			39,
+			39,
+			39,
+			39,
+			39,
+			39,
+			39,
+			39,
+			39,
+			39,
+			21,
+			21,
+			21,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			12,
+			12,
+			12,
+			17,
+			17,
+			17,
+			17,
+			39,
+			39,
+			39,
+			39,
+			39,
+			39,
+			39,
+			39,
+			39,
+			39,
+			39,
+			39,
+			39,
+			39,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			39,
+			39,
+			39,
+			39,
+			39,
+			39,
+			39,
+			11,
+			11,
+			11,
+			11,
+			11,
+			11,
+			11,
+			11,
+			11,
+			11,
+			39,
+			39,
+			39,
+			39,
+			39,
+			39,
+			21,
+			21,
+			21,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			39,
+			11,
+			11,
+			11,
+			11,
+			11,
+			11,
+			11,
+			11,
+			11,
+			11,
+			17,
+			17,
+			17,
+			17,
+			39,
+			39,
+			39,
+			39,
+			39,
+			39,
+			39,
+			39,
+			39,
+			39,
+			39,
+			39,
+			39,
+			39,
+			39,
+			39,
+			39,
+			39,
+			39,
+			39,
+			39,
+			39,
+			39,
+			39,
+			39,
+			39,
+			39,
+			39,
+			21,
+			21,
+			21,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			12,
+			12,
+			12,
+			12,
+			17,
+			17,
+			12,
+			17,
+			39,
+			39,
+			39,
+			39,
+			39,
+			39,
+			39,
+			11,
+			11,
+			11,
+			11,
+			11,
+			11,
+			11,
+			11,
+			11,
+			11,
+			39,
+			39,
+			39,
+			39,
+			39,
+			39,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			39,
+			39,
+			39,
+			39,
+			39,
+			39,
+			39,
+			39,
+			11,
+			11,
+			11,
+			11,
+			11,
+			11,
+			11,
+			11,
+			11,
+			11,
+			39,
+			39,
+			39,
+			39,
+			39,
+			39,
+			39,
+			39,
+			39,
+			39,
+			39,
+			39,
+			39,
+			39,
+			39,
+			39,
+			39,
+			39,
+			39,
+			39,
+			39,
+			39,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			39,
+			39,
+			39,
+			39,
+			39,
+			39,
+			39,
+			39,
+			39,
+			39,
+			39,
+			39,
+			39,
+			17,
+			17,
+			17,
+			17,
+			39,
+			39,
+			39,
+			39,
+			39,
+			39,
+			39,
+			39,
+			39,
+			39,
+			39,
+			39,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			0,
+			0,
+			0,
+			1,
+			1,
+			1,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			1,
+			12,
+			12,
+			12,
+			0,
+			1,
+			0,
+			1,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			0,
+			1,
+			1,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			14,
+			14,
+			39,
+			39,
+			39,
+			39,
+			39,
+			39,
+			39,
+			39,
+			39,
+			39,
+			39,
+			39,
+			39,
+			39,
+			39,
+			39,
+			39,
+			39,
+			39,
+			39,
+			39,
+			39,
+			39,
+			39,
+			39,
+			39,
+			39,
+			39,
+			39,
+			39,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			21,
+			21,
+			21,
+			21,
+			21,
+			12,
+			12,
+			12,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			12,
+			12,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			21,
+			21,
+			21,
+			21,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			21,
+			21,
+			21,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			39,
+			39,
+			11,
+			11,
+			11,
+			11,
+			11,
+			11,
+			11,
+			11,
+			11,
+			11,
+			11,
+			11,
+			11,
+			11,
+			11,
+			11,
+			11,
+			11,
+			11,
+			11,
+			11,
+			11,
+			11,
+			11,
+			11,
+			11,
+			11,
+			11,
+			11,
+			11,
+			11,
+			11,
+			11,
+			11,
+			11,
+			11,
+			11,
+			11,
+			11,
+			11,
+			11,
+			11,
+			11,
+			11,
+			11,
+			11,
+			11,
+			11,
+			11,
+			11,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			39,
+			39,
+			39,
+			39,
+			39,
+			39,
+			39,
+			39,
+			39,
+			39,
+			39,
+			39,
+			39,
+			39,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			29,
+			29,
+			29,
+			29,
+			29,
+			29,
+			29,
+			29,
+			29,
+			29,
+			29,
+			29,
+			29,
+			29,
+			29,
+			29,
+			29,
+			29,
+			29,
+			29,
+			29,
+			29,
+			29,
+			29,
+			29,
+			29,
+			29,
+			29,
+			29,
+			29,
+			29,
+			29,
+			29,
+			29,
+			29,
+			29,
+			29,
+			29,
+			29,
+			29,
+			29,
+			29,
+			29,
+			29,
+			29,
+			29,
+			12,
+			39,
+			29,
+			29,
+			29,
+			29,
+			29,
+			29,
+			29,
+			29,
+			29,
+			29,
+			29,
+			29,
+			29,
+			29,
+			29,
+			29,
+			29,
+			29,
+			29,
+			29,
+			29,
+			29,
+			29,
+			29,
+			29,
+			29,
+			29,
+			29,
+			29,
+			29,
+			29,
+			29,
+			29,
+			29,
+			29,
+			29,
+			29,
+			29,
+			29,
+			29,
+			29,
+			29,
+			29,
+			29,
+			29,
+			29,
+			29,
+			29,
+			29,
+			29,
+			29,
+			29,
+			29,
+			29,
+			29,
+			29,
+			29,
+			29,
+			12,
+			12,
+			39,
+			39,
+			39,
+			39,
+			29,
+			29,
+			29,
+			29,
+			29,
+			29,
+			29,
+			29,
+			29,
+			29,
+			29,
+			29,
+			29,
+			29,
+			29,
+			29,
+			29,
+			29,
+			29,
+			29,
+			29,
+			29,
+			29,
+			29,
+			29,
+			29,
+			29,
+			29,
+			29,
+			29,
+			29,
+			29,
+			29,
+			29,
+			29,
+			29,
+			29,
+			29,
+			29,
+			29,
+			29,
+			29,
+			29,
+			39,
+			39,
+			39,
+			39,
+			39,
+			39,
+			39,
+			39,
+			39,
+			39,
+			39,
+			28,
+			28,
+			28,
+			28,
+			28,
+			28,
+			28,
+			28,
+			28,
+			28,
+			28,
+			28,
+			28,
+			28,
+			28,
+			28,
+			28,
+			28,
+			28,
+			28,
+			28,
+			28,
+			28,
+			28,
+			28,
+			28,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			12,
+			12,
+			14,
+			14,
+			14,
+			14,
+			14,
+			12,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			12,
+			14,
+			12,
+			14,
+			12,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			12,
+			14,
+			12,
+			12,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			39,
+			39,
+			39,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			39,
+			39,
+			39,
+			39,
+			39,
+			39,
+			39,
+			39,
+			39,
+			39,
+			39,
+			39,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			39,
+			39,
+			39,
+			39,
+			39,
+			39,
+			39,
+			39,
+			39,
+			39,
+			39,
+			39,
+			39,
+			39,
+			39,
+			39,
+			39,
+			39,
+			39,
+			39,
+			39,
+			39,
+			39,
+			39,
+			39,
+			39,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			12,
+			39,
+			39,
+			39,
+			39,
+			39,
+			39,
+			39,
+			39,
+			39,
+			39,
+			39,
+			39,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			14,
+			39,
+			39,
+			39,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			21,
+			39,
+			39,
+			39,
+			39,
+			39,
+			39,
+			39,
+			39,
+			39,
+			39,
+			39,
+			39,
+			39,
+			39,
+			39,
+			39,
+			39,
+			39,
+			39,
+			39
+		],
+		"highStart": 919552,
+		"errorValue": 0
+	};
+
+/***/ },
+/* 94 */
+/***/ function(module, exports) {
+
+	// Generated by CoffeeScript 1.7.1
+	(function() {
+	  var AI, AL, B2, BA, BB, BK, CB, CJ, CL, CM, CP, CR, EX, GL, H2, H3, HL, HY, ID, IN, IS, JL, JT, JV, LF, NL, NS, NU, OP, PO, PR, QU, RI, SA, SG, SP, SY, WJ, XX, ZW;
+
+	  exports.OP = OP = 0;
+
+	  exports.CL = CL = 1;
+
+	  exports.CP = CP = 2;
+
+	  exports.QU = QU = 3;
+
+	  exports.GL = GL = 4;
+
+	  exports.NS = NS = 5;
+
+	  exports.EX = EX = 6;
+
+	  exports.SY = SY = 7;
+
+	  exports.IS = IS = 8;
+
+	  exports.PR = PR = 9;
+
+	  exports.PO = PO = 10;
+
+	  exports.NU = NU = 11;
+
+	  exports.AL = AL = 12;
+
+	  exports.HL = HL = 13;
+
+	  exports.ID = ID = 14;
+
+	  exports.IN = IN = 15;
+
+	  exports.HY = HY = 16;
+
+	  exports.BA = BA = 17;
+
+	  exports.BB = BB = 18;
+
+	  exports.B2 = B2 = 19;
+
+	  exports.ZW = ZW = 20;
+
+	  exports.CM = CM = 21;
+
+	  exports.WJ = WJ = 22;
+
+	  exports.H2 = H2 = 23;
+
+	  exports.H3 = H3 = 24;
+
+	  exports.JL = JL = 25;
+
+	  exports.JV = JV = 26;
+
+	  exports.JT = JT = 27;
+
+	  exports.RI = RI = 28;
+
+	  exports.AI = AI = 29;
+
+	  exports.BK = BK = 30;
+
+	  exports.CB = CB = 31;
+
+	  exports.CJ = CJ = 32;
+
+	  exports.CR = CR = 33;
+
+	  exports.LF = LF = 34;
+
+	  exports.NL = NL = 35;
+
+	  exports.SA = SA = 36;
+
+	  exports.SG = SG = 37;
+
+	  exports.SP = SP = 38;
+
+	  exports.XX = XX = 39;
+
+	}).call(this);
+
+
+/***/ },
+/* 95 */
+/***/ function(module, exports) {
+
+	// Generated by CoffeeScript 1.7.1
+	(function() {
+	  var CI_BRK, CP_BRK, DI_BRK, IN_BRK, PR_BRK;
+
+	  exports.DI_BRK = DI_BRK = 0;
+
+	  exports.IN_BRK = IN_BRK = 1;
+
+	  exports.CI_BRK = CI_BRK = 2;
+
+	  exports.CP_BRK = CP_BRK = 3;
+
+	  exports.PR_BRK = PR_BRK = 4;
+
+	  exports.pairTable = [[PR_BRK, PR_BRK, PR_BRK, PR_BRK, PR_BRK, PR_BRK, PR_BRK, PR_BRK, PR_BRK, PR_BRK, PR_BRK, PR_BRK, PR_BRK, PR_BRK, PR_BRK, PR_BRK, PR_BRK, PR_BRK, PR_BRK, PR_BRK, PR_BRK, CP_BRK, PR_BRK, PR_BRK, PR_BRK, PR_BRK, PR_BRK, PR_BRK, PR_BRK], [DI_BRK, PR_BRK, PR_BRK, IN_BRK, IN_BRK, PR_BRK, PR_BRK, PR_BRK, PR_BRK, IN_BRK, IN_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, IN_BRK, IN_BRK, DI_BRK, DI_BRK, PR_BRK, CI_BRK, PR_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK], [DI_BRK, PR_BRK, PR_BRK, IN_BRK, IN_BRK, PR_BRK, PR_BRK, PR_BRK, PR_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, DI_BRK, DI_BRK, IN_BRK, IN_BRK, DI_BRK, DI_BRK, PR_BRK, CI_BRK, PR_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK], [PR_BRK, PR_BRK, PR_BRK, IN_BRK, IN_BRK, IN_BRK, PR_BRK, PR_BRK, PR_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, PR_BRK, CI_BRK, PR_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK], [IN_BRK, PR_BRK, PR_BRK, IN_BRK, IN_BRK, IN_BRK, PR_BRK, PR_BRK, PR_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, PR_BRK, CI_BRK, PR_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK], [DI_BRK, PR_BRK, PR_BRK, IN_BRK, IN_BRK, IN_BRK, PR_BRK, PR_BRK, PR_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, IN_BRK, IN_BRK, DI_BRK, DI_BRK, PR_BRK, CI_BRK, PR_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK], [DI_BRK, PR_BRK, PR_BRK, IN_BRK, IN_BRK, IN_BRK, PR_BRK, PR_BRK, PR_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, IN_BRK, IN_BRK, DI_BRK, DI_BRK, PR_BRK, CI_BRK, PR_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK], [DI_BRK, PR_BRK, PR_BRK, IN_BRK, IN_BRK, IN_BRK, PR_BRK, PR_BRK, PR_BRK, DI_BRK, DI_BRK, IN_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, IN_BRK, IN_BRK, DI_BRK, DI_BRK, PR_BRK, CI_BRK, PR_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK], [DI_BRK, PR_BRK, PR_BRK, IN_BRK, IN_BRK, IN_BRK, PR_BRK, PR_BRK, PR_BRK, DI_BRK, DI_BRK, IN_BRK, IN_BRK, IN_BRK, DI_BRK, DI_BRK, IN_BRK, IN_BRK, DI_BRK, DI_BRK, PR_BRK, CI_BRK, PR_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK], [IN_BRK, PR_BRK, PR_BRK, IN_BRK, IN_BRK, IN_BRK, PR_BRK, PR_BRK, PR_BRK, DI_BRK, DI_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, DI_BRK, IN_BRK, IN_BRK, DI_BRK, DI_BRK, PR_BRK, CI_BRK, PR_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, DI_BRK], [IN_BRK, PR_BRK, PR_BRK, IN_BRK, IN_BRK, IN_BRK, PR_BRK, PR_BRK, PR_BRK, DI_BRK, DI_BRK, IN_BRK, IN_BRK, IN_BRK, DI_BRK, DI_BRK, IN_BRK, IN_BRK, DI_BRK, DI_BRK, PR_BRK, CI_BRK, PR_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK], [IN_BRK, PR_BRK, PR_BRK, IN_BRK, IN_BRK, IN_BRK, PR_BRK, PR_BRK, PR_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, DI_BRK, IN_BRK, IN_BRK, IN_BRK, DI_BRK, DI_BRK, PR_BRK, CI_BRK, PR_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK], [IN_BRK, PR_BRK, PR_BRK, IN_BRK, IN_BRK, IN_BRK, PR_BRK, PR_BRK, PR_BRK, DI_BRK, DI_BRK, IN_BRK, IN_BRK, IN_BRK, DI_BRK, IN_BRK, IN_BRK, IN_BRK, DI_BRK, DI_BRK, PR_BRK, CI_BRK, PR_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK], [IN_BRK, PR_BRK, PR_BRK, IN_BRK, IN_BRK, IN_BRK, PR_BRK, PR_BRK, PR_BRK, DI_BRK, DI_BRK, IN_BRK, IN_BRK, IN_BRK, DI_BRK, IN_BRK, IN_BRK, IN_BRK, DI_BRK, DI_BRK, PR_BRK, CI_BRK, PR_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK], [DI_BRK, PR_BRK, PR_BRK, IN_BRK, IN_BRK, IN_BRK, PR_BRK, PR_BRK, PR_BRK, DI_BRK, IN_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, IN_BRK, IN_BRK, IN_BRK, DI_BRK, DI_BRK, PR_BRK, CI_BRK, PR_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK], [DI_BRK, PR_BRK, PR_BRK, IN_BRK, IN_BRK, IN_BRK, PR_BRK, PR_BRK, PR_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, IN_BRK, IN_BRK, IN_BRK, DI_BRK, DI_BRK, PR_BRK, CI_BRK, PR_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK], [DI_BRK, PR_BRK, PR_BRK, IN_BRK, DI_BRK, IN_BRK, PR_BRK, PR_BRK, PR_BRK, DI_BRK, DI_BRK, IN_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, IN_BRK, IN_BRK, DI_BRK, DI_BRK, PR_BRK, CI_BRK, PR_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK], [DI_BRK, PR_BRK, PR_BRK, IN_BRK, DI_BRK, IN_BRK, PR_BRK, PR_BRK, PR_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, IN_BRK, IN_BRK, DI_BRK, DI_BRK, PR_BRK, CI_BRK, PR_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK], [IN_BRK, PR_BRK, PR_BRK, IN_BRK, IN_BRK, IN_BRK, PR_BRK, PR_BRK, PR_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, PR_BRK, CI_BRK, PR_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK], [DI_BRK, PR_BRK, PR_BRK, IN_BRK, IN_BRK, IN_BRK, PR_BRK, PR_BRK, PR_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, IN_BRK, IN_BRK, DI_BRK, PR_BRK, PR_BRK, CI_BRK, PR_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK], [DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, PR_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK], [IN_BRK, PR_BRK, PR_BRK, IN_BRK, IN_BRK, IN_BRK, PR_BRK, PR_BRK, PR_BRK, DI_BRK, DI_BRK, IN_BRK, IN_BRK, IN_BRK, DI_BRK, IN_BRK, IN_BRK, IN_BRK, DI_BRK, DI_BRK, PR_BRK, CI_BRK, PR_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK], [IN_BRK, PR_BRK, PR_BRK, IN_BRK, IN_BRK, IN_BRK, PR_BRK, PR_BRK, PR_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, PR_BRK, CI_BRK, PR_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK], [DI_BRK, PR_BRK, PR_BRK, IN_BRK, IN_BRK, IN_BRK, PR_BRK, PR_BRK, PR_BRK, DI_BRK, IN_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, IN_BRK, IN_BRK, IN_BRK, DI_BRK, DI_BRK, PR_BRK, CI_BRK, PR_BRK, DI_BRK, DI_BRK, DI_BRK, IN_BRK, IN_BRK, DI_BRK], [DI_BRK, PR_BRK, PR_BRK, IN_BRK, IN_BRK, IN_BRK, PR_BRK, PR_BRK, PR_BRK, DI_BRK, IN_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, IN_BRK, IN_BRK, IN_BRK, DI_BRK, DI_BRK, PR_BRK, CI_BRK, PR_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, IN_BRK, DI_BRK], [DI_BRK, PR_BRK, PR_BRK, IN_BRK, IN_BRK, IN_BRK, PR_BRK, PR_BRK, PR_BRK, DI_BRK, IN_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, IN_BRK, IN_BRK, IN_BRK, DI_BRK, DI_BRK, PR_BRK, CI_BRK, PR_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, DI_BRK, DI_BRK], [DI_BRK, PR_BRK, PR_BRK, IN_BRK, IN_BRK, IN_BRK, PR_BRK, PR_BRK, PR_BRK, DI_BRK, IN_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, IN_BRK, IN_BRK, IN_BRK, DI_BRK, DI_BRK, PR_BRK, CI_BRK, PR_BRK, DI_BRK, DI_BRK, DI_BRK, IN_BRK, IN_BRK, DI_BRK], [DI_BRK, PR_BRK, PR_BRK, IN_BRK, IN_BRK, IN_BRK, PR_BRK, PR_BRK, PR_BRK, DI_BRK, IN_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, IN_BRK, IN_BRK, IN_BRK, DI_BRK, DI_BRK, PR_BRK, CI_BRK, PR_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, IN_BRK, DI_BRK], [DI_BRK, PR_BRK, PR_BRK, IN_BRK, IN_BRK, IN_BRK, PR_BRK, PR_BRK, PR_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, IN_BRK, IN_BRK, DI_BRK, DI_BRK, PR_BRK, CI_BRK, PR_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, IN_BRK]];
+
+	}).call(this);
+
+
+/***/ },
+/* 96 */
+/***/ function(module, exports, __webpack_require__) {
+
+	/* WEBPACK VAR INJECTION */(function(Buffer) {// Generated by CoffeeScript 1.7.1
+	(function() {
+	  var PDFImage;
+
+	  PDFImage = __webpack_require__(97);
+
+	  module.exports = {
+	    initImages: function() {
+	      this._imageRegistry = {};
+	      return this._imageCount = 0;
+	    },
+	    image: function(src, x, y, options) {
+	      var bh, bp, bw, h, hp, image, ip, w, wp, _base, _name, _ref, _ref1, _ref2;
+	      if (options == null) {
+	        options = {};
+	      }
+	      if (typeof x === 'object') {
+	        options = x;
+	        x = null;
+	      }
+	      x = (_ref = x != null ? x : options.x) != null ? _ref : this.x;
+	      y = (_ref1 = y != null ? y : options.y) != null ? _ref1 : this.y;
+	      if (!Buffer.isBuffer(src)) {
+	        image = this._imageRegistry[src];
+	      }
+	      if (!image) {
+	        image = PDFImage.open(src, 'I' + (++this._imageCount));
+	        image.embed(this);
+	        if (!Buffer.isBuffer(src)) {
+	          this._imageRegistry[src] = image;
+	        }
+	      }
+	      if ((_base = this.page.xobjects)[_name = image.label] == null) {
+	        _base[_name] = image.obj;
+	      }
+	      w = options.width || image.width;
+	      h = options.height || image.height;
+	      if (options.width && !options.height) {
+	        wp = w / image.width;
+	        w = image.width * wp;
+	        h = image.height * wp;
+	      } else if (options.height && !options.width) {
+	        hp = h / image.height;
+	        w = image.width * hp;
+	        h = image.height * hp;
+	      } else if (options.scale) {
+	        w = image.width * options.scale;
+	        h = image.height * options.scale;
+	      } else if (options.fit) {
+	        _ref2 = options.fit, bw = _ref2[0], bh = _ref2[1];
+	        bp = bw / bh;
+	        ip = image.width / image.height;
+	        if (ip > bp) {
+	          w = bw;
+	          h = bw / ip;
+	        } else {
+	          h = bh;
+	          w = bh * ip;
+	        }
+	        if (options.align === 'center') {
+	          x = x + bw / 2 - w / 2;
+	        } else if (options.align === 'right') {
+	          x = x + bw - w;
+	        }
+	        if (options.valign === 'center') {
+	          y = y + bh / 2 - h / 2;
+	        } else if (options.valign === 'bottom') {
+	          y = y + bh - h;
+	        }
+	      }
+	      if (this.y === y) {
+	        this.y += h;
+	      }
+	      this.save();
+	      this.transform(w, 0, 0, -h, x, y + h);
+	      this.addContent("/" + image.label + " Do");
+	      this.restore();
+	      return this;
+	    }
+	  };
+
+	}).call(this);
+
+	/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(2).Buffer))
+
+/***/ },
+/* 97 */
+/***/ function(module, exports, __webpack_require__) {
+
+	/* WEBPACK VAR INJECTION */(function(Buffer) {// Generated by CoffeeScript 1.7.1
+
+	/*
+	PDFImage - embeds images in PDF documents
+	By Devon Govett
+	 */
+
+	(function() {
+	  var Data, JPEG, PDFImage, PNG, fs;
+
+	  fs = __webpack_require__(44);
+
+	  Data = __webpack_require__(72);
+
+	  JPEG = __webpack_require__(98);
+
+	  PNG = __webpack_require__(99);
+
+	  PDFImage = (function() {
+	    function PDFImage() {}
+
+	    PDFImage.open = function(src, label) {
+	      var data, match;
+	      if (Buffer.isBuffer(src)) {
+	        data = src;
+	      } else {
+	        if (match = /^data:.+;base64,(.*)$/.exec(src)) {
+	          data = new Buffer(match[1], 'base64');
+	        } else {
+	          data = fs.readFileSync(src);
+	          if (!data) {
+	            return;
+	          }
+	        }
+	      }
+	      if (data[0] === 0xff && data[1] === 0xd8) {
+	        return new JPEG(data, label);
+	      } else if (data[0] === 0x89 && data.toString('ascii', 1, 4) === 'PNG') {
+	        return new PNG(data, label);
+	      } else {
+	        throw new Error('Unknown image format.');
+	      }
+	    };
+
+	    return PDFImage;
+
+	  })();
+
+	  module.exports = PDFImage;
+
+	}).call(this);
+
+	/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(2).Buffer))
+
+/***/ },
+/* 98 */
+/***/ function(module, exports, __webpack_require__) {
+
+	// Generated by CoffeeScript 1.7.1
+	(function() {
+	  var JPEG, fs,
+	    __indexOf = [].indexOf || function(item) { for (var i = 0, l = this.length; i < l; i++) { if (i in this && this[i] === item) return i; } return -1; };
+
+	  fs = __webpack_require__(44);
+
+	  JPEG = (function() {
+	    var MARKERS;
+
+	    MARKERS = [0xFFC0, 0xFFC1, 0xFFC2, 0xFFC3, 0xFFC5, 0xFFC6, 0xFFC7, 0xFFC8, 0xFFC9, 0xFFCA, 0xFFCB, 0xFFCC, 0xFFCD, 0xFFCE, 0xFFCF];
+
+	    function JPEG(data, label) {
+	      var channels, marker, pos;
+	      this.data = data;
+	      this.label = label;
+	      if (this.data.readUInt16BE(0) !== 0xFFD8) {
+	        throw "SOI not found in JPEG";
+	      }
+	      pos = 2;
+	      while (pos < this.data.length) {
+	        marker = this.data.readUInt16BE(pos);
+	        pos += 2;
+	        if (__indexOf.call(MARKERS, marker) >= 0) {
+	          break;
+	        }
+	        pos += this.data.readUInt16BE(pos);
+	      }
+	      if (__indexOf.call(MARKERS, marker) < 0) {
+	        throw "Invalid JPEG.";
+	      }
+	      pos += 2;
+	      this.bits = this.data[pos++];
+	      this.height = this.data.readUInt16BE(pos);
+	      pos += 2;
+	      this.width = this.data.readUInt16BE(pos);
+	      pos += 2;
+	      channels = this.data[pos++];
+	      this.colorSpace = (function() {
+	        switch (channels) {
+	          case 1:
+	            return 'DeviceGray';
+	          case 3:
+	            return 'DeviceRGB';
+	          case 4:
+	            return 'DeviceCMYK';
+	        }
+	      })();
+	      this.obj = null;
+	    }
+
+	    JPEG.prototype.embed = function(document) {
+	      if (this.obj) {
+	        return;
+	      }
+	      this.obj = document.ref({
+	        Type: 'XObject',
+	        Subtype: 'Image',
+	        BitsPerComponent: this.bits,
+	        Width: this.width,
+	        Height: this.height,
+	        ColorSpace: this.colorSpace,
+	        Filter: 'DCTDecode'
+	      });
+	      if (this.colorSpace === 'DeviceCMYK') {
+	        this.obj.data['Decode'] = [1.0, 0.0, 1.0, 0.0, 1.0, 0.0, 1.0, 0.0];
+	      }
+	      this.obj.end(this.data);
+	      return this.data = null;
+	    };
+
+	    return JPEG;
+
+	  })();
+
+	  module.exports = JPEG;
+
+	}).call(this);
+
+
+/***/ },
+/* 99 */
+/***/ function(module, exports, __webpack_require__) {
+
+	/* WEBPACK VAR INJECTION */(function(Buffer) {// Generated by CoffeeScript 1.7.1
+	(function() {
+	  var PNG, PNGImage, zlib;
+
+	  zlib = __webpack_require__(47);
+
+	  PNG = __webpack_require__(100);
+
+	  PNGImage = (function() {
+	    function PNGImage(data, label) {
+	      this.label = label;
+	      this.image = new PNG(data);
+	      this.width = this.image.width;
+	      this.height = this.image.height;
+	      this.imgData = this.image.imgData;
+	      this.obj = null;
+	    }
+
+	    PNGImage.prototype.embed = function(document) {
+	      var mask, palette, params, rgb, val, x, _i, _len;
+	      this.document = document;
+	      if (this.obj) {
+	        return;
+	      }
+	      this.obj = document.ref({
+	        Type: 'XObject',
+	        Subtype: 'Image',
+	        BitsPerComponent: this.image.bits,
+	        Width: this.width,
+	        Height: this.height,
+	        Filter: 'FlateDecode'
+	      });
+	      if (!this.image.hasAlphaChannel) {
+	        params = document.ref({
+	          Predictor: 15,
+	          Colors: this.image.colors,
+	          BitsPerComponent: this.image.bits,
+	          Columns: this.width
+	        });
+	        this.obj.data['DecodeParms'] = params;
+	        params.end();
+	      }
+	      if (this.image.palette.length === 0) {
+	        this.obj.data['ColorSpace'] = this.image.colorSpace;
+	      } else {
+	        palette = document.ref();
+	        palette.end(new Buffer(this.image.palette));
+	        this.obj.data['ColorSpace'] = ['Indexed', 'DeviceRGB', (this.image.palette.length / 3) - 1, palette];
+	      }
+	      if (this.image.transparency.grayscale) {
+	        val = this.image.transparency.greyscale;
+	        return this.obj.data['Mask'] = [val, val];
+	      } else if (this.image.transparency.rgb) {
+	        rgb = this.image.transparency.rgb;
+	        mask = [];
+	        for (_i = 0, _len = rgb.length; _i < _len; _i++) {
+	          x = rgb[_i];
+	          mask.push(x, x);
+	        }
+	        return this.obj.data['Mask'] = mask;
+	      } else if (this.image.transparency.indexed) {
+	        return this.loadIndexedAlphaChannel();
+	      } else if (this.image.hasAlphaChannel) {
+	        return this.splitAlphaChannel();
+	      } else {
+	        return this.finalize();
+	      }
+	    };
+
+	    PNGImage.prototype.finalize = function() {
+	      var sMask;
+	      if (this.alphaChannel) {
+	        sMask = this.document.ref({
+	          Type: 'XObject',
+	          Subtype: 'Image',
+	          Height: this.height,
+	          Width: this.width,
+	          BitsPerComponent: 8,
+	          Filter: 'FlateDecode',
+	          ColorSpace: 'DeviceGray',
+	          Decode: [0, 1]
+	        });
+	        sMask.end(this.alphaChannel);
+	        this.obj.data['SMask'] = sMask;
+	      }
+	      this.obj.end(this.imgData);
+	      this.image = null;
+	      return this.imgData = null;
+	    };
+
+	    PNGImage.prototype.splitAlphaChannel = function() {
+	      return this.image.decodePixels((function(_this) {
+	        return function(pixels) {
+	          var a, alphaChannel, colorByteSize, done, i, imgData, len, p, pixelCount;
+	          colorByteSize = _this.image.colors * _this.image.bits / 8;
+	          pixelCount = _this.width * _this.height;
+	          imgData = new Buffer(pixelCount * colorByteSize);
+	          alphaChannel = new Buffer(pixelCount);
+	          i = p = a = 0;
+	          len = pixels.length;
+	          while (i < len) {
+	            imgData[p++] = pixels[i++];
+	            imgData[p++] = pixels[i++];
+	            imgData[p++] = pixels[i++];
+	            alphaChannel[a++] = pixels[i++];
+	          }
+	          done = 0;
+	          zlib.deflate(imgData, function(err, imgData) {
+	            _this.imgData = imgData;
+	            if (err) {
+	              throw err;
+	            }
+	            if (++done === 2) {
+	              return _this.finalize();
+	            }
+	          });
+	          return zlib.deflate(alphaChannel, function(err, alphaChannel) {
+	            _this.alphaChannel = alphaChannel;
+	            if (err) {
+	              throw err;
+	            }
+	            if (++done === 2) {
+	              return _this.finalize();
+	            }
+	          });
+	        };
+	      })(this));
+	    };
+
+	    PNGImage.prototype.loadIndexedAlphaChannel = function(fn) {
+	      var transparency;
+	      transparency = this.image.transparency.indexed;
+	      return this.image.decodePixels((function(_this) {
+	        return function(pixels) {
+	          var alphaChannel, i, j, _i, _ref;
+	          alphaChannel = new Buffer(_this.width * _this.height);
+	          i = 0;
+	          for (j = _i = 0, _ref = pixels.length; _i < _ref; j = _i += 1) {
+	            alphaChannel[i++] = transparency[pixels[j]];
+	          }
+	          return zlib.deflate(alphaChannel, function(err, alphaChannel) {
+	            _this.alphaChannel = alphaChannel;
+	            if (err) {
+	              throw err;
+	            }
+	            return _this.finalize();
+	          });
+	        };
+	      })(this));
+	    };
+
+	    return PNGImage;
+
+	  })();
+
+	  module.exports = PNGImage;
+
+	}).call(this);
+
+	/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(2).Buffer))
+
+/***/ },
+/* 100 */
+/***/ function(module, exports, __webpack_require__) {
+
+	/* WEBPACK VAR INJECTION */(function(Buffer) {// Generated by CoffeeScript 1.4.0
+
+	/*
+	# MIT LICENSE
+	# Copyright (c) 2011 Devon Govett
+	# 
+	# 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.
+	*/
+
+
+	(function() {
+	  var PNG, fs, zlib;
+
+	  fs = __webpack_require__(44);
+
+	  zlib = __webpack_require__(47);
+
+	  module.exports = PNG = (function() {
+
+	    PNG.decode = function(path, fn) {
+	      return fs.readFile(path, function(err, file) {
+	        var png;
+	        png = new PNG(file);
+	        return png.decode(function(pixels) {
+	          return fn(pixels);
+	        });
+	      });
+	    };
+
+	    PNG.load = function(path) {
+	      var file;
+	      file = fs.readFileSync(path);
+	      return new PNG(file);
+	    };
+
+	    function PNG(data) {
+	      var chunkSize, colors, i, index, key, section, short, text, _i, _j, _ref;
+	      this.data = data;
+	      this.pos = 8;
+	      this.palette = [];
+	      this.imgData = [];
+	      this.transparency = {};
+	      this.text = {};
+	      while (true) {
+	        chunkSize = this.readUInt32();
+	        section = ((function() {
+	          var _i, _results;
+	          _results = [];
+	          for (i = _i = 0; _i < 4; i = ++_i) {
+	            _results.push(String.fromCharCode(this.data[this.pos++]));
+	          }
+	          return _results;
+	        }).call(this)).join('');
+	        switch (section) {
+	          case 'IHDR':
+	            this.width = this.readUInt32();
+	            this.height = this.readUInt32();
+	            this.bits = this.data[this.pos++];
+	            this.colorType = this.data[this.pos++];
+	            this.compressionMethod = this.data[this.pos++];
+	            this.filterMethod = this.data[this.pos++];
+	            this.interlaceMethod = this.data[this.pos++];
+	            break;
+	          case 'PLTE':
+	            this.palette = this.read(chunkSize);
+	            break;
+	          case 'IDAT':
+	            for (i = _i = 0; _i < chunkSize; i = _i += 1) {
+	              this.imgData.push(this.data[this.pos++]);
+	            }
+	            break;
+	          case 'tRNS':
+	            this.transparency = {};
+	            switch (this.colorType) {
+	              case 3:
+	                this.transparency.indexed = this.read(chunkSize);
+	                short = 255 - this.transparency.indexed.length;
+	                if (short > 0) {
+	                  for (i = _j = 0; 0 <= short ? _j < short : _j > short; i = 0 <= short ? ++_j : --_j) {
+	                    this.transparency.indexed.push(255);
+	                  }
+	                }
+	                break;
+	              case 0:
+	                this.transparency.grayscale = this.read(chunkSize)[0];
+	                break;
+	              case 2:
+	                this.transparency.rgb = this.read(chunkSize);
+	            }
+	            break;
+	          case 'tEXt':
+	            text = this.read(chunkSize);
+	            index = text.indexOf(0);
+	            key = String.fromCharCode.apply(String, text.slice(0, index));
+	            this.text[key] = String.fromCharCode.apply(String, text.slice(index + 1));
+	            break;
+	          case 'IEND':
+	            this.colors = (function() {
+	              switch (this.colorType) {
+	                case 0:
+	                case 3:
+	                case 4:
+	                  return 1;
+	                case 2:
+	                case 6:
+	                  return 3;
+	              }
+	            }).call(this);
+	            this.hasAlphaChannel = (_ref = this.colorType) === 4 || _ref === 6;
+	            colors = this.colors + (this.hasAlphaChannel ? 1 : 0);
+	            this.pixelBitlength = this.bits * colors;
+	            this.colorSpace = (function() {
+	              switch (this.colors) {
+	                case 1:
+	                  return 'DeviceGray';
+	                case 3:
+	                  return 'DeviceRGB';
+	              }
+	            }).call(this);
+	            this.imgData = new Buffer(this.imgData);
+	            return;
+	          default:
+	            this.pos += chunkSize;
+	        }
+	        this.pos += 4;
+	        if (this.pos > this.data.length) {
+	          throw new Error("Incomplete or corrupt PNG file");
+	        }
+	      }
+	      return;
+	    }
+
+	    PNG.prototype.read = function(bytes) {
+	      var i, _i, _results;
+	      _results = [];
+	      for (i = _i = 0; 0 <= bytes ? _i < bytes : _i > bytes; i = 0 <= bytes ? ++_i : --_i) {
+	        _results.push(this.data[this.pos++]);
+	      }
+	      return _results;
+	    };
+
+	    PNG.prototype.readUInt32 = function() {
+	      var b1, b2, b3, b4;
+	      b1 = this.data[this.pos++] << 24;
+	      b2 = this.data[this.pos++] << 16;
+	      b3 = this.data[this.pos++] << 8;
+	      b4 = this.data[this.pos++];
+	      return b1 | b2 | b3 | b4;
+	    };
+
+	    PNG.prototype.readUInt16 = function() {
+	      var b1, b2;
+	      b1 = this.data[this.pos++] << 8;
+	      b2 = this.data[this.pos++];
+	      return b1 | b2;
+	    };
+
+	    PNG.prototype.decodePixels = function(fn) {
+	      var _this = this;
+	      return zlib.inflate(this.imgData, function(err, data) {
+	        var byte, c, col, i, left, length, p, pa, paeth, pb, pc, pixelBytes, pixels, pos, row, scanlineLength, upper, upperLeft, _i, _j, _k, _l, _m;
+	        if (err) {
+	          throw err;
+	        }
+	        pixelBytes = _this.pixelBitlength / 8;
+	        scanlineLength = pixelBytes * _this.width;
+	        pixels = new Buffer(scanlineLength * _this.height);
+	        length = data.length;
+	        row = 0;
+	        pos = 0;
+	        c = 0;
+	        while (pos < length) {
+	          switch (data[pos++]) {
+	            case 0:
+	              for (i = _i = 0; _i < scanlineLength; i = _i += 1) {
+	                pixels[c++] = data[pos++];
+	              }
+	              break;
+	            case 1:
+	              for (i = _j = 0; _j < scanlineLength; i = _j += 1) {
+	                byte = data[pos++];
+	                left = i < pixelBytes ? 0 : pixels[c - pixelBytes];
+	                pixels[c++] = (byte + left) % 256;
+	              }
+	              break;
+	            case 2:
+	              for (i = _k = 0; _k < scanlineLength; i = _k += 1) {
+	                byte = data[pos++];
+	                col = (i - (i % pixelBytes)) / pixelBytes;
+	                upper = row && pixels[(row - 1) * scanlineLength + col * pixelBytes + (i % pixelBytes)];
+	                pixels[c++] = (upper + byte) % 256;
+	              }
+	              break;
+	            case 3:
+	              for (i = _l = 0; _l < scanlineLength; i = _l += 1) {
+	                byte = data[pos++];
+	                col = (i - (i % pixelBytes)) / pixelBytes;
+	                left = i < pixelBytes ? 0 : pixels[c - pixelBytes];
+	                upper = row && pixels[(row - 1) * scanlineLength + col * pixelBytes + (i % pixelBytes)];
+	                pixels[c++] = (byte + Math.floor((left + upper) / 2)) % 256;
+	              }
+	              break;
+	            case 4:
+	              for (i = _m = 0; _m < scanlineLength; i = _m += 1) {
+	                byte = data[pos++];
+	                col = (i - (i % pixelBytes)) / pixelBytes;
+	                left = i < pixelBytes ? 0 : pixels[c - pixelBytes];
+	                if (row === 0) {
+	                  upper = upperLeft = 0;
+	                } else {
+	                  upper = pixels[(row - 1) * scanlineLength + col * pixelBytes + (i % pixelBytes)];
+	                  upperLeft = col && pixels[(row - 1) * scanlineLength + (col - 1) * pixelBytes + (i % pixelBytes)];
+	                }
+	                p = left + upper - upperLeft;
+	                pa = Math.abs(p - left);
+	                pb = Math.abs(p - upper);
+	                pc = Math.abs(p - upperLeft);
+	                if (pa <= pb && pa <= pc) {
+	                  paeth = left;
+	                } else if (pb <= pc) {
+	                  paeth = upper;
+	                } else {
+	                  paeth = upperLeft;
+	                }
+	                pixels[c++] = (byte + paeth) % 256;
+	              }
+	              break;
+	            default:
+	              throw new Error("Invalid filter algorithm: " + data[pos - 1]);
+	          }
+	          row++;
+	        }
+	        return fn(pixels);
+	      });
+	    };
+
+	    PNG.prototype.decodePalette = function() {
+	      var c, i, length, palette, pos, ret, transparency, _i, _ref, _ref1;
+	      palette = this.palette;
+	      transparency = this.transparency.indexed || [];
+	      ret = new Buffer(transparency.length + palette.length);
+	      pos = 0;
+	      length = palette.length;
+	      c = 0;
+	      for (i = _i = 0, _ref = palette.length; _i < _ref; i = _i += 3) {
+	        ret[pos++] = palette[i];
+	        ret[pos++] = palette[i + 1];
+	        ret[pos++] = palette[i + 2];
+	        ret[pos++] = (_ref1 = transparency[c++]) != null ? _ref1 : 255;
+	      }
+	      return ret;
+	    };
+
+	    PNG.prototype.copyToImageData = function(imageData, pixels) {
+	      var alpha, colors, data, i, input, j, k, length, palette, v, _ref;
+	      colors = this.colors;
+	      palette = null;
+	      alpha = this.hasAlphaChannel;
+	      if (this.palette.length) {
+	        palette = (_ref = this._decodedPalette) != null ? _ref : this._decodedPalette = this.decodePalette();
+	        colors = 4;
+	        alpha = true;
+	      }
+	      data = (imageData != null ? imageData.data : void 0) || imageData;
+	      length = data.length;
+	      input = palette || pixels;
+	      i = j = 0;
+	      if (colors === 1) {
+	        while (i < length) {
+	          k = palette ? pixels[i / 4] * 4 : j;
+	          v = input[k++];
+	          data[i++] = v;
+	          data[i++] = v;
+	          data[i++] = v;
+	          data[i++] = alpha ? input[k++] : 255;
+	          j = k;
+	        }
+	      } else {
+	        while (i < length) {
+	          k = palette ? pixels[i / 4] * 4 : j;
+	          data[i++] = input[k++];
+	          data[i++] = input[k++];
+	          data[i++] = input[k++];
+	          data[i++] = alpha ? input[k++] : 255;
+	          j = k;
+	        }
+	      }
+	    };
+
+	    PNG.prototype.decode = function(fn) {
+	      var ret,
+	        _this = this;
+	      ret = new Buffer(this.width * this.height * 4);
+	      return this.decodePixels(function(pixels) {
+	        _this.copyToImageData(ret, pixels);
+	        return fn(ret);
+	      });
+	    };
+
+	    return PNG;
+
+	  })();
+
+	}).call(this);
+
+	/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(2).Buffer))
+
+/***/ },
+/* 101 */
+/***/ function(module, exports) {
+
+	// Generated by CoffeeScript 1.7.1
+	(function() {
+	  module.exports = {
+	    annotate: function(x, y, w, h, options) {
+	      var key, ref, val;
+	      options.Type = 'Annot';
+	      options.Rect = this._convertRect(x, y, w, h);
+	      options.Border = [0, 0, 0];
+	      if (options.Subtype !== 'Link') {
+	        if (options.C == null) {
+	          options.C = this._normalizeColor(options.color || [0, 0, 0]);
+	        }
+	      }
+	      delete options.color;
+	      if (typeof options.Dest === 'string') {
+	        options.Dest = new String(options.Dest);
+	      }
+	      for (key in options) {
+	        val = options[key];
+	        options[key[0].toUpperCase() + key.slice(1)] = val;
+	      }
+	      ref = this.ref(options);
+	      this.page.annotations.push(ref);
+	      ref.end();
+	      return this;
+	    },
+	    note: function(x, y, w, h, contents, options) {
+	      if (options == null) {
+	        options = {};
+	      }
+	      options.Subtype = 'Text';
+	      options.Contents = new String(contents);
+	      options.Name = 'Comment';
+	      if (options.color == null) {
+	        options.color = [243, 223, 92];
+	      }
+	      return this.annotate(x, y, w, h, options);
+	    },
+	    link: function(x, y, w, h, url, options) {
+	      if (options == null) {
+	        options = {};
+	      }
+	      options.Subtype = 'Link';
+	      options.A = this.ref({
+	        S: 'URI',
+	        URI: new String(url)
+	      });
+	      options.A.end();
+	      return this.annotate(x, y, w, h, options);
+	    },
+	    _markup: function(x, y, w, h, options) {
+	      var x1, x2, y1, y2, _ref;
+	      if (options == null) {
+	        options = {};
+	      }
+	      _ref = this._convertRect(x, y, w, h), x1 = _ref[0], y1 = _ref[1], x2 = _ref[2], y2 = _ref[3];
+	      options.QuadPoints = [x1, y2, x2, y2, x1, y1, x2, y1];
+	      options.Contents = new String;
+	      return this.annotate(x, y, w, h, options);
+	    },
+	    highlight: function(x, y, w, h, options) {
+	      if (options == null) {
+	        options = {};
+	      }
+	      options.Subtype = 'Highlight';
+	      if (options.color == null) {
+	        options.color = [241, 238, 148];
+	      }
+	      return this._markup(x, y, w, h, options);
+	    },
+	    underline: function(x, y, w, h, options) {
+	      if (options == null) {
+	        options = {};
+	      }
+	      options.Subtype = 'Underline';
+	      return this._markup(x, y, w, h, options);
+	    },
+	    strike: function(x, y, w, h, options) {
+	      if (options == null) {
+	        options = {};
+	      }
+	      options.Subtype = 'StrikeOut';
+	      return this._markup(x, y, w, h, options);
+	    },
+	    lineAnnotation: function(x1, y1, x2, y2, options) {
+	      if (options == null) {
+	        options = {};
+	      }
+	      options.Subtype = 'Line';
+	      options.Contents = new String;
+	      options.L = [x1, this.page.height - y1, x2, this.page.height - y2];
+	      return this.annotate(x1, y1, x2, y2, options);
+	    },
+	    rectAnnotation: function(x, y, w, h, options) {
+	      if (options == null) {
+	        options = {};
+	      }
+	      options.Subtype = 'Square';
+	      options.Contents = new String;
+	      return this.annotate(x, y, w, h, options);
+	    },
+	    ellipseAnnotation: function(x, y, w, h, options) {
+	      if (options == null) {
+	        options = {};
+	      }
+	      options.Subtype = 'Circle';
+	      options.Contents = new String;
+	      return this.annotate(x, y, w, h, options);
+	    },
+	    textAnnotation: function(x, y, w, h, text, options) {
+	      if (options == null) {
+	        options = {};
+	      }
+	      options.Subtype = 'FreeText';
+	      options.Contents = new String(text);
+	      options.DA = new String;
+	      return this.annotate(x, y, w, h, options);
+	    },
+	    _convertRect: function(x1, y1, w, h) {
+	      var m0, m1, m2, m3, m4, m5, x2, y2, _ref;
+	      y2 = y1;
+	      y1 += h;
+	      x2 = x1 + w;
+	      _ref = this._ctm, m0 = _ref[0], m1 = _ref[1], m2 = _ref[2], m3 = _ref[3], m4 = _ref[4], m5 = _ref[5];
+	      x1 = m0 * x1 + m2 * y1 + m4;
+	      y1 = m1 * x1 + m3 * y1 + m5;
+	      x2 = m0 * x2 + m2 * y2 + m4;
+	      y2 = m1 * x2 + m3 * y2 + m5;
+	      return [x1, y1, x2, y2];
+	    }
+	  };
+
+	}).call(this);
+
+
+/***/ },
+/* 102 */
+/***/ function(module, exports) {
+
+	module.exports = {
+		'4A0': [4767.87, 6740.79],
+		'2A0': [3370.39, 4767.87],
+		A0: [2383.94, 3370.39],
+		A1: [1683.78, 2383.94],
+		A2: [1190.55, 1683.78],
+		A3: [841.89, 1190.55],
+		A4: [595.28, 841.89],
+		A5: [419.53, 595.28],
+		A6: [297.64, 419.53],
+		A7: [209.76, 297.64],
+		A8: [147.40, 209.76],
+		A9: [104.88, 147.40],
+		A10: [73.70, 104.88],
+		B0: [2834.65, 4008.19],
+		B1: [2004.09, 2834.65],
+		B2: [1417.32, 2004.09],
+		B3: [1000.63, 1417.32],
+		B4: [708.66, 1000.63],
+		B5: [498.90, 708.66],
+		B6: [354.33, 498.90],
+		B7: [249.45, 354.33],
+		B8: [175.75, 249.45],
+		B9: [124.72, 175.75],
+		B10: [87.87, 124.72],
+		C0: [2599.37, 3676.54],
+		C1: [1836.85, 2599.37],
+		C2: [1298.27, 1836.85],
+		C3: [918.43, 1298.27],
+		C4: [649.13, 918.43],
+		C5: [459.21, 649.13],
+		C6: [323.15, 459.21],
+		C7: [229.61, 323.15],
+		C8: [161.57, 229.61],
+		C9: [113.39, 161.57],
+		C10: [79.37, 113.39],
+		RA0: [2437.80, 3458.27],
+		RA1: [1729.13, 2437.80],
+		RA2: [1218.90, 1729.13],
+		RA3: [864.57, 1218.90],
+		RA4: [609.45, 864.57],
+		SRA0: [2551.18, 3628.35],
+		SRA1: [1814.17, 2551.18],
+		SRA2: [1275.59, 1814.17],
+		SRA3: [907.09, 1275.59],
+		SRA4: [637.80, 907.09],
+		EXECUTIVE: [521.86, 756.00],
+		FOLIO: [612.00, 936.00],
+		LEGAL: [612.00, 1008.00],
+		LETTER: [612.00, 792.00],
+		TABLOID: [792.00, 1224.00]
+	};
+
+
+/***/ },
+/* 103 */
+/***/ function(module, exports, __webpack_require__) {
+
+	/* WEBPACK VAR INJECTION */(function(Buffer) {/* jslint node: true */
+	'use strict';
+
+	var pdfKit = __webpack_require__(24);
+	var PDFImage = __webpack_require__(97);
+
+	function ImageMeasure(pdfDoc, imageDictionary) {
+		this.pdfDoc = pdfDoc;
+		this.imageDictionary = imageDictionary || {};
+	}
+
+	ImageMeasure.prototype.measureImage = function(src) {
+		var image, label;
+		var that = this;
+
+		if (!this.pdfDoc._imageRegistry[src]) {
+			label = 'I' + (++this.pdfDoc._imageCount);
+			image = PDFImage.open(realImageSrc(src), label);
+			image.embed(this.pdfDoc);
+			this.pdfDoc._imageRegistry[src] = image;
+		} else {
+			image = this.pdfDoc._imageRegistry[src];
+		}
+
+		return { width: image.width, height: image.height };
+
+		function realImageSrc(src) {
+			var img = that.imageDictionary[src];
+
+			if (!img) return src;
+
+			var index = img.indexOf('base64,');
+			if (index < 0) {
+				throw 'invalid image format, images dictionary should contain dataURL entries';
+			}
+
+			return new Buffer(img.substring(index + 7), 'base64');
+		}
+	};
+
+	module.exports = ImageMeasure;
+
+	/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(2).Buffer))
+
+/***/ },
+/* 104 */
+/***/ function(module, exports) {
+
+	/* jslint node: true */
+	'use strict';
+
+
+	function groupDecorations(line) {
+		var groups = [], curGroup = null;
+		for(var i = 0, l = line.inlines.length; i < l; i++) {
+			var inline = line.inlines[i];
+			var decoration = inline.decoration;
+			if(!decoration) {
+				curGroup = null;
+				continue;
+			}
+			var color = inline.decorationColor || inline.color || 'black';
+			var style = inline.decorationStyle || 'solid';
+			decoration = Array.isArray(decoration) ? decoration : [ decoration ];
+			for(var ii = 0, ll = decoration.length; ii < ll; ii++) {
+				var deco = decoration[ii];
+				if(!curGroup || deco !== curGroup.decoration ||
+						style !== curGroup.decorationStyle || color !== curGroup.decorationColor ||
+						deco === 'lineThrough') {
+			
+					curGroup = {
+						line: line,
+						decoration: deco, 
+						decorationColor: color, 
+						decorationStyle: style,
+						inlines: [ inline ]
+					};
+					groups.push(curGroup);
+				} else {
+					curGroup.inlines.push(inline);
+				}
+			}
+		}
+		
+		return groups;
+	}
+
+	function drawDecoration(group, x, y, pdfKitDoc) {
+		function maxInline() {
+			var max = 0;
+			for (var i = 0, l = group.inlines.length; i < l; i++) {
+				var inl = group.inlines[i];
+				max = inl.fontSize > max ? i : max;
+			}
+			return group.inlines[max];
+		}
+		function width() {
+			var sum = 0;
+			for (var i = 0, l = group.inlines.length; i < l; i++) {
+				sum += group.inlines[i].width;
+			}
+			return sum;
+		}
+		var firstInline = group.inlines[0],
+			biggerInline = maxInline(),
+			totalWidth = width(),
+			lineAscent = group.line.getAscenderHeight(),
+			ascent = biggerInline.font.ascender / 1000 * biggerInline.fontSize,
+			height = biggerInline.height,
+			descent = height - ascent;
+		
+		var lw = 0.5 + Math.floor(Math.max(biggerInline.fontSize - 8, 0) / 2) * 0.12;
+		
+		switch (group.decoration) {
+			case 'underline':
+				y += lineAscent + descent * 0.45;
+				break;
+			case 'overline':
+				y += lineAscent - (ascent * 0.85);
+				break;
+			case 'lineThrough':
+				y += lineAscent - (ascent * 0.25);
+				break;
+			default:
+				throw 'Unkown decoration : ' + group.decoration;
+		}
+		pdfKitDoc.save();
+		
+		if(group.decorationStyle === 'double') {
+			var gap = Math.max(0.5, lw*2);
+			pdfKitDoc	.fillColor(group.decorationColor)
+						.rect(x + firstInline.x, y-lw/2, totalWidth, lw/2).fill()
+						.rect(x + firstInline.x, y+gap-lw/2, totalWidth, lw/2).fill();
+		} else if(group.decorationStyle === 'dashed') {
+			var nbDashes = Math.ceil(totalWidth / (3.96+2.84));
+			var rdx = x + firstInline.x;
+			pdfKitDoc.rect(rdx, y, totalWidth, lw).clip();
+			pdfKitDoc.fillColor(group.decorationColor);
+			for (var i = 0; i < nbDashes; i++) {
+				pdfKitDoc.rect(rdx, y-lw/2, 3.96, lw).fill();
+				rdx += 3.96 + 2.84;
+			}
+		} else if(group.decorationStyle === 'dotted') {
+			var nbDots = Math.ceil(totalWidth / (lw*3));
+			var rx = x + firstInline.x;
+			pdfKitDoc.rect(rx, y, totalWidth, lw).clip();
+			pdfKitDoc.fillColor(group.decorationColor);
+			for (var ii = 0; ii < nbDots; ii++) {
+				pdfKitDoc.rect(rx, y-lw/2, lw, lw).fill();
+				rx += (lw*3);
+			}
+		} else if(group.decorationStyle === 'wavy') {
+			var sh = 0.7, sv = 1;
+			var nbWaves = Math.ceil(totalWidth / (sh*2))+1;
+			var rwx = x + firstInline.x - 1;
+			pdfKitDoc.rect(x + firstInline.x, y-sv, totalWidth, y+sv).clip();
+			pdfKitDoc.lineWidth(0.24);
+			pdfKitDoc.moveTo(rwx, y);
+			for(var iii = 0; iii < nbWaves; iii++) {
+				pdfKitDoc   .bezierCurveTo(rwx+sh, y-sv, rwx+sh*2, y-sv, rwx+sh*3, y)
+							.bezierCurveTo(rwx+sh*4, y+sv, rwx+sh*5, y+sv, rwx+sh*6, y);
+					rwx += sh*6;
+				}
+			pdfKitDoc.stroke(group.decorationColor);
+			
+		} else {
+			pdfKitDoc	.fillColor(group.decorationColor)
+						.rect(x + firstInline.x, y-lw/2, totalWidth, lw)
+						.fill();
+		}
+		pdfKitDoc.restore();
+	}
+
+	function drawDecorations(line, x, y, pdfKitDoc) {
+		var groups = groupDecorations(line);
+		for (var i = 0, l = groups.length; i < l; i++) {
+			drawDecoration(groups[i], x, y, pdfKitDoc);
+		}
+	}
+
+	function drawBackground(line, x, y, pdfKitDoc) {
+		var height = line.getHeight();
+		for(var i = 0, l = line.inlines.length; i < l; i++) {
+			var inline = line.inlines[i];
+				if(inline.background) {
+					pdfKitDoc	.fillColor(inline.background)
+								.rect(x + inline.x, y, inline.width, height)
+								.fill();
+				}
+		}
+	}
+
+	module.exports = {
+		drawBackground: drawBackground,
+		drawDecorations: drawDecorations
+	};
+
+/***/ },
+/* 105 */
+/***/ function(module, exports, __webpack_require__) {
+
+	var __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;/* FileSaver.js
+	 * A saveAs() FileSaver implementation.
+	 * 1.1.20150716
+	 *
+	 * By Eli Grey, http://eligrey.com
+	 * License: X11/MIT
+	 *   See https://github.com/eligrey/FileSaver.js/blob/master/LICENSE.md
+	 */
+
+	/*global self */
+	/*jslint bitwise: true, indent: 4, laxbreak: true, laxcomma: true, smarttabs: true, plusplus: true */
+
+	/*! @source http://purl.eligrey.com/github/FileSaver.js/blob/master/FileSaver.js */
+
+	var saveAs = saveAs || (function(view) {
+		"use strict";
+		// IE <10 is explicitly unsupported
+		if (typeof navigator !== "undefined" && /MSIE [1-9]\./.test(navigator.userAgent)) {
+			return;
+		}
+		var
+			  doc = view.document
+			  // only get URL when necessary in case Blob.js hasn't overridden it yet
+			, get_URL = function() {
+				return view.URL || view.webkitURL || view;
+			}
+			, save_link = doc.createElementNS("http://www.w3.org/1999/xhtml", "a")
+			, can_use_save_link = "download" in save_link
+			, click = function(node) {
+				var event = new MouseEvent("click");
+				node.dispatchEvent(event);
+			}
+			, webkit_req_fs = view.webkitRequestFileSystem
+			, req_fs = view.requestFileSystem || webkit_req_fs || view.mozRequestFileSystem
+			, throw_outside = function(ex) {
+				(view.setImmediate || view.setTimeout)(function() {
+					throw ex;
+				}, 0);
+			}
+			, force_saveable_type = "application/octet-stream"
+			, fs_min_size = 0
+			// See https://code.google.com/p/chromium/issues/detail?id=375297#c7 and
+			// https://github.com/eligrey/FileSaver.js/commit/485930a#commitcomment-8768047
+			// for the reasoning behind the timeout and revocation flow
+			, arbitrary_revoke_timeout = 500 // in ms
+			, revoke = function(file) {
+				var revoker = function() {
+					if (typeof file === "string") { // file is an object URL
+						get_URL().revokeObjectURL(file);
+					} else { // file is a File
+						file.remove();
+					}
+				};
+				if (view.chrome) {
+					revoker();
+				} else {
+					setTimeout(revoker, arbitrary_revoke_timeout);
+				}
+			}
+			, dispatch = function(filesaver, event_types, event) {
+				event_types = [].concat(event_types);
+				var i = event_types.length;
+				while (i--) {
+					var listener = filesaver["on" + event_types[i]];
+					if (typeof listener === "function") {
+						try {
+							listener.call(filesaver, event || filesaver);
+						} catch (ex) {
+							throw_outside(ex);
+						}
+					}
+				}
+			}
+			, auto_bom = function(blob) {
+				// prepend BOM for UTF-8 XML and text/* types (including HTML)
+				if (/^\s*(?:text\/\S*|application\/xml|\S*\/\S*\+xml)\s*;.*charset\s*=\s*utf-8/i.test(blob.type)) {
+					return new Blob(["\ufeff", blob], {type: blob.type});
+				}
+				return blob;
+			}
+			, FileSaver = function(blob, name, no_auto_bom) {
+				if (!no_auto_bom) {
+					blob = auto_bom(blob);
+				}
+				// First try a.download, then web filesystem, then object URLs
+				var
+					  filesaver = this
+					, type = blob.type
+					, blob_changed = false
+					, object_url
+					, target_view
+					, dispatch_all = function() {
+						dispatch(filesaver, "writestart progress write writeend".split(" "));
+					}
+					// on any filesys errors revert to saving with object URLs
+					, fs_error = function() {
+						// don't create more object URLs than needed
+						if (blob_changed || !object_url) {
+							object_url = get_URL().createObjectURL(blob);
+						}
+						if (target_view) {
+							target_view.location.href = object_url;
+						} else {
+							var new_tab = view.open(object_url, "_blank");
+							if (new_tab == undefined && typeof safari !== "undefined") {
+								//Apple do not allow window.open, see http://bit.ly/1kZffRI
+								view.location.href = object_url
+							}
+						}
+						filesaver.readyState = filesaver.DONE;
+						dispatch_all();
+						revoke(object_url);
+					}
+					, abortable = function(func) {
+						return function() {
+							if (filesaver.readyState !== filesaver.DONE) {
+								return func.apply(this, arguments);
+							}
+						};
+					}
+					, create_if_not_found = {create: true, exclusive: false}
+					, slice
+				;
+				filesaver.readyState = filesaver.INIT;
+				if (!name) {
+					name = "download";
+				}
+				if (can_use_save_link) {
+					object_url = get_URL().createObjectURL(blob);
+					save_link.href = object_url;
+					save_link.download = name;
+					setTimeout(function() {
+						click(save_link);
+						dispatch_all();
+						revoke(object_url);
+						filesaver.readyState = filesaver.DONE;
+					});
+					return;
+				}
+				// Object and web filesystem URLs have a problem saving in Google Chrome when
+				// viewed in a tab, so I force save with application/octet-stream
+				// http://code.google.com/p/chromium/issues/detail?id=91158
+				// Update: Google errantly closed 91158, I submitted it again:
+				// https://code.google.com/p/chromium/issues/detail?id=389642
+				if (view.chrome && type && type !== force_saveable_type) {
+					slice = blob.slice || blob.webkitSlice;
+					blob = slice.call(blob, 0, blob.size, force_saveable_type);
+					blob_changed = true;
+				}
+				// Since I can't be sure that the guessed media type will trigger a download
+				// in WebKit, I append .download to the filename.
+				// https://bugs.webkit.org/show_bug.cgi?id=65440
+				if (webkit_req_fs && name !== "download") {
+					name += ".download";
+				}
+				if (type === force_saveable_type || webkit_req_fs) {
+					target_view = view;
+				}
+				if (!req_fs) {
+					fs_error();
+					return;
+				}
+				fs_min_size += blob.size;
+				req_fs(view.TEMPORARY, fs_min_size, abortable(function(fs) {
+					fs.root.getDirectory("saved", create_if_not_found, abortable(function(dir) {
+						var save = function() {
+							dir.getFile(name, create_if_not_found, abortable(function(file) {
+								file.createWriter(abortable(function(writer) {
+									writer.onwriteend = function(event) {
+										target_view.location.href = file.toURL();
+										filesaver.readyState = filesaver.DONE;
+										dispatch(filesaver, "writeend", event);
+										revoke(file);
+									};
+									writer.onerror = function() {
+										var error = writer.error;
+										if (error.code !== error.ABORT_ERR) {
+											fs_error();
+										}
+									};
+									"writestart progress write abort".split(" ").forEach(function(event) {
+										writer["on" + event] = filesaver["on" + event];
+									});
+									writer.write(blob);
+									filesaver.abort = function() {
+										writer.abort();
+										filesaver.readyState = filesaver.DONE;
+									};
+									filesaver.readyState = filesaver.WRITING;
+								}), fs_error);
+							}), fs_error);
+						};
+						dir.getFile(name, {create: false}, abortable(function(file) {
+							// delete file if it already exists
+							file.remove();
+							save();
+						}), abortable(function(ex) {
+							if (ex.code === ex.NOT_FOUND_ERR) {
+								save();
+							} else {
+								fs_error();
+							}
+						}));
+					}), fs_error);
+				}), fs_error);
+			}
+			, FS_proto = FileSaver.prototype
+			, saveAs = function(blob, name, no_auto_bom) {
+				return new FileSaver(blob, name, no_auto_bom);
+			}
+		;
+		// IE 10+ (native saveAs)
+		if (typeof navigator !== "undefined" && navigator.msSaveOrOpenBlob) {
+			return function(blob, name, no_auto_bom) {
+				if (!no_auto_bom) {
+					blob = auto_bom(blob);
+				}
+				return navigator.msSaveOrOpenBlob(blob, name || "download");
+			};
+		}
+
+		FS_proto.abort = function() {
+			var filesaver = this;
+			filesaver.readyState = filesaver.DONE;
+			dispatch(filesaver, "abort");
+		};
+		FS_proto.readyState = FS_proto.INIT = 0;
+		FS_proto.WRITING = 1;
+		FS_proto.DONE = 2;
+
+		FS_proto.error =
+		FS_proto.onwritestart =
+		FS_proto.onprogress =
+		FS_proto.onwrite =
+		FS_proto.onabort =
+		FS_proto.onerror =
+		FS_proto.onwriteend =
+			null;
+
+		return saveAs;
+	}(
+		   typeof self !== "undefined" && self
+		|| typeof window !== "undefined" && window
+		|| this.content
+	));
+	// `self` is undefined in Firefox for Android content script context
+	// while `this` is nsIContentFrameMessageManager
+	// with an attribute `content` that corresponds to the window
+
+	if (typeof module !== "undefined" && module.exports) {
+	  module.exports.saveAs = saveAs;
+	} else if (("function" !== "undefined" && __webpack_require__(106) !== null) && (__webpack_require__(107) != null)) {
+	  !(__WEBPACK_AMD_DEFINE_ARRAY__ = [], __WEBPACK_AMD_DEFINE_RESULT__ = function() {
+	    return saveAs;
+	  }.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__), __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));
+	}
+
+
+/***/ },
+/* 106 */
+/***/ function(module, exports) {
+
+	module.exports = function() { throw new Error("define cannot be used indirect"); };
+
+
+/***/ },
+/* 107 */
+/***/ function(module, exports) {
+
+	/* WEBPACK VAR INJECTION */(function(__webpack_amd_options__) {module.exports = __webpack_amd_options__;
+
+	/* WEBPACK VAR INJECTION */}.call(exports, {}))
+
+/***/ }
+/******/ ]);
\ No newline at end of file
diff --git a/public/bower_components/pdfmake/vfs_fonts.js b/public/bower_components/pdfmake/vfs_fonts.js
new file mode 100644
index 0000000..f5fd30a
--- /dev/null
+++ b/public/bower_components/pdfmake/vfs_fonts.js
@@ -0,0 +1 @@
+window.pdfMake = window.pdfMake || {}; window.pdfMake.vfs = {"LICENSE.txt":"DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBcGFjaGUgTGljZW5zZQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgVmVyc2lvbiAyLjAsIEphbnVhcnkgMjAwNA0KICAgICAgICAgICAgICAgICAgICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzLw0KDQogICBURVJNUyBBTkQgQ09ORElUSU9OUyBGT1IgVVNFLCBSRVBST0RVQ1RJT04sIEFORCBESVNUUklCVVRJT04NCg0KICAgMS4gRGVmaW5pdGlvbnMuDQoNCiAgICAgICJMaWNlbnNlIiBzaGFsbCBtZWFuIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBmb3IgdXNlLCByZXByb2R1Y3Rpb24sDQogICAgICBhbmQgZGlzdHJpYnV0aW9uIGFzIGRlZmluZWQgYnkgU2VjdGlvbnMgMSB0aHJvdWdoIDkgb2YgdGhpcyBkb2N1bWVudC4NCg0KICAgICAgIkxpY2Vuc29yIiBzaGFsbCBtZWFuIHRoZSBjb3B5cmlnaHQgb3duZXIgb3IgZW50aXR5IGF1dGhvcml6ZWQgYnkNCiAgICAgIHRoZSBjb3B5cmlnaHQgb3duZXIgdGhhdCBpcyBncmFudGluZyB0aGUgTGljZW5zZS4NCg0KICAgICAgIkxlZ2FsIEVudGl0eSIgc2hhbGwgbWVhbiB0aGUgdW5pb24gb2YgdGhlIGFjdGluZyBlbnRpdHkgYW5kIGFsbA0KICAgICAgb3RoZXIgZW50aXRpZXMgdGhhdCBjb250cm9sLCBhcmUgY29udHJvbGxlZCBieSwgb3IgYXJlIHVuZGVyIGNvbW1vbg0KICAgICAgY29udHJvbCB3aXRoIHRoYXQgZW50aXR5LiBGb3IgdGhlIHB1cnBvc2VzIG9mIHRoaXMgZGVmaW5pdGlvbiwNCiAgICAgICJjb250cm9sIiBtZWFucyAoaSkgdGhlIHBvd2VyLCBkaXJlY3Qgb3IgaW5kaXJlY3QsIHRvIGNhdXNlIHRoZQ0KICAgICAgZGlyZWN0aW9uIG9yIG1hbmFnZW1lbnQgb2Ygc3VjaCBlbnRpdHksIHdoZXRoZXIgYnkgY29udHJhY3Qgb3INCiAgICAgIG90aGVyd2lzZSwgb3IgKGlpKSBvd25lcnNoaXAgb2YgZmlmdHkgcGVyY2VudCAoNTAlKSBvciBtb3JlIG9mIHRoZQ0KICAgICAgb3V0c3RhbmRpbmcgc2hhcmVzLCBvciAoaWlpKSBiZW5lZmljaWFsIG93bmVyc2hpcCBvZiBzdWNoIGVudGl0eS4NCg0KICAgICAgIllvdSIgKG9yICJZb3VyIikgc2hhbGwgbWVhbiBhbiBpbmRpdmlkdWFsIG9yIExlZ2FsIEVudGl0eQ0KICAgICAgZXhlcmNpc2luZyBwZXJtaXNzaW9ucyBncmFudGVkIGJ5IHRoaXMgTGljZW5zZS4NCg0KICAgICAgIlNvdXJjZSIgZm9ybSBzaGFsbCBtZWFuIHRoZSBwcmVmZXJyZWQgZm9ybSBmb3IgbWFraW5nIG1vZGlmaWNhdGlvbnMsDQogICAgICBpbmNsdWRpbmcgYnV0IG5vdCBsaW1pdGVkIHRvIHNvZnR3YXJlIHNvdXJjZSBjb2RlLCBkb2N1bWVudGF0aW9uDQogICAgICBzb3VyY2UsIGFuZCBjb25maWd1cmF0aW9uIGZpbGVzLg0KDQogICAgICAiT2JqZWN0IiBmb3JtIHNoYWxsIG1lYW4gYW55IGZvcm0gcmVzdWx0aW5nIGZyb20gbWVjaGFuaWNhbA0KICAgICAgdHJhbnNmb3JtYXRpb24gb3IgdHJhbnNsYXRpb24gb2YgYSBTb3VyY2UgZm9ybSwgaW5jbHVkaW5nIGJ1dA0KICAgICAgbm90IGxpbWl0ZWQgdG8gY29tcGlsZWQgb2JqZWN0IGNvZGUsIGdlbmVyYXRlZCBkb2N1bWVudGF0aW9uLA0KICAgICAgYW5kIGNvbnZlcnNpb25zIHRvIG90aGVyIG1lZGlhIHR5cGVzLg0KDQogICAgICAiV29yayIgc2hhbGwgbWVhbiB0aGUgd29yayBvZiBhdXRob3JzaGlwLCB3aGV0aGVyIGluIFNvdXJjZSBvcg0KICAgICAgT2JqZWN0IGZvcm0sIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSBMaWNlbnNlLCBhcyBpbmRpY2F0ZWQgYnkgYQ0KICAgICAgY29weXJpZ2h0IG5vdGljZSB0aGF0IGlzIGluY2x1ZGVkIGluIG9yIGF0dGFjaGVkIHRvIHRoZSB3b3JrDQogICAgICAoYW4gZXhhbXBsZSBpcyBwcm92aWRlZCBpbiB0aGUgQXBwZW5kaXggYmVsb3cpLg0KDQogICAgICAiRGVyaXZhdGl2ZSBXb3JrcyIgc2hhbGwgbWVhbiBhbnkgd29yaywgd2hldGhlciBpbiBTb3VyY2Ugb3IgT2JqZWN0DQogICAgICBmb3JtLCB0aGF0IGlzIGJhc2VkIG9uIChvciBkZXJpdmVkIGZyb20pIHRoZSBXb3JrIGFuZCBmb3Igd2hpY2ggdGhlDQogICAgICBlZGl0b3JpYWwgcmV2aXNpb25zLCBhbm5vdGF0aW9ucywgZWxhYm9yYXRpb25zLCBvciBvdGhlciBtb2RpZmljYXRpb25zDQogICAgICByZXByZXNlbnQsIGFzIGEgd2hvbGUsIGFuIG9yaWdpbmFsIHdvcmsgb2YgYXV0aG9yc2hpcC4gRm9yIHRoZSBwdXJwb3Nlcw0KICAgICAgb2YgdGhpcyBMaWNlbnNlLCBEZXJpdmF0aXZlIFdvcmtzIHNoYWxsIG5vdCBpbmNsdWRlIHdvcmtzIHRoYXQgcmVtYWluDQogICAgICBzZXBhcmFibGUgZnJvbSwgb3IgbWVyZWx5IGxpbmsgKG9yIGJpbmQgYnkgbmFtZSkgdG8gdGhlIGludGVyZmFjZXMgb2YsDQogICAgICB0aGUgV29yayBhbmQgRGVyaXZhdGl2ZSBXb3JrcyB0aGVyZW9mLg0KDQogICAgICAiQ29udHJpYnV0aW9uIiBzaGFsbCBtZWFuIGFueSB3b3JrIG9mIGF1dGhvcnNoaXAsIGluY2x1ZGluZw0KICAgICAgdGhlIG9yaWdpbmFsIHZlcnNpb24gb2YgdGhlIFdvcmsgYW5kIGFueSBtb2RpZmljYXRpb25zIG9yIGFkZGl0aW9ucw0KICAgICAgdG8gdGhhdCBXb3JrIG9yIERlcml2YXRpdmUgV29ya3MgdGhlcmVvZiwgdGhhdCBpcyBpbnRlbnRpb25hbGx5DQogICAgICBzdWJtaXR0ZWQgdG8gTGljZW5zb3IgZm9yIGluY2x1c2lvbiBpbiB0aGUgV29yayBieSB0aGUgY29weXJpZ2h0IG93bmVyDQogICAgICBvciBieSBhbiBpbmRpdmlkdWFsIG9yIExlZ2FsIEVudGl0eSBhdXRob3JpemVkIHRvIHN1Ym1pdCBvbiBiZWhhbGYgb2YNCiAgICAgIHRoZSBjb3B5cmlnaHQgb3duZXIuIEZvciB0aGUgcHVycG9zZXMgb2YgdGhpcyBkZWZpbml0aW9uLCAic3VibWl0dGVkIg0KICAgICAgbWVhbnMgYW55IGZvcm0gb2YgZWxlY3Ryb25pYywgdmVyYmFsLCBvciB3cml0dGVuIGNvbW11bmljYXRpb24gc2VudA0KICAgICAgdG8gdGhlIExpY2Vuc29yIG9yIGl0cyByZXByZXNlbnRhdGl2ZXMsIGluY2x1ZGluZyBidXQgbm90IGxpbWl0ZWQgdG8NCiAgICAgIGNvbW11bmljYXRpb24gb24gZWxlY3Ryb25pYyBtYWlsaW5nIGxpc3RzLCBzb3VyY2UgY29kZSBjb250cm9sIHN5c3RlbXMsDQogICAgICBhbmQgaXNzdWUgdHJhY2tpbmcgc3lzdGVtcyB0aGF0IGFyZSBtYW5hZ2VkIGJ5LCBvciBvbiBiZWhhbGYgb2YsIHRoZQ0KICAgICAgTGljZW5zb3IgZm9yIHRoZSBwdXJwb3NlIG9mIGRpc2N1c3NpbmcgYW5kIGltcHJvdmluZyB0aGUgV29yaywgYnV0DQogICAgICBleGNsdWRpbmcgY29tbXVuaWNhdGlvbiB0aGF0IGlzIGNvbnNwaWN1b3VzbHkgbWFya2VkIG9yIG90aGVyd2lzZQ0KICAgICAgZGVzaWduYXRlZCBpbiB3cml0aW5nIGJ5IHRoZSBjb3B5cmlnaHQgb3duZXIgYXMgIk5vdCBhIENvbnRyaWJ1dGlvbi4iDQoNCiAgICAgICJDb250cmlidXRvciIgc2hhbGwgbWVhbiBMaWNlbnNvciBhbmQgYW55IGluZGl2aWR1YWwgb3IgTGVnYWwgRW50aXR5DQogICAgICBvbiBiZWhhbGYgb2Ygd2hvbSBhIENvbnRyaWJ1dGlvbiBoYXMgYmVlbiByZWNlaXZlZCBieSBMaWNlbnNvciBhbmQNCiAgICAgIHN1YnNlcXVlbnRseSBpbmNvcnBvcmF0ZWQgd2l0aGluIHRoZSBXb3JrLg0KDQogICAyLiBHcmFudCBvZiBDb3B5cmlnaHQgTGljZW5zZS4gU3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YNCiAgICAgIHRoaXMgTGljZW5zZSwgZWFjaCBDb250cmlidXRvciBoZXJlYnkgZ3JhbnRzIHRvIFlvdSBhIHBlcnBldHVhbCwNCiAgICAgIHdvcmxkd2lkZSwgbm9uLWV4Y2x1c2l2ZSwgbm8tY2hhcmdlLCByb3lhbHR5LWZyZWUsIGlycmV2b2NhYmxlDQogICAgICBjb3B5cmlnaHQgbGljZW5zZSB0byByZXByb2R1Y2UsIHByZXBhcmUgRGVyaXZhdGl2ZSBXb3JrcyBvZiwNCiAgICAgIHB1YmxpY2x5IGRpc3BsYXksIHB1YmxpY2x5IHBlcmZvcm0sIHN1YmxpY2Vuc2UsIGFuZCBkaXN0cmlidXRlIHRoZQ0KICAgICAgV29yayBhbmQgc3VjaCBEZXJpdmF0aXZlIFdvcmtzIGluIFNvdXJjZSBvciBPYmplY3QgZm9ybS4NCg0KICAgMy4gR3JhbnQgb2YgUGF0ZW50IExpY2Vuc2UuIFN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mDQogICAgICB0aGlzIExpY2Vuc2UsIGVhY2ggQ29udHJpYnV0b3IgaGVyZWJ5IGdyYW50cyB0byBZb3UgYSBwZXJwZXR1YWwsDQogICAgICB3b3JsZHdpZGUsIG5vbi1leGNsdXNpdmUsIG5vLWNoYXJnZSwgcm95YWx0eS1mcmVlLCBpcnJldm9jYWJsZQ0KICAgICAgKGV4Y2VwdCBhcyBzdGF0ZWQgaW4gdGhpcyBzZWN0aW9uKSBwYXRlbnQgbGljZW5zZSB0byBtYWtlLCBoYXZlIG1hZGUsDQogICAgICB1c2UsIG9mZmVyIHRvIHNlbGwsIHNlbGwsIGltcG9ydCwgYW5kIG90aGVyd2lzZSB0cmFuc2ZlciB0aGUgV29yaywNCiAgICAgIHdoZXJlIHN1Y2ggbGljZW5zZSBhcHBsaWVzIG9ubHkgdG8gdGhvc2UgcGF0ZW50IGNsYWltcyBsaWNlbnNhYmxlDQogICAgICBieSBzdWNoIENvbnRyaWJ1dG9yIHRoYXQgYXJlIG5lY2Vzc2FyaWx5IGluZnJpbmdlZCBieSB0aGVpcg0KICAgICAgQ29udHJpYnV0aW9uKHMpIGFsb25lIG9yIGJ5IGNvbWJpbmF0aW9uIG9mIHRoZWlyIENvbnRyaWJ1dGlvbihzKQ0KICAgICAgd2l0aCB0aGUgV29yayB0byB3aGljaCBzdWNoIENvbnRyaWJ1dGlvbihzKSB3YXMgc3VibWl0dGVkLiBJZiBZb3UNCiAgICAgIGluc3RpdHV0ZSBwYXRlbnQgbGl0aWdhdGlvbiBhZ2FpbnN0IGFueSBlbnRpdHkgKGluY2x1ZGluZyBhDQogICAgICBjcm9zcy1jbGFpbSBvciBjb3VudGVyY2xhaW0gaW4gYSBsYXdzdWl0KSBhbGxlZ2luZyB0aGF0IHRoZSBXb3JrDQogICAgICBvciBhIENvbnRyaWJ1dGlvbiBpbmNvcnBvcmF0ZWQgd2l0aGluIHRoZSBXb3JrIGNvbnN0aXR1dGVzIGRpcmVjdA0KICAgICAgb3IgY29udHJpYnV0b3J5IHBhdGVudCBpbmZyaW5nZW1lbnQsIHRoZW4gYW55IHBhdGVudCBsaWNlbnNlcw0KICAgICAgZ3JhbnRlZCB0byBZb3UgdW5kZXIgdGhpcyBMaWNlbnNlIGZvciB0aGF0IFdvcmsgc2hhbGwgdGVybWluYXRlDQogICAgICBhcyBvZiB0aGUgZGF0ZSBzdWNoIGxpdGlnYXRpb24gaXMgZmlsZWQuDQoNCiAgIDQuIFJlZGlzdHJpYnV0aW9uLiBZb3UgbWF5IHJlcHJvZHVjZSBhbmQgZGlzdHJpYnV0ZSBjb3BpZXMgb2YgdGhlDQogICAgICBXb3JrIG9yIERlcml2YXRpdmUgV29ya3MgdGhlcmVvZiBpbiBhbnkgbWVkaXVtLCB3aXRoIG9yIHdpdGhvdXQNCiAgICAgIG1vZGlmaWNhdGlvbnMsIGFuZCBpbiBTb3VyY2Ugb3IgT2JqZWN0IGZvcm0sIHByb3ZpZGVkIHRoYXQgWW91DQogICAgICBtZWV0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoNCg0KICAgICAgKGEpIFlvdSBtdXN0IGdpdmUgYW55IG90aGVyIHJlY2lwaWVudHMgb2YgdGhlIFdvcmsgb3INCiAgICAgICAgICBEZXJpdmF0aXZlIFdvcmtzIGEgY29weSBvZiB0aGlzIExpY2Vuc2U7IGFuZA0KDQogICAgICAoYikgWW91IG11c3QgY2F1c2UgYW55IG1vZGlmaWVkIGZpbGVzIHRvIGNhcnJ5IHByb21pbmVudCBub3RpY2VzDQogICAgICAgICAgc3RhdGluZyB0aGF0IFlvdSBjaGFuZ2VkIHRoZSBmaWxlczsgYW5kDQoNCiAgICAgIChjKSBZb3UgbXVzdCByZXRhaW4sIGluIHRoZSBTb3VyY2UgZm9ybSBvZiBhbnkgRGVyaXZhdGl2ZSBXb3Jrcw0KICAgICAgICAgIHRoYXQgWW91IGRpc3RyaWJ1dGUsIGFsbCBjb3B5cmlnaHQsIHBhdGVudCwgdHJhZGVtYXJrLCBhbmQNCiAgICAgICAgICBhdHRyaWJ1dGlvbiBub3RpY2VzIGZyb20gdGhlIFNvdXJjZSBmb3JtIG9mIHRoZSBXb3JrLA0KICAgICAgICAgIGV4Y2x1ZGluZyB0aG9zZSBub3RpY2VzIHRoYXQgZG8gbm90IHBlcnRhaW4gdG8gYW55IHBhcnQgb2YNCiAgICAgICAgICB0aGUgRGVyaXZhdGl2ZSBXb3JrczsgYW5kDQoNCiAgICAgIChkKSBJZiB0aGUgV29yayBpbmNsdWRlcyBhICJOT1RJQ0UiIHRleHQgZmlsZSBhcyBwYXJ0IG9mIGl0cw0KICAgICAgICAgIGRpc3RyaWJ1dGlvbiwgdGhlbiBhbnkgRGVyaXZhdGl2ZSBXb3JrcyB0aGF0IFlvdSBkaXN0cmlidXRlIG11c3QNCiAgICAgICAgICBpbmNsdWRlIGEgcmVhZGFibGUgY29weSBvZiB0aGUgYXR0cmlidXRpb24gbm90aWNlcyBjb250YWluZWQNCiAgICAgICAgICB3aXRoaW4gc3VjaCBOT1RJQ0UgZmlsZSwgZXhjbHVkaW5nIHRob3NlIG5vdGljZXMgdGhhdCBkbyBub3QNCiAgICAgICAgICBwZXJ0YWluIHRvIGFueSBwYXJ0IG9mIHRoZSBEZXJpdmF0aXZlIFdvcmtzLCBpbiBhdCBsZWFzdCBvbmUNCiAgICAgICAgICBvZiB0aGUgZm9sbG93aW5nIHBsYWNlczogd2l0aGluIGEgTk9USUNFIHRleHQgZmlsZSBkaXN0cmlidXRlZA0KICAgICAgICAgIGFzIHBhcnQgb2YgdGhlIERlcml2YXRpdmUgV29ya3M7IHdpdGhpbiB0aGUgU291cmNlIGZvcm0gb3INCiAgICAgICAgICBkb2N1bWVudGF0aW9uLCBpZiBwcm92aWRlZCBhbG9uZyB3aXRoIHRoZSBEZXJpdmF0aXZlIFdvcmtzOyBvciwNCiAgICAgICAgICB3aXRoaW4gYSBkaXNwbGF5IGdlbmVyYXRlZCBieSB0aGUgRGVyaXZhdGl2ZSBXb3JrcywgaWYgYW5kDQogICAgICAgICAgd2hlcmV2ZXIgc3VjaCB0aGlyZC1wYXJ0eSBub3RpY2VzIG5vcm1hbGx5IGFwcGVhci4gVGhlIGNvbnRlbnRzDQogICAgICAgICAgb2YgdGhlIE5PVElDRSBmaWxlIGFyZSBmb3IgaW5mb3JtYXRpb25hbCBwdXJwb3NlcyBvbmx5IGFuZA0KICAgICAgICAgIGRvIG5vdCBtb2RpZnkgdGhlIExpY2Vuc2UuIFlvdSBtYXkgYWRkIFlvdXIgb3duIGF0dHJpYnV0aW9uDQogICAgICAgICAgbm90aWNlcyB3aXRoaW4gRGVyaXZhdGl2ZSBXb3JrcyB0aGF0IFlvdSBkaXN0cmlidXRlLCBhbG9uZ3NpZGUNCiAgICAgICAgICBvciBhcyBhbiBhZGRlbmR1bSB0byB0aGUgTk9USUNFIHRleHQgZnJvbSB0aGUgV29yaywgcHJvdmlkZWQNCiAgICAgICAgICB0aGF0IHN1Y2ggYWRkaXRpb25hbCBhdHRyaWJ1dGlvbiBub3RpY2VzIGNhbm5vdCBiZSBjb25zdHJ1ZWQNCiAgICAgICAgICBhcyBtb2RpZnlpbmcgdGhlIExpY2Vuc2UuDQoNCiAgICAgIFlvdSBtYXkgYWRkIFlvdXIgb3duIGNvcHlyaWdodCBzdGF0ZW1lbnQgdG8gWW91ciBtb2RpZmljYXRpb25zIGFuZA0KICAgICAgbWF5IHByb3ZpZGUgYWRkaXRpb25hbCBvciBkaWZmZXJlbnQgbGljZW5zZSB0ZXJtcyBhbmQgY29uZGl0aW9ucw0KICAgICAgZm9yIHVzZSwgcmVwcm9kdWN0aW9uLCBvciBkaXN0cmlidXRpb24gb2YgWW91ciBtb2RpZmljYXRpb25zLCBvcg0KICAgICAgZm9yIGFueSBzdWNoIERlcml2YXRpdmUgV29ya3MgYXMgYSB3aG9sZSwgcHJvdmlkZWQgWW91ciB1c2UsDQogICAgICByZXByb2R1Y3Rpb24sIGFuZCBkaXN0cmlidXRpb24gb2YgdGhlIFdvcmsgb3RoZXJ3aXNlIGNvbXBsaWVzIHdpdGgNCiAgICAgIHRoZSBjb25kaXRpb25zIHN0YXRlZCBpbiB0aGlzIExpY2Vuc2UuDQoNCiAgIDUuIFN1Ym1pc3Npb24gb2YgQ29udHJpYnV0aW9ucy4gVW5sZXNzIFlvdSBleHBsaWNpdGx5IHN0YXRlIG90aGVyd2lzZSwNCiAgICAgIGFueSBDb250cmlidXRpb24gaW50ZW50aW9uYWxseSBzdWJtaXR0ZWQgZm9yIGluY2x1c2lvbiBpbiB0aGUgV29yaw0KICAgICAgYnkgWW91IHRvIHRoZSBMaWNlbnNvciBzaGFsbCBiZSB1bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YNCiAgICAgIHRoaXMgTGljZW5zZSwgd2l0aG91dCBhbnkgYWRkaXRpb25hbCB0ZXJtcyBvciBjb25kaXRpb25zLg0KICAgICAgTm90d2l0aHN0YW5kaW5nIHRoZSBhYm92ZSwgbm90aGluZyBoZXJlaW4gc2hhbGwgc3VwZXJzZWRlIG9yIG1vZGlmeQ0KICAgICAgdGhlIHRlcm1zIG9mIGFueSBzZXBhcmF0ZSBsaWNlbnNlIGFncmVlbWVudCB5b3UgbWF5IGhhdmUgZXhlY3V0ZWQNCiAgICAgIHdpdGggTGljZW5zb3IgcmVnYXJkaW5nIHN1Y2ggQ29udHJpYnV0aW9ucy4NCg0KICAgNi4gVHJhZGVtYXJrcy4gVGhpcyBMaWNlbnNlIGRvZXMgbm90IGdyYW50IHBlcm1pc3Npb24gdG8gdXNlIHRoZSB0cmFkZQ0KICAgICAgbmFtZXMsIHRyYWRlbWFya3MsIHNlcnZpY2UgbWFya3MsIG9yIHByb2R1Y3QgbmFtZXMgb2YgdGhlIExpY2Vuc29yLA0KICAgICAgZXhjZXB0IGFzIHJlcXVpcmVkIGZvciByZWFzb25hYmxlIGFuZCBjdXN0b21hcnkgdXNlIGluIGRlc2NyaWJpbmcgdGhlDQogICAgICBvcmlnaW4gb2YgdGhlIFdvcmsgYW5kIHJlcHJvZHVjaW5nIHRoZSBjb250ZW50IG9mIHRoZSBOT1RJQ0UgZmlsZS4NCg0KICAgNy4gRGlzY2xhaW1lciBvZiBXYXJyYW50eS4gVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yDQogICAgICBhZ3JlZWQgdG8gaW4gd3JpdGluZywgTGljZW5zb3IgcHJvdmlkZXMgdGhlIFdvcmsgKGFuZCBlYWNoDQogICAgICBDb250cmlidXRvciBwcm92aWRlcyBpdHMgQ29udHJpYnV0aW9ucykgb24gYW4gIkFTIElTIiBCQVNJUywNCiAgICAgIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvcg0KICAgICAgaW1wbGllZCwgaW5jbHVkaW5nLCB3aXRob3V0IGxpbWl0YXRpb24sIGFueSB3YXJyYW50aWVzIG9yIGNvbmRpdGlvbnMNCiAgICAgIG9mIFRJVExFLCBOT04tSU5GUklOR0VNRU5ULCBNRVJDSEFOVEFCSUxJVFksIG9yIEZJVE5FU1MgRk9SIEENCiAgICAgIFBBUlRJQ1VMQVIgUFVSUE9TRS4gWW91IGFyZSBzb2xlbHkgcmVzcG9uc2libGUgZm9yIGRldGVybWluaW5nIHRoZQ0KICAgICAgYXBwcm9wcmlhdGVuZXNzIG9mIHVzaW5nIG9yIHJlZGlzdHJpYnV0aW5nIHRoZSBXb3JrIGFuZCBhc3N1bWUgYW55DQogICAgICByaXNrcyBhc3NvY2lhdGVkIHdpdGggWW91ciBleGVyY2lzZSBvZiBwZXJtaXNzaW9ucyB1bmRlciB0aGlzIExpY2Vuc2UuDQoNCiAgIDguIExpbWl0YXRpb24gb2YgTGlhYmlsaXR5LiBJbiBubyBldmVudCBhbmQgdW5kZXIgbm8gbGVnYWwgdGhlb3J5LA0KICAgICAgd2hldGhlciBpbiB0b3J0IChpbmNsdWRpbmcgbmVnbGlnZW5jZSksIGNvbnRyYWN0LCBvciBvdGhlcndpc2UsDQogICAgICB1bmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgKHN1Y2ggYXMgZGVsaWJlcmF0ZSBhbmQgZ3Jvc3NseQ0KICAgICAgbmVnbGlnZW50IGFjdHMpIG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzaGFsbCBhbnkgQ29udHJpYnV0b3IgYmUNCiAgICAgIGxpYWJsZSB0byBZb3UgZm9yIGRhbWFnZXMsIGluY2x1ZGluZyBhbnkgZGlyZWN0LCBpbmRpcmVjdCwgc3BlY2lhbCwNCiAgICAgIGluY2lkZW50YWwsIG9yIGNvbnNlcXVlbnRpYWwgZGFtYWdlcyBvZiBhbnkgY2hhcmFjdGVyIGFyaXNpbmcgYXMgYQ0KICAgICAgcmVzdWx0IG9mIHRoaXMgTGljZW5zZSBvciBvdXQgb2YgdGhlIHVzZSBvciBpbmFiaWxpdHkgdG8gdXNlIHRoZQ0KICAgICAgV29yayAoaW5jbHVkaW5nIGJ1dCBub3QgbGltaXRlZCB0byBkYW1hZ2VzIGZvciBsb3NzIG9mIGdvb2R3aWxsLA0KICAgICAgd29yayBzdG9wcGFnZSwgY29tcHV0ZXIgZmFpbHVyZSBvciBtYWxmdW5jdGlvbiwgb3IgYW55IGFuZCBhbGwNCiAgICAgIG90aGVyIGNvbW1lcmNpYWwgZGFtYWdlcyBvciBsb3NzZXMpLCBldmVuIGlmIHN1Y2ggQ29udHJpYnV0b3INCiAgICAgIGhhcyBiZWVuIGFkdmlzZWQgb2YgdGhlIHBvc3NpYmlsaXR5IG9mIHN1Y2ggZGFtYWdlcy4NCg0KICAgOS4gQWNjZXB0aW5nIFdhcnJhbnR5IG9yIEFkZGl0aW9uYWwgTGlhYmlsaXR5LiBXaGlsZSByZWRpc3RyaWJ1dGluZw0KICAgICAgdGhlIFdvcmsgb3IgRGVyaXZhdGl2ZSBXb3JrcyB0aGVyZW9mLCBZb3UgbWF5IGNob29zZSB0byBvZmZlciwNCiAgICAgIGFuZCBjaGFyZ2UgYSBmZWUgZm9yLCBhY2NlcHRhbmNlIG9mIHN1cHBvcnQsIHdhcnJhbnR5LCBpbmRlbW5pdHksDQogICAgICBvciBvdGhlciBsaWFiaWxpdHkgb2JsaWdhdGlvbnMgYW5kL29yIHJpZ2h0cyBjb25zaXN0ZW50IHdpdGggdGhpcw0KICAgICAgTGljZW5zZS4gSG93ZXZlciwgaW4gYWNjZXB0aW5nIHN1Y2ggb2JsaWdhdGlvbnMsIFlvdSBtYXkgYWN0IG9ubHkNCiAgICAgIG9uIFlvdXIgb3duIGJlaGFsZiBhbmQgb24gWW91ciBzb2xlIHJlc3BvbnNpYmlsaXR5LCBub3Qgb24gYmVoYWxmDQogICAgICBvZiBhbnkgb3RoZXIgQ29udHJpYnV0b3IsIGFuZCBvbmx5IGlmIFlvdSBhZ3JlZSB0byBpbmRlbW5pZnksDQogICAgICBkZWZlbmQsIGFuZCBob2xkIGVhY2ggQ29udHJpYnV0b3IgaGFybWxlc3MgZm9yIGFueSBsaWFiaWxpdHkNCiAgICAgIGluY3VycmVkIGJ5LCBvciBjbGFpbXMgYXNzZXJ0ZWQgYWdhaW5zdCwgc3VjaCBDb250cmlidXRvciBieSByZWFzb24NCiAgICAgIG9mIHlvdXIgYWNjZXB0aW5nIGFueSBzdWNoIHdhcnJhbnR5IG9yIGFkZGl0aW9uYWwgbGlhYmlsaXR5Lg0KDQogICBFTkQgT0YgVEVSTVMgQU5EIENPTkRJVElPTlMNCg0KICAgQVBQRU5ESVg6IEhvdyB0byBhcHBseSB0aGUgQXBhY2hlIExpY2Vuc2UgdG8geW91ciB3b3JrLg0KDQogICAgICBUbyBhcHBseSB0aGUgQXBhY2hlIExpY2Vuc2UgdG8geW91ciB3b3JrLCBhdHRhY2ggdGhlIGZvbGxvd2luZw0KICAgICAgYm9pbGVycGxhdGUgbm90aWNlLCB3aXRoIHRoZSBmaWVsZHMgZW5jbG9zZWQgYnkgYnJhY2tldHMgIltdIg0KICAgICAgcmVwbGFjZWQgd2l0aCB5b3VyIG93biBpZGVudGlmeWluZyBpbmZvcm1hdGlvbi4gKERvbid0IGluY2x1ZGUNCiAgICAgIHRoZSBicmFja2V0cyEpICBUaGUgdGV4dCBzaG91bGQgYmUgZW5jbG9zZWQgaW4gdGhlIGFwcHJvcHJpYXRlDQogICAgICBjb21tZW50IHN5bnRheCBmb3IgdGhlIGZpbGUgZm9ybWF0LiBXZSBhbHNvIHJlY29tbWVuZCB0aGF0IGENCiAgICAgIGZpbGUgb3IgY2xhc3MgbmFtZSBhbmQgZGVzY3JpcHRpb24gb2YgcHVycG9zZSBiZSBpbmNsdWRlZCBvbiB0aGUNCiAgICAgIHNhbWUgInByaW50ZWQgcGFnZSIgYXMgdGhlIGNvcHlyaWdodCBub3RpY2UgZm9yIGVhc2llcg0KICAgICAgaWRlbnRpZmljYXRpb24gd2l0aGluIHRoaXJkLXBhcnR5IGFyY2hpdmVzLg0KDQogICBDb3B5cmlnaHQgW3l5eXldIFtuYW1lIG9mIGNvcHlyaWdodCBvd25lcl0NCg0KICAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7DQogICB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuDQogICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQNCg0KICAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMA0KDQogICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlDQogICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLA0KICAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuDQogICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kDQogICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4NCg==","Roboto-Italic.ttf":"AAEAAAAOAIAAAwBgR0RFRgsuCy8AATmYAAAASEdQT1OC3T4oAAE54AAAkPhHU1VCeolvLwABytgAAANsT1MvMrivKS4AAAFoAAAAYFZETVhu6nZPAAASPAAABeBjbWFwg/CFnwAAGBwAAA7yZ2x5ZqugYnAAACcQAADhjGhlYWQVl+THAAAA7AAAADZoaGVhK3TmIgAAASQAAAAkaG10eH7tDo8AAAHIAAAQdGxvY2H/CzayAAEInAAACDxtYXhwBDwA9gAAAUgAAAAgbmFtZW3ArcAAARDYAAAEb3Bvc3QJy9dbAAEVSAAAJE0AAQAAAAEAAERFNtJfDzz1AAkIAAAAAADE8BEuAAAAAM2Cslz6t9PdKU8IYgACAAkAAgAAAAAAAAABAAAHbP4MAAAJA/q32vUpTwABAAAAAAAAAAAAAAAAAAAEHQABAAAEHQCWABYAXgAFAAEAAAAAAAAAAAAAAAAAAwABAAMEQQGQAAUAAAWaBTMAAAEfBZoFMwAAA9EAZgIAAAAAAAAAAAAAAAAA4AAC/1AAIFsAAAAgAAAAAHB5cnMAAQAA//0GAP4AAGYHmgIAIAABn08BAAAEOgWwAAAAIAACAeMAAAAAAAAB4wAAAeMAAAJ1AMUErABDBDoARwV7ANMErAAbAVcAxgKBAFcCiP+MA0AAoQRCAHIBgf+YAhUAPgIGAEYDH/+mBDoAUAQ6AXAEOgAtBDoANQQ6ACcEOgBoBDoAZwQ6ANgEOgA1BDoAfwHpAEYB8f/GA9EAZQQ6AI4D7gBWA5IAwga0ABME/v/VBMsAWATBAGIE8ABYBGIAWARfAFgFJgBoBVgAWAIkAGIEJQAPBH4APgQgAFgGkgBYBVkAWAUcAF4EzQBYBTsAXgT4AFcEjQBDBHoA7AUSAGcE3QDNBpUA7AS9//wEpgDuBDIAIAIKABIDHAD3Agr/lwMnAHwDa/+WAl0A8wQgADoERAA1A/wARwREAEQD+QBHApsAigRDADcERAA1AegARAH2/x0D2QA2AegARAaLADUERAA1BEQARgRE/+IERABEAqQANQPuADsCaQBvBEQAWgPIAJcFrACyA8j/6QPI/7wDyAAIApEAUQHhADYCkf+pBRgAggHh/+sEHQBXBGAALQVVACYEjgBxAdkAAQSc/8gDvwEnBd4AUgNeAMIDjABwBCsApgXfAFIDewEDAtABBQQGAE4DMQCnAzgAqgJoAPsERP/rA7EAhwH/AMMB4//OAg8BBANtAM8DiwA1BdUBDgY7ARsGgQC6A7f/8wcF/54EBABIBR0AJgRvAEgEeQAwBlIABARnACYESgBqBEUATARY/+sFRABVAegAPgQxAD4D8wBJAhEARwUwAEYERAA1BygATwbHAEQB6ABEApb/ZgUjAFkETgBGBToAZwSuAFoB7/8bA/kAPAOWAUgDYgFeAzgBCwINAUECkQEiAhP/twOXAQgCzwEHAnoAHQAK/fIACv5BAAr9WAAK/kYACv1LAAr83AHzAWQD1AFBAgAAwwQuAFcFS//MBR0ATwTs/94ETQAiBVoAWARN//EFXwBXBS8AigUAAB0EPwBABHL/9QPIALMERABBBAsAKQPsAIsERAA1BEYAVgJ5AH4EKv/RA7AAOgR6AHAERP/iBAsASQREAEMD7gC3BBwAWgVNAD8FRABDBisAXQSiAFoD/wCzBeEAZAWfANsFEgBmCAj/3ggTAFcGGgDyBVoAVwS7AEgFqv+WBtP/ygR0ACAFWQBYBU//3gS3AKMF0QBbBX8AVwUnANEHDgBXB0cAVwWrAMkGggBXBLkASAURAIcGrABiBM4ADAQnAEQETgBAAygAPgSQ/5oFvP/DA9IAHgRaAEAEFQBABFv/1QWSAEAEWQBABFoAQAOfAJAFbwBABHkAQAQYAH8GEgBABjoANQSlAIYF2ABABBYAQAQLADMGHgBABCH/1QRFADUEDABRBlj/1QZzAEAERQA1BFoAQAaRAGgFtwBFBBQAPga2AGMFmQA8BIb/2AQF/7wGmAB0BaoAXQZrADoFigA6CHsAYgddAD4D5f/HA5//xgUdAF0ERQBGBL4A6APIALMFHQBPBEUARgaLAGwFtwBIBpIAaAW4AEUE5ABkBAgASgSyAFUACv09AAr9ZAAK/m8ACv6QAAr6twAK+tYEFAA+BMsAVwRD/+IEHwBIA1wANQSXAFcDyQA1BL0ASAQ+AD4GJADzBTQApQdEAFcFVQA1B6kAVwaGADUFjQBlBIkATga/AOgFCwCIBR0A0QQmAJcFHQDQBc8ArgR0ACUEvQBIBBsAPgVYAFcERAA1BSsARgRgADYEYP/tBHIACgMY//sEtQA2BjQANgZzAEAF7wDoBNkAiAQIAM8DywC8B0H/8QYM/+wHfQBOBjUANQSoAGAD3gBGBVIA1wTPAKwFEQBqA9UAAAehAAAD1QAAB6EAAAKSAAAB7wAAAU4AAAQ4AAACEwAAAY8AAADMAAAACgAABS8A6QYSAQADb/9oAY0A1gGNALEBjP+kAY7/YQK7ANYCwgC9Aqn/pAQkAJUESQAQApAArwOPAEcFDABHByYArgJGAIACRgAhA24ACQN0AIsDLgCjBGAALQYmAEkD/gBgBYkA4wOXAGcIOABOBLQBIwTGAHwGUAD+BtwArAcIAKoGbQEeBFkAJgU/ADkEZ/+7BEoAzwSIAGgHqABJAfL/OwQ7AFAD7wCOA/YASAP9AEcDyQBnAjYAjwJ1AJQB7f/mBC0AaAAKAAAHq/+1B6wAhwPfAB8DXAAnBDoAUQLg/+AB6P8dAhH/egF+/8IDbQE3A2wBNwNsATcDyAEPA9ABCwPIAF8DxwEXA20BDQHrAS8Eb//UBDIAPgRJAE0EYAA+BAQAPgPfAD4EhgBKBKsAPgHoAD4DzwALBBwAPgOEAD4FlwA+BMoAPgR/AE0ElQBNBGMAPgQrACMD7gC9BLMAWARwAL4FoQDUBEH/4wQcALUD/v/5BDMASgJNAKwDqQAPA9YAIAQjACUEJQAeA+8ATgOEAL0D7gAjA+cAbQIPAH8DKAAiAzgAJQLTAO0DRwArA0gAQALjAI8DTwAuAzgAZANtAD4DZwC5ApEBKwMbAPUEOgAuBDoAJwQ6AGEESwBkA/n/kQQBAOsEMP/OBDoANQR7AEAERABBBPAAWAQgADcE3gBXBNMAWAPZADYE7ABYA9gANgQ6AH0EMgA+AzgBCwHjAAACFQA+BTMAXgUzAF4EYgBTBHoA7AJpAAcE/v/VBP7/1QT+/9UE/v/VBP7/1QT+/9UE/v/VBMsAYgRiAFgEYgBYBGIAWARiAFgCJABiAiQAYgIkAGICJABiBVkAWAU7AF4FOwBeBTsAXgU7AF4FOwBeBRIAZwUSAGcFEgBnBRIAZwSmAO4EIAA6BCAAOgQgADoEIAA6BCAAOgQgADoEIAA6A/wARwP5AEcD+QBHA/kARwP5AEcB6AA+AegAPgHoAD4B6AA+BEQANQREAEYERABGBEQARgREAEYERABGBEQAWgREAFoERABaBEQAWgPI/7wDyP+8BP7/1QQgADoE/v/VBCAAOgT+/9UEIAA6BMsAYgP8AEcEywBiA/wARwTLAGID/ABHBMsAYgP8AEcFFQBYBNoARARiAFgD+QBHBGIAWAP5AEcEYgBYA/kARwRiAFgD+QBHBGIAWAP5AEcFJgBoBEMANwUmAGgEQwA3BSYAaARDADcFJgBoBEMANwVYAFgERAA1AiQAYgHoAD4CJABiAegAPgIkAGIB6AA+AiT/mgHo/3sCJABiBkkAYgPeAEQEJQAPAe//GwTTAD4D2QA2BCAAWAHoAEQEIABYAej/qAQgAFgCfgBEBCAAWALEAEQFWQBYBEQANQVZAFgERAA1BVkAWAREADUERAA1BTsAXgREAEYFOwBeBEQARgU7AF4ERABGBPgAVwKkADUE+ABXAqT/pgT4AFcCpAA1BJgAQwPuADsEmABDA+4AOwSYAEMD7gA7BJgAQwPuADsEmABDA+4AOwR6AOwCaQBFBHoA7AJpAG8EegDsApEAbwUSAGcERABaBRIAZwREAFoFEgBnBEQAWgUSAGcERABaBRIAZwREAFoFEgBnBEQAWgaVAOwFrACyBKYA7gPI/7wEpgDuBH0AIAPIAAgEfQAgA8gACAR9ACADyAAIBwX/ngZSAAQFHQAmBEUATARgAAsEYAALA+4AvQRv/9QEb//UBG//1ARv/9QEb//UBG//1ARv/9QESQBNBAQAPgQEAD4EBAA+BAQAPgHoAD4B6AA+AegAPgHoAD4EygA+BH8ATQR/AE0EfwBNBH8ATQR/AE0EswBYBLMAWASzAFgEswBYBBwAtQRv/9QEb//UBG//1ARJAE0ESQBNBEkATQRJAE0EYAA+BAQAPgQEAD4EBAA+BAQAPgQEAD4EhgBKBIYASgSGAEoEhgBKBKsAPgHoAD4B6AA+AegAPgHo/3MB6AA+A88ACwQcAD4DhAA+A4QAPgOEAD4DhAA+BMoAPgTKAD4EygA+BH8ATQR/AE0EfwBNBGMAPgRjAD4EYwA+BCsAIwQrACMEKwAjBCsAIwPuAJcD7gC9BLMAWASzAFgEswBYBLMAWASzAFgEswBYBaEA1AQcALUEHAC1A/7/+QP+//kD/v/5CFYAIwT+/9UExgCbBbwAvAKIAMYFTwByBQoASQUUADECeQBsBP7/1QTLAFgEYgBYBH0AIAVYAFgCJABiBNMAPgaSAFgFWQBYBTsAXgTNAFgEegDsBKYA7gS9//wCJABiBKYA7gQ/AEAECwApBEQANQJ5AH4EHABaBDEAPgREAEYERP/rA8gAlwPI/+kCeQB+BBwAWgREAEYEHABaBisAXQRiAFgELgBXBJgAQwIkAGICJABiBCUADwTTAD4E0wA+BLcAowT+/9UEywBYBC4AVwRiAFgFWQBYBpIAWAVYAFgFOwBeBVoAWATNAFgEywBiBHoA7AS9//wEIAA6A/kARwRaAEAERABGBET/4gP8AEcDyP+8A8j/6QP5AEcDKAA+A+4AOwHoAEQB6AA+Afb/HQQVAEADyP+8BpUA7AWsALIGlQDsBawAsgaVAOwFrACyBKYA7gPI/7wBVwDGAnUAxQP6AE8EgwCKAe//GwGNALEGkgBYBosANQT+/9UEIAA6BTsAAQbIAIoHHgCKBGIAWAVZAFgD+QBHBFoAQAUvAIoFRABDBL4A6APIALMIDABGCQMAXgR0ACAD0gAeBMsAYgP8AEcEpgDuA8gAswIkAGIG0//KBbz/wwIkAGIE/v/VBCAAOgT+/9UEIAA6BwX/ngZSAAQEYgBYA/kARwUrAEYD+QA8A/kAPAbT/8oFvP/DBHQAIAPSAB4FWQBYBFoAQAVZAFgEWgBABTsAXgREAEYFHQBdBEUARgUdAF0ERQBGBREAhwQLADMEtwCjA8j/vAS3AKMDyP+8BLcAowPI/7wFJwDRBBgAfwaCAFcF2ABABL3//API/+kERABEBU//3gRb/9UE/v/VBCAAOgT+/9UEIAA6BP7/1QQgADoE/v/VBCAAOgT+/9UEIAA6BP7/1QQgADoE/v/VBCAAOgT+/9UEIAA6BP7/1QQgADoE/v/VBCAAOgT+/9UEIAA6BP7/1QQgADoEYgBYA/kARwRiAFgD+QBHBGIAWAP5AEcEYgBYA/kARwRiAFgD+QBHBGIAWAP5AEcEYgBYA/kARwRiAFgD+QBHAiQAYgHoAD4CJAAXAej/+gU7AF4ERABGBTsAXgREAEYFOwBeBEQARgU7AF4ERABGBTsAXgREAEYFOwBeBEQARgU7AF4ERABGBSMAWQROAEYFIwBZBE4ARgUjAFkETgBGBSMAWQROAEYFIwBZBE4ARgUSAGcERABaBRIAZwREAFoFOgBnBK4AWgU6AGcErgBaBToAZwSuAFoFOgBnBK4AWgU6AGcErgBaBKYA7gPI/7wEpgDuA8j/vASmAO4DyP+8BGIARARiABME0wA+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////1QAABH8HiAImACMAAAAHAJ4BkgGo////1QAABMYHnwImACMAAAAHAdQBiQEs//8AYv5EBPgFxQAmACUAAAAHAHcBt//3//8AWAAABPIHIgImACcAAAAHAEIBNwFd//8AWAAABPIHHwImACcAAAAHAHMB4wFZ//8AWAAABPIHRgImACcAAAAHAJoA0gFd//8AWAAABPIHDAImACcAAAAHAGgA0wFc//8AYgAAAkQHIgImACsAAAAHAEL//AFd//8AYgAAA1MHHwImACsAAAAHAHMApwFZ//8AYgAAAx4HRgImACsAAAAHAJr/lwFd//8AYgAAA10HDAImACsAAAAHAGj/mAFc//8AWAAABXoHUQImADAAAAAHAKABTgFg//8AXv/rBTYHNwAmADEAAAAHAEIBjAFy//8AXv/rBTYHNAAmADEAAAAHAHMCOAFu//8AXv/rBTYHWwAmADEAAAAHAJoBJwFy//8AXv/rBTYHZgAmADEAAAAHAKABRgF1//8AXv/rBTYHIQAmADEAAAAHAGgBKAFx//8AZ//rBVcHIgImADcAAAAHAEIBdwFd//8AZ//rBVcHHwImADcAAAAHAHMCIwFZ//8AZ//rBVcHRgImADcAAAAHAJoBEgFd//8AZ//rBVcHDAImADcAAAAHAGgBEwFc//8A7gAABVMHHQImADsAAAAHAHMB6QFX//8AOv/sA/cF4AImAEMAAAAHAEIAswAb//8AOv/sBAsF3QImAEMAAAAHAHMBXwAX//8AOv/sA/cGBAImAEMAAAAGAJpOGwAA//8AOv/sBBwGDwImAEMAAAAGAKBtHgAA//8AOv/sBBQFygImAEMAAAAGAGhPGgAA//8AOv/sA/cGRgImAEMAAAAHAJ4A2gBm//8AOv/sBA4GXgImAEMAAAAHAdQA0f/r//8AR/5EA/sETgImAEUAAAAHAHcBOf/3//8AR//sA+sF4QImAEcAAAAHAEIAkQAc//8AR//sA+sF3gImAEcAAAAHAHMBPQAY//8AR//sA+sGBQImAEcAAAAGAJosHAAA//8AR//sA/IFywImAEcAAAAGAGgtGwAA//8APgAAAd0FywImAIoAAAAGAEKVBgAA//8APgAAAuwFyAImAIoAAAAGAHNAAgAA//8APgAAArcF7wImAIoAAAAHAJr/MAAG//8APgAAAvYFtQIm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//8A7gAABVMHRAImADsAAAAHAJoA2AFb////vP5LBCoF7wImAFsAAAAGAJokBgAA//8A7gAABVMHCgImADsAAAAHAGgA2QFa//8AIAAABH0HHwAmADwAAAAHAHMB0QFZ//8ACAAAA+oFyAImAFwAAAAHAHMBPgAC//8AIAAABFsHDQAmADwAAAAHAJ0BgQFd//8ACAAAA98FtgImAFwAAAAHAJ0A7gAG//8AIAAABH8HRwAmADwAAAAHAJsA1gFe//8ACAAAA+wF8AImAFwAAAAGAJtDBwAA////ngAAB3UHHwImAH8AAAAHAHMDAQFZ//8ABP/rBmAF3gImAIQAAAAHAHMCegAY//8AJv+jBWsHXQImAIEAAAAHAHMCMQGX//8ATP95BDgF3AImAIcAAAAHAHMBUAAW//8ACwAABEkEjQImAakAAAAHAdP/Uv97//8ACwAABEkEjQImAakAAAAHAdP/Uv97//8AvQAABCUEjQImAbgAAAAGAdMo9wAA////1AAAA+gF3wImAaYAAAAHAEIA2QAa////1AAABDEF3AImAaYAAAAHAHMBhQAW////1AAAA/sGAwImAaYAAAAGAJp0GgAA////1AAABEIGDgImAaYAAAAHAKAAkwAd////1AAABDoFyQImAaYAAAAGAGh1GQAA////1AAAA+gGRQImAaYAAAAHAJ4BAABl////1AAABDQGXQImAaYAAAAHAdQA9//q//8ATf5HBEIEnQImAagAAAAHAHcBU//6//8APgAABB0F3wImAaoAAAAHAEIAqgAa//8APgAABB0F3AImAaoAAAAHAHMBVgAW//8APgAABB0GAwImAaoAAAAGAJpFGgAA//8APgAABB0FyQImAaoAAAAGAGhGGQAA//8APgAAAd8F3wImAa4AAAAGAEKXGgAA//8APgAAAu4F3AImAa4AAAAGAHNCFgAA//8APgAAArkGAwImAa4AAAAHAJr/MgAa//8APgAAAvgFyQImAa4AAAAHAGj/MwAZ//8APgAABL4GDgImAbMAAAAHAKAAsQAd//8ATf/vBG8F7wImAbQAAAAHAEIA3QAq//8ATf/vBG8F7AImAbQAAAAHAHMBiQAm//8ATf/vBG8GEwImAbQAAAAGAJp4KgAA//8ATf/vBG8GHgImAbQAAAAHAKAAlwAt//8ATf/vBG8F2QIm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u9uwJyX+9czZ/uMwtSO4mmqrAUx3hEJIy8axsuzWi6F0V393R0/Hw7ir1uurgXIA//8AYgAAAjoFsAIGACsAAP//AGIAAANdBwwCJgArAAAABwBo/5gBXP//AA//6wRSBbACBgAsAAD//wA+AAAFNQWwAAYALQAA//8APgAABTUGxwAmAC0AAAAHAHMBxQEB//8Ao//rBUUHTAImANkAAAAHAJwBPgGc////1QAABH8FsAIGACMAAP//AFgAAATQBbACBgAkAAD//wBXAAAEuQWwAgYArAAA//8AWAAABPIFsAIGACcAAP//AFgAAAV6B0wCJgDXAAAABwCcAY4BnP//AFgAAAazBbACBgAvAAD//wBYAAAFeQWwAgYAKgAA//8AXv/rBTYFxQAGADEAAP//AFgAAAV7BbACBgCxAAD//wBYAAAFGAWwAgYAMgAA//8AYv/rBPgFxQAGACUAAP//AOwAAAULBbACBgA2AAD////8AAAFHQWwAgYAOgAA//8AOv/sA/cETgIGAEMAAP//AEf/7APrBE4CBgBHAAD//wBAAAAERwX1AiYA6wAAAAcAnADIAEX//wBG/+wEHAROAgYAUQAA////4v5gBCYETgIGAFIAAAABAEf/7AP7BE4AGwAAJTI2NzMGBCMiAj8BNgAzMhYHIzYmIyIGDwEGFgHxWqAPrBn+8qbXuyUHJwER4a7BGqwQameNpBoHHFWBeFyazwEy6ir1ASfeqmyG4qQqsdYAAP///7z+SwQqBDoCBgBbAAD////pAAAD8QQ6AgYAWgAA//8AR//sA/IFywImAEcAAAAGAGgtGwAA//8APgAAA5UFyAImAOcAAAAHAHMA5wAC//8AO//sA8kETgIGAFUAAP//AEQAAAIxBhgCBgBLAAD//wA+AAAC9gW1AiYAigAAAAcAaP8xAAX///8d/ksCOQYYAgYATAAA//8AQAAABGEFxwImAOwAAAAHAHMBTQAB////vP5LBCoF9QImAFsAAAAGAJx/RQAA//8A7AAABuwHIgImADkAAAAHAEICAQFd//8AsgAABfoFywImAFkAAAAHAEIBegAG//8A7AAABuwHHwImADkAAAAHAHMCrQFZ//8AsgAABfoFyAImAFkAAAAHAHMCJgAC//8A7AAABuwHDAImADkAAAAHAGgBnQFc//8AsgAABfoFtQIm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AEMAAAAHAKgEBQAA////1QAABH8HxgImACMAAAAHAKYE5QFT//8AOv/sA/cGhAImAEMAAAAHAKYELQAR////1QAABg4HqAImACMAAAAHAaMA8AEW//8AOv/sBVYGZwImAEMAAAAGAaM41QAA////1QAABLcHpQImACMAAAAHAaIA+gEl//8AOv/sA/8GZAImAEMAAAAGAaJC5AAA////1QAABZ4H2wImACMAAAAHAaEA9QEN//8AOv/sBOYGmgImAEMAAAAGAaE9zAAA////1QAABLYH5QImACMAAAAHAaAA9gET//8AOv/sA/4GpAImAEMAAAAGAaA+0gAA////1f6xBI0HRgImACMAAAAnAJoBBgFdAAcAqASsAAD//wA6/rED9wYEAiYAQwAAACYAmk4bAAcAqAQFAAAAAP///9UAAASqB90CJgAjAAAABwGfASkBVP//ADr/7AP3BpsCJgBDAAAABgGfcRIAAP///9UAAATOB+ACJgAjAAAABwGkAS8BZ///ADr/7AQWBp4CJgBDAAAABgGkdyUAAP///9UAAASVCEsCJgAjAAAABwGeASkBSf//ADr/7AP3BwkCJgBDAAAABgGecQcAAP///9UAAATMCB8CJgAjAAAABwGdASsBUf//ADr/7AQUBt0CJgBDAAAABgGdcw8AAP///9X+sQSwB0wCJgAjAAAAJwCcAWEBnAAHAKgErAAA//8AOv6xA/gGCgImAEMAAAAnAJwAqQBaAAcAqAQFAAD//wBY/rsE8gWwAiYAJwAAAAcAqAR3AAr//wBH/rED6wROAiYARwAAAAcAqARRAAD//wBYAAAE8gfGAiYAJwAAAAcApgSxAVP//wBH/+wD6waFAiYARwAAAAcApgQLABL//wBYAAAE8gdRAiYAJwAAAAcAoADxAWD//wBH/+wD+gYQAiYARwAAAAYAoEsfAAD//wBYAAAF2geoAiYAJwAAAAcBowC8ARb//wBH/+wFNAZoAiYARwAAAAYBoxbWAAD//wBYAAAE8gelAiYAJwAAAAcBogDGASX//wBH/+wD6wZlAiYARwAAAAYBoiDlAAD//wBYAAAFagfbAiYAJwAAAAcBoQDBAQ3//wBH/+wExAabAiYARwAAAAYBoRvNAAD//wBYAAAE8gflAiYAJwAAAAcBoADCARP//wBH/+wD6walAiYARwAAAAYBoBzTAAD//wBY/rsE8gdGAiYAJwAAACcAmgDSAV0ABwCoBHcACv//AEf+sQPrBgUCJgBHAAAAJgCaLBwABwCoBFEAAAAA//8AYgAAAwoHxgImACsAAAAHAKYDdQFT//8APgAAAqMGcAImAIoAAAAHAKYDDv/9//8AF/65AjoFsAImACsAAAAHAKgDOwAI////+v67AjEGGAImAEsAAAAHAKgDHgAK//8AXv6pBTYFxQAmADEAAAAHAKgEw//4//8ARv6oBBwETgImAFEAAAAHAKgEV//3//8AXv/rBTYH2wAmADEAAAAHAKYFBgFo//8ARv/sBBwGhAImAFEAAAAHAKYEIQAR//8AXv/rBi8HvQAmADEAAAAHAaMBEQEr//8ARv/sBUoGZwImAFEAAAAGAaMs1QAA//8AXv/rBTYHugAmADEAAAAHAaIBGwE6//8ARv/sBBwGZAImAFEAAAAGAaI25AAA//8AXv/rBb8H8AAmADEAAAAHAaEBFgEi//8ARv/sBNoGmgImAFEAAAAGAaExzAAA//8AXv/rBTYH+gAmADEAAAAHAaABFwEo//8ARv/sBBwGpAImAFEAAAAGAaAy0gAA//8AXv6pBTYHWwAmADEAAAAnAJoBJwFyAAcAqATD//j//wBG/qgEHAYEAiYAUQAAACYAmkIbAAcAqARX//cAAP//AFn/6wYlBw8CJgCUAAAABwBzAiQBSf//AEb/7AUJBd0CJgCVAAAABwBzAXgAF///AFn/6wYlBxICJgCUAAAABwBCAXgBTf//AEb/7AUJBeACJgCVAAAABwBCAMwAG///AFn/6wYlB7YCJgCUAAAABwCmBPIBQ///AEb/7AUJBoQCJgCVAAAABwCmBEYAEf//AFn/6wYlB0ECJgCUAAAABwCgATIBUP//AEb/7AUJBg8CJgCVAAAABwCgAIYAHv//AFn+sQYlBjYCJgCUAAAABwCoBLEAAP//AEb+qAUJBLACJgCVAAAABwCoBEj/9///AGf+qgVXBbACJgA3AAAABwCoBLL/+f//AFr+sQQ7BDoCJgBXAAAABwCoBAsAAP//AGf/6wVXB8YCJgA3AAAABwCmBPEBU///AFr/7AQ7BnACJgBXAAAABwCmBED//f//AGf/6walBx8CJgCWAAAABwBzAiIBWf//AFr/7AVXBcgCJgCXAAAABwBzAXIAAv//AGf/6walByICJgCWAAAABwBCAXYBXf//AFr/7AVXBcsCJgCXAAAABwBCAMYABv//AGf/6walB8YCJgCWAAAABwCmBPABU///AFr/7AVXBnACJgCXAAAABwCmBED//f//AGf/6walB1ECJgCWAAAABwCgATABYP//AFr/7AVXBfoCJgCXAAAABwCgAIAACf//AGf+qQalBg0CJgCWAAAABwCoBLH/+P//AFr+sQVXBJECJgCXAAAABwCoBAsAAP//AO7+uwVTBbACJgA7AAAABwCoBH0ACv///7z+FAQqBDoCJgBbAAAABwCoBKj/Y///AO4AAAVTB8QCJgA7AAAABwCmBLcBUf///7z+SwQqBnACJgBbAAAABwCmBAP//f//AO4AAAVTB08CJgA7AAAABwCgAPcBXv///7z+SwQqBfoCJgBbAAAABgCgQwkAAAACAET/6wUmBhgAGgAoAAABIwMjNycOASMiAj8BGgEzMhYXEyM3MzczBzMBBhYzMjY3Ey4BIyIGBwUItPedCQM8kFiwri8EOO7BWIcrN+oe6SS1JLX8AyRhiUx1M2Uba1R8nyYE0vsuaAI/QAE06hUBHAEUSEUBEZWxsfyis9FTTwH6RE/ZvQD//wAT/u4FJgYYACYARgAAACcB0wH8AkYABgBBfYMAAP//AD7+mQU1BbAAJgAtAAAABwGcA/QAAP//AED+mQRhBDoCJgDsAAAABwGcAxMAAP//AFj+mQV5BbACJgAqAAAABwGcBBwAAP//AED+mQRGBDoCJgDvAAAABwGcAzQAAP//AOz+mQULBbACJgA2AAAABwGcAggAAP//AJD+mQP3BDoCJgDxAAAABwGcAZgAAP////z+mQUdBbACJgA6AAAABwGcA5YAAP///+n+mQPxBDoCJgBaAAAABwGcAq4AAP//ANH+mQVIBbACJgDcAAAABwGcA+sAAP//AH/+mQQGBDsCJgD0AAAABwGcAvMAAP//ANH+mQVIBbACJgDcAAAABwGcAt8AAP//AH/+mQQGBDsCJgD0AAAABwGcAeYAAP//AFf+mQS5BbACJgCsAAAABwGcANMAAP//AD7+mQOVBDoCJgDnAAAABwGcAJsAAP///8r+mQddBbACJgDVAAAABwGcBeEAAP///8P+mQYBBDoCJgDpAAAABwGcBKoAAP//AK7+VAXu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ACoAKwAsAC0ALgAvADAAMQAyADMANAA1ADYANwA4ADkAOgA7ADwAPQA+AD8AQABBAEIAQwBEAEUARgBHAEgASQBKAEsATABNAE4ATwBQAFEAUgBTAFQAVQBWAFcAWABZAFoAWwBcAF0AXgBfAGAAYQCjAIQAhQC9AJYA6ACGAI4AiwCdAKkApACKAQMAgwCTAPIA8wCNAJcAiAEEAN4A8QCeAKoA9QD0APYAogCQAPAAkQDtAIkAoADqALgAoQDuAQUA1wEGAOIA4wEHAQgAsACxAQkApgEKAQsBDAENAQ4BDwDYAOEA2wDcAN0A4ADZAN8BEAERARIBEwEUARUBFgEXARgBGQEaARsBHAEdAR4BHwEgASEBIgCfASMBJAElASYBJwEoASkBKgErASwBLQCbAS4BLwEwATEBMgEzATQBNQE2ATcBOAE5AToBOwE8AT0BPgE/AUABQQFCAUMBRAFFAUYBRwFIAUkBSgFLAUwBTQFOAU8BUAFRAVIBUwFUAVUBVgFXAVgBWQFaAVsBXAFdAV4BXwFgAWEBYgFjAWQBZQFmAWcBaAFpAWoBawFsAW0BbgFvAXABcQFyAXMBdAF1AXYBdwF4AXkBegF7AXwBfQF+AX8BgAGBAYIBgwGEAYUBhgGHAYgBiQGKAYsBjAGNAY4BjwGQAZEBkgGTAZQBlQGWAZcBmAGZAZoBmwGcAZ0BngGfAaABoQGiAaMBpAGlAaYBpwGoAakBqgGrAawBrQGuAa8BsAGxAbIBswG0AbUBtgG3AbgBuQG6AbsBvAG9Ab4BvwHAAcEBwgHDAcQBxQHGAccByAHJAcoBywHMAc0AsgCzAc4AtgC3AMQBzwC0ALUAxQCCAMIAhwHQAKsAxgC+AL8AvAHRAdIB0wHUAdUB1gHXAdgAjAHZAdoB2wHcAd0AmACaAJkA7wClAJIAnACnAI8AlACVALkB3gHfAeAAwAHhAeIB4wHkAeUB5gHnAegB6QHqAesB7AHtAe4B7wHwAfEB8gHzAfQB9QH2AfcB+AH5AfoB+wH8Af0B/gH/AgACAQICAgMCBAIFAgYCBwIIAgkCCgILAgwCDQIOAg8CEAIRAhICEwIUAhUCFgIXAhgCGQIaAhsCHAIdAh4CHwIgAiECIgIjAiQCJQImAicCKAIpAioCKwIsAi0CLgIvAjACMQIyAjMCNAI1AjYCNwCsAjgCOQDpAjoCOwI8AK0AyQDHAK4AYgBjAj0AZADLAGUAyADKAM8AzADNAM4AZgDTANAA0QCvAGcA1gDUANUAaADrAGoAaQBrAG0AbABuAj4AbwBxAHAAcgBzAHUAdAB2AHcAeAB6AHkAewB9AHwAfwB+AIAAgQDsALoCPwJAAkECQgJDAkQA/QD+AkUCRgJHAkgA/wEAAkkCSgJLAkwCTQJOAk8CUAJRAlICUwJUAlUCVgD4APkCVwJYAlkCWgJbAlwCXQJeAl8CYAJhAmICYwJkAmUCZgJnAmgCaQJqAmsCbAJtAm4CbwJwAnECcgJzAnQCdQJ2AncCeAJ5AnoCewJ8An0CfgJ/AoACgQKCAoMChAKFAoYChwKIAokCigD7APwCiwKMAOQA5QKNAo4CjwKQApECkgKTApQClQKWApcCmAKZApoCmwKcAp0CngKfAqACoQKiALsCowKkAqUCpgDmAOcCpwKoAqkCqgKrAqwCrQKuAq8CsAKxArICswK0ArUCtgK3ArgCuQK6ArsCvAK9Ar4CvwLAAsECwgLDAsQCxQLGAscCyALJAsoCywLMAs0CzgLPAtAC0QLSAtMC1ALVAtYC1wLYAtkC2gLbAtwC3QLeAt8C4ALhAuIC4wLkAuUC5gLnAugC6QLqAusC7ALtAu4C7wLwAvEC8gLzAvQC9QL2AvcC+AL5AvoC+wL8Av0C/gL/AwADAQMCAwMDBAMFAwYDBwMIAwkDCgMLAwwDDQMOAw8DEAMRAxIDEwMUAxUDFgMXAxgDGQMaAxsDHAMdAx4DHwMgAyEDIgMjAyQDJQMmAycDKAMpAyoDKwMsAy0DLgMvAzADMQMyAzMDNAM1AzYDNwM4AzkDOgM7AzwDPQM+Az8DQANBA0IDQwNEA0UDRgNHA0gDSQNKA0sDTANNA04DTwNQA1EDUgNTA1QDVQNWA1cDWANZA1oDWwNcA10DXgNfA2ADYQNiA2MDZANlA2YDZwNoA2kDagNrA2wDbQNuA28DcANxA3IDcwN0A3UDdgN3A3gDeQN6A3sDfAN9A34DfwOAA4EDggODA4QDhQOGA4cDiAOJA4oDiwOMA40DjgOPA5ADkQOSA5MDlAOVA5YDlwOYA5kDmgObA5wDnQOeA58DoAOhA6IDowOkA6UDpgOnA6gDqQOqA6sDrAOtA64DrwOwA7EDsgOzA7QDtQO2A7cDuAO5A7oDuwO8A70DvgO/A8ADwQPCA8MDxAPFA8YDxwPIA8kDygPLA8wDzQPOA88D0APRA9ID0wPUA9UD1gPXA9gD2QPaA9sD3APdA94D3wPgA+ED4gPjA+QD5QPmA+cD6APpA+oD6wPsA+0D7gPvA/AD8QPyA/MD9AP1A/YD9wP4A/kD+gP7A/wD/QP+A/8EAAQBBAIEAwQEBAUEBgQHBAgECQQKBAsEDAQNBA4EDwQQBBEEEgQTBBQEFQQWBBcEGAQZBBoEGwQcBB0EHgQfBCAEIQD3BCIEIwQkAAQETlVMTAZtYWNyb24OcGVyaW9kY2VudGVyZWQESGJhcgxrZ3JlZW5sYW5kaWMDRW5nA2VuZwVsb25ncwVPaG9ybgVvaG9ybgVVaG9ybgV1aG9ybgd1bmkwMjM3BXNjaHdhB3VuaTAyRjMJZ3JhdmVjb21iCWFjdXRlY29tYgl0aWxkZWNvbWIEaG9vawd1bmkwMzBGCGRvdGJlbG93BXRvbm9zDWRpZXJlc2lzdG9ub3MJYW5vdGVsZWlhBUdhbW1hBURlbHRhBVRoZXRhBkxhbWJkYQJYaQJQaQVTaWdtYQNQaGkDUHNpBWFscGhhBGJldGEFZ2FtbWEFZGVsdGEHZXBzaWxvbgR6ZXRhA2V0YQV0aGV0YQRpb3RhBmxhbWJkYQJ4aQNyaG8Gc2lnbWExBXNpZ21hA3RhdQd1cHNpbG9uA3BoaQNwc2kFb21lZ2EHdW5pMDNEMQd1bmkwM0QyB3VuaTAzRDYHdW5pMDQwMgd1bmkwNDA0B3VuaTA0MDkHdW5pMDQwQQd1bmkwNDBCB3VuaTA0MEYHdW5pMDQxMQd1bmkwNDE0B3VuaTA0MTYHdW5pMDQxNwd1bmkwNDE4B3VuaTA0MUIHdW5pMDQyMwd1bmkwNDI0B3VuaTA0MjYHdW5pMDQyNwd1bmkwNDI4B3VuaTA0MjkHdW5pMDQyQQd1bmkwNDJCB3VuaTA0MkMHdW5pMDQyRAd1bmkwNDJFB3VuaTA0MkYHdW5pMDQzMQd1bmkwNDMyB3VuaTA0MzMHdW5pMDQzNAd1bmkwNDM2B3VuaTA0MzcHdW5pMDQzOAd1bmkwNDNBB3VuaTA0M0IHdW5pMDQzQwd1bmkwNDNEB3VuaTA0M0YHdW5pMDQ0Mgd1bmkwNDQ0B3VuaTA0NDYHdW5pMDQ0Nwd1bmkwNDQ4B3VuaTA0NDkHdW5pMDQ0QQd1bmkwNDRCB3VuaTA0NEMHdW5pMDQ0RAd1bmkwNDRFB3VuaTA0NEYHdW5pMDQ1Mgd1bmkwNDU0B3VuaTA0NTkHdW5pMDQ1QQd1bmkwNDVCB3VuaTA0NUYHdW5pMDQ2MAd1bmkwNDYxB3VuaTA0NjMHdW5pMDQ2NAd1bmkwNDY1B3VuaTA0NjYHdW5pMDQ2Nwd1bmkwNDY4B3VuaTA0NjkHdW5pMDQ2QQd1bmkwNDZCB3VuaTA0NkMHdW5pMDQ2RAd1bmkwNDZFB3VuaTA0NkYHdW5pMDQ3Mgd1bmkwNDczB3VuaTA0NzQHdW5pMDQ3NQd1bmkwNDdBB3VuaTA0N0IHdW5pMDQ3Qwd1bmkwNDdEB3VuaTA0N0UHdW5pMDQ3Rgd1bmkwNDgwB3VuaTA0ODEHdW5pMDQ4Mgd1bmkwNDgzB3VuaTA0ODQHdW5pMDQ4NQd1bmkwNDg2B3VuaTA0ODgHdW5pMDQ4OQd1bmkwNDhEB3VuaTA0OEUHdW5pMDQ4Rgd1bmkwNDkwB3VuaTA0OTEHdW5pMDQ5NAd1bmkwNDk1B3VuaTA0OUMHdW5pMDQ5RAd1bmkwNEEwB3VuaTA0QTEHdW5pMDRBNAd1bmkwNEE1B3VuaTA0QTYHdW5pMDRBNwd1bmkwNEE4B3VuaTA0QTkHdW5pMDRCNAd1bmkwNEI1B3VuaTA0QjgHdW5pMDRCOQd1bmkwNEJBB3VuaTA0QkMHdW5pMDRCRAd1bmkwNEMzB3VuaTA0QzQHdW5pMDRDNwd1bmkwNEM4B3VuaTA0RDgHdW5pMDRFMAd1bmkwNEUxB3VuaTA0RkEHdW5pMDRGQgd1bmkwNTAwB3VuaTA1MDIHdW5pMDUwMwd1bmkwNTA0B3VuaTA1MDUHdW5pMDUwNgd1bmkwNTA3B3VuaTA1MDgHdW5pMDUwOQd1bmkwNTBBB3VuaTA1MEIHdW5pMDUwQwd1bmkwNTBEB3VuaTA1MEUHdW5pMDUwRgd1bmkwNTEwB3VuaTIwMDAHdW5pMjAwMQd1bmkyMDAyB3VuaTIwMDMHdW5pMjAwNAd1bmkyMDA1B3VuaTIwMDYHdW5pMjAwNwd1bmkyMDA4B3VuaTIwMDkHdW5pMjAwQQd1bmkyMDBCDXVuZGVyc2NvcmVkYmwNcXVvdGVyZXZlcnNlZAd1bmkyMDI1B3VuaTIwNzQJbnN1cGVyaW9yBGxpcmEGcGVzZXRhBEV1cm8HdW5pMjEwNQd1bmkyMTEzB3VuaTIxMTYJZXN0aW1hdGVkCW9uZWVpZ2h0aAx0aHJlZWVpZ2h0aHMLZml2ZWVpZ2h0aHMMc2V2ZW5laWdodGhzCmNvbG9uLmxudW0JcXVvdGVkYmx4C2NvbW1hYWNjZW50B3VuaUZFRkYHdW5pRkZGQwd1bmlGRkZECWZpdmUuc21jcAhmb3VyLnN1cAl6ZXJvLmxudW0ObGFyZ2VyaWdodGhvb2sMY3lyaWxsaWNob29rEGN5cmlsbGljaG9va2xlZnQLY3lyaWxsaWN0aWMOYnJldmV0aWxkZWNvbWINYnJldmVob29rY29tYg5icmV2ZWFjdXRlY29tYhNjaXJjdW1mbGV4dGlsZGVjb21iEmNpcmN1bWZsZXhob29rY29tYhNjaXJjdW1mbGV4Z3JhdmVjb21iE2NpcmN1bWZsZXhhY3V0ZWNvbWIOYnJldmVncmF2ZWNvbWIRY29tbWFhY2NlbnRyb3RhdGUGQS5zbWNwBkIuc21jcAZDLnNtY3AGRC5zbWNwBkUuc21jcAZGLnNtY3AGRy5zbWNwBkguc21jcAZJLnNtY3AGSi5zbWNwBksuc21jcAZMLnNtY3AGTS5zbWNwBk4uc21jcAZPLnNtY3AGUS5zbWNwBlIuc21jcAZTLnNtY3AGVC5zbWNwBlUuc21jcAZWLnNtY3AGVy5zbWNwBlguc21jcAZZLnNtY3AGWi5zbWNwCXplcm8uc21jcAhvbmUuc21jcAh0d28uc21jcAp0aHJlZS5zbWNwCWZvdXIuc21jcAh0d28ubG51bQhzaXguc21jcApzZXZlbi5zbWNwCmVpZ2h0LnNtY3AJbmluZS5zbWNwB29uZS5zdXAHdHdvLnN1cAl0aHJlZS5zdXAIb25lLmxudW0IZml2ZS5zdXAHc2l4LnN1cAlzZXZlbi5zdXAJZWlnaHQuc3VwCG5pbmUuc3VwCHplcm8uc3VwCGNyb3NzYmFyCXJpbmdhY3V0ZQlkYXNpYW94aWEKdGhyZWUubG51bQlmb3VyLmxudW0JZml2ZS5sbnVtCHNpeC5sbnVtBWcuYWx0CnNldmVuLmxudW0HY2hpLmFsdAplaWdodC5sbnVtCWFscGhhLmFsdAlkZWx0YS5hbHQERC5jbgRhLmNuBVIuYWx0BUsuYWx0BWsuYWx0BksuYWx0MgZrLmFsdDIJbmluZS5sbnVtBlAuc21jcA1jeXJpbGxpY2JyZXZlB3VuaTAwQUQGRGNyb2F0BGhiYXIEVGJhcgR0YmFyCkFyaW5nYWN1dGUKYXJpbmdhY3V0ZQdBbWFjcm9uB2FtYWNyb24GQWJyZXZlBmFicmV2ZQdBb2dvbmVrB2FvZ29uZWsLQ2NpcmN1bWZsZXgLY2NpcmN1bWZsZXgHdW5pMDEwQQd1bmkwMTBCBkRjYXJvbgZkY2Fyb24HRW1hY3JvbgdlbWFjcm9uBkVicmV2ZQZlYnJldmUKRWRvdGFjY2VudAplZG90YWNjZW50B0VvZ29uZWsHZW9nb25lawZFY2Fyb24GZWNhcm9uC0djaXJjdW1mbGV4C2djaXJjdW1mbGV4B3VuaTAxMjAHdW5pMDEyMQxHY29tbWFhY2NlbnQMZ2NvbW1hYWNjZW50C0hjaXJjdW1mbGV4C2hjaXJjdW1mbGV4Bkl0aWxkZQZpdGlsZGUHSW1hY3JvbgdpbWFjcm9uBklicmV2ZQZpYnJldmUHSW9nb25lawdpb2dvbmVrCklkb3RhY2NlbnQCSUoCaWoLSmNpcmN1bWZsZXgLamNpcmN1bWZsZXgMS2NvbW1hYWNjZW50DGtjb21tYWFjY2VudAZMYWN1dGUGbGFjdXRlDExjb21tYWFjY2VudAxsY29tbWFhY2NlbnQGTGNhcm9uBmxjYXJvbgRMZG90BGxkb3QGTmFjdXRlBm5hY3V0ZQxOY29tbWFhY2NlbnQMbmNvbW1hYWNjZW50Bk5jYXJvbgZuY2Fyb24LbmFwb3N0cm9waGUHT21hY3JvbgdvbWFjcm9uBk9icmV2ZQZvYnJldmUNT2h1bmdhcnVtbGF1dA1vaHVuZ2FydW1sYXV0BlJhY3V0ZQZyYWN1dGUMUmNvbW1hYWNjZW50DHJjb21tYWFjY2VudAZSY2Fyb24GcmNhcm9uBlNhY3V0ZQZzYWN1dGULU2NpcmN1bWZsZXgLc2NpcmN1bWZsZXgHdW5pMDIxOAd1bmkwMjE5B3VuaTAyMUEHdW5pMDIxQgd1bmkwMTYyB3VuaTAxNjMGVGNhcm9uBnRjYXJvbgZVdGlsZGUGdXRpbGRlB1VtYWNyb24HdW1hY3JvbgZVYnJldmUGdWJyZXZlBVVyaW5nBXVyaW5nDVVodW5nYXJ1bWxhdXQNdWh1bmdhcnVtbGF1dAdVb2dvbmVrB3VvZ29uZWsLV2NpcmN1bWZsZXgLd2NpcmN1bWZsZXgLWWNpcmN1bWZsZXgLeWNpcmN1bWZsZXgGWmFjdXRlBnphY3V0ZQpaZG90YWNjZW50Cnpkb3RhY2NlbnQHQUVhY3V0ZQdhZWFjdXRlC09zbGFzaGFjdXRlC29zbGFzaGFjdXRlC0Rjcm9hdC5zbWNwCEV0aC5zbWNwCVRiYXIuc21jcAtBZ3JhdmUuc21jcAtBYWN1dGUuc21jcBBBY2lyY3VtZmxleC5zbWNwC0F0aWxkZS5zbWNwDkFkaWVyZXNpcy5zbWNwCkFyaW5nLnNtY3APQXJpbmdhY3V0ZS5zbWNwDUNjZWRpbGxhLnNtY3ALRWdyYXZlLnNtY3ALRWFjdXRlLnNtY3AQRWNpcmN1bWZsZXguc21jcA5FZGllcmVzaXMuc21jcAtJZ3JhdmUuc21jcAtJYWN1dGUuc21jcBBJY2lyY3VtZmxleC5zbWNwDklkaWVyZXNpcy5zbWNwC050aWxkZS5zbWNwC09ncmF2ZS5zbWNwC09hY3V0ZS5zbWNwEE9jaXJjdW1mbGV4LnNtY3ALT3RpbGRlLnNtY3AOT2RpZXJlc2lzLnNtY3ALVWdyYXZlLnNtY3ALVWFjdXRlLnNtY3AQVWNpcmN1bWZsZXguc21jcA5VZGllcmVzaXMuc21jcAtZYWN1dGUuc21jcAxBbWFjcm9uLnNtY3ALQWJyZXZlLnNtY3AMQW9nb25lay5zbWNwC0NhY3V0ZS5zbWNwEENjaXJjdW1mbGV4LnNtY3AMdW5pMDEwQS5zbWNwC0NjYXJvbi5zbWNwC0RjYXJvbi5zbWNwDEVtYWNyb24uc21jcAtFYnJldmUuc21jcA9FZG90YWNjZW50LnNtY3AMRW9nb25lay5zbWNwC0VjYXJvbi5zbWNwEEdjaXJjdW1mbGV4LnNtY3ALR2JyZXZlLnNtY3AMdW5pMDEyMC5zbWNwEUdjb21tYWFjY2VudC5zbWNwEEhjaXJjdW1mbGV4LnNtY3ALSXRpbGRlLnNtY3AMSW1hY3Jvbi5zbWNwC0licmV2ZS5zbWNwDElvZ29uZWsuc21jcA9JZG90YWNjZW50LnNtY3AQSmNpcmN1bWZsZXguc21jcBFLY29tbWFhY2NlbnQuc21jcAtMYWN1dGUuc21jcBFMY29tbWFhY2NlbnQuc21jcAtMY2Fyb24uc21jcAlMZG90LnNtY3ALTmFjdXRlLnNtY3ARTmNvbW1hYWNjZW50LnNtY3ALTmNhcm9uLnNtY3AMT21hY3Jvbi5zbWNwC09icmV2ZS5zbWNwEk9odW5nYXJ1bWxhdXQuc21jcAtSYWN1dGUuc21jcBFSY29tbWFhY2NlbnQuc21jcAtSY2Fyb24uc21jcAtTYWN1dGUuc21jcBBTY2lyY3VtZmxleC5zbWNwDVNjZWRpbGxhLnNtY3ALU2Nhcm9uLnNtY3ARVGNvbW1hYWNjZW50LnNtY3ALVGNhcm9uLnNtY3ALVXRpbGRlLnNtY3AMVW1hY3Jvbi5zbWNwC1VicmV2ZS5zbWNwClVyaW5nLnNtY3ASVWh1bmdhcnVtbGF1dC5zbWNwDFVvZ29uZWsuc21jcBBXY2lyY3VtZmxleC5zbWNwEFljaXJjdW1mbGV4LnNtY3AOWWRpZXJlc2lzLnNtY3ALWmFjdXRlLnNtY3APWmRvdGFjY2VudC5zbWNwC1pjYXJvbi5zbWNwD2dlcm1hbmRibHMuc21jcApBbHBoYXRvbm9zDEVwc2lsb250b25vcwhFdGF0b25vcwlJb3RhdG9ub3MMT21pY3JvbnRvbm9zDFVwc2lsb250b25vcwpPbWVnYXRvbm9zEWlvdGFkaWVyZXNpc3Rvbm9zBUFscGhhBEJldGEHRXBzaWxvbgRaZXRhA0V0YQRJb3RhBUthcHBhAk11Ak51B09taWNyb24DUmhvA1RhdQdVcHNpbG9uA0NoaQxJb3RhZGllcmVzaXMPVXBzaWxvbmRpZXJlc2lzCmFscGhhdG9ub3MMZXBzaWxvbnRvbm9zCGV0YXRvbm9zCWlvdGF0b25vcxR1cHNpbG9uZGllcmVzaXN0b25vcwVrYXBwYQdvbWljcm9uB3VuaTAzQkMCbnUDY2hpDGlvdGFkaWVyZXNpcw91cHNpbG9uZGllcmVzaXMMb21pY3JvbnRvbm9zDHVwc2lsb250b25vcwpvbWVnYXRvbm9zB3VuaTA0MDEHdW5pMDQwMwd1bmkwNDA1B3VuaTA0MDYHdW5pMDQwNwd1bmkwNDA4B3VuaTA0MUEHdW5pMDQwQwd1bmkwNDBFB3VuaTA0MTAHdW5pMDQxMgd1bmkwNDEzB3VuaTA0MTUHdW5pMDQxOQd1bmkwNDFDB3VuaTA0MUQHdW5pMDQxRQd1bmkwNDFGB3VuaTA0MjAHdW5pMDQyMQd1bmkwNDIyB3VuaTA0MjUHdW5pMDQzMAd1bmkwNDM1B3VuaTA0MzkHdW5pMDQzRQd1bmkwNDQwB3VuaTA0NDEHdW5pMDQ0Mwd1bmkwNDQ1B3VuaTA0NTEHdW5pMDQ1Mwd1bmkwNDU1B3VuaTA0NTYHdW5pMDQ1Nwd1bmkwNDU4B3VuaTA0NUMHdW5pMDQ1RQZXZ3JhdmUGd2dyYXZlBldhY3V0ZQZ3YWN1dGUJV2RpZXJlc2lzCXdkaWVyZXNpcwZZZ3JhdmUGeWdyYXZlBm1pbnV0ZQZzZWNvbmQJZXhjbGFtZGJsB3VuaUZCMDIHdW5pMDFGMAd1bmkwMkJDB3VuaTFFM0UHdW5pMUUzRgd1bmkxRTAwB3VuaTFFMDEHdW5pMUY0RAd1bmlGQjAzB3VuaUZCMDQHdW5pMDQwMAd1bmkwNDBEB3VuaTA0NTAHdW5pMDQ1RAd1bmkwNDcwB3VuaTA0NzEHdW5pMDQ3Ngd1bmkwNDc3B3VuaTA0NzkHdW5pMDQ3OAd1bmkwNDk4B3VuaTA0OTkHdW5pMDRBQQd1bmkwNEFCB3VuaTA0QUUHdW5pMDRBRgd1bmkwNEMwB3VuaTA0QzEHdW5pMDRDMgd1bmkwNENGB3VuaTA0RDAHdW5pMDREMQd1bmkwNEQyB3VuaTA0RDMHdW5pMDRENAd1bmkwNEQ1B3VuaTA0RDYHdW5pMDRENwd1bmkwNERBB3VuaTA0RDkHdW5pMDREQgd1bmkwNERDB3VuaTA0REQHdW5pMDRERQd1bmkwNERGB3VuaTA0RTIHdW5pMDRFMwd1bmkwNEU0B3VuaTA0RTUHdW5pMDRFNgd1bmkwNEU3B3VuaTA0RTgHdW5pMDRFOQd1bmkwNEVBB3VuaTA0RUIHdW5pMDRFQwd1bmkwNEVEB3VuaTA0RUUHdW5pMDRFRgd1bmkwNEYwB3VuaTA0RjEHdW5pMDRGMgd1bmkwNEYzB3VuaTA0RjQHdW5pMDRGNQd1bmkwNEY4B3VuaTA0RjkHdW5pMDRGQwd1bmkwNEZEB3VuaTA1MDEHdW5pMDUxMgd1bmkwNTEzB3VuaTFFQTAHdW5pMUVBMQd1bmkxRUEyB3VuaTFFQTMHdW5pMUVBNAd1bmkxRUE1B3VuaTFFQTYHdW5pMUVBNwd1bmkxRUE4B3VuaTFFQTkHdW5pMUVBQQd1bmkxRUFCB3VuaTFFQUMHdW5pMUVBRAd1bmkxRUFFB3VuaTFFQUYHdW5pMUVCMAd1bmkxRUIxB3VuaTFFQjIHdW5pMUVCMwd1bmkxRUI0B3VuaTFFQjUHdW5pMUVCNgd1bmkxRUI3B3VuaTFFQjgHdW5pMUVCOQd1bmkxRUJBB3VuaTFFQkIHdW5pMUVCQwd1bmkxRUJEB3VuaTFFQkUHdW5pMUVCRgd1bmkxRUMwB3VuaTFFQzEHdW5pMUVDMgd1bmkxRUMzB3VuaTFFQzQHdW5pMUVDNQd1bmkxRUM2B3VuaTFFQzcHdW5pMUVDOAd1bmkxRUM5B3VuaTFFQ0EHdW5pMUVDQgd1bmkxRUNDB3VuaTFFQ0QHdW5pMUVDRQd1bmkxRUNGB3VuaTFFRDAHdW5pMUVEMQd1bmkxRUQyB3VuaTFFRDMHdW5pMUVENAd1bmkxRUQ1B3VuaTFFRDYHdW5pMUVENwd1bmkxRUQ4B3VuaTFFRDkHdW5pMUVEQQd1bmkxRURCB3VuaTFFREMHdW5pMUVERAd1bmkxRURFB3VuaTFFREYHdW5pMUVFMAd1bmkxRUUxB3VuaTFFRTIHdW5pMUVFMwd1bmkxRUU0B3VuaTFFRTUHdW5pMUVFNgd1bmkxRUU3B3VuaTFFRTgHdW5pMUVFOQd1bmkxRUVBB3VuaTFFRUIHdW5pMUVFQwd1bmkxRUVEB3VuaTFFRUUHdW5pMUVFRgd1bmkxRUYwB3VuaTFFRjEHdW5pMUVGNAd1bmkxRUY1B3VuaTFFRjYHdW5pMUVGNwd1bmkxRUY4B3VuaTFFRjkGZGNyb2F0B3VuaTIwQUIHdW5pMDQ5QQd1bmkwNDlCB3VuaTA0QTIHdW5pMDRBMwd1bmkwNEFDB3VuaTA0QUQHdW5pMDRCMgd1bmkwNEIzB3VuaTA0QjYHdW5pMDRCNwd1bmkwNENCB3VuaTA0Q0MHdW5pMDRGNgd1bmkwNEY3B3VuaTA0OTYHdW5pMDQ5Nwd1bmkwNEJFB3VuaTA0QkYHdW5pMDRC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/+AA6AATATj/4QE5/+ABPP/hAUH/6QFJ/98BS//eAVP/3wFV//IAGACz/9QAvf/tAL8AEQDF/+AAx//nAMj/5QDJ/+4A1AASAOX/6QDx/9cBL//XATn/0wE7/9YBPP/FAUH/5wFJAA0BSwAMAVT/1gFV//IBqf/pAa3/5wG1/+cBtv/pAd//8AAFABn/8gDh//EBSf/yAUv/8gFT//IACADUABUA6AAVATj/5AE5/+UBO//kAUn/4wFL/+IBU//kAAgA1AAVAOgAFQE4/+QBOf/lATv/5AFJ/+MBS//iAVP/5AASANT/rgDhABIA5v/gAOj/rQDq/9YA+P/fAPz/0gEC/+ABF//OASf/3QEp/+IBLf/gATP/4AE5/+kBPP/aAUb/vQFQ/98BUwARAAgA1AAVAOgAFQE4/+QBOf/lATv/5AFJ/+MBS//iAVP/5AAIANQAFQDoABUBOP/kATn/5QE7/+QBSf/jAUv/4gFT/+QADADUABMA4f/mAOL/9ADoABIA8f/nAS//5wE4/+UBOf/oAUn/5gFL/+YBU//mAVT/5wAJAOH/wwDx/88BL//OATj/5wE7/98BSf/RAUv/7AFT/6ABVP/RAAkA4f/DAPH/zwEv/84BOP/nATv/3wFJ/9EBS//sAVP/oAFU/9EAAgDU/+IBU//kAAIA1P/hAOj/5AAGAOj/7gDx/+4BBP/0ARv/8QEv/+8BVP/vAAQA8f/0AQT/9QEv//UBVP/1AAIA6P/JARf/7gAGAOgAFADx/+0A9//iAS//7QE5/+0BVP/tAAEBF//xAAUBF//rAan/6wGt/+kBtf/rAbb/6wATAEgADQDC/6sAw//AAMf/1QDo/6oBF//iARsADAFKAAsBTAALAaf/vwGp/+4Brf/sAbX/7QG2/+wBuP/1AbkADgG7AA0BvgANAd//sAAGAMX/6gDo/+4A8f+wAS//7AFU/+wB3P/oAAYA6AAUAPH/8AD8AAwBL//wATn/5gFU//AABQDoADoA8f/jAS//4gE5/+MBVP/jAAgA8f+6AQT/zwEb/9sBL/9QATn/nQFK//ABTP/yAVT/TAAIAPH/ugEE/88BG//bAS//UAE5/50BSv/wAUz/8gFU/0wABgDF/+oA6P/uAPH/sAEv/+wBVP/sAdz/6AABAOj/7wAIAPH/ugEE/88BG//bAS//UAE5/50BSv/w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/8oBPP/dAUH/8gFJ/3UBS//KAVP/TwFU/4wBrf/1AbX/9QG5/8cBuv/xAbv/zQG8/90Bvv/EABwAIf/DAFb/7wBZ/98Alv/uALP/5QC0/9EAvwARAMX/yADUABMA4f/FAPH/ygEv/58BOP9RATn/ewE7/8oBPP/dAUH/8gFJ/3UBS//KAVP/TwFU/4wBrf/1AbX/9QG5/8cBuv/xAbv/zQG8/90Bvv/EABwAIf/DAFb/7wBZ/98Alv/uALP/5QC0/9EAvwARAMX/yADUABMA4f/FAPH/ygEv/58BOP9RATn/ewE7/8oBPP/dAUH/8gFJ/3UBS//KAVP/TwFU/4wBrf/1AbX/9QG5/8cBuv/xAbv/zQG8/90Bvv/EABwAIf/DAFb/7wBZ/98Alv/uALP/5QC0/9EAvwARAMX/yADUABMA4f/FAPH/ygEv/58BOP9RATn/ewE7/8oBPP/dAUH/8gFJ/3UBS//KAVP/TwFU/4wBrf/1AbX/9QG5/8cBuv/xAbv/zQG8/90Bvv/EAAQAC//mAD//9ABf/+8BPP/tAAUASP/uAFn/6gG7//ABvP/tAb7/8AAFAEj/7gBZ/+oBu//wAbz/7QG+//AABQBI/+4AWf/qAbv/8AG8/+0Bvv/wAAUASP/uAFn/6gG7//ABvP/tAb7/8AAIANQAFQDoABUBOP/kATn/5QE7/+QBSf/jAUv/4gFT/+QACADUABUA6AAVATj/5AE5/+UBO//kAUn/4wFL/+IBU//kAAgA1AAVAOgAFQE4/+QBOf/lATv/5AFJ/+MBS//iAVP/5AAIANQAFQDoABUBOP/kATn/5QE7/+QBSf/jAUv/4gFT/+QACADUABUA6AAVATj/5AE5/+UBO//kAUn/4wFL/+IBU//kAAkAf//fALD/8wCy//AAv//qANT/3wDh/+ABU//gAaf/7QG9//UACQB//98AsP/zALL/8AC//+oA1P/fAOH/4AFT/+ABp//tAb3/9QAJAH//3wCw//MAsv/wAL//6gDU/98A4f/gAVP/4AGn/+0Bvf/1AAkAf//fALD/8wCy//AAv//qANT/3wDh/+ABU//gAaf/7QG9//UACQB//98AsP/zALL/8AC//+oA1P/fAOH/4AFT/+ABp//tAb3/9QABAaf/6wABAaf/6wABAaf/6wABAaf/6wAkAAj/4gALABQADP/PAD8AEgBI/+oAVP/YAFb/6gBfABMAa/+uAHr/zQB//6AAhP/BAIf/wACz/9AAt//qALr/xgC7AA0Avf/pAL7/1gDB/+gAwv+6AMX/6QDH/8sAyP/aAMn/xwFu/9MBp/+rAan/zQGt/8sBtf/LAbb/ywG5//MBvP/zAb3/7wHc/+gB3//uAAcA8f/wAQT/8QEb//MBL//xAUr/8wFM/+kBVP/TAAcA8f/wAQT/8QEb//MBL//xAUr/8wFM/+kBVP/TAAcA8f/wAQT/8QEb//MBL//xAUr/8wFM/+kBVP/TAAcA8f/wAQT/8QEb//MBL//xAUr/8wFM/+kBVP/TAAcA8f/wAQT/8QEb//MBL//xAUr/8wFM/+kBVP/TAAcA8f/wAQT/8QEb//MBL//xAUr/8wFM/+kBVP/TAAcA8f/wAQT/8QEb//MBL//xAUr/8wFM/+kBVP/TAAEA8f/1AAEA8f/1AAEA8f/1AAEA8f/1AAEA8f/AAAkAxf/qAOj/uADx/+oBBP/wARv/8QEv/+sBSv/1AVT/7AHc/+oACQDF/+oA6P+4APH/6gEE//ABG//xAS//6wFK//UBVP/sAdz/6gAJAMX/6gDo/7gA8f/qAQT/8AEb//EBL//rAUr/9QFU/+wB3P/qAAkAxf/qAOj/uADx/+oBBP/wARv/8QEv/+sBSv/1AVT/7AHc/+oACQDF/+oA6P+4APH/6gEE//ABG//xAS//6wFK//UBVP/sAdz/6gAHAEgADQDBAAsAwv/qAMUADADo/8gBF//xAd//9QAHAEgADQDBAAsAwv/qAMUADADo/8gBF//xAd//9QAcACH/wwBW/+8AWf/fAJb/7gCz/+UAtP/RAL8AEQDF/8gA1AATAOH/xQDx/8oBL/+fATj/UQE5/3sBO//KATz/3QFB//IBSf91AUv/ygFT/08BVP+MAa3/9QG1//UBuf/HAbr/8QG7/80BvP/dAb7/xAAHAPH/8AEE//EBG//zAS//8QFK//MBTP/pAVT/0wAcACH/wwBW/+8AWf/fAJb/7gCz/+UAtP/RAL8AEQDF/8gA1AATAOH/xQDx/8oBL/+fATj/UQE5/3sBO//KATz/3QFB//IBSf91AUv/ygFT/08BVP+MAa3/9QG1//UBuf/HAbr/8QG7/80BvP/dAb7/xAAHAPH/8AEE//EBG//zAS//8QFK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AUH/5wFJAA0BSwAMAVT/1gFV//IBqf/pAa3/5wG1/+cBtv/pAd//8AAHAPH/8AEE//EBG//zAS//8QFK//MBTP/pAVT/0wABAPH/9QAJAMX/6gDo/7gA8f/qAQT/8AEb//EBL//rAUr/9QFU/+wB3P/qAAYAxf/qAOj/7gDx/7ABL//sAVT/7AHc/+gABwBIAA0AwQALAML/6gDFAAwA6P/IARf/8QHf//UAAQEX//EAAQDx//UAAgDo/8kBF//uAAcASAANAMEACwDC/+oAxQAMAOj/yAEX//EB3//1AAkACwAPAD8ADABU/+sAXwAOAaf/ywGp/+kBrf/nAbX/5wG2/+cACQALAA8APwAMAFT/6wBfAA4Bp//LAan/6QGt/+cBtf/nAbb/5wAJAAsADwA/AAwAVP/rAF8ADgGn/8sBqf/pAa3/5wG1/+cBtv/nACQACP/iAAsAFAAM/88APwASAEj/6gBU/9gAVv/qAF8AEwBr/64Aev/NAH//oACE/8EAh//AALP/0AC3/+oAuv/GALsADQC9/+kAvv/WAMH/6ADC/7oAxf/pAMf/ywDI/9oAyf/HAW7/0wGn/6sBqf/NAa3/ywG1/8sBtv/LAbn/8wG8//MBvf/vAdz/6AHf/+4ABwBIAA0AwQALAML/6gDFAAwA6P/IARf/8QHf//UAAQBZAAsAAQBZAAsAAQBZAAsACADUABUA6AAVATj/5AE5/+UBO//kAUn/4wFL/+IBU//kAAEA8f/AABwAIf/DAFb/7wBZ/98Alv/uALP/5QC0/9EAvwARAMX/yADUABMA4f/FAPH/ygEv/58BOP9RATn/ewE7/8oBPP/dAUH/8gFJ/3UBS//KAVP/TwFU/4wBrf/1AbX/9QG5/8cBuv/xAbv/zQG8/90Bvv/EAAcA8f/wAQT/8QEb//MBL//xAUr/8wFM/+kBVP/TAAkAf//fALD/8wCy//AAv//qANT/3wDh/+ABU//gAaf/7QG9//UABQBI/+4AWf/qAbv/8AG8/+0Bvv/wAAEA8f/1AAkACwAUAD8AEQBU/+IAXwATAaf/tAGp/9kBrf/ZAbX/2QG2/9kABwBIAA0AwQALAML/6gDFAAwA6P/IARf/8QHf//UABAAL/+YAP//0AF//7wE8/+0AJAAI/+IACwAUAAz/zwA/ABIASP/qAFT/2ABW/+oAXwATAGv/rgB6/80Af/+gAIT/wQCH/8AAs//QALf/6gC6/8YAuwANAL3/6QC+/9YAwf/oAML/ugDF/+kAx//LAMj/2gDJ/8cBbv/TAaf/qwGp/80Brf/LAbX/ywG2/8sBuf/zAbz/8wG9/+8B3P/oAd//7gAHAEgADQDBAAsAwv/qAMUADADo/8gBF//xAd//9QAIANQAFQDoABUBOP/kATn/5QE7/+QBSf/jAUv/4gFT/+QAGACz/9QAvf/tAL8AEQDF/+AAx//nAMj/5QDJ/+4A1AASAOX/6QDx/9cBL//XATn/0wE7/9YBPP/FAUH/5wFJAA0BSwAMAVT/1gFV//IBqf/pAa3/5wG1/+cBtv/pAd//8AABARf/8QAIANQAFQDoABUBOP/kATn/5QE7/+QBSf/jAUv/4gFT/+QAHAAh/8MAVv/vAFn/3wCW/+4As//lALT/0QC/ABEAxf/IANQAEwDh/8UA8f/KAS//nwE4/1EBOf97ATv/ygE8/90BQf/yAUn/dQFL/8oBU/9PAVT/jAGt//UBtf/1Abn/xwG6//EBu//NAbz/3QG+/8QABwDx//ABBP/xARv/8wEv//EBSv/zAUz/6QFU/9MAHAAh/8MAVv/vAFn/3wCW/+4As//lALT/0QC/ABEAxf/IANQAEwDh/8UA8f/KAS//nwE4/1EBOf97ATv/ygE8/90BQf/yAUn/dQFL/8oBU/9PAVT/jAGt//UBtf/1Abn/xwG6//EBu//NAbz/3QG+/8QABwDx//ABBP/xARv/8wEv//EBSv/zAUz/6QFU/9MABQBI/+4AWf/qAbv/8AG8/+0Bvv/wAAEA8f/1AAEA8f/1AAEA8f/1ABgAs//UAL3/7QC/ABEAxf/gAMf/5wDI/+UAyf/uANQAEgDl/+kA8f/XAS//1wE5/9MBO//WATz/xQFB/+cBSQANAUsADAFU/9YBVf/yAan/6QGt/+cBtf/nAbb/6QHf//AAAQEX//EACQB//98AsP/zALL/8AC//+oA1P/fAOH/4AFT/+ABp//tAb3/9QAJAMX/6gDo/7gA8f/qAQT/8AEb//EBL//rAUr/9QFU/+wB3P/qAAkAxf/qAOj/uADx/+oBBP/wARv/8QEv/+sBSv/1AVT/7AHc/+oABgDF/+oA6P/uAPH/sAEv/+wBVP/sAdz/6AASANT/rgDhABIA5v/gAOj/rQDq/9YA+P/fAPz/0gEC/+ABF//OASf/3QEp/+IBLf/gATP/4AE5/+kBPP/aAUb/vQFQ/98BUwARAAcASAANAMEACwDC/+oAxQAMAOj/yAEX//EB3//1ABIA1P+uAOEAEgDm/+AA6P+tAOr/1gD4/98A/P/SAQL/4AEX/84BJ//dASn/4gEt/+ABM//gATn/6QE8/9oBRv+9AVD/3wFTABEABwBIAA0AwQALAML/6gDFAAwA6P/IARf/8QHf//UAEgDU/64A4QASAOb/4ADo/60A6v/WAPj/3wD8/9IBAv/gARf/zgEn/90BKf/iAS3/4AEz/+ABOf/pATz/2gFG/70BUP/fAVMAEQAHAEgADQDBAAsAwv/qAMUADADo/8gBF//xAd//9QAYALP/1AC9/+0AvwARAMX/4ADH/+cAyP/lAMn/7gDUABIA5f/pAPH/1wEv/9cBOf/TATv/1gE8/8UBQf/nAUkADQFLAAwBVP/WAVX/8gGp/+kBrf/nAbX/5wG2/+kB3//wAAEBF//xABwAIf/DAFb/7wBZ/98Alv/uALP/5QC0/9EAvwARAMX/yADUABMA4f/FAPH/ygEv/58BOP9RATn/ewE7/8oBPP/dAUH/8gFJ/3UBS//KAVP/TwFU/4wBrf/1AbX/9QG5/8cBuv/xAbv/zQG8/90Bvv/EAAcA8f/wAQT/8QEb//MBL//xAUr/8wFM/+kBVP/TABwAIf/DAFb/7wBZ/98Alv/uALP/5QC0/9EAvwARAMX/yADUABMA4f/FAPH/ygEv/58BOP9RATn/ewE7/8oBPP/dAUH/8gFJ/3UBS//KAVP/TwFU/4wBrf/1AbX/9QG5/8cBuv/xAbv/zQG8/90Bvv/EAAcA8f/wAQT/8QEb//MBL//xAUr/8wFM/+kBVP/TABwAIf/DAFb/7wBZ/98Alv/uALP/5QC0/9EAvwARAMX/yADUABMA4f/FAPH/ygEv/58BOP9RATn/ewE7/8oBPP/dAUH/8gFJ/3UBS//KAVP/TwFU/4wBrf/1AbX/9QG5/8cBuv/xAbv/zQG8/90Bvv/EAAcA8f/wAQT/8QEb//MBL//xAUr/8wFM/+kBVP/TABwAIf/DAFb/7wBZ/98Alv/uALP/5QC0/9EAvwARAMX/yADUABMA4f/FAPH/ygEv/58BOP9RATn/ewE7/8oBPP/dAUH/8gFJ/3UBS//KAVP/TwFU/4wBrf/1AbX/9QG5/8cBuv/xAbv/zQG8/90Bvv/EAAcA8f/wAQT/8QEb//MBL//xAUr/8wFM/+kBVP/TABwAIf/DAFb/7wBZ/98Alv/uALP/5QC0/9EAvwARAMX/yADUABMA4f/FAPH/ygEv/58BOP9RATn/ewE7/8oBPP/dAUH/8gFJ/3UBS//KAVP/TwFU/4wBrf/1AbX/9QG5/8cBuv/xAbv/zQG8/90Bvv/EAAcA8f/wAQT/8QEb//MBL//xAUr/8wFM/+kBVP/TABwAIf/DAFb/7wBZ/98Alv/uALP/5QC0/9EAvwARAMX/yADUABMA4f/FAPH/ygEv/58BOP9RATn/ewE7/8oBPP/dAUH/8gFJ/3UBS//KAVP/TwFU/4wBrf/1AbX/9QG5/8cBuv/xAbv/zQG8/90Bvv/EAAcA8f/wAQT/8QEb//MBL//xAUr/8wFM/+kBVP/TABwAIf/DAFb/7wBZ/98Alv/uALP/5QC0/9EAvwARAMX/yADUABMA4f/FAPH/ygEv/58BOP9RATn/ewE7/8oBPP/dAUH/8gFJ/3UBS//KAVP/TwFU/4wBrf/1AbX/9QG5/8cBuv/xAbv/zQG8/90Bvv/EAAcA8f/wAQT/8QEb//MBL//xAUr/8wFM/+kBVP/TABwAIf/DAFb/7wBZ/98Alv/uALP/5QC0/9EAvwARAMX/yADUABMA4f/FAPH/ygEv/58BOP9RATn/ewE7/8oBPP/dAUH/8gFJ/3UBS//KAVP/TwFU/4wBrf/1AbX/9QG5/8cBuv/xAbv/zQG8/90Bvv/EAAcA8f/wAQT/8QEb//MBL//xAUr/8wFM/+kBVP/TABwAIf/DAFb/7wBZ/98Alv/uALP/5QC0/9EAvwARAMX/yADUABMA4f/FAPH/ygEv/58BOP9RATn/ewE7/8oBPP/dAUH/8gFJ/3UBS//KAVP/TwFU/4wBrf/1AbX/9QG5/8cBuv/xAbv/zQG8/90Bvv/EAAcA8f/wAQT/8QEb//MBL//xAUr/8wFM/+kBVP/TABwAIf/DAFb/7wBZ/98Alv/uALP/5QC0/9EAvwARAMX/yADUABMA4f/FAPH/ygEv/58BOP9RATn/ewE7/8oBPP/dAUH/8gFJ/3UBS//KAVP/TwFU/4wBrf/1AbX/9QG5/8cBuv/xAbv/zQG8/90Bvv/EAAcA8f/wAQT/8QEb//MBL//xAUr/8wFM/+kBVP/TABwAIf/DAFb/7wBZ/98Alv/uALP/5QC0/9EAvwARAMX/yADUABMA4f/FAPH/ygEv/58BOP9RATn/ewE7/8oBPP/dAUH/8gFJ/3UBS//KAVP/TwFU/4wBrf/1AbX/9QG5/8cBuv/xAbv/zQG8/90Bvv/EAAcA8f/wAQT/8QEb//MBL//xAUr/8wFM/+kBVP/TABwAIf/DAFb/7wBZ/98Alv/uALP/5QC0/9EAvwARAMX/yADUABMA4f/FAPH/ygEv/58BOP9RATn/ewE7/8oBPP/dAUH/8gFJ/3UBS//KAVP/TwFU/4wBrf/1AbX/9QG5/8cBuv/xAbv/zQG8/90Bvv/EAAcA8f/wAQT/8QEb//MBL//xAUr/8wFM/+kBVP/TAAUASP/uAFn/6gG7//ABvP/tAb7/8AABAPH/9QAFAEj/7gBZ/+oBu//wAbz/7QG+//AAAQDx//UABQBI/+4AWf/qAbv/8AG8/+0Bvv/wAAEA8f/1AAUASP/uAFn/6gG7//ABvP/tAb7/8AABAPH/9QAFAEj/7gBZ/+oBu//wAbz/7QG+//AAAQDx//UABQBI/+4AWf/qAbv/8AG8/+0Bvv/wAAEA8f/1AAUASP/uAFn/6gG7//ABvP/tAb7/8AABAPH/9QAFAEj/7gBZ/+oBu//wAbz/7QG+//AAAQDx//UACADUABUA6AAVATj/5AE5/+UBO//kAUn/4wFL/+IBU//kAAgA1AAVAOgAFQE4/+QBOf/lATv/5AFJ/+MBS//iAVP/5AAJAH//3wCw//MAsv/wAL//6gDU/98A4f/gAVP/4AGn/+0Bvf/1AAkAxf/qAOj/uADx/+oBBP/wARv/8QEv/+sBSv/1AVT/7AHc/+oACQB//98AsP/zALL/8AC//+oA1P/fAOH/4AFT/+ABp//tAb3/9QAJAMX/6gDo/7gA8f/qAQT/8AEb//EBL//rAUr/9QFU/+wB3P/qAAkAf//fALD/8wCy//AAv//qANT/3wDh/+ABU//gAaf/7QG9//UACQDF/+oA6P+4APH/6gEE//ABG//xAS//6wFK//UBVP/sAdz/6gAJAH//3wCw//MAsv/wAL//6gDU/98A4f/gAVP/4AGn/+0Bvf/1AAkAxf/qAOj/uADx/+oBBP/wARv/8QEv/+sBSv/1AVT/7AHc/+oACQB//98AsP/zALL/8AC//+oA1P/fAOH/4AFT/+ABp//tAb3/9QAJAMX/6gDo/7gA8f/qAQT/8AEb//EBL//rAUr/9QFU/+wB3P/qAAkAf//fALD/8wCy//AAv//qANT/3wDh/+ABU//gAaf/7QG9//UACQDF/+oA6P+4APH/6gEE//ABG//xAS//6wFK//UBVP/sAdz/6gAJAH//3wCw//MAsv/wAL//6gDU/98A4f/gAVP/4AGn/+0Bvf/1AAkAxf/qAOj/uADx/+oBBP/wARv/8QEv/+sBSv/1AVT/7AHc/+oACQDF/+oA6P+4APH/6gEE//ABG//xAS//6wFK//UBVP/sAdz/6gABAaf/6wABAaf/6wAkAAj/4gALABQADP/PAD8AEgBI/+oAVP/YAFb/6gBfABMAa/+uAHr/zQB//6AAhP/BAIf/wACz/9AAt//qALr/xgC7AA0Avf/pAL7/1gDB/+gAwv+6AMX/6QDH/8sAyP/aAMn/xwFu/9MBp/+rAan/zQGt/8sBtf/LAbb/ywG5//MBvP/zAb3/7wHc/+gB3//uAAcASAANAMEACwDC/+oAxQAMAOj/yAEX//EB3//1ACQACP/iAAsAFAAM/88APwASAEj/6gBU/9gAVv/qAF8AEwBr/64Aev/NAH//oACE/8EAh//AALP/0AC3/+oAuv/GALsADQC9/+kAvv/WAMH/6ADC/7oAxf/pAMf/ywDI/9oAyf/HAW7/0wGn/6sBqf/NAa3/ywG1/8sBtv/LAbn/8wG8//MBvf/vAdz/6AHf/+4ABwBIAA0AwQALAML/6gDFAAwA6P/IARf/8QHf//UAJAAI/+IACwAUAAz/zwA/ABIASP/qAFT/2ABW/+oAXwATAGv/rgB6/80Af/+gAIT/wQCH/8AAs//QALf/6gC6/8YAuwANAL3/6QC+/9YAwf/oAML/ugDF/+kAx//LAMj/2gDJ/8cBbv/TAaf/qwGp/80Brf/LAbX/ywG2/8sBuf/zAbz/8wG9/+8B3P/oAd//7gAHAEgADQDBAAsAwv/qAMUADADo/8gBF//xAd//9QATAFn/wQCz/8UAxf+0AOX/1wDx/7kBBP+yARf/0gEb/8gBL/+gATn/xQFB/+QBSv/MAUz/zAFU/8sBVf/vAan/6AGt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/+oDJP74Ayj/VgMzABQDNf/eAzb/6wM4/+sDOv/rAzv/6AM9/+sDRP/oA0z/6ANV/1YDVv/eA1z/6wNh/+gDYv/rA2f/6wNp/+gDbv9WA2//3gNw/1YDcf/eA3X/6wN3/+sDeP/rA4L/6wOE/+sDhv/rA4r/6AOM/+gDjv/oA5X/6wOY/1YDmf/eA5r/VgOb/94DnP9WA53/3gOe/1YDn//eA6D/VgOh/94Dov9WA6P/3gOk/1YDpf/eA6b/VgOn/94DqP9WA6n/3gOq/1YDq//eA6z/VgOt/94Drv9WA6//3gOx/+sDs//rA7X/6wO3/+sDuf/rA7v/6wO9/+sDv//rA8X/6wPH/+sDyf/rA8v/6wPN/+sDz//rA9H/6wPT/+sD1f/rA9f/6wPZ/+sD2//rA93/6gPf/+oD4f/qA+P/6gPl/+oD5//qA+n/6gPr/+gD7f/oA+//6AP2ABQAHwA2/9UAOP/kADn/7AA7/90Azf/VANH/1QEU/+QBLv/VATb/1QIL/90CgP/VAoL/1QKE/9UCkv/sApT/3QKW/90C/f/dAwz/3QMP/90DM//VA0X/7ANH/+wDSf/sA0v/3QNg/+QDaP/dA+r/3QPs/90D7v/dA/b/1QQT/90AGgA2/7AAOP/tADv/0ADN/7AA0f+wART/7QEu/7ABNv+wAgv/0AKA/7ACgv+wAoT/sAKU/9AClv/QAv3/0AMM/9ADD//QAzP/sANL/9ADYP/tA2j/0APq/9AD7P/QA+7/0AP2/7AEE//QABAALP/uADf/7gIH/+4CCP/uAgn/7gIK/+4CV//uAob/7gKI/+4Civ/uAoz/7gKO/+4CkP/uAyT/7gPc/+4D3v/uAEcABAAQAAkAEABF/+gARv/oAEf/6ABJ/+gAU//oAJH/6ACV/+gAtv/oAMP/6ADE/+gA8v/oAP7/6AEZ/+gBHf/oATX/6AFH/+gBSP/oAVL/6AFlABABZgAQAWgAEAFpABABagAQAhP/6AIU/+gCFf/oAhb/6AIX/+gCL//oAjH/6AIz/+gCNf/oAjf/6AI5/+gCO//oAj3/6AI//+gCQf/oAkP/6AJF/+gCR//oAkn/6AMQ/+gDNv/oAzr/6AM9/+gDTQAQA04AEANSABADXP/oA2L/6ANn/+gDdf/oA3f/6AN4/+gDhP/oA5X/6AOx/+gDs//oA7X/6AO3/+gDuf/oA7v/6AO9/+gDv//oA9P/6APV/+gD1//oA9v/6AA9AEX/7ABG/+wAR//sAEn/7ABT/+wAkf/sAJX/7AC2/+wAw//sAMT/7ADy/+wA/v/sARn/7AEd/+wBNf/sAUf/7AFI/+wBUv/sAhP/7AIU/+wCFf/sAhb/7AIX/+wCL//sAjH/7AIz/+wCNf/sAjf/7AI5/+wCO//sAj3/7AI//+wCQf/sAkP/7AJF/+wCR//sAkn/7AMQ/+wDNv/sAzr/7AM9/+wDXP/sA2L/7ANn/+wDdf/sA3f/7AN4/+wDhP/sA5X/7AOx/+wDs//sA7X/7AO3/+wDuf/sA7v/7AO9/+wDv//sA9P/7APV/+wD1//sA9v/7AAXAFH/7AET/+wCHf/sAh7/7AIf/+wCIP/sAiH/7AJr/+wCbf/sAm//7AMW/+wDHP/sAzj/7AOC/+wDhv/sA8X/7APH/+wDyf/sA8v/7APN/+wDz//sA9H/7APZ/+wABgAO/4QAEP+EAWf/hAFr/4QBb/+EAXD/hAAQACz/7AA3/+wCB//sAgj/7AIJ/+wCCv/sAlf/7AKG/+wCiP/sAor/7AKM/+wCjv/sApD/7AMk/+wD3P/sA97/7AABKSwABAAAACIATgDEAaoCkANqBAQGnghkCTYKLAvyDCQMVgzUDroPMBACEhQSyhQwFOoVcBXOFpAXBhcYF0IYlBrSGvQcChyIHLIc3AAdAAT/8gAJ//IAWP/zAFv/8wC4//MBFf/zAWX/8gFm//IBaP/yAWn/8gFq//ICJv/zAif/8wKV//MDGP/zAzv/8wNE//MDTP/zA03/8gNO//IDUv/yA2H/8wNp//MDiv/zA4z/8wOO//MD6//zA+3/8wPv//MAOQAl//MAKf/zADH/8wAz//MAgf/zAJD/8wCU//MArv/zAM7/8wED//MBEv/zARb/8wEY//MBGv/zARz/8wE0//MBUf/zAfj/8wIC//MCA//zAgT/8wIF//MCBv/zAi7/8wIw//MCMv/zAjT/8wJC//MCRP/zAkb/8wJI//MCav/zAmz/8wJu//MCn//zAvz/8wMJ//MDL//zAzL/8wNX//MDY//zA2b/8wOB//MDg//zA4X/8wPE//MDxv/zA8j/8wPK//MDzP/zA87/8wPQ//MD0v/zA9T/8wPW//MD2P/zA9r/8wA5ACX/5gAp/+YAMf/mADP/5gCB/+YAkP/mAJT/5gCu/+YAzv/mAQP/5gES/+YBFv/mARj/5gEa/+YBHP/mATT/5gFR/+YB+P/mAgL/5gID/+YCBP/mAgX/5gIG/+YCLv/mAjD/5gIy/+YCNP/mAkL/5gJE/+YCRv/mAkj/5gJq/+YCbP/mAm7/5gKf/+YC/P/mAwn/5gMv/+YDMv/mA1f/5gNj/+YDZv/mA4H/5gOD/+YDhf/mA8T/5gPG/+YDyP/mA8r/5gPM/+YDzv/mA9D/5gPS/+YD1P/mA9b/5gPY/+YD2v/mADYAI//kADr/0gA7/9MArf/kAK//5ADV/9IBCP/kAfH/5AHy/+QB8//kAfT/5AH1/+QB9v/kAff/5AIL/9MCKP/kAir/5AIs/+QClP/TApb/0wL4/+QC/f/TAwD/5AMM/9MDDf/SAw//0wMo/+QDNP/SA0v/0wNV/+QDaP/TA2v/0gNu/+QDcP/kA3n/0gOT/9IDmP/kA5r/5AOc/+QDnv/kA6D/5AOi/+QDpP/kA6b/5AOo/+QDqv/kA6z/5AOu/+QD6v/TA+z/0wPu/9MD+P/SBAD/0gQT/9MAJgAO/x4AEP8eACP/zQCt/80Ar//NAQj/zQFn/x4Ba/8eAW//HgFw/x4B8f/NAfL/zQHz/80B9P/NAfX/zQH2/80B9//NAij/zQIq/80CLP/NAvj/zQMA/80DKP/NA1X/zQNu/80DcP/NA5j/zQOa/80DnP/NA57/zQOg/80Dov/NA6T/zQOm/80DqP/NA6r/zQOs/80Drv/NAKYARf/cAEb/3ABH/9wASf/cAE//8wBQ//MAUf/WAFL/8wBT/9wAV//dAFj/4QBb/+EAkf/cAJX/3ACX/90Atv/cALj/4QC8//MAw//cAMT/3ADG/90A5//zAOv/8wDs//MA7v/zAO//8wDw//MA8v/cAPP/8wD1//MA9v/zAPn/8wD7//MA/v/cAQD/8wET/9YBFf/hARn/3AEd/9wBMf/zATX/3AFA//MBRf/zAUf/3AFI/9wBUv/cAhP/3AIU/9wCFf/cAhb/3AIX/9wCHP/zAh3/1gIe/9YCH//WAiD/1gIh/9YCIv/dAiP/3QIk/90CJf/dAib/4QIn/+ECL//cAjH/3AIz/9wCNf/cAjf/3AI5/9wCO//cAj3/3AI//9wCQf/cAkP/3AJF/9wCR//cAkn/3AJk//MCZv/zAmj/8wJp//MCa//WAm3/1gJv/9YCh//dAon/3QKL/90Cjf/dAo//3QKR/90Clf/hAxD/3AMS//MDFP/dAxb/1gMY/+EDG//dAxz/1gMd/90DNv/cAzf/8wM4/9YDOf/zAzr/3AM7/+EDPf/cAz7/8wND//MDRP/hA0z/4QNU//MDXP/cA13/8wNh/+EDYv/cA2f/3ANp/+EDdf/cA3f/3AN4/9wDfv/zA4D/8wOC/9YDhP/cA4b/1gOK/+EDjP/hA47/4QOS//MDlf/cA7H/3AOz/9wDtf/cA7f/3AO5/9wDu//cA73/3AO//9wDxf/WA8f/1gPJ/9YDy//WA83/1gPP/9YD0f/WA9P/3APV/9wD1//cA9n/1gPb/9wD3f/dA9//3QPh/90D4//dA+X/3QPn/90D6f/dA+v/4QPt/+ED7//hA/P/8wP1//MD///zBAz/8wQO//MEEP/zAHEABP/aAAn/2gBF//AARv/wAEf/8ABJ//AAU//wAFf/7wBY/9wAW//cAJH/8ACV//AAl//vALb/8AC4/9wAw//wAMT/8ADG/+8A8v/wAP7/8AEV/9wBGf/wAR3/8AE1//ABR//wAUj/8AFS//ABZf/aAWb/2gFo/9oBaf/aAWr/2gIT//ACFP/wAhX/8AIW//ACF//wAiL/7wIj/+8CJP/vAiX/7wIm/9wCJ//cAi//8AIx//ACM//wAjX/8AI3//ACOf/wAjv/8AI9//ACP//wAkH/8AJD//ACRf/wAkf/8AJJ//ACh//vAon/7wKL/+8Cjf/vAo//7wKR/+8Clf/cAxD/8AMU/+8DGP/cAxv/7wMd/+8DNv/wAzr/8AM7/9wDPf/wA0T/3ANM/9wDTf/aA07/2gNS/9oDXP/wA2H/3ANi//ADZ//wA2n/3AN1//ADd//wA3j/8AOE//ADiv/cA4z/3AOO/9wDlf/wA7H/8AOz//ADtf/wA7f/8AO5//ADu//wA73/8AO///AD0//wA9X/8APX//AD2//wA93/7wPf/+8D4f/vA+P/7wPl/+8D5//vA+n/7wPr/9wD7f/cA+//3AA0AAT/oAAJ/6AAV//xAFj/xQBb/8UAl//xALj/xQDG//EBFf/FAWX/oAFm/6ABaP+gAWn/oAFq/6ACIv/xAiP/8QIk//ECJf/xAib/xQIn/8UCh//xAon/8QKL//ECjf/xAo//8QKR//EClf/FAxT/8QMY/8UDG//xAx3/8QM7/8UDRP/FA0z/xQNN/6ADTv+gA1L/oANh/8UDaf/FA4r/xQOM/8UDjv/FA93/8QPf//ED4f/xA+P/8QPl//ED5//xA+n/8QPr/8UD7f/FA+//xQA9AEX/5wBG/+cAR//nAEn/5wBT/+cAkf/nAJX/5wC2/+cAw//nAMT/5wDy/+cA/v/nARn/5wEd/+cBNf/nAUf/5wFI/+cBUv/nAhP/5wIU/+cCFf/nAhb/5wIX/+cCL//nAjH/5wIz/+cCNf/nAjf/5wI5/+cCO//nAj3/5wI//+cCQf/nAkP/5wJF/+cCR//nAkn/5wMQ/+cDNv/nAzr/5wM9/+cDXP/nA2L/5wNn/+cDdf/nA3f/5wN4/+cDhP/nA5X/5wOx/+cDs//nA7X/5wO3/+cDuf/nA7v/5wO9/+cDv//nA9P/5wPV/+cD1//nA9v/5wBxAAQADAAJAAwARf/oAEb/6ABH/+gASf/oAFH/6gBT/+gAWAALAFsACwCR/+gAlf/oALb/6AC4AAsAw//oAMT/6ADy/+gA/v/oARP/6gEVAAsBGf/oAR3/6AE1/+gBR//oAUj/6AFS/+gBZQAMAWYADAFoAAwBaQAMAWoADAIT/+gCFP/oAhX/6AIW/+gCF//oAh3/6gIe/+oCH//qAiD/6gIh/+oCJgALAicACwIv/+gCMf/oAjP/6AI1/+gCN//oAjn/6AI7/+gCPf/oAj//6AJB/+gCQ//oAkX/6AJH/+gCSf/oAmv/6gJt/+oCb//qApUACwMQ/+gDFv/qAxgACwMc/+oDNv/oAzj/6gM6/+gDOwALAz3/6ANEAAsDTAALA00ADANOAAwDUgAMA1z/6ANhAAsDYv/oA2f/6ANpAAsDdf/oA3f/6AN4/+gDgv/qA4T/6AOG/+oDigALA4wACwOOAAsDlf/oA7H/6AOz/+gDtf/oA7f/6AO5/+gDu//oA73/6AO//+gDxf/qA8f/6gPJ/+oDy//qA83/6gPP/+oD0f/qA9P/6APV/+gD1//oA9n/6gPb/+gD6wALA+0ACwPvAAsADABa/+0AXP/tAOn/7QKY/+0Cmv/tApz/7QM8/+0DbP/tA3r/7QOU/+0D+f/tBAH/7QAMAFr/8gBc//IA6f/yApj/8gKa//ICnP/yAzz/8gNs//IDev/yA5T/8gP5//IEAf/yAB8AWP/0AFr/8gBb//QAXP/zALj/9ADp//IBFf/0Aib/9AIn//QClf/0Apj/8wKa//MCnP/zAxj/9AM7//QDPP/yA0T/9ANM//QDYf/0A2n/9ANs//IDev/yA4r/9AOM//QDjv/0A5T/8gPr//QD7f/0A+//9AP5//IEAf/yAHkABP/KAAn/ygA2/9IAOP/UADr/9AA7/9MAT//RAFD/0QBS/9EAWP/mAFr/7wBb/+YAuP/mALz/0QDN/9IA0f/SANX/9ADZ/+0A3P/hAOf/0QDp/+8A6//RAOz/0QDu/9EA7//RAPD/0QDz/9EA9f/RAPb/0QD5/9EA+//RAQD/0QEU/9QBFf/mAS7/0gEx/9EBNv/SAUD/0QFF/9EBZf/KAWb/ygFo/8oBaf/KAWr/ygIL/9MCHP/RAib/5gIn/+YCZP/RAmb/0QJo/9ECaf/RAoD/0gKC/9IChP/SApT/0wKV/+YClv/TAv3/0wMM/9MDDf/0Aw//0wMS/9EDGP/mAyf/7QMz/9IDNP/0Azf/0QM5/9EDO//mAzz/7wM+/9EDQ//RA0T/5gNL/9MDTP/mA03/ygNO/8oDUv/KA1T/0QNd/9EDYP/UA2H/5gNo/9MDaf/mA2v/9ANs/+8Def/0A3r/7wN+/9EDgP/RA4n/7QOK/+YDi//tA4z/5gON/+0Djv/mA4//4QOS/9EDk//0A5T/7wPq/9MD6//mA+z/0wPt/+YD7v/TA+//5gPz/9ED9f/RA/b/0gP4//QD+f/vA/r/4QP8/+ED///RBAD/9AQB/+8EDP/RBA7/0QQQ/9EEE//TAB0ANv++AFj/7wBb/+8AuP/vAM3/vgDR/74BFf/vAS7/vgE2/74CJv/vAif/7wKA/74Cgv++AoT/vgKV/+8DGP/vAzP/vgM7/+8DRP/vA0z/7wNh/+8Daf/vA4r/7wOM/+8Djv/vA+v/7wPt/+8D7//vA/b/vgA0ADb/5gA4/+cAOv/yADv/5wBa//EAzf/mANH/5gDV//IA2f/uANz/6ADp//EBFP/nAS7/5gE2/+YCC//nAoD/5gKC/+YChP/mApT/5wKW/+cC/f/nAwz/5wMN//IDD//nAyf/7gMz/+YDNP/yAzz/8QNL/+cDYP/nA2j/5wNr//IDbP/xA3n/8gN6//EDif/uA4v/7gON/+4Dj//oA5P/8gOU//ED6v/nA+z/5wPu/+cD9v/mA/j/8gP5//ED+v/oA/z/6AQA//IEAf/xBBP/5wCEACMAEAAl/+gAKf/oADH/6AAz/+gANv/gADj/4AA7/98Agf/oAJD/6ACU/+gArQAQAK7/6ACvABAAzf/gAM7/6ADPABAA0f/gANgAEADc/+EA7QAQAPT/4AD/ABABA//oAQgAEAES/+gBFP/gARb/6AEY/+gBGv/oARz/6AEu/+ABNP/oATb/4AFNABABUf/oAfEAEAHyABAB8wAQAfQAEAH1ABAB9gAQAfcAEAH4/+gCAv/oAgP/6AIE/+gCBf/oAgb/6AIL/98CKAAQAioAEAIsABACLv/oAjD/6AIy/+gCNP/oAkL/6AJE/+gCRv/oAkj/6AJq/+gCbP/oAm7/6AKA/+ACgv/gAoT/4AKU/98Clv/fAp//6AL4ABAC/P/oAv3/3wMAABADCf/oAwz/3wMP/98DKAAQAy//6AMy/+gDM//gA0v/3wNVABADV//oA2D/4ANj/+gDZv/oA2j/3wNuABADcAAQA4H/6AOD/+gDhf/oA4//4QOQ/+ADlgAQA5cAEAOYABADmgAQA5wAEAOeABADoAAQA6IAEAOkABADpgAQA6gAEAOqABADrAAQA64AEAPE/+gDxv/oA8j/6APK/+gDzP/oA87/6APQ/+gD0v/oA9T/6APW/+gD2P/oA9r/6APq/98D7P/fA+7/3wP2/+AD+v/hA/v/4AP8/+ED/f/gBBEAEAQSABAEE//fAC0ANv/xADj/9AA6//QAO//wAM3/8QDP//UA0f/xANX/9ADY//UA2f/zART/9AEu//EBNv/xAU3/9QIL//ACgP/xAoL/8QKE//EClP/wApb/8AL9//ADDP/wAw3/9AMP//ADJ//zAzP/8QM0//QDS//wA2D/9ANo//ADa//0A3n/9AOJ//MDi//zA43/8wOT//QDlv/1A+r/8APs//AD7v/wA/b/8QP4//QEAP/0BBH/9QQT//AAWQAjAA8ANv/mADj/5gA6AA4AO//mAK0ADwCvAA8Azf/mAM8ADgDR/+YA1QAOANgADgDZAAsA3P/lAO0ADwD0/+gA/wAPAQgADwEU/+YBLv/mATb/5gFNAA4B8QAPAfIADwHzAA8B9AAPAfUADwH2AA8B9wAPAgv/5gIoAA8CKgAPAiwADwKA/+YCgv/mAoT/5gKU/+YClv/mAvgADwL9/+YDAAAPAwz/5gMNAA4DD//mAycACwMoAA8DM//mAzQADgNL/+YDVQAPA2D/5gNo/+YDawAOA24ADwNwAA8DeQAOA4kACwOLAAsDjQALA4//5QOQ/+gDkwAOA5YADgOXAA8DmAAPA5oADwOcAA8DngAPA6AADwOiAA8DpAAPA6YADwOoAA8DqgAPA6wADwOuAA8D6v/mA+z/5gPu/+YD9v/mA/gADgP6/+UD+//oA/z/5QP9/+gEAAAOBBEADgQSAA8EE//mAC4ANv/jADr/5QA7/+QAzf/jAM//5QDR/+MA1f/lANj/5QDZ/+kA7f/qAP//6gEu/+MBNv/jAU3/5QIL/+QCgP/jAoL/4wKE/+MClP/kApb/5AL9/+QDDP/kAw3/5QMP/+QDJ//pAzP/4wM0/+UDS//kA2j/5ANr/+UDef/lA4n/6QOL/+kDjf/pA5P/5QOW/+UDl//qA+r/5APs/+QD7v/kA/b/4wP4/+UEAP/lBBH/5QQS/+oEE//kACEANv/iADr/5ADN/+IAz//kANH/4gDV/+QA2P/kANn/6QDt/+sA///rAS7/4gE2/+IBTf/kAoD/4gKC/+IChP/iAw3/5AMn/+kDM//iAzT/5ANr/+QDef/kA4n/6QOL/+kDjf/pA5P/5AOW/+QDl//rA/b/4gP4/+QEAP/kBBH/5AQS/+sAFwA2/+sAO//zAM3/6wDR/+sBLv/rATb/6wIL//MCgP/rAoL/6wKE/+sClP/zApb/8wL9//MDDP/zAw//8wMz/+sDS//zA2j/8wPq//MD7P/zA+7/8wP2/+sEE//zADAAT//vAFD/7wBS/+8AWv/wALz/7wDn/+8A6f/wAOv/7wDs/+8A7v/vAO//7wDw/+8A8//vAPX/7wD2/+8A+f/vAPv/7wEA/+8BMf/vAUD/7wFF/+8CHP/vAmT/7wJm/+8CaP/vAmn/7wMS/+8DN//vAzn/7wM8//ADPv/vA0P/7wNU/+8DXf/vA2z/8AN6//ADfv/vA4D/7wOS/+8DlP/wA/P/7wP1/+8D+f/wA///7wQB//AEDP/vBA7/7wQQ/+8AHQAE//IACf/yAFj/9QBb//UAuP/1ARX/9QFl//IBZv/yAWj/8gFp//IBav/yAib/9QIn//UClf/1Axj/9QM7//UDRP/1A0z/9QNN//IDTv/yA1L/8gNh//UDaf/1A4r/9QOM//UDjv/1A+v/9QPt//UD7//1AAQA9P/tA5D/7QP7/+0D/f/tAAoABP/1AAn/9QFl//UBZv/1AWj/9QFp//UBav/1A03/9QNO//UDUv/1AFQARf/wAEb/8ABH//AASf/wAFH/6wBT//AAkf/wAJX/8AC2//AAw//wAMT/8ADy//AA/v/wARP/6wEZ//ABHf/wATX/8AFH//ABSP/wAVL/8AIT//ACFP/wAhX/8AIW//ACF//wAh3/6wIe/+sCH//rAiD/6wIh/+sCL//wAjH/8AIz//ACNf/wAjf/8AI5//ACO//wAj3/8AI///ACQf/wAkP/8AJF//ACR//wAkn/8AJr/+sCbf/rAm//6wMQ//ADFv/rAxz/6wM2//ADOP/rAzr/8AM9//ADXP/wA2L/8ANn//ADdf/wA3f/8AN4//ADgv/rA4T/8AOG/+sDlf/wA7H/8AOz//ADtf/wA7f/8AO5//ADu//wA73/8AO///ADxf/rA8f/6wPJ/+sDy//rA83/6wPP/+sD0f/rA9P/8APV//AD1//wA9n/6wPb//AAjwAEAA0ACQANAEP/8ABF/7AARv+wAEf/sABJ/7AAUf/WAFP/sABYAAsAWwALAJH/sACV/7AAtv+wALgACwDE/7AA7f+vAPL/sAD+/7AA//+vARP/1gEVAAsBGf+wAR3/sAE1/7ABR/+wAUj/sAFS/7ABZQANAWYADQFoAA0BaQANAWoADQIM//ACDf/wAg7/8AIP//ACEP/wAhH/8AIS//ACE/+wAhT/sAIV/7ACFv+wAhf/sAId/9YCHv/WAh//1gIg/9YCIf/WAiYACwInAAsCKf/wAiv/8AIt//ACL/+wAjH/sAIz/7ACNf+wAjf/sAI5/7ACO/+wAj3/sAI//7ACQf+wAkP/sAJF/7ACR/+wAkn/sAJr/9YCbf/WAm//1gKVAAsDEP+wAxb/1gMYAAsDHP/WAzX/8AM2/7ADOP/WAzr/sAM7AAsDPf+wA0QACwNMAAsDTQANA04ADQNSAA0DVv/wA1z/sANhAAsDYv+wA2f/sANpAAsDb//wA3H/8AN1/7ADd/+wA3j/sAOC/9YDhP+wA4b/1gOKAAsDjAALA44ACwOV/7ADl/+vA5n/8AOb//ADnf/wA5//8AOh//ADo//wA6X/8AOn//ADqf/wA6v/8AOt//ADr//wA7H/sAOz/7ADtf+wA7f/sAO5/7ADu/+wA73/sAO//7ADxf/WA8f/1gPJ/9YDy//WA83/1gPP/9YD0f/WA9P/sAPV/7AD1/+wA9n/1gPb/7AD6wALA+0ACwPvAAsEEv+vAAgA7QAQAPT/8AD/ABADkP/wA5cAEAP7//AD/f/wBBIAEABFAEUADABGAAwARwAMAEkADABTAAwAkQAMAJUADAC2AAwAwwAMAMQADADtABgA8gAMAPT/9wD+AAwA/wAYARkADAEdAAwBNQAMAUcADAFIAAwBUgAMAhMADAIUAAwCFQAMAhYADAIXAAwCLwAMAjEADAIzAAwCNQAMAjcADAI5AAwCOwAMAj0ADAI/AAwCQQAMAkMADAJFAAwCRwAMAkkADAMQAAwDNgAMAzoADAM9AAwDXAAMA2IADANnAAwDdQAMA3cADAN4AAwDhAAMA5D/9wOVAAwDlwAYA7EADAOzAAwDtQAMA7cADAO5AAwDuwAMA70ADAO/AAwD0wAMA9UADAPXAAwD2wAMA/v/9wP9//cEEgAYAB8AWP/0AFr/8ABb//QAuP/0AOn/8ADt//MA///zARX/9AIm//QCJ//0ApX/9AMY//QDO//0Azz/8ANE//QDTP/0A2H/9ANp//QDbP/wA3r/8AOK//QDjP/0A47/9AOU//ADl//zA+v/9APt//QD7//0A/n/8AQB//AEEv/zAAoABP/WAAn/1gFl/9YBZv/WAWj/1gFp/9YBav/WA03/1gNO/9YDUv/WAAoABP/1AAn/9QFl//UBZv/1AWj/9QFp//UBav/1A03/9QNO//UDUv/1AF4ABAALAAkACwBF/+sARv/rAEf/6wBJ/+sAUf/pAFP/6wCR/+sAlf/rALb/6wDD/+sAxP/rAPL/6wD+/+sBE//pARn/6wEd/+sBNf/rAUf/6wFI/+sBUv/rAWUACwFmAAsBaAALAWkACwFqAAsCE//rAhT/6wIV/+sCFv/rAhf/6wId/+kCHv/pAh//6QIg/+kCIf/pAi//6wIx/+sCM//rAjX/6wI3/+sCOf/rAjv/6wI9/+sCP//rAkH/6wJD/+sCRf/rAkf/6wJJ/+sCa//pAm3/6QJv/+kDEP/rAxb/6QMc/+kDNv/rAzj/6QM6/+sDPf/r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ATEDUgNXATUDWgNaATsDXANcATwDYANhAT0DZgNmAT8DaANxAUADdAN1AUoDdwN6AUwDgQOCAVADhgOGAVIDiAOOAVMDkwOUAVoDmAPAAVwDwgPCAYUDxAPRAYYD2QPZAZQD3APcAZUD3gPeAZYD6gPvAZcD8gPyAZ0D9AP0AZ4D9gP2AZ8D+AP5AaAD/gQBAaIEBAQEAaYEBgQHAacECQQJAakEDQQNAaoEDwQPAasEEwQTAawAAQAKAAoAKAAzADQAPQBIAE0AVgBZAF0AAQAiAJkAsACyALMAtAC7AL4AvwDAAMUAxwDIAMkAzQDRANMA1ADWAN4A4gDjAOQA5QDmAOgA6gDsAPEA8wD2APsA/gEdAdwAAgB2AAQABAAAAAkACQABAA4ADgACABAAEAADACMAJwAEACoAMgAJADYAPAASAEMARQAZAEcARwAcAEoASgAdAE8AUgAeAFQAVAAiAFgAWAAjAFoAXAAkAIgAiAAnAKwArwAoALgAuAAsALwAvAAtAMIAwgAuAM8A0AAvANIA0gAxANUA1QAyANcA2QAzANsA2wA2AN0A3QA3AN8A3wA4AOEA4QA5AOcA5wA6AOkA6QA7APIA8gA8APcA9wA9APkA+gA+AP8BAABAAQUBBQBCAQgBCABDARMBFQBEAScBKQBHASwBLABKAS4BLgBLAUUBRQBMAWUBawBNAW8BcABUAewB7QBWAe8B7wBYAfECFwBZAhwCIQCAAiYCNgCGAjgCQQCXAkoCTAChAk4CTgCkAlACUAClAlICUgCmAlQCVACnAlcCVwCoAlkCWQCpAlsCWwCqAl0CXQCrAl8CXwCsAmECYQCtAmMCbwCuAnECcQC7AnMCcwC8AnUCdQC9AoACgAC+AoICggC/AoQChADAAoYChgDBAogCiADCAooCigDDAowCjADEAo4CjgDFApACkADGApICkgDHApQCnADIAvgC/QDRAwADDwDXAxIDEgDnAxYDFgDoAxgDGADpAxwDHADqAx8DIADrAyIDKwDtAy0DLwD3AzEDNgD6AzgDPgEAA0QDRQEHA0cDRwEJA0kDSQEKA0sDTgELA1IDVwEPA1oDWgEVA1wDXAEWA2ADYQEXA2YDcQEZA3QDdQElA3cDegEnA4EDggErA4YDhgEtA4gDjgEuA5MDlAE1A5gDwAE3A8IDwgFgA8QD0QFh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ABMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABcAAAAAAAAAAAAAABEAEQARABEAEQARABEABQAAAAAAAAAAAAAAAAAAAAAAAAAFAAUABQAFAAUABgAGAAYABgAOABoAGgAaABoAGgAaABoAFQAVABUAFQAVAAAAAAAAAAAAGAAIAAgACAAIAAgACwALAAsACwACAAIAEQAaABEAGgARABoABQAVAAUAFQAFABUABQAVAAAAFQAAABUAAAAVAAAAFQAAABUAAAAVAAUAFQAFABUABQAVAAUAFQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGAAAABgAAAAYABgABQAIAAUACAAFAAgAAAAAAAAAAAAAAAAAGQAbABkAGwAZABsAGQAbABkAGwAKAAAACgAAAAoAAAAGAAsABgALAAYACwAGAAsABgALAAYACwAJAAAADgACAA4AFAAMABQADAAUAAwAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARAAAAAAAAAAUADgAAAAAAEQAAAAAAFAAAAAAAAAAAAAAABQAAAAAADgASAAAADgAVAAAAGAAAAAsAAAAIAAAAAgAAAAAACwAIAAsAAAAAAAAAAAAAAAAAHAAAAAAAEAARAAAAAAAAAAAAAAAAAAUAAAAAAAUACgASABoAFQAYAAgAGAAVAAIAFgAVABgAGwAAAAAAAAAYAAIACQAAAAkAAAAJAAAADgACAAcABwAAAAAAAAAHAAAAGAARABoABQAAAAAAAAAAABUAGAAAAAAADQACABUABQAAAAAABQAVAA4AAgAAABIAFgAAABEAGgARABoAAAAAAAAAFQAAABUAFQASABYAAAAAAAAAGAAAABgABQAIAAUAFQAFAAgAAAAAABAAAgAQAAIAEAACAA8AAwAAABgAEgAWABUAAQAEABEAGgARABoAEQAaABEAGgARABoAEQAaABEAGgARABoAEQAaABEAGgARABoAEQAaAAAAFQAAABUAAAAVAAAAFQAAABUAAAAVAAAAFQAAABUAAAAAAAAAAAAFAAgABQAIAAUACAAFAAgABQAIAAUACAAFAAgABQAVAAUAFQAFABUABQAIAAUAFQAGAAsABgALAAAACwAAAAsAAAALAAAACwAAAAsADgACAA4AAgAOAAIAAAAAAAAAGAAAABgACgAAABIAFgAPAAMADwADAAAAGAASABYAAAAAAAAAAAAAAAAAAAAAAAAAAAAYAAAAGAAAABgAAQAEAA4AAAAAAAAAAAAAABcAAQAAAAoALACOAAFERkxUAAgABAAAAAD//wAIAAAAAQACAAMABAAFAAYABwAIbGlnYQAybG51bQA4c21jcAA+c3MwMQBEc3MwMgBKc3MwMwBQc3MwNABWc3MwNQBcAAAAAQABAAAAAQACAAAAAQAAAAAAAQADAAAAAQAEAAAAAQAFAAAAAQAGAAAAAQAHAAgAEgAaACIAKgAyADoAQgBKAAEAAAABAEAABAAAAAEB9gABAAAAAQIAAAEAAAABAhIAAQAAAAECEAABAAAAAQIOAAEAAAABAgwAAQAAAAECDgACAhAA3AGmAacBqAGpAaoBqwGsAa0BrgGvAbABsQGyAbMBtAHoAbUBtgG3AbgBuQG6AbsBvAG9Ab4BpgGnAagBqQGqAasBrAGtAa4BrwGwAbEBsgGzAbQB6AG1AbYBtwG4AbkBugG7AbwBvQG+AvcCogKhAqICowKjAqQCpQKmAqcCqAKpAqoCqwKsAq0CrgKvArACsQKyArMCtAK1ArYCtwK4ArkCugK7ArwCvQK+AqQCpQKmAqcCqAKpAqoCqwKsAq0CrgKvArACsQKyArMCtAK1ArYCtwK4ArkCugK7ArwCvQK+AvMCvwK/AsACwALBAsECwgLCAsMCwwLFAsUCxgLGAscCxwLIAsgCyQLJAsoCygLLAssCzALMAs0CzQLPAs8C0ALQAtEC0QLSAtIC0wLTAtQC1ALVAtYC1gLXAtcC2ALYAtkC2QLaAtoC2wLbAtwC3ALdAt0C3gLeAt8C3wLgAuAC4QLhAuIC4gLjAuMC5ALkAuUC5QLmAuYC5wLnAugC6P////8C6gLqAusC6wLsAuwC7QLtAu4C7gLvAu8C8ALwAvEC8QLyAvIC8wL0AvQC9QL1AvYC9gKhAAEApAABAAgAAQAEAZIAAgBLAAIAmAAKAZgBzAHEAdYB1wHYAdkB2wHdAecAAQCIAZEAAQCIASgAAQCIAa4AAgCIAAIB4wHkAAIAfgACAeUB5gACAA0AIwA8AAAAQwBcABoAgwCDADQAhQCFADUB7AHtADYB7wIxADgCNAJFAHsCSAJUAI0CVwJoAJoCagJ7AKwCfgJ/AL4CggKcAMAD8APwANsAAQABAEgAAgABABIAGwAAAAEAAQBJAAEAAQC2AAEAAQA0AAEAAgAtAE0=","Roboto-Medium.ttf":"AAEAAAAOAIAAAwBgR0RFRgsuCy8AASxgAAAASEdQT1OQeyOPAAEsqAAAl/pHU1VCeolvLwABxKQAAANsT1MvMrkTKcoAAAFoAAAAYFZETVhu6nZPAAASOAAABeBjbWFwf76BZgAAGBgAAA7iZ2x5Zm8zqQ4AACb8AADUQGhlYWT1Pw7VAAAA7AAAADZoaGVhCx4JIwAAASQAAAAkaG10eLpNNCcAAAHIAAAQcGxvY2EEms7QAAD7PAAACDptYXhwBDsA9gAAAUgAAAAgbmFtZb10XwMAAQN4AAAEn3Bvc3Tfb5xiAAEIGAAAJEYAAQAAAAEAAF5SMstfDzz1AAkIAAAAAADE8BEuAAAAAM2CsnL6JP3VCYsIYgAAAAkAAgAAAAAAAAABAAAHbP4MAAAJnfok/V0JiwABAAAAAAAAAAAAAAAAAAAEHAABAAAEHACXABYAXQAFAAEAAAAAAAAAAAAAAAAAAwABAAME3gH0AAUAAAWaBTMAAAEfBZoFMwAAA9EAZgIAAAAAAAAAAAAAAAAA4AAC/1AAIFsAAAAgAAAAAHB5cnMAAAAA//0GAP4AAGYHmgIAIAABn08BAAAEOgWwAAAAIAACAf4AAAAAAAAB/gAAAf4AAAKYAFIE4gA8BIwAZAXgAGQFHQA+AVoAUgK3AIACvAARA38AGwR1AEQBwgAnAqAARwI8AJkDKgACBIwAaASMAMoEjABRBIwATwSMADgEjACBBIwAdASMAEUEjABhBIwAUgIlAJkCIABRBBEAPwSOAJEEKgCAA+QAKQchAEoFQgAaBSAAnwUgAHQFYgCfBKMAnwShAJ8FbQB0BbAAnwJNAK0EfAA6BSgAnwRkAJ8HAgCfBbAAnwWPAHQFKwCfBZAAdAVFAJ8E8wBTBOoANQV0AIYFKwAaBwIARAUUAC8FAwATBMAAWAIxAIQDVwAVAjEADANrADUDnAADApQASgRaAF4EiACABDMAUQSIAFMEPABZAs8AMQSIAFQEiAB9AhMAkAIZ/7AEMACBAhMAkAb1AIAEiAB+BIgAUwSIAIAEiABTAtoAgAQpAFECnQAZBIgAewQOACAF+gAlBA4AIQQOABAEDgBVAq8AOAICAK4CrwAbBVEAdQIeAI8EfQBoBLUAUQWdAF0E4AAaAfwAiAT4AFoEHgCkBkQAVwORAHQD4gBUBG0AfwZEAFcD2wCHAwoAfwRLAF8DYQBtA2MAYQKxAHgEuwCSBBAAPgJCAKACEABtAjUAZAOnAHcD4gBcBgwAmwZmAJMG0wBmBAEAYAeF//YERABNBXoAaQTKAJQE5wCIBsEANAS6ADwEkQBDBIkAUwSXAIcFogAYAhoAjwSYAI4EJAAbAj8AGwWSAJMEiAB+B7QAZQc6AFsCDACLAtD/3QWJAGYEnwBSBaUAhgTyAHsCJv+1BDwAWQPmAJsDsAB5A3wAdQJPAJoCsgCCAk0AKQPYAIADLwB6ApwAqwAA/NsAAP02AAD8eQAA/T4AAPwMAAD9IgJdANcEPACdAkIAoAR1AJ8FvQAaBXsAZgU5ACMEkQBwBbEAnwSRAEcF6wBLBacASAVbAGwEhABWBMYAlgQOACAEiABUBGAAYAQaAGEEiAB+BKIAcwKmAKkEagAWBBMAZAT3AE8EiACABDcAUgSQAFIELgBABGAAgAXQAEQFyQBPBpQAZgUuAHUEdf/uBnEAMwX/ACQFPgByCIoALgiRAJ8GXwA1BasAmQUIAJQGBwAmB5oAGATTAEoFqgCaBakALgUKAD8GYABPBfYAmQWIAI8HmgCeB/oAngYaABgG+QCfBQcAlAU8AIgHVACqBPsALQR9AFsEjwCPA1oAhQT2ACcGdgAXBBYATQSYAIYEbgCPBJoAHwYDAI8ElwCGBJgAhgP1ACMF0wBUBNMAhgRmAF8GjgCGBuwAfgUYAB8GbwCPBGgAjwQ8AFEGhACQBHAAJwSJ/+EEPQBYBtEAHwbkAIYEif/1BJgAhgdDAI0GTwBwBGf/4AcpAKIGAQCGBQcAIARgAAoHQgC2BjYAnQbtAIQF5gCCCTIArQf5AI8EIQApA/AAMwV7AGoEiQBSBRkAEQQOACAFewBqBIkAUwc+AI0GRAB0B0MAjQZQAHAFHQBqBEoAXAT/AG0AAPxmAAD8cwAA/XsAAP2lAAD6JP7p+k0EZ//gBRQAnwSHAIAEagCUA6IAfgS3AJ8EIAB+BSoAlASrAI4GlgA0BaQAPgfRAJ8FqwB+CEcAnwb1AH4GJQBpBP8AYQcyAC4FcQAmBXUAggRzAHQFhwCKBiYAIATE/84FHwCUBHgAjgWwAJ8EiAB+BYgAUwSmAF0EpgBdBMcAOwNTADQFBwBUBusAZgbdAF4GUwA7BSgALwR7AEkEPwB1B74AQwadAD8H/gCYBp4AdwUDAGIELABVBaoAIgUdAEQFVwCHBBQAAAgpAAAEFAAACCkAAAK5AAACCgAAAVwAAAR/AAACMAAAAaIAAADRAAAAAAAABYcArQaBALIDnQAEAcAAYAG8ADMBzgAyAagARwMUAGIDGwBAAwgAMgRdAEAEmQBcAssAiAP6AJwFpgCcB6gASwJyAGwCaQBUA5wALQOpAD8DXABpBLUATwa4AJkETQBLBeUAcQPiAEUIyACYBQkAZAUUAJYGyQBpB2EAageRAGoG7wBqBLsAQwWWAKYE2QBABIMAngSyADsIRQBkAiH/sgSOAGUETACYBEYAqgRLAKAEGgAkAlsAswKYAGMB8QBFBKgAGAAAAAAIMABZCDUAXAQyAE0DiwBNBJMAbAMn/58CEP+wAk0AGAGzAFwDoQB1A6EAdQOhAHUECwB5BAsAdQQL/0wECwB6A6EAWwIFAJAEyAAcBIwAjgSUAGgErwCOBEcAjgQqAI4E2wBoBRIAjgIVAI4EFwAuBHcAjgO9AI4GBgCOBSEAjgTKAGYE3QBoBKgAjgRwAE8EMgA8BQAAfgSxABwGDgA0BIwALARVABMETQBKBIYAbQKFAD4D/wBSBCIATQRlADkEfABRBD0AbQOvADwEQwBSBCoAPwIzAFcDVQBrA2YAYAL9ADgDdgBoA3YAcAMAAFIDgwBoA2YAYAOfAHADuQCXArIAlgNCAGwEjABPBIwAOASMAIEEmAB0BDsACgQ0ADIEYgA+BIwAYQS7AFYEiABTBUkAnwRaAGAFMgCfBSgAnwQwAIEFOgCfBC0AgQSNAFIEjACOA3wAdQH+AAACoABHBYAAJAWAACQEpv/9BOoANQKd/+cFQgAaBUIAGgVCABoFQgAaBUIAGgVCABoFQgAaBSAAdASjAJ8EowCfBKMAnwSjAJ8CTf/MAk0ArQJN/9gCTf+9BbAAnwWPAHQFjwB0BY8AdAWPAHQFjwB0BXQAhgV0AIYFdACGBXQAhgUDABMEWgBeBFoAXgRaAF4EWgBeBFoAXgRaAF4EWgBeBDMAUQQ8AFkEPABZBDwAWQQ8AFkCGv+vAhoAjwIa/7sCGv+gBIgAfgSIAFMEiABTBIgAUwSIAFMEiABTBIgAewSIAHsEiAB7BIgAewQOABAEDgAQBUIAGgRaAF4FQgAaBFoAXgVCABoEWgBeBSAAdAQzAFEFIAB0BDMAUQUgAHQEMwBRBSAAdAQzAFEFYgCfBR4AUwSjAJ8EPABZBKMAnwQ8AFkEowCfBDwAWQSjAJ8EPABZBKMAnwQ8AFkFbQB0BIgAVAVtAHQEiABUBW0AdASIAFQFbQB0BIgAVAWwAJ8EiAB9Ak3/vwIa/6ICTf+/Ahr/ogJN/+UCGv/IAk0AHAIT//4CTQCjBskArQQsAJAEfAA6Aib/tQUoAJ8EMACBBGQAnwITAJAEZACfAhMAWARkAJ8CqQCQBGQAnwLvAJAFsACfBIgAfgWwAJ8EiAB+BbAAnwSIAH4EiP/VBY8AdASIAFMFjwB0BIgAUwWPAHQEiABTBUUAnwLaAIAFRQCfAtoAVgVFAJ8C2gBDBPMAUwQpAFEE8wBTBCkAUQTzAFMEKQBRBPMAUwQpAFEE8wBTBCkAUQTqADUCnQAZBOoANQKdABkE6gA1AsUAGQV0AIYEiAB7BXQAhgSIAHsFdACGBIgAewV0AIYEiAB7BXQAhgSIAHsFdACGBIgAewcCAEQF+gAlBQMAEwQOABAFAwATBMAAWAQOAFUEwABYBA4AVQTAAFgEDgBVB4X/9gbBADQFegBpBIkAUwSv/+oEr//qBDIAPATIABwEyAAcBMgAHATIABwEyAAcBMgAHATIABwElABoBEcAjgRHAI4ERwCOBEcAjgIV/6wCFQCOAhX/uAIV/50FIQCOBMoAZgTKAGYEygBmBMoAZgTKAGYFAAB+BQAAfgUAAH4FAAB+BFUAEwTIABwEyAAcBMgAHASUAGgElABoBJQAaASUAGgErwCOBEcAjgRHAI4ERwCOBEcAjgRHAI4E2wBoBNsAaATbAGgE2wBoBRIAjgIV/58CFf+fAhX/xQIV//kCFQCEBBcALgR3AI4DvQCOA70AjgO9AI4DvQCOBSEAjgUhAI4FIQCOBMoAZgTKAGYEygBmBKgAjgSoAI4EqACOBHAATwRwAE8EcABPBHAATwQyADwEMgA8BQAAfgUAAH4FAAB+BQAAfgUAAH4FAAB+Bg4ANARVABMEVQATBE0ASgRNAEoETQBKCOAATwVCABoFB/+vBhT/3AKx/+MFowAqBWf/ZwVvABMCpv+wBUIAGgUgAJ8EowCfBMAAWAWwAJ8CTQCtBSgAnwcCAJ8FsACfBY8AdAUrAJ8E6gA1BQMAEwUUAC8CTf+9BQMAEwSEAFYEYABgBIgAfgKmAKkEYACABJgAjgSIAFMEuwCSBA4AIAQOACECpv/EBGAAgASIAFMEYACABpQAZgSjAJ8EdQCfBPMAUwJNAK0CTf+9BHwAOgUoAJ8FKACfBQoAPwVCABoFIACfBHUAnwSjAJ8FqgCaBwIAnwWwAJ8FjwB0BbEAnwUrAJ8FIAB0BOoANQUUAC8EWgBeBDwAWQSYAIYEiABTBIgAgAQzAFEEDgAQBA4AIQQ8AFkDWgCFBCkAUQITAJACGv+gAhn/sARuAI8EDgAQBwIARAX6ACUHAgBEBfoAJQcCAEQF+gAlBQMAEwQOABABWgBSApgAUgRKAJoE4gAxAib/tQG8ADMHAgCfBvUAgAVCABoEWgBeBY//PQd3ADEHsQAxBKMAnwWqAJoEPABZBJgAhgWnAEgFyQBPBRkAEQQO/+MIlgBTCZ0AdATTAEoEFgBNBSAAdAQzAFEFAwATBA4AIAJNAK0HmgAYBnYAFwJNAK0FQgAaBFoAXgVCABoEWgBeB4X/9gbBADQEowCfBDwAWQWIAFMEPABZBDwAWQeaABgGdgAXBNMASgQWAE0FqgCaBJgAhgWqAJoEmACGBY8AdASIAFMFewBqBIkAUgV7AGoEiQBSBTwAiAQ8AFEFCgA/BA4AEAUKAD8EDgAQBQoAPwQOABAFiACPBGYAXwb5AJ8GbwCPBRQALwQOACEEiABTBakALgSaAB8FQgAaBFoAXgVCABoEWgBeBUIAGgRaAF4FQgAEBFr/iQVCABoEWgBeBUIAGgRaAF4FQgAaBFoAXgVCABoEWgBeBUIAGgRaAF4FQgAaBFoAXgVCABoEWgBeBUIAGgRaAF4EowCfBDwAWQSjAJ8EPABZBKMAnwQ8AFkEowCfBDwAWQSj/8wEPP+LBKMAnwQ8AFkEowCfBDwAWQSjAJ8EPABZAk0ArQIaAI8CTQCfAhMAggWPAHQEiABTBY8AdASIAFMFjwB0BIgAUwWPACsEiP+mBY8AdASIAFMFjwB0BIgAUwWPAHQEiABTBYkAZgSfAFIFiQBmBJ8AUgWJAGYEnwBSBYkAZgSfAFIFiQBmBJ8AUgV0AIYEiAB7BXQAhgSIAHsFpQCGBPIAewWlAIYE8gB7BaUAhgTyAHsFpQCGBPIAewWlAIYE8gB7BQMAEwQOABAFAwATBA4AEAUDABMEDgAQBKYAUwSmAFMFKACf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w83m/k4AAAAAAf/9AAAEKgYYABwAAAEjERc+ATMyFhURIxE0JiMiBgcRIxEjNTM1MxUzAoz+AzWXYLC982RoSW4m856e8/4Ex/7sAUtR1Of9bQKVgnA6NfzoBMeqp6cAAAEANQAABLUFsAAPAAABIxEjESM1MxEhNSEVIREzA73P883N/joEgP45zwMS/O4DEqoBMcPD/s8AAf/n/+wCdgVBAB8AAAERMxUjFTMVIxEUFjMyNjcXDgEjIiY1ESM1MzUjNTMRAaHDw9XVMSsZLBQaIV4xg4/Hx5WVBUH++bSlqv75RTYHBrIQFJmrAQeqpbQBB///ABoAAAUoByICJgAjAAAABwBCAPwBXP//ABoAAAUoByECJgAjAAAABwBzAbMBW///ABoAAAUoB0cCJgAjAAAABwCaALcBWf//ABoAAAUoB2MCJgAjAAAABwCgALkBbP//ABoAAAUoBw0CJgAjAAAABwBoAJMBXf//ABoAAAUoB48CJgAjAAAABwCeAUwBs///ABoAAAUoB70CJgAjAAAABwHUAVIBKP//AHT+PATYBcUCJgAlAAAABwB3Acb/+///AJ8AAAR1ByICJgAnAAAABwBCAMQBXP//AJ8AAAR1ByECJgAnAAAABwBzAXsBW///AJ8AAAR1B0cCJgAnAAAABwCaAH8BWf//AJ8AAAR1Bw0CJgAnAAAABwBoAFsBXf///8wAAAGgByICJgArAAAABwBC/4IBXP//AK0AAAKEByECJgArAAAABwBzADgBW////9gAAAJ5B0cCJgArAAAABwCa/z0BWf///70AAAKSBw0CJgArAAAABwBo/xkBXf//AJ8AAAUQB2MCJgAwAAAABwCgAO4BbP//AHT/6wUbBzcCJgAxAAAABwBCASMBcf//AHT/6wUbBzYCJgAxAAAABwBzAdoBcP//AHT/6wUbB1wCJgAxAAAABwCaAN4Bbv//AHT/6wUbB3gCJgAxAAAABwCgAOABgf//AHT/6wUbByICJgAxAAAABwBoALoBcv//AIb/6wTxByICJgA3AAAABwBCARcBXP//AIb/6wTxByECJgA3AAAABwBzAc4BW///AIb/6wTxB0cCJgA3AAAABwCaANIBWf//AIb/6wTxBw0CJgA3AAAABwBoAK4BXf//ABMAAATvByECJgA7AAAABwBzAZYBW///AF7/7AQB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AAcAnADtAcH//wBU/kwECAYaAiYASQAAAAYAnHlqAAD//wB0/+sE4gc2AiYAKQAAAAcAnQGHAYD//wBU/kwECAXfAiYASQAAAAcAnQETACn//wB0/eIE4gXFAiYAKQAAAAcBkQG2/qv//wBU/kwECAaKAiYASQAAAAcBpQEtAH7//wCfAAAFEAdHAiYAKgAAAAcAmgDoAVn//wB9AAAEDAdiAiYASgAAAAcAmgAbAXT///+/AAACkAdjAiYAKwAAAAcAoP8/AWz///+iAAACcwYMAiYAigAAAAcAoP8iABX///+/AAAClgb2AiYAKwAAAAcAbv84AUb///+iAAACeQWgAiYAigAAAAcAbv8b//D////lAAACawdcAiYAKwAAAAcAnP9wAaz////IAAACTgYFAiYAigAAAAcAnP9TAFX//wAc/lwBoAWwAiYAKwAAAAYAn/MKAAD////+/lIBgwYYAiYASwAAAAYAn9UAAAD//wCjAAABpgchAiYAKwAAAAcAnQAJAWv//wCt/+sGMwWwACYAKwAAAAcALAJNAAD//wCQ/ksDoQYYACYASwAAAAcATAITAAD//wA6/+sEsgc/AiYALAAAAAcAmgF2AVH///+1/ksCZAXjAiYAmAAAAAcAmv8o//X//wCf/fAFLwWwAiYALQAAAAcBkQGK/rn//wCB/fIENQYYAiYATQAAAAcBkQEv/rv//wCfAAAELwb4AiYALgAAAAcAcwAqATL//wCQAAACZwdfAiYATgAAAAcAcwAbAZn//wCf/fIELwWwAiYALgAAAAcBkQF1/rv//wBY/fIBgwYYAiYATgAAAAcBkQAT/rv//wCfAAAELwWyAiYALgAAAAcBkQIEBKz//wCQAAAC6AYYACYATgAAAAcBkQGOBRL//wCfAAAELwWwAiYALgAAAAcAnQG7/dT//wCQAAAC9wYYACYATgAAAAcAnQFa/a///wCfAAAFEAchAiYAMAAAAAcAcwHoAVv//wB+AAAECwXfAiYAUAAAAAcAcwFTABn//wCf/fIFEAWwAiYAMAAAAAcBkQHg/rv//wB+/fIECwROAiYAUAAAAAcBkQFL/rv//wCfAAAFEAdOAiYAMAAAAAcAmwEDAV3//wB+AAAECwYMAiYAUAAAAAYAm24bAAD////VAAAECwYYAiYAUAAAAAcBkf+QBRL//wB0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aAB0AHQAcAA6AC8ALwB3AHcAdwAuAGEAcABhAGMAaABlAC4AbwByAGcALwBsAGkAYwBlAG4AcwBlAHMALwBMAEkAQwBFAE4AUwBFAC0AMgAuADAAUgBvAGIAbwB0AG8ATQBlAGQAaQB1AG0AAAIAAAAAAAD/agBkAAAAAAAAAAAAAAAAAAAAAAAAAAAEHAAAAQIAAgADAAUABgAHAAgACQAKAAsADAANAA4ADwAQABEAEgATABQAFQAWABcAGAAZABoAGwAcAB0AHgAfACAAIQAiACMAJAAlACYAJwAoACkAKgArACwALQAuAC8AMAAxADIAMwA0ADUANgA3ADgAOQA6ADsAPAA9AD4APwBAAEEAQgBDAEQARQBGAEcASABJAEoASwBMAE0ATgBPAFAAUQBSAFMAVABVAFYAVwBYAFkAWgBbAFwAXQBeAF8AYABhAKMAhACFAL0AlgDoAIYAjgCLAJ0AqQCkAIoBAwCDAJMA8gDzAI0AlwCIAQQA3gDxAJ4AqgD1APQA9gCiAJAA8ACRAO0AiQCgAOoAuAChAO4BBQDXAQYA4gDjAQcBCACwALEBCQCmAQoBCwEMAQ0BDgEPANgA4QDbANwA3QDgANkA3wEQAREBEgETARQBFQEWARcBGAEZARoBGwEcAR0BHgEfASABIQEiAJ8BIwEkASUBJgEnASgBKQEqASsBLAEtAJsBLgEvATABMQEyATMBNAE1ATYBNwE4ATkBOgE7ATwBPQE+AT8BQAFBAUIBQwFEAUUBRgFHAUgBSQFKAUsBTAFNAU4BTwFQAVEBUgFTAVQBVQFWAVcBWAFZAVoBWwFcAV0BXgFfAWABYQFiAWMBZAFlAWYBZwFoAWkBagFrAWwBbQFuAW8BcAFxAXIBcwF0AXUBdgF3AXgBeQF6AXsBfAF9AX4BfwGAAYEBggGDAYQBhQGGAYcBiAGJAYoBiwGMAY0BjgGPAZABkQGSAZMBlAGVAZYBlwGYAZkBmgGbAZwBnQGeAZ8BoAGhAaIBowGkAaUBpgGnAagBqQGqAasBrAGtAa4BrwGwAbEBsgGzAbQBtQG2AbcBuAG5AboBuwG8Ab0BvgG/AcABwQHCAcMBxAHFAcYBxwHIAckBygHLAcwBzQCyALMBzgC2ALcAxAHPALQAtQDFAIIAwgCHAdAAqwDGAL4AvwC8AdEB0gHTAdQB1QHWAdcB2ACMAdkB2gHbAdwB3QCYAJoAmQDvAKUAkgCcAKcAjwCUAJUAuQHeAd8B4ADAAeEB4gHjAeQB5QHmAecB6AHpAeoB6wHsAe0B7gHvAfAB8QHyAfMB9AH1AfYB9wH4AfkB+gH7AfwB/QH+Af8CAAIBAgICAwIEAgUCBgIHAggCCQIKAgsCDAINAg4CDwIQAhECEgITAhQCFQIWAhcCGAIZAhoCGwIcAh0CHgIfAiACIQIiAiMCJAIlAiYCJwIoAikCKgIrAiwCLQIuAi8CMAIxAjICMwI0AjUCNgI3AKwCOAI5AOkCOgI7AjwArQDJAMcArgBiAGMCPQBkAMsAZQDIAMoAzwDMAM0AzgBmANMA0ADRAK8AZwDWANQA1QBoAOsAagBpAGsAbQBsAG4CPgBvAHEAcAByAHMAdQB0AHYAdwB4AHoAeQB7AH0AfAB/AH4AgACBAOwAugI/AkACQQJCAkMCRAD9AP4CRQJGAkcCSAD/AQACSQJKAksCTAJNAk4CTwJQAlECUgJTAlQCVQJWAPgA+QJXAlgCWQJaAlsCXAJdAl4CXwJgAmECYgJjAmQCZQJmAmcCaAJpAmoCawJsAm0CbgJvAnACcQJyAnMCdAJ1AnYCdwJ4AnkCegJ7AnwCfQJ+An8CgAKBAoICgwKEAoUChgKHAogCiQKKAPsA/AKLAowA5ADlAo0CjgKPApACkQKSApMClAKVApYClwKYApkCmgKbApwCnQKeAp8CoAKhAqIAuwKjAqQCpQKmAOYA5wKnAqgCqQKqAqsCrAKtAq4CrwKwArECsgKzArQCtQK2ArcCuAK5AroCuwK8Ar0CvgK/AsACwQLCAsMCxALFAsYCxwLIAskCygLLAswCzQLOAs8C0ALRAtIC0wLUAtUC1gLXAtgC2QLaAtsC3ALdAt4C3wLgAuEC4gLjAuQC5QLmAucC6ALpAuoC6wLsAu0C7gLvAvAC8QLyAvMC9AL1AvYC9wL4AvkC+gL7AvwC/QL+Av8DAAMBAwIDAwMEAwUDBgMHAwgDCQMKAwsDDAMNAw4DDwMQAxEDEgMTAxQDFQMWAxcDGAMZAxoDGwMcAx0DHgMfAyADIQMiAyMDJAMlAyYDJwMoAykDKgMrAywDLQMuAy8DMAMxAzIDMwM0AzUDNgM3AzgDOQM6AzsDPAM9Az4DPwNAA0EDQgNDA0QDRQNGA0cDSANJA0oDSwNMA00DTgNPA1ADUQNSA1MDVANVA1YDVwNYA1kDWgNbA1wDXQNeA18DYANhA2IDYwNkA2UDZgNnA2gDaQNqA2sDbANtA24DbwNwA3EDcgNzA3QDdQN2A3cDeAN5A3oDewN8A30DfgN/A4ADgQOCA4MDhAOFA4YDhwOIA4kDigOLA4wDjQOOA48DkAORA5IDkwOUA5UDlgOXA5gDmQOaA5sDnAOdA54DnwOgA6EDogOjA6QDpQOmA6cDqAOpA6oDqwOsA60DrgOvA7ADsQOyA7MDtAO1A7YDtwO4A7kDugO7A7wDvQO+A78DwAPBA8IDwwPEA8UDxgPHA8gDyQPKA8sDzAPNA84DzwPQA9ED0gPTA9QD1QPWA9cD2APZA9oD2wPcA90D3gPfA+AD4QPiA+MD5APlA+YD5wPoA+kD6gPrA+wD7QPuA+8D8APxA/ID8wP0A/UD9gP3A/gD+QP6A/sD/AP9A/4D/wQABAEEAgQDBAQEBQQGBAcECAQJBAoECwQMBA0EDgQPBBAEEQQSBBMEFAQVBBYEFwQYBBkEGgQbBBwEHQQeBB8EIAQhAPcEIgQjAAQHdW5pMDAwOQZtYWNyb24OcGVyaW9kY2VudGVyZWQESGJhcgxrZ3JlZW5sYW5kaWMDRW5nA2VuZwVsb25ncwVPaG9ybgVvaG9ybgVVaG9ybgV1aG9ybgd1bmkwMjM3BXNjaHdhB3VuaTAyRjMJZ3JhdmVjb21iCWFjdXRlY29tYgl0aWxkZWNvbWIEaG9vawd1bmkwMzBGCGRvdGJlbG93BXRvbm9zDWRpZXJlc2lzdG9ub3MJYW5vdGVsZWlhBUdhbW1hBURlbHRhBVRoZXRhBkxhbWJkYQJYaQJQaQVTaWdtYQNQaGkDUHNpBWFscGhhBGJldGEFZ2FtbWEFZGVsdGEHZXBzaWxvbgR6ZXRhA2V0YQV0aGV0YQRpb3RhBmxhbWJkYQJ4aQNyaG8Gc2lnbWExBXNpZ21hA3RhdQd1cHNpbG9uA3BoaQNwc2kFb21lZ2EHdW5pMDNEMQd1bmkwM0QyB3VuaTAzRDYHdW5pMDQwMgd1bmkwNDA0B3VuaTA0MDkHdW5pMDQwQQd1bmkwNDBCB3VuaTA0MEYHdW5pMDQxMQd1bmkwNDE0B3VuaTA0MTYHdW5pMDQxNwd1bmkwNDE4B3VuaTA0MUIHdW5pMDQyMwd1bmkwNDI0B3VuaTA0MjYHdW5pMDQyNwd1bmkwNDI4B3VuaTA0MjkHdW5pMDQyQQd1bmkwNDJCB3VuaTA0MkMHdW5pMDQyRAd1bmkwNDJFB3VuaTA0MkYHdW5pMDQzMQd1bmkwNDMyB3VuaTA0MzMHdW5pMDQzNAd1bmkwNDM2B3VuaTA0MzcHdW5pMDQzOAd1bmkwNDNBB3VuaTA0M0IHdW5pMDQzQwd1bmkwNDNEB3VuaTA0M0YHdW5pMDQ0Mgd1bmkwNDQ0B3VuaTA0NDYHdW5pMDQ0Nwd1bmkwNDQ4B3VuaTA0NDkHdW5pMDQ0QQd1bmkwNDRCB3VuaTA0NEMHdW5pMDQ0RAd1bmkwNDRFB3VuaTA0NEYHdW5pMDQ1Mgd1bmkwNDU0B3VuaTA0NTkHdW5pMDQ1QQd1bmkwNDVCB3VuaTA0NUYHdW5pMDQ2MAd1bmkwNDYxB3VuaTA0NjMHdW5pMDQ2NAd1bmkwNDY1B3VuaTA0NjYHdW5pMDQ2Nwd1bmkwNDY4B3VuaTA0NjkHdW5pMDQ2QQd1bmkwNDZCB3VuaTA0NkMHdW5pMDQ2RAd1bmkwNDZFB3VuaTA0NkYHdW5pMDQ3Mgd1bmkwNDczB3VuaTA0NzQHdW5pMDQ3NQd1bmkwNDdBB3VuaTA0N0IHdW5pMDQ3Qwd1bmkwNDdEB3VuaTA0N0UHdW5pMDQ3Rgd1bmkwNDgwB3VuaTA0ODEHdW5pMDQ4Mgd1bmkwNDgzB3VuaTA0ODQHdW5pMDQ4NQd1bmkwNDg2B3VuaTA0ODgHdW5pMDQ4OQd1bmkwNDhEB3VuaTA0OEUHdW5pMDQ4Rgd1bmkwNDkwB3VuaTA0OTEHdW5pMDQ5NAd1bmkwNDk1B3VuaTA0OUMHdW5pMDQ5RAd1bmkwNEEwB3VuaTA0QTEHdW5pMDRBNAd1bmkwNEE1B3VuaTA0QTYHdW5pMDRBNwd1bmkwNEE4B3VuaTA0QTkHdW5pMDRCNAd1bmkwNEI1B3VuaTA0QjgHdW5pMDRCOQd1bmkwNEJBB3VuaTA0QkMHdW5pMDRCRAd1bmkwNEMzB3VuaTA0QzQHdW5pMDRDNwd1bmkwNEM4B3VuaTA0RDgHdW5pMDRFMAd1bmkwNEUxB3VuaTA0RkEHdW5pMDRGQgd1bmkwNTAwB3VuaTA1MDIHdW5pMDUwMwd1bmkwNTA0B3VuaTA1MDUHdW5pMDUwNgd1bmkwNTA3B3VuaTA1MDgHdW5pMDUwOQd1bmkwNTBBB3VuaTA1MEIHdW5pMDUwQwd1bmkwNTBEB3VuaTA1MEUHdW5pMDUwRgd1bmkwNTEwB3VuaTIwMDAHdW5pMjAwMQd1bmkyMDAyB3VuaTIwMDMHdW5pMjAwNAd1bmkyMDA1B3VuaTIwMDYHdW5pMjAwNwd1bmkyMDA4B3VuaTIwMDkHdW5pMjAwQQd1bmkyMDBCDXVuZGVyc2NvcmVkYmwNcXVvdGVyZXZlcnNlZAd1bmkyMDI1B3VuaTIwNzQJbnN1cGVyaW9yBGxpcmEGcGVzZXRhBEV1cm8HdW5pMjEwNQd1bmkyMTEzB3VuaTIxMTYJZXN0aW1hdGVkCW9uZWVpZ2h0aAx0aHJlZWVpZ2h0aHMLZml2ZWVpZ2h0aHMMc2V2ZW5laWdodGhzCmNvbG9uLmxudW0JcXVvdGVkYmx4C2NvbW1hYWNjZW50B3VuaUZFRkYHdW5pRkZGQwd1bmlGRkZECWZpdmUuc21jcAhmb3VyLnN1cAl6ZXJvLmxudW0ObGFyZ2VyaWdodGhvb2sMY3lyaWxsaWNob29rEGN5cmlsbGljaG9va2xlZnQLY3lyaWxsaWN0aWMOYnJldmV0aWxkZWNvbWINYnJldmVob29rY29tYg5icmV2ZWFjdXRlY29tYhNjaXJjdW1mbGV4dGlsZGVjb21iEmNpcmN1bWZsZXhob29rY29tYhNjaXJjdW1mbGV4Z3JhdmVjb21iE2NpcmN1bWZsZXhhY3V0ZWNvbWIOYnJldmVncmF2ZWNvbWIRY29tbWFhY2NlbnRyb3RhdGUGQS5zbWNwBkIuc21jcAZDLnNtY3AGRC5zbWNwBkUuc21jcAZGLnNtY3AGRy5zbWNwBkguc21jcAZJLnNtY3AGSi5zbWNwBksuc21jcAZMLnNtY3AGTS5zbWNwBk4uc21jcAZPLnNtY3AGUS5zbWNwBlIuc21jcAZTLnNtY3AGVC5zbWNwBlUuc21jcAZWLnNtY3AGVy5zbWNwBlguc21jcAZZLnNtY3AGWi5zbWNwCXplcm8uc21jcAhvbmUuc21jcAh0d28uc21jcAp0aHJlZS5zbWNwCWZvdXIuc21jcAh0d28ubG51bQhzaXguc21jcApzZXZlbi5zbWNwCmVpZ2h0LnNtY3AJbmluZS5zbWNwB29uZS5zdXAHdHdvLnN1cAl0aHJlZS5zdXAIb25lLmxudW0IZml2ZS5zdXAHc2l4LnN1cAlzZXZlbi5zdXAJZWlnaHQuc3VwCG5pbmUuc3VwCHplcm8uc3VwCGNyb3NzYmFyCXJpbmdhY3V0ZQlkYXNpYW94aWEKdGhyZWUubG51bQlmb3VyLmxudW0JZml2ZS5sbnVtCHNpeC5sbnVtBWcuYWx0CnNldmVuLmxudW0HY2hpLmFsdAplaWdodC5sbnVtCWFscGhhLmFsdAlkZWx0YS5hbHQERC5jbgRhLmNuBVIuYWx0BUsuYWx0BWsuYWx0BksuYWx0MgZrLmFsdDIJbmluZS5sbnVtBlAuc21jcA1jeXJpbGxpY2JyZXZlB3VuaTAwQUQGRGNyb2F0BGhiYXIEVGJhcgR0YmFyCkFyaW5nYWN1dGUKYXJpbmdhY3V0ZQdBbWFjcm9uB2FtYWNyb24GQWJyZXZlBmFicmV2ZQdBb2dvbmVrB2FvZ29uZWsLQ2NpcmN1bWZsZXgLY2NpcmN1bWZsZXgHdW5pMDEwQQd1bmkwMTBCBkRjYXJvbgZkY2Fyb24HRW1hY3JvbgdlbWFjcm9uBkVicmV2ZQZlYnJldmUKRWRvdGFjY2VudAplZG90YWNjZW50B0VvZ29uZWsHZW9nb25lawZFY2Fyb24GZWNhcm9uC0djaXJjdW1mbGV4C2djaXJjdW1mbGV4B3VuaTAxMjAHdW5pMDEyMQxHY29tbWFhY2NlbnQMZ2NvbW1hYWNjZW50C0hjaXJjdW1mbGV4C2hjaXJjdW1mbGV4Bkl0aWxkZQZpdGlsZGUHSW1hY3JvbgdpbWFjcm9uBklicmV2ZQZpYnJldmUHSW9nb25lawdpb2dvbmVrCklkb3RhY2NlbnQCSUoCaWoLSmNpcmN1bWZsZXgLamNpcmN1bWZsZXgMS2NvbW1hYWNjZW50DGtjb21tYWFjY2VudAZMYWN1dGUGbGFjdXRlDExjb21tYWFjY2VudAxsY29tbWFhY2NlbnQGTGNhcm9uBmxjYXJvbgRMZG90BGxkb3QGTmFjdXRlBm5hY3V0ZQxOY29tbWFhY2NlbnQMbmNvbW1hYWNjZW50Bk5jYXJvbgZuY2Fyb24LbmFwb3N0cm9waGUHT21hY3JvbgdvbWFjcm9uBk9icmV2ZQZvYnJldmUNT2h1bmdhcnVtbGF1dA1vaHVuZ2FydW1sYXV0BlJhY3V0ZQZyYWN1dGUMUmNvbW1hYWNjZW50DHJjb21tYWFjY2VudAZSY2Fyb24GcmNhcm9uBlNhY3V0ZQZzYWN1dGULU2NpcmN1bWZsZXgLc2NpcmN1bWZsZXgHdW5pMDIxOAd1bmkwMjE5B3VuaTAyMUEHdW5pMDIxQgd1bmkwMTYyB3VuaTAxNjMGVGNhcm9uBnRjYXJvbgZVdGlsZGUGdXRpbGRlB1VtYWNyb24HdW1hY3JvbgZVYnJldmUGdWJyZXZlBVVyaW5nBXVyaW5nDVVodW5nYXJ1bWxhdXQNdWh1bmdhcnVtbGF1dAdVb2dvbmVrB3VvZ29uZWsLV2NpcmN1bWZsZXgLd2NpcmN1bWZsZXgLWWNpcmN1bWZsZXgLeWNpcmN1bWZsZXgGWmFjdXRlBnphY3V0ZQpaZG90YWNjZW50Cnpkb3RhY2NlbnQHQUVhY3V0ZQdhZWFjdXRlC09zbGFzaGFjdXRlC29zbGFzaGFjdXRlC0Rjcm9hdC5zbWNwCEV0aC5zbWNwCVRiYXIuc21jcAtBZ3JhdmUuc21jcAtBYWN1dGUuc21jcBBBY2lyY3VtZmxleC5zbWNwC0F0aWxkZS5zbWNwDkFkaWVyZXNpcy5zbWNwCkFyaW5nLnNtY3APQXJpbmdhY3V0ZS5zbWNwDUNjZWRpbGxhLnNtY3ALRWdyYXZlLnNtY3ALRWFjdXRlLnNtY3AQRWNpcmN1bWZsZXguc21jcA5FZGllcmVzaXMuc21jcAtJZ3JhdmUuc21jcAtJYWN1dGUuc21jcBBJY2lyY3VtZmxleC5zbWNwDklkaWVyZXNpcy5zbWNwC050aWxkZS5zbWNwC09ncmF2ZS5zbWNwC09hY3V0ZS5zbWNwEE9jaXJjdW1mbGV4LnNtY3ALT3RpbGRlLnNtY3AOT2RpZXJlc2lzLnNtY3ALVWdyYXZlLnNtY3ALVWFjdXRlLnNtY3AQVWNpcmN1bWZsZXguc21jcA5VZGllcmVzaXMuc21jcAtZYWN1dGUuc21jcAxBbWFjcm9uLnNtY3ALQWJyZXZlLnNtY3AMQW9nb25lay5zbWNwC0NhY3V0ZS5zbWNwEENjaXJjdW1mbGV4LnNtY3AMdW5pMDEwQS5zbWNwC0NjYXJvbi5zbWNwC0RjYXJvbi5zbWNwDEVtYWNyb24uc21jcAtFYnJldmUuc21jcA9FZG90YWNjZW50LnNtY3AMRW9nb25lay5zbWNwC0VjYXJvbi5zbWNwEEdjaXJjdW1mbGV4LnNtY3ALR2JyZXZlLnNtY3AMdW5pMDEyMC5zbWNwEUdjb21tYWFjY2VudC5zbWNwEEhjaXJjdW1mbGV4LnNtY3ALSXRpbGRlLnNtY3AMSW1hY3Jvbi5zbWNwC0licmV2ZS5zbWNwDElvZ29uZWsuc21jcA9JZG90YWNjZW50LnNtY3AQSmNpcmN1bWZsZXguc21jcBFLY29tbWFhY2NlbnQuc21jcAtMYWN1dGUuc21jcBFMY29tbWFhY2NlbnQuc21jcAtMY2Fyb24uc21jcAlMZG90LnNtY3ALTmFjdXRlLnNtY3ARTmNvbW1hYWNjZW50LnNtY3ALTmNhcm9uLnNtY3AMT21hY3Jvbi5zbWNwC09icmV2ZS5zbWNwEk9odW5nYXJ1bWxhdXQuc21jcAtSYWN1dGUuc21jcBFSY29tbWFhY2NlbnQuc21jcAtSY2Fyb24uc21jcAtTYWN1dGUuc21jcBBTY2lyY3VtZmxleC5zbWNwDVNjZWRpbGxhLnNtY3ALU2Nhcm9uLnNtY3ARVGNvbW1hYWNjZW50LnNtY3ALVGNhcm9uLnNtY3ALVXRpbGRlLnNtY3AMVW1hY3Jvbi5zbWNwC1VicmV2ZS5zbWNwClVyaW5nLnNtY3ASVWh1bmdhcnVtbGF1dC5zbWNwDFVvZ29uZWsuc21jcBBXY2lyY3VtZmxleC5zbWNwEFljaXJjdW1mbGV4LnNtY3AOWWRpZXJlc2lzLnNtY3ALWmFjdXRlLnNtY3APWmRvdGFjY2VudC5zbWNwC1pjYXJvbi5zbWNwD2dlcm1hbmRibHMuc21jcApBbHBoYXRvbm9zDEVwc2lsb250b25vcwhFdGF0b25vcwlJb3RhdG9ub3MMT21pY3JvbnRvbm9zDFVwc2lsb250b25vcwpPbWVnYXRvbm9zEWlvdGFkaWVyZXNpc3Rvbm9zBUFscGhhBEJldGEHRXBzaWxvbgRaZXRhA0V0YQRJb3RhBUthcHBhAk11Ak51B09taWNyb24DUmhvA1RhdQdVcHNpbG9uA0NoaQxJb3RhZGllcmVzaXMPVXBzaWxvbmRpZXJlc2lzCmFscGhhdG9ub3MMZXBzaWxvbnRvbm9zCGV0YXRvbm9zCWlvdGF0b25vcxR1cHNpbG9uZGllcmVzaXN0b25vcwVrYXBwYQdvbWljcm9uB3VuaTAzQkMCbnUDY2hpDGlvdGFkaWVyZXNpcw91cHNpbG9uZGllcmVzaXMMb21pY3JvbnRvbm9zDHVwc2lsb250b25vcwpvbWVnYXRvbm9zB3VuaTA0MDEHdW5pMDQwMwd1bmkwNDA1B3VuaTA0MDYHdW5pMDQwNwd1bmkwNDA4B3VuaTA0MUEHdW5pMDQwQwd1bmkwNDBFB3VuaTA0MTAHdW5pMDQxMgd1bmkwNDEzB3VuaTA0MTUHdW5pMDQxOQd1bmkwNDFDB3VuaTA0MUQHdW5pMDQxRQd1bmkwNDFGB3VuaTA0MjAHdW5pMDQyMQd1bmkwNDIyB3VuaTA0MjUHdW5pMDQzMAd1bmkwNDM1B3VuaTA0MzkHdW5pMDQzRQd1bmkwNDQwB3VuaTA0NDEHdW5pMDQ0Mwd1bmkwNDQ1B3VuaTA0NTEHdW5pMDQ1Mwd1bmkwNDU1B3VuaTA0NTYHdW5pMDQ1Nwd1bmkwNDU4B3VuaTA0NUMHdW5pMDQ1RQZXZ3JhdmUGd2dyYXZlBldhY3V0ZQZ3YWN1dGUJV2RpZXJlc2lzCXdkaWVyZXNpcwZZZ3JhdmUGeWdyYXZlBm1pbnV0ZQZzZWNvbmQJZXhjbGFtZGJsB3VuaUZCMDIHdW5pMDFGMAd1bmkwMkJDB3VuaTFFM0UHdW5pMUUzRgd1bmkxRTAwB3VuaTFFMDEHdW5pMUY0RAd1bmlGQjAzB3VuaUZCMDQHdW5pMDQwMAd1bmkwNDBEB3VuaTA0NTAHdW5pMDQ1RAd1bmkwNDcwB3VuaTA0NzEHdW5pMDQ3Ngd1bmkwNDc3B3VuaTA0NzkHdW5pMDQ3OAd1bmkwNDk4B3VuaTA0OTkHdW5pMDRBQQd1bmkwNEFCB3VuaTA0QUUHdW5pMDRBRgd1bmkwNEMwB3VuaTA0QzEHdW5pMDRDMgd1bmkwNENGB3VuaTA0RDAHdW5pMDREMQd1bmkwNEQyB3VuaTA0RDMHdW5pMDRENAd1bmkwNEQ1B3VuaTA0RDYHdW5pMDRENwd1bmkwNERBB3VuaTA0RDkHdW5pMDREQgd1bmkwNERDB3VuaTA0REQHdW5pMDRERQd1bmkwNERGB3VuaTA0RTIHdW5pMDRFMwd1bmkwNEU0B3VuaTA0RTUHdW5pMDRFNgd1bmkwNEU3B3VuaTA0RTgHdW5pMDRFOQd1bmkwNEVBB3VuaTA0RUIHdW5pMDRFQwd1bmkwNEVEB3VuaTA0RUUHdW5pMDRFRgd1bmkwNEYwB3VuaTA0RjEHdW5pMDRGMgd1bmkwNEYzB3VuaTA0RjQHdW5pMDRGNQd1bmkwNEY4B3VuaTA0RjkHdW5pMDRGQwd1bmkwNEZEB3VuaTA1MDEHdW5pMDUxMgd1bmkwNTEzB3VuaTFFQTAHdW5pMUVBMQd1bmkxRUEyB3VuaTFFQTMHdW5pMUVBNAd1bmkxRUE1B3VuaTFFQTYHdW5pMUVBNwd1bmkxRUE4B3VuaTFFQTkHdW5pMUVBQQd1bmkxRUFCB3VuaTFFQUMHdW5pMUVBRAd1bmkxRUFFB3VuaTFFQUYHdW5pMUVCMAd1bmkxRUIxB3VuaTFFQjIHdW5pMUVCMwd1bmkxRUI0B3VuaTFFQjUHdW5pMUVCNgd1bmkxRUI3B3VuaTFFQjgHdW5pMUVCOQd1bmkxRUJBB3VuaTFFQkIHdW5pMUVCQwd1bmkxRUJEB3VuaTFFQkUHdW5pMUVCRgd1bmkxRUMwB3VuaTFFQzEHdW5pMUVDMgd1bmkxRUMzB3VuaTFFQzQHdW5pMUVDNQd1bmkxRUM2B3VuaTFFQzcHdW5pMUVDOAd1bmkxRUM5B3VuaTFFQ0EHdW5pMUVDQgd1bmkxRUNDB3VuaTFFQ0QHdW5pMUVDRQd1bmkxRUNGB3VuaTFFRDAHdW5pMUVEMQd1bmkxRUQyB3VuaTFFRDMHdW5pMUVENAd1bmkxRUQ1B3VuaTFFRDYHdW5pMUVENwd1bmkxRUQ4B3VuaTFFRDkHdW5pMUVEQQd1bmkxRURCB3VuaTFFREMHdW5pMUVERAd1bmkxRURFB3VuaTFFREYHdW5pMUVFMAd1bmkxRUUxB3VuaTFFRTIHdW5pMUVFMwd1bmkxRUU0B3VuaTFFRTUHdW5pMUVFNgd1bmkxRUU3B3VuaTFFRTgHdW5pMUVFOQd1bmkxRUVBB3VuaTFFRUIHdW5pMUVFQwd1bmkxRUVEB3VuaTFFRUUHdW5pMUVFRgd1bmkx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AAwA4f/UAPH/yQD5/9EBBP/lARv/4wEv/8QBOP/hAUn/1AFK//UBS//nAVP/ZAFU/8kACgDh/8EA8f/NAPn/0gEv/8wBOP/lATv/3wFJ/84BS//qAVP/ngFU/84ACgDh/8IA8f/GAPn/zwEv/8ABOP/hATv/3wFJ/80BS//oAVP/nwFU/8YACQDh/8kA8f/fAPn/4QEE/+0BG//rAS//3wE7/+kBSv/1AVT/4AAIANQAFQDoABUBOP/kATn/5QE7/+QBSf/jAUv/4gFT/+QACQDh/+YA8f/QAPn/1gEv/84BOP/oAUn/5wFL/+0BU//mAVT/0AALANQAFADh/+AA6AATATj/4QE5/+ABPP/hAUH/6QFJ/98BS//eAVP/3wFV//IAGACz/9QAvf/tAL8AEQDF/+AAx//nAMj/5QDJ/+4A1AASAOX/6QDx/9cBL//XATn/0wE7/9YBPP/FAUH/5wFJAA0BSwAMAVT/1gFV//IBqP/pAaz/5wG0/+cBtf/pAd//8AAFABn/8gDh//EBSf/yAUv/8gFT//IACADUABUA6AAVATj/5AE5/+UBO//kAUn/4wFL/+IBU//kAAgA1AAVAOgAFQE4/+QBOf/lATv/5AFJ/+MBS//iAVP/5AASANT/rgDhABIA5v/gAOj/rQDq/9YA+P/fAPz/0gEC/+ABF//OASf/3QEp/+IBLf/gATP/4AE5/+kBPP/aAUb/vQFQ/98BUwARAAgA1AAVAOgAFQE4/+QBOf/lATv/5AFJ/+MBS//iAVP/5AAIANQAFQDoABUBOP/kATn/5QE7/+QBSf/jAUv/4gFT/+QADQDUABMA4f/mAOL/9ADoABIA8f/nAPn/5wEv/+cBOP/lATn/6AFJ/+YBS//mAVP/5gFU/+cACgDh/8QA8f/NAPn/1QEv/8wBOP/mATv/3wFJ/9EBS//sAVP/oQFU/88ACgDh/8MA8f/PAPn/1AEv/84BOP/nATv/3wFJ/9EBS//sAVP/oAFU/9EAAgDU/+IBU//kAAIA1P/hAOj/5AAHAOj/7gDx/+4A+f/vAQT/9AEb//EBL//vAVT/7wAFAPH/9AD5//QBBP/1AS//9QFU//UAAgDo/2gBF//uAAcA6AAUAPH/7QD3/9AA+f/uAS//7QE5/+0BVP/tAAEBF//xAAUBF//rAaj/6wGs/+kBtP/rAbX/6wAT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//AACADUABUA6AAVATj/5AE5/+UBO//kAUn/4wFL/+IBU//kAAgA1AAVAOgAFQE4/+QBOf/lATv/5AFJ/+MBS//iAVP/5AAIANQAFQDoABUBOP/kATn/5QE7/+QBSf/jAUv/4gFT/+QACADUABUA6AAVATj/5AE5/+UBO//kAUn/4wFL/+IBU//kAAgA1AAVAOgAFQE4/+QBOf/lATv/5AFJ/+MBS//iAVP/5AAJAH//3wCw//MAsv/wAL//6gDU/98A4f/gAVP/4AGm/+0BvP/1AAkAf//fALD/8wCy//AAv//qANT/3wDh/+ABU//gAab/7QG8//UACQB//98AsP/zALL/8AC//+oA1P/fAOH/4AFT/+ABpv/tAbz/9QAJAH//3wCw//MAsv/wAL//6gDU/98A4f/gAVP/4AGm/+0BvP/1AAkAf//fALD/8wCy//AAv//qANT/3wDh/+ABU//gAab/7QG8//UAAQGm/+sAAQGm/+sAAQGm/+sAAQGm/+sAJAAI/+IACwAUAAz/zwA/ABIASP/qAFT/2ABW/+oAXwATAGv/rgB6/80Af/+gAIT/wQCH/8AAs//QALf/6gC6/8YAuwANAL3/6QC+/9YAwf/oAML/ugDF/+kAx//LAMj/2gDJ/8cBbv/TAab/qwGo/80BrP/LAbT/ywG1/8sBuP/zAbv/8wG8/+8B3P/AAd//7gAIAPH/8AD5//ABBP/xARv/8wEv//EBSv/zAUz/8wFU//EACADx//AA+f/wAQT/8QEb//MBL//xAUr/8wFM//MBVP/xAAgA8f/wAPn/8AEE//EBG//zAS//8QFK//MBTP/zAVT/8QAIAPH/8AD5//ABBP/xARv/8wEv//EBSv/zAUz/8wFU//EACADx//AA+f/wAQT/8QEb//MBL//xAUr/8wFM//MBVP/xAAgA8f/wAPn/8AEE//EBG//zAS//8QFK//MBTP/zAVT/8QAIAPH/8AD5//ABBP/xARv/8wEv//EBSv/zAUz/8wFU//EAAQDx//UAAQDx//UAAQDx//UAAQDx//UAAQDx/9YACQDF/+oA6P+4APH/4gEE//ABG//xAS//6wFK//UBVP/sAdz/6gAJAMX/6gDo/7gA8f/iAQT/8AEb//EBL//rAUr/9QFU/+wB3P/qAAkAxf/qAOj/uADx/+IBBP/wARv/8QEv/+sBSv/1AVT/7AHc/+oACQDF/+oA6P+4APH/4gEE//ABG//xAS//6wFK//UBVP/sAdz/6gAJAMX/6gDo/7gA8f/iAQT/8AEb//EBL//rAUr/9QFU/+wB3P/qAAcASAANAMEACwDC/+oAxQAMAOj/yAEX//EB3//1AAcASAANAMEACwDC/+oAxQAMAOj/yAEX//EB3//1AB0AIf+vAFb/7wBZ/98Alv/uALP/5QC0/9EAvwARAMX/yADUABMA4f/FAPH/ygD5/9ABL/+BATj/ZQE5/4UBO/9mATz/3QFB//IBSf+xAUv/ygFT/6kBVP/IAaz/9QG0//UBuP/HAbn/8QG6/80Bu//dAb3/xAAIAPH/8AD5//ABBP/xARv/8wEv//EBSv/zAUz/8wFU//EAHQAh/68AVv/vAFn/3wCW/+4As//lALT/0QC/ABEAxf/IANQAEwDh/8UA8f/KAPn/0AEv/4EBOP9lATn/hQE7/2YBPP/dAUH/8gFJ/7EBS//KAVP/qQFU/8gBrP/1AbT/9QG4/8cBuf/xAbr/zQG7/90Bvf/EAAgA8f/wAPn/8AEE//EBG//zAS//8QFK//MBTP/zAVT/8QAdACH/rwBW/+8AWf/fAJb/7gCz/+UAtP/RAL8AEQDF/8gA1AATAOH/xQDx/8oA+f/QAS//gQE4/2UBOf+FATv/ZgE8/90BQf/yAUn/sQFL/8oBU/+pAVT/yAGs//UBtP/1Abj/xwG5//EBuv/NAbv/3QG9/8QACADx//AA+f/wAQT/8QEb//MBL//xAUr/8wFM//MBVP/xAAQAC//mAD//9ABf/+8BPP/tAAQAC//mAD//9ABf/+8BPP/tAAQAC//mAD//9ABf/+8BPP/tAAQAC//mAD//9ABf/+8BPP/tAAkAf//fALD/8wCy//AAv//qANT/3wDh/+ABU//gAab/7QG8//UABQBI/+4AWf/qAbr/8AG7/+0Bvf/wAAEA8f/1AAUASP/uAFn/6gG6//ABu//tAb3/8AABAPH/9QAFAEj/7gBZ/+oBuv/wAbv/7QG9//AAAQDx//UABQBI/+4AWf/qAbr/8AG7/+0Bvf/wAAEA8f/1AAUASP/uAFn/6gG6//ABu//tAb3/8AABAPH/9QAIANQAFQDoABUBOP/kATn/5QE7/+QBSf/jAUv/4gFT/+QAAQDx/9YACADUABUA6AAVATj/5AE5/+UBO//kAUn/4wFL/+IBU//kAAgA1AAVAOgAFQE4/+QBOf/lATv/5AFJ/+MBS//iAVP/5AAIANQAFQDoABUBOP/kATn/5QE7/+QBSf/jAUv/4gFT/+QACADUABUA6AAVATj/5AE5/+UBO//kAUn/4wFL/+IBU//kAAgA1AAVAOgAFQE4/+QBOf/lATv/5AFJ/+MBS//iAVP/5AABAab/6wAUAFn/wQCz/8UAxf+0AOX/1wDx/7kA+f/pAQT/sgEX/9IBG//IAS//oAE5/8UBQf/kAUr/zAFM/8wBVP/LAVX/7wGo/+gBrP/mAbT/5wG1/+cACwBZ/8wBpgATAaj/8wGs//EBtP/yAbX/8gG4/70Buf/uAbr/uAG7/9cBvf+3AAsAWf/MAaYAEwGo//MBrP/xAbT/8gG1//IBuP+9Abn/7gG6/7gBu//XAb3/twALAFn/zAGmABMBqP/zAaz/8QG0//IBtf/yAbj/vQG5/+4Buv+4Abv/1wG9/7cACwBZ/8wBpgATAaj/8wGs//EBtP/yAbX/8gG4/70Buf/uAbr/uAG7/9cBvf+3AAgA1AAVAOgAFQE4/+QBOf/lATv/5AFJ/+MBS//iAVP/5AABAPH/1gAIANQAFQDoABUBOP/kATn/5QE7/+QBSf/jAUv/4gFT/+QAAQDx/9YACADUABUA6AAVATj/5AE5/+UBO//kAUn/4wFL/+IBU//kAAEA8f/WAAEA8f/WAAkAf//fALD/8wCy//AAv//qANT/3wDh/+ABU//gAab/7QG8//UACQDF/+oA6P+4APH/4gEE//ABG//xAS//6wFK//UBVP/sAdz/6gAJAH//3wCw//MAsv/wAL//6gDU/98A4f/gAVP/4AGm/+0BvP/1AAkAxf/qAOj/uADx/+IBBP/wARv/8QEv/+sBSv/1AVT/7AHc/+oACQB//98AsP/zALL/8AC//+oA1P/fAOH/4AFT/+ABpv/tAbz/9QAJAMX/6gDo/7gA8f/iAQT/8AEb//EBL//rAUr/9QFU/+wB3P/qAAMASAAUAFYAGABZABEAAwBIABQAVgAYAFkAEQADAEgAFABWABgAWQARADsAVP+/AFn/0QBr/2wAev9uAH//QwCE/6wAh/+hALP/uAC6/34Avv97AMH/mwDC/3kAxf+yAMf/fgDI/30Ayf98ANT/rwDhAA8A5f/kAOb/oADo/3QA6v+AAPH/sgD4/30A+f+yAPr/gAD8/3kA/QAoAQL/fQEE/38BF/9mARv/2gEn/4EBKf+YAS3/fQEv/7MBM/+gATn/fAE7/5oBPP9sAUH/5gFG/2sBSv+SAUz/rQFQ/3sBUwAPAVT/kQFV//IBpv+vAaj/uQGs/7kBtP+5AbX/uQG3/7wBuP/xAbv/8QG8/+0B3P+zAd//8QA7AFT/vwBZ/9EAa/9sAHr/bgB//0MAhP+sAIf/oQCz/7gAuv9+AL7/ewDB/5sAwv95AMX/sgDH/34AyP99AMn/fADU/68A4QAPAOX/5ADm/6AA6P90AOr/gADx/7IA+P99APn/sgD6/4AA/P95AP0AKAEC/30BBP9/ARf/ZgEb/9oBJ/+BASn/mAEt/30BL/+zATP/oAE5/3wBO/+aATz/bAFB/+YBRv9rAUr/kgFM/60BUP97AVMADwFU/5EBVf/yAab/rwGo/7kBrP+5AbT/uQG1/7kBt/+8Abj/8QG7//EBvP/tAdz/swHf//EAOwBU/78AWf/RAGv/bAB6/24Af/9DAIT/rACH/6EAs/+4ALr/fgC+/3sAwf+bAML/eQDF/7IAx/9+AMj/fQDJ/3wA1P+vAOEADwDl/+QA5v+gAOj/dADq/4AA8f+yAPj/fQD5/7IA+v+AAPz/eQD9ACgBAv99AQT/fwEX/2YBG//aASf/gQEp/5gBLf99AS//swEz/6ABOf98ATv/mgE8/2wBQf/mAUb/awFK/5IBTP+tAVD/ewFTAA8BVP+RAVX/8gGm/68BqP+5Aaz/uQG0/7kBtf+5Abf/vAG4//EBu//xAbz/7QHc/7MB3//xAAEBpv/rAAEBpv/rAAEBpv/rAAEBpv/rAAEBpv/rAAEBpv/rAAkACwAPAD8ADABU/+sAXwAOAab/ywGo/+kBrP/nAbT/5wG1/+cAJAAI/+IACwAUAAz/zwA/ABIASP/qAFT/2ABW/+oAXwATAGv/rgB6/80Af/+gAIT/wQCH/8AAs//QALf/6gC6/8YAuwANAL3/6QC+/9YAwf/oAML/ugDF/+kAx//LAMj/2gDJ/8cBbv/TAab/qwGo/80BrP/LAbT/ywG1/8sBuP/zAbv/8wG8/+8B3P/AAd//7gAHAEgADQDBAAsAwv/qAMUADADo/8gBF//xAd//9QAkAAj/4gALABQADP/PAD8AEgBI/+oAVP/YAFb/6gBfABMAa/+uAHr/zQB//6AAhP/BAIf/wACz/9AAt//qALr/xgC7AA0Avf/pAL7/1gDB/+gAwv+6AMX/6QDH/8sAyP/aAMn/xwFu/9MBpv+rAaj/zQGs/8sBtP/LAbX/ywG4//MBu//zAbz/7wHc/8AB3//uAAgAWf/lALP/ywDI/+QBpgANAaj/7QGs/+sBtP/sAbX/7AAIAFn/5QCz/8sAyP/kAaYADQGo/+0BrP/rAbT/7AG1/+wACABZ/+UAs//LAMj/5AGmAA0BqP/tAaz/6wG0/+wBtf/sAB0AIf+vAFb/7wBZ/98Alv/uALP/5QC0/9EAvwARAMX/yADUABMA4f/FAPH/ygD5/9ABL/+BATj/ZQE5/4UBO/9mATz/3QFB//IBSf+xAUv/ygFT/6kBVP/IAaz/9QG0//UBuP/HAbn/8QG6/80Bu//dAb3/xAAFAEj/7gBZ/+oBuv/wAbv/7QG9//AACADUABUA6AAVATj/5AE5/+UBO//kAUn/4wFL/+IBU//kAAgA1AAVAOgAFQE4/+QBOf/lATv/5AFJ/+MBS//iAVP/5AAJAH//3wCw//MAsv/wAL//6gDU/98A4f/gAVP/4AGm/+0BvP/1ACQACP/iAAsAFAAM/88APwASAEj/6gBU/9gAVv/qAF8AEwBr/64Aev/NAH//oACE/8EAh//AALP/0AC3/+oAuv/GALsADQC9/+kAvv/WAMH/6ADC/7oAxf/pAMf/ywDI/9oAyf/HAW7/0wGm/6sBqP/NAaz/ywG0/8sBtf/LAbj/8wG7//MBvP/vAdz/wAHf/+4AHQAh/68AVv/vAFn/3wCW/+4As//lALT/0QC/ABEAxf/IANQAEwDh/8UA8f/KAPn/0AEv/4EBOP9lATn/hQE7/2YBPP/dAUH/8gFJ/7EBS//KAVP/qQFU/8gBrP/1AbT/9QG4/8cBuf/xAbr/zQG7/90Bvf/EAAIBDAALAVP/5gAFAEj/7gBZ/+oBuv/wAbv/7QG9//AACABZ/+UAs//LAMj/5AGmAA0BqP/tAaz/6wG0/+wBtf/sAAgA1AAVAOgAFQE4/+QBOf/lATv/5AFJ/+MBS//iAVP/5AAIANQAFQDoABUBOP/kATn/5QE7/+QBSf/jAUv/4gFT/+QAFABZ/8EAs//FAMX/tADl/9cA8f+5APn/6QEE/7IBF//SARv/yAEv/6ABOf/FAUH/5AFK/8wBTP/MAVT/ywFV/+8BqP/oAaz/5gG0/+cBtf/nAAgA1AAVAOgAFQE4/+QBOf/lATv/5AFJ/+MBS//iAVP/5AAIANQAFQDoABUBOP/kATn/5QE7/+QBSf/jAUv/4gFT/+QACQB//98AsP/zALL/8AC//+oA1P/fAOH/4AFT/+ABpv/tAbz/9QAJAFYADgB//tcAv/+YAML/xwDU/xIA6P9SAUb/zwGm/4AB3//XADsAVP+/AFn/0QBr/2wAev9uAH//QwCE/6wAh/+hALP/uAC6/34Avv97AMH/mwDC/3kAxf+yAMf/fgDI/30Ayf98ANT/rwDhAA8A5f/kAOb/oADo/3QA6v+AAPH/sgD4/30A+f+yAPr/gAD8/3kA/QAoAQL/fQEE/38BF/9mARv/2gEn/4EBKf+YAS3/fQEv/7MBM/+gATn/fAE7/5oBPP9sAUH/5gFG/2sBSv+SAUz/rQFQ/3sBUwAPAVT/kQFV//IBpv+vAaj/uQGs/7kBtP+5AbX/uQG3/7wBuP/xAbv/8QG8/+0B3P+zAd//8QAkAAj/4gALABQADP/PAD8AEgBI/+oAVP/YAFb/6gBfABMAa/+uAHr/zQB//6AAhP/BAIf/wACz/9AAt//qALr/xgC7AA0Avf/pAL7/1gDB/+gAwv+6AMX/6QDH/8sAyP/aAMn/xwFu/9MBpv+rAaj/zQGs/8sBtP/LAbX/ywG4//MBu//zAbz/7wHc/8AB3//uABgAs//UAL3/7QC/ABEAxf/gAMf/5wDI/+UAyf/uANQAEgDl/+kA8f/XAS//1wE5/9MBO//WATz/xQFB/+cBSQANAUsADAFU/9YBVf/yAaj/6QGs/+cBtP/nAbX/6QHf//AACADUABUA6AAVATj/5AE5/+UBO//kAUn/4wFL/+IBU//kACQACP/iAAsAFAAM/88APwASAEj/6gBU/9gAVv/qAF8AEwBr/64Aev/NAH//oACE/8EAh//AALP/0AC3/+oAuv/GALsADQC9/+kAvv/WAMH/6ADC/7oAxf/pAMf/ywDI/9oAyf/HAW7/0wGm/6sBqP/NAaz/ywG0/8sBtf/LAbj/8wG7//MBvP/vAdz/wAHf/+4AAQDx/9YACQDF/+oA6P+4APH/4gEE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/+oAVP/YAFb/6gBfABMAa/+uAHr/zQB//6AAhP/BAIf/wACz/9AAt//qALr/xgC7AA0Avf/pAL7/1gDB/+gAwv+6AMX/6QDH/8sAyP/aAMn/xwFu/9MBpv+rAaj/zQGs/8sBtP/LAbX/ywG4//MBu//zAbz/7wHc/8AB3//uAAcASAANAMEACwDC/+oAxQAMAOj/yAEX//EB3//1AAEAWQALAAEAWQALAAEAWQALAAgA1AAVAOgAFQE4/+QBOf/lATv/5AFJ/+MBS//iAVP/5AABAPH/1gAdACH/rwBW/+8AWf/fAJb/7gCz/+UAtP/RAL8AEQDF/8gA1AATAOH/xQDx/8oA+f/QAS//gQE4/2UBOf+FATv/ZgE8/90BQf/yAUn/sQFL/8oBU/+pAVT/yAGs//UBtP/1Abj/xwG5//EBuv/NAbv/3QG9/8QACADx//AA+f/wAQT/8QEb//MBL//xAUr/8wFM//MBVP/xAAkAf//fALD/8wCy//AAv//qANT/3wDh/+ABU//gAab/7QG8//UABQBI/+4AWf/qAbr/8AG7/+0Bvf/wAAEA8f/1AAkACwAUAD8AEQBU/+IAXwATAab/tAGo/9kBrP/ZAbT/2QG1/9kABwBIAA0AwQALAML/6gDFAAwA6P/IARf/8QHf//UABAAL/+YAP//0AF//7wE8/+0AJAAI/+IACwAUAAz/zwA/ABIASP/qAFT/2ABW/+oAXwATAGv/rgB6/80Af/+gAIT/wQCH/8AAs//QALf/6gC6/8YAuwANAL3/6QC+/9YAwf/oAML/ugDF/+kAx//LAMj/2gDJ/8cBbv/TAab/qwGo/80BrP/LAbT/ywG1/8sBuP/zAbv/8wG8/+8B3P/AAd//7gAHAEgADQDBAAsAwv/qAMUADADo/8gBF//xAd//9QAIANQAFQDoABUBOP/kATn/5QE7/+QBSf/jAUv/4gFT/+QAGACz/9QAvf/tAL8AEQDF/+AAx//nAMj/5QDJ/+4A1AASAOX/6QDx/9cBL//XATn/0wE7/9YBPP/FAUH/5wFJAA0BSwAMAVT/1gFV//IBqP/pAaz/5wG0/+cBtf/pAd//8AABARf/8QAIANQAFQDoABUBOP/kATn/5QE7/+QBSf/jAUv/4gFT/+QAHQAh/68AVv/vAFn/3wCW/+4As//lALT/0QC/ABEAxf/IANQAEwDh/8UA8f/KAPn/0AEv/4EBOP9lATn/hQE7/2YBPP/dAUH/8gFJ/7EBS//KAVP/qQFU/8gBrP/1AbT/9QG4/8cBuf/xAbr/zQG7/90Bvf/EAAgA8f/wAPn/8AEE//EBG//zAS//8QFK//MBTP/zAVT/8QAdACH/rwBW/+8AWf/fAJb/7gCz/+UAtP/RAL8AEQDF/8gA1AATAOH/xQDx/8oA+f/QAS//gQE4/2UBOf+FATv/ZgE8/90BQf/yAUn/sQFL/8oBU/+pAVT/yAGs//UBtP/1Abj/xwG5//EBuv/NAbv/3QG9/8QACADx//AA+f/wAQT/8QEb//MBL//xAUr/8wFM//MBVP/xAAUASP/uAFn/6gG6//ABu//tAb3/8AABAPH/9QABAPH/9QABAPH/9QAYALP/1AC9/+0AvwARAMX/4ADH/+cAyP/lAMn/7gDUABIA5f/pAPH/1wEv/9cBOf/TATv/1gE8/8UBQf/nAUkADQFLAAwBVP/WAVX/8gGo/+kBrP/nAbT/5wG1/+kB3//wAAEBF//xAAkAf//fALD/8wCy//AAv//qANT/3wDh/+ABU//gAab/7QG8//UACQDF/+oA6P+4APH/4gEE//ABG//xAS//6wFK//UBVP/sAdz/6gAJAMX/6gDo/7gA8f/iAQT/8AEb//EBL//rAUr/9QFU/+wB3P/qAAcAxf/qAOj/7gDx/9YA+f/tAS//7AFU/+wB3P/oABIA1P+uAOEAEgDm/+AA6P+tAOr/1gD4/98A/P/SAQL/4AEX/84BJ//dASn/4gEt/+ABM//gATn/6QE8/9oBRv+9AVD/3wFTABEABwBIAA0AwQALAML/6gDFAAwA6P/IARf/8QHf//UAEgDU/64A4QASAOb/4ADo/60A6v/WAPj/3wD8/9IBAv/gARf/zgEn/90BKf/iAS3/4AEz/+ABOf/pATz/2gFG/70BUP/fAVMAEQAHAEgADQDBAAsAwv/qAMUADADo/8gBF//xAd//9QASANT/rgDhABIA5v/gAOj/rQDq/9YA+P/fAPz/0gEC/+ABF//OASf/3QEp/+IBLf/gATP/4AE5/+kBPP/aAUb/vQFQ/98BUwARAAcASAANAMEACwDC/+oAxQAMAOj/yAEX//EB3//1ABgAs//UAL3/7QC/ABEAxf/gAMf/5wDI/+UAyf/uANQAEgDl/+kA8f/XAS//1wE5/9MBO//WATz/xQFB/+cBSQANAUsADAFU/9YBVf/yAaj/6QGs/+cBtP/nAbX/6QHf//AAAQEX//EAHQAh/68AVv/vAFn/3wCW/+4As//lALT/0QC/ABEAxf/IANQAEwDh/8UA8f/KAPn/0AEv/4EBOP9lATn/hQE7/2YBPP/dAUH/8gFJ/7EBS//KAVP/qQFU/8gBrP/1AbT/9QG4/8cBuf/xAbr/zQG7/90Bvf/EAAgA8f/wAPn/8AEE//EBG//zAS//8QFK//MBTP/zAVT/8QAdACH/rwBW/+8AWf/fAJb/7gCz/+UAtP/RAL8AEQDF/8gA1AATAOH/xQDx/8oA+f/QAS//gQE4/2UBOf+FATv/ZgE8/90BQf/yAUn/sQFL/8oBU/+pAVT/yAGs//UBtP/1Abj/xwG5//EBuv/NAbv/3QG9/8QACADx//AA+f/wAQT/8QEb//MBL//xAUr/8wFM//MBVP/xAB0AIf+vAFb/7wBZ/98Alv/uALP/5QC0/9EAvwARAMX/yADUABMA4f/FAPH/ygD5/9ABL/+BATj/ZQE5/4UBO/9mATz/3QFB//IBSf+xAUv/ygFT/6kBVP/IAaz/9QG0//UBuP/HAbn/8QG6/80Bu//dAb3/xAAIAPH/8AD5//ABBP/xARv/8wEv//EBSv/zAUz/8wFU//EAHQAh/68AVv/vAFn/3wCW/+4As//lALT/0QC/ABEAxf/IANQAEwDh/8UA8f/KAPn/0AEv/4EBOP9lATn/hQE7/2YBPP/dAUH/8gFJ/7EBS//KAVP/qQFU/8gBrP/1AbT/9QG4/8cBuf/xAbr/zQG7/90Bvf/EAAgA8f/wAPn/8AEE//EBG//zAS//8QFK//MBTP/zAVT/8QAdACH/rwBW/+8AWf/fAJb/7gCz/+UAtP/RAL8AEQDF/8gA1AATAOH/xQDx/8oA+f/QAS//gQE4/2UBOf+FATv/ZgE8/90BQf/yAUn/sQFL/8oBU/+pAVT/yAGs//UBtP/1Abj/xwG5//EBuv/NAbv/3QG9/8QACADx//AA+f/wAQT/8QEb//MBL//xAUr/8wFM//MBVP/xAB0AIf+vAFb/7wBZ/98Alv/uALP/5QC0/9EAvwARAMX/yADUABMA4f/FAPH/ygD5/9ABL/+BATj/ZQE5/4UBO/9mATz/3QFB//IBSf+xAUv/ygFT/6kBVP/IAaz/9QG0//UBuP/HAbn/8QG6/80Bu//dAb3/xAAIAPH/8AD5//ABBP/xARv/8wEv//EBSv/zAUz/8wFU//EAHQAh/68AVv/vAFn/3wCW/+4As//lALT/0QC/ABEAxf/IANQAEwDh/8UA8f/KAPn/0AEv/4EBOP9lATn/hQE7/2YBPP/dAUH/8gFJ/7EBS//KAVP/qQFU/8gBrP/1AbT/9QG4/8cBuf/xAbr/zQG7/90Bvf/EAAgA8f/wAPn/8AEE//EBG//zAS//8QFK//MBTP/zAVT/8QAdACH/rwBW/+8AWf/fAJb/7gCz/+UAtP/RAL8AEQDF/8gA1AATAOH/xQDx/8oA+f/QAS//gQE4/2UBOf+FATv/ZgE8/90BQf/yAUn/sQFL/8oBU/+pAVT/yAGs//UBtP/1Abj/xwG5//EBuv/NAbv/3QG9/8QACADx//AA+f/wAQT/8QEb//MBL//xAUr/8wFM//MBVP/xAB0AIf+vAFb/7wBZ/98Alv/uALP/5QC0/9EAvwARAMX/yADUABMA4f/FAPH/ygD5/9ABL/+BATj/ZQE5/4UBO/9mATz/3QFB//IBSf+xAUv/ygFT/6kBVP/IAaz/9QG0//UBuP/HAbn/8QG6/80Bu//dAb3/xAAIAPH/8AD5//ABBP/xARv/8wEv//EBSv/zAUz/8wFU//EAHQAh/68AVv/vAFn/3wCW/+4As//lALT/0QC/ABEAxf/IANQAEwDh/8UA8f/KAPn/0AEv/4EBOP9lATn/hQE7/2YBPP/dAUH/8gFJ/7EBS//KAVP/qQFU/8gBrP/1AbT/9QG4/8cBuf/xAbr/zQG7/90Bvf/EAAgA8f/wAPn/8AEE//EBG//zAS//8QFK//MBTP/zAVT/8QAdACH/rwBW/+8AWf/fAJb/7gCz/+UAtP/RAL8AEQDF/8gA1AATAOH/xQDx/8oA+f/QAS//gQE4/2UBOf+FATv/ZgE8/90BQf/yAUn/sQFL/8oBU/+pAVT/yAGs//UBtP/1Abj/xwG5//EBuv/NAbv/3QG9/8QACADx//AA+f/wAQT/8QEb//MBL//xAUr/8wFM//MBVP/xAB0AIf+vAFb/7wBZ/98Alv/uALP/5QC0/9EAvwARAMX/yADUABMA4f/FAPH/ygD5/9ABL/+BATj/ZQE5/4UBO/9mATz/3QFB//IBSf+xAUv/ygFT/6kBVP/IAaz/9QG0//UBuP/HAbn/8QG6/80Bu//dAb3/xAAIAPH/8AD5//ABBP/xARv/8wEv//EBSv/zAUz/8wFU//EABQBI/+4AWf/qAbr/8AG7/+0Bvf/wAAEA8f/1AAUASP/uAFn/6gG6//ABu//tAb3/8AABAPH/9QAFAEj/7gBZ/+oBuv/wAbv/7QG9//AAAQDx//UABQBI/+4AWf/qAbr/8AG7/+0Bvf/wAAEA8f/1AAUASP/uAFn/6gG6//ABu//tAb3/8AABAPH/9QAFAEj/7gBZ/+oBuv/wAbv/7QG9//AAAQDx//UABQBI/+4AWf/qAbr/8AG7/+0Bvf/wAAEA8f/1AAUASP/uAFn/6gG6//ABu//tAb3/8AABAPH/9QAIANQAFQDoABUBOP/kATn/5QE7/+QBSf/jAUv/4gFT/+QACADUABUA6AAVATj/5AE5/+UBO//kAUn/4wFL/+IBU//kAAkAf//fALD/8wCy//AAv//qANT/3wDh/+ABU//gAab/7QG8//UACQDF/+oA6P+4APH/4gEE//ABG//xAS//6wFK//UBVP/sAdz/6gAJAH//3wCw//MAsv/wAL//6gDU/98A4f/gAVP/4AGm/+0BvP/1AAkAxf/qAOj/uADx/+IBBP/wARv/8QEv/+sBSv/1AVT/7AHc/+oACQB//98AsP/zALL/8AC//+oA1P/fAOH/4AFT/+ABpv/tAbz/9QAJAMX/6gDo/7gA8f/iAQT/8AEb//EBL//rAUr/9QFU/+wB3P/qAAkAf//fALD/8wCy//AAv//qANT/3wDh/+ABU//gAab/7QG8//UACQDF/+oA6P+4APH/4gEE//ABG//xAS//6wFK//UBVP/sAdz/6gAJAH//3wCw//MAsv/wAL//6gDU/98A4f/gAVP/4AGm/+0BvP/1AAkAxf/qAOj/uADx/+IBBP/wARv/8QEv/+sBSv/1AVT/7AHc/+oACQB//98AsP/zALL/8AC//+oA1P/fAOH/4AFT/+ABpv/tAbz/9QAJAMX/6gDo/7gA8f/iAQT/8AEb//EBL//rAUr/9QFU/+wB3P/qAAkAf//fALD/8wCy//AAv//qANT/3wDh/+ABU//gAab/7QG8//UACQDF/+oA6P+4APH/4gEE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AFb/6gBfABMAa/+uAHr/zQB//6AAhP/BAIf/wACz/9AAt//qALr/xgC7AA0Avf/pAL7/1gDB/+gAwv+6AMX/6QDH/8sAyP/aAMn/xwFu/9MBpv+rAaj/zQGs/8sBtP/LAbX/ywG4//MBu//zAbz/7wHc/8AB3//uAAE1wAAEAAAABgAWAGwDngQcBIYEyAAVADgAFAA5ACYAOwAWARQAFAILABYCkgAmApQAFgKWABYC/QAWAwwAFgMPABYDRQAmA0cAJgNJACYDSwAWA2AAFANoABYD6gAWA+wAFgPuABYEEwAWAMwADv7uABD+7gAj/0AALP8wADYAFABD/94ARf/rAEb/6wBH/+sASf/rAFH/6wBT/+sAV//qAFj/6ABb/+gAkf/rAJX/6wCX/+oArf9AAK//QAC2/+sAuP/oAMP/6wDE/+sAxv/qAM0AFADRABQA8v/rAP7/6wEI/0ABE//rARX/6AEZ/+sBHf/rAS4AFAE1/+sBNgAUAUf/6wFI/+sBUv/rAWf+7gFr/u4Bb/7uAXD+7gHx/0AB8v9AAfP/QAH0/0AB9f9AAfb/QAH3/0ACDP/eAg3/3gIO/94CD//eAhD/3gIR/94CEv/eAhP/6wIU/+sCFf/rAhb/6wIX/+sCHf/rAh7/6wIf/+sCIP/rAiH/6wIi/+oCI//qAiT/6gIl/+oCJv/oAif/6AIo/0ACKf/eAir/QAIr/94CLP9AAi3/3gIv/+sCMf/rAjP/6wI1/+sCN//rAjn/6wI7/+sCPf/rAj//6wJB/+sCQ//rAkX/6wJH/+sCSf/rAlf/MAJr/+sCbf/rAm//6wKAABQCggAUAoQAFAKH/+oCif/qAov/6gKN/+oCj//qApH/6gKV/+gC+P9AAwD/QAMQ/+sDFP/qAxb/6wMY/+gDG//qAxz/6wMd/+oDJP8wAyj/QAMzABQDNf/eAzb/6wM4/+sDOv/rAzv/6AM9/+sDRP/oA0z/6ANV/0ADVv/eA1z/6wNh/+gDYv/rA2f/6wNp/+gDbv9AA2//3gNw/0ADcf/eA3X/6wN3/+sDeP/rA4L/6wOE/+sDhv/rA4r/6AOM/+gDjv/oA5X/6wOY/0ADmf/eA5r/QAOb/94DnP9AA53/3gOe/0ADn//eA6D/QAOh/94Dov9AA6P/3gOk/0ADpf/eA6b/QAOn/94DqP9AA6n/3gOq/0ADq//eA6z/QAOt/94Drv9AA6//3gOx/+sDs//rA7X/6wO3/+sDuf/rA7v/6wO9/+sDv//rA8X/6wPH/+sDyf/rA8v/6wPN/+sDz//rA9H/6wPT/+sD1f/rA9f/6wPZ/+sD2//rA93/6gPf/+oD4f/qA+P/6gPl/+oD5//qA+n/6gPr/+gD7f/oA+//6AP2ABQAHwA2/98AOP/kADn/7AA7/90Azf/fANH/3wEU/+QBLv/fATb/3wIL/90CgP/fAoL/3wKE/98Ckv/sApT/3QKW/90C/f/dAwz/3QMP/90DM//fA0X/7ANH/+wDSf/sA0v/3QNg/+QDaP/dA+r/3QPs/90D7v/dA/b/3wQT/90AGgA2/84AOP/tADv/0ADN/84A0f/OART/7QEu/84BNv/OAgv/0AKA/84Cgv/OAoT/zgKU/9AClv/QAv3/0AMM/9ADD//QAzP/zgNL/9ADYP/tA2j/0APq/9AD7P/QA+7/0AP2/84EE//QABAALP/uADf/7gIH/+4CCP/uAgn/7gIK/+4CV//uAob/7gKI/+4Civ/uAoz/7gKO/+4CkP/uAyT/7gPc/+4D3v/uAD0ARf/oAEb/6ABH/+gASf/oAFP/6ACR/+gAlf/oALb/6ADD/+gAxP/oAPL/6AD+/+gBGf/oAR3/6AE1/+gBR//oAUj/6AFS/+gCE//oAhT/6AIV/+gCFv/oAhf/6AIv/+gCMf/oAjP/6AI1/+gCN//oAjn/6AI7/+gCPf/oAj//6AJB/+gCQ//oAkX/6AJH/+gCSf/oAxD/6AM2/+gDOv/oAz3/6ANc/+gDYv/oA2f/6AN1/+gDd//oA3j/6AOE/+gDlf/oA7H/6AOz/+gDtf/oA7f/6AO5/+gDu//oA73/6AO//+gD0//oA9X/6APX/+gD2//oAAEwEgAEAAAALABiAIwBggHgAfoCPAKyA5gEfgVYBfIIjApSC2ANJg1YDYoOCA9OENgSbhOAFO4XABe2GRwZ0hqMGxIbcBwuHKQdUh18Hs4hDCEuIkQioiMgI0ojfCOOI7gACgAEABAACQAQAWUAEAFmABABaAAQAWkAEAFqABADTQAQA04AEANSABAAPQBF/+wARv/sAEf/7ABJ/+wAU//sAJH/7ACV/+wAtv/sAMP/7ADE/+wA8v/sAP7/7AEZ/+wBHf/sATX/7AFH/+wBSP/sAVL/7AIT/+wCFP/sAhX/7AIW/+wCF//sAi//7AIx/+wCM//sAjX/7AI3/+wCOf/sAjv/7AI9/+wCP//sAkH/7AJD/+wCRf/sAkf/7AJJ/+wDEP/sAzb/7AM6/+wDPf/sA1z/7ANi/+wDZ//sA3X/7AN3/+wDeP/sA4T/7AOV/+wDsf/sA7P/7AO1/+wDt//sA7n/7AO7/+wDvf/sA7//7APT/+wD1f/sA9f/7APb/+wAFwBR/+IBE//iAh3/4gIe/+ICH//iAiD/4gIh/+ICa//iAm3/4gJv/+IDFv/iAxz/4gM4/+IDgv/iA4b/4gPF/+IDx//iA8n/4gPL/+IDzf/iA8//4gPR/+ID2f/iAAYADv+EABD/hAFn/4QBa/+EAW//hAFw/4QAEAAs/+wAN//sAgf/7AII/+wCCf/sAgr/7AJX/+wChv/sAoj/7AKK/+wCjP/sAo7/7AKQ/+wDJP/sA9z/7APe/+wAHQAE//IACf/yAFj/8wBb//MAuP/zARX/8wFl//IBZv/yAWj/8gFp//IBav/yAib/8wIn//MClf/zAxj/8wM7//MDRP/zA0z/8wNN//IDTv/yA1L/8gNh//MDaf/zA4r/8wOM//MDjv/zA+v/8wPt//MD7//zADkAJf/zACn/8wAx//MAM//zAIH/8wCQ//MAlP/zAK7/8wDO//MBA//zARL/8wEW//MBGP/zARr/8wEc//MBNP/zAVH/8wH4//MCAv/zAgP/8wIE//MCBf/zAgb/8wIu//MCMP/zAjL/8wI0//MCQv/zAkT/8wJG//MCSP/zAmr/8wJs//MCbv/zAp//8wL8//MDCf/zAy//8wMy//MDV//zA2P/8wNm//MDgf/zA4P/8wOF//MDxP/zA8b/8wPI//MDyv/zA8z/8wPO//MD0P/zA9L/8wPU//MD1v/zA9j/8wPa//MAOQAl/+YAKf/mADH/5gAz/+YAgf/mAJD/5gCU/+YArv/mAM7/5gED/+YBEv/mARb/5gEY/+YBGv/mARz/5gE0/+YBUf/mAfj/5gIC/+YCA//mAgT/5gIF/+YCBv/mAi7/5gIw/+YCMv/mAjT/5gJC/+YCRP/mAkb/5gJI/+YCav/mAmz/5gJu/+YCn//mAvz/5gMJ/+YDL//mAzL/5gNX/+YDY//mA2b/5gOB/+YDg//mA4X/5gPE/+YDxv/mA8j/5gPK/+YDzP/mA87/5gPQ/+YD0v/mA9T/5gPW/+YD2P/mA9r/5gA2ACP/5AA6/9IAO//TAK3/5ACv/+QA1f/SAQj/5AHx/+QB8v/kAfP/5AH0/+QB9f/kAfb/5AH3/+QCC//TAij/5AIq/+QCLP/kApT/0wKW/9MC+P/kAv3/0wMA/+QDDP/TAw3/0gMP/9MDKP/kAzT/0gNL/9MDVf/kA2j/0wNr/9IDbv/kA3D/5AN5/9IDk//SA5j/5AOa/+QDnP/kA57/5AOg/+QDov/kA6T/5AOm/+QDqP/kA6r/5AOs/+QDrv/kA+r/0wPs/9MD7v/TA/j/0gQA/9IEE//TACYADv9GABD/RgAj/80Arf/NAK//zQEI/80BZ/9GAWv/RgFv/0YBcP9GAfH/zQHy/80B8//NAfT/zQH1/80B9v/NAff/zQIo/80CKv/NAiz/zQL4/80DAP/NAyj/zQNV/80Dbv/NA3D/zQOY/80Dmv/NA5z/zQOe/80DoP/NA6L/zQOk/80Dpv/NA6j/zQOq/80DrP/NA67/zQCmAEX/3ABG/9wAR//cAEn/3ABP/8EAUP/BAFH/1gBS/8EAU//cAFf/3QBY/+EAW//hAJH/3ACV/9wAl//dALb/3AC4/+EAvP/BAMP/3ADE/9wAxv/dAOf/wQDr/8EA7P/BAO7/wQDv/8EA8P/BAPL/3ADz/8EA9f/BAPb/wQD5/8EA+//BAP7/3AEA/8EBE//WARX/4QEZ/9wBHf/cATH/wQE1/9wBQP/BAUX/wQFH/9wBSP/cAVL/3AIT/9wCFP/cAhX/3AIW/9wCF//cAhz/wQId/9YCHv/WAh//1gIg/9YCIf/WAiL/3QIj/90CJP/dAiX/3QIm/+ECJ//hAi//3AIx/9wCM//cAjX/3AI3/9wCOf/cAjv/3AI9/9wCP//cAkH/3AJD/9wCRf/cAkf/3AJJ/9wCZP/BAmb/wQJo/8ECaf/BAmv/1gJt/9YCb//WAof/3QKJ/90Ci//dAo3/3QKP/90Ckf/dApX/4QMQ/9wDEv/BAxT/3QMW/9YDGP/hAxv/3QMc/9YDHf/dAzb/3AM3/8EDOP/WAzn/wQM6/9wDO//hAz3/3AM+/8EDQ//BA0T/4QNM/+EDVP/BA1z/3ANd/8EDYf/hA2L/3ANn/9wDaf/hA3X/3AN3/9wDeP/cA37/wQOA/8EDgv/WA4T/3AOG/9YDiv/hA4z/4QOO/+EDkv/BA5X/3AOx/9wDs//cA7X/3AO3/9wDuf/cA7v/3AO9/9wDv//cA8X/1gPH/9YDyf/WA8v/1gPN/9YDz//WA9H/1gPT/9wD1f/cA9f/3APZ/9YD2//cA93/3QPf/90D4f/dA+P/3QPl/90D5//dA+n/3QPr/+ED7f/hA+//4QPz/8ED9f/BA///wQQM/8EEDv/BBBD/wQBxAAT/2gAJ/9oARf/wAEb/8ABH//AASf/wAFP/8ABX/+8AWP/cAFv/3ACR//AAlf/wAJf/7wC2//AAuP/cAMP/8ADE//AAxv/vAPL/8AD+//ABFf/cARn/8AEd//ABNf/wAUf/8AFI//ABUv/wAWX/2gFm/9oBaP/aAWn/2gFq/9oCE//wAhT/8AIV//ACFv/wAhf/8AIi/+8CI//vAiT/7wIl/+8CJv/cAif/3AIv//ACMf/wAjP/8AI1//ACN//wAjn/8AI7//ACPf/wAj//8AJB//ACQ//wAkX/8AJH//ACSf/wAof/7wKJ/+8Ci//vAo3/7wKP/+8Ckf/vApX/3AMQ//ADFP/vAxj/3AMb/+8DHf/vAzb/8AM6//ADO//cAz3/8ANE/9wDTP/cA03/2gNO/9oDUv/aA1z/8ANh/9wDYv/wA2f/8ANp/9wDdf/wA3f/8AN4//ADhP/wA4r/3AOM/9wDjv/cA5X/8AOx//ADs//wA7X/8AO3//ADuf/wA7v/8AO9//ADv//wA9P/8APV//AD1//wA9v/8APd/+8D3//vA+H/7wPj/+8D5f/vA+f/7wPp/+8D6//cA+3/3APv/9wAQwAOAAwAEAAMAEX/5wBG/+cAR//nAEn/5wBT/+cAkf/nAJX/5wC2/+cAw//nAMT/5wDy/+cA/v/nARn/5wEd/+cBNf/nAUf/5wFI/+cBUv/nAWcADAFrAAwBbwAMAXAADAIT/+cCFP/nAhX/5wIW/+cCF//nAi//5wIx/+cCM//nAjX/5wI3/+cCOf/nAjv/5wI9/+cCP//nAkH/5wJD/+cCRf/nAkf/5wJJ/+cDEP/nAzb/5wM6/+cDPf/nA1z/5wNi/+cDZ//nA3X/5wN3/+cDeP/nA4T/5wOV/+cDsf/nA7P/5wO1/+cDt//nA7n/5wO7/+cDvf/nA7//5wPT/+cD1f/nA9f/5wPb/+cAcQAEAAwACQAMAEX/6ABG/+gAR//oAEn/6ABR/+oAU//oAFgACwBbAAsAkf/oAJX/6AC2/+gAuAALAMP/6ADE/+gA8v/oAP7/6AET/+oBFQALARn/6AEd/+gBNf/oAUf/6AFI/+gBUv/oAWUADAFmAAwBaAAMAWkADAFqAAwCE//oAhT/6AIV/+gCFv/oAhf/6AId/+oCHv/qAh//6gIg/+oCIf/qAiYACwInAAsCL//oAjH/6AIz/+gCNf/oAjf/6AI5/+gCO//oAj3/6AI//+gCQf/oAkP/6AJF/+gCR//oAkn/6AJr/+oCbf/qAm//6gKVAAsDEP/oAxb/6gMYAAsDHP/qAzb/6AM4/+oDOv/oAzsACwM9/+gDRAALA0wACwNNAAwDTgAMA1IADANc/+gDYQALA2L/6ANn/+gDaQALA3X/6AN3/+gDeP/oA4L/6gOE/+gDhv/qA4oACwOMAAsDjgALA5X/6AOx/+gDs//oA7X/6AO3/+gDuf/oA7v/6AO9/+gDv//oA8X/6gPH/+oDyf/qA8v/6gPN/+oDz//qA9H/6gPT/+gD1f/oA9f/6APZ/+oD2//oA+sACwPtAAsD7wALAAwAWv/tAFz/7QDp/+0CmP/tApr/7QKc/+0DPP/tA2z/7QN6/+0DlP/tA/n/7QQB/+0ADABa//IAXP/yAOn/8gKY//ICmv/yApz/8gM8//IDbP/yA3r/8gOU//ID+f/yBAH/8gAfAFj/9ABa//IAW//0AFz/8wC4//QA6f/yARX/9AIm//QCJ//0ApX/9AKY//MCmv/zApz/8wMY//QDO//0Azz/8gNE//QDTP/0A2H/9ANp//QDbP/yA3r/8gOK//QDjP/0A47/9AOU//ID6//0A+3/9APv//QD+f/yBAH/8gBRAAT/ygAJ/8oANv/SADj/1AA6//QAO//TAFj/5gBa/+8AW//mALj/5gDN/9IA0f/SANX/9ADZ/+0A3P/hAOn/7wEU/9QBFf/mAS7/0gE2/9IBZf/KAWb/ygFo/8oBaf/KAWr/ygIL/9MCJv/mAif/5gKA/9ICgv/SAoT/0gKU/9MClf/mApb/0wL9/9MDDP/TAw3/9AMP/9MDGP/mAyf/7QMz/9IDNP/0Azv/5gM8/+8DRP/mA0v/0wNM/+YDTf/KA07/ygNS/8oDYP/UA2H/5gNo/9MDaf/mA2v/9ANs/+8Def/0A3r/7wOJ/+0Div/mA4v/7QOM/+YDjf/tA47/5gOP/+EDk//0A5T/7wPq/9MD6//mA+z/0wPt/+YD7v/TA+//5gP2/9ID+P/0A/n/7wP6/+ED/P/hBAD/9AQB/+8EE//TAGIABP/AAAn/wAA2/50AOP/HADr/8AA7/6sAT//SAFD/0gBS/9IAvP/SAM3/nQDP//UA0f+dANX/8ADY//UA2f/qANz/5QDn/9IA6//SAOz/0gDu/9IA7//SAPD/0gDz/9IA9f/SAPb/0gD7/9IBAP/SART/xwEu/50BMf/SATb/nQFA/9IBRf/SAU3/9QFl/8ABZv/AAWj/wAFp/8ABav/AAgv/qwIc/9ICZP/SAmb/0gJo/9ICaf/SAoD/nQKC/50ChP+dApT/qwKW/6sC/f+rAwz/qwMN//ADD/+rAxL/0gMn/+oDM/+dAzT/8AM3/9IDOf/SAz7/0gND/9IDS/+rA03/wANO/8ADUv/AA1T/0gNd/9IDYP/HA2j/qwNr//ADef/wA37/0gOA/9IDif/qA4v/6gON/+oDj//lA5L/0gOT//ADlv/1A+r/qwPs/6sD7v+rA/P/0gP1/9ID9v+dA/j/8AP6/+UD/P/lA///0gQA//AEDP/SBA7/0gQQ/9IEEf/1BBP/qwBlAAT/sQAJ/7EANv+eADj/xQA6//IAO/+oAE//zwBQ/88AUv/PAFr/7wC8/88Azf+eANH/ngDV//IA2f/sANz/4QDn/88A6f/vAOv/zwDs/88A7v/PAO//zwDw/88A8//PAPX/zwD2/88A+//PAQD/zwEU/8UBLv+eATH/zwE2/54BQP/PAUX/zwFl/7EBZv+xAWj/sQFp/7EBav+xAgv/qAIc/88CZP/PAmb/zwJo/88Caf/PAoD/ngKC/54ChP+eApT/qAKW/6gC/f+oAwz/qAMN//IDD/+oAxL/zwMn/+wDM/+eAzT/8gM3/88DOf/PAzz/7wM+/88DQ//PA0v/qANN/7EDTv+xA1L/sQNU/88DXf/PA2D/xQNo/6gDa//yA2z/7wN5//IDev/vA37/zwOA/88Dif/sA4v/7AON/+wDj//hA5L/zwOT//IDlP/vA+r/qAPs/6gD7v+oA/P/zwP1/88D9v+eA/j/8gP5/+8D+v/hA/z/4QP//88EAP/yBAH/7wQM/88EDv/PBBD/zwQT/6gARAA2/74AT//hAFD/4QBS/+EAWP/vAFv/7wC4/+8AvP/hAM3/vgDR/74A5//hAOv/4QDs/+EA7v/hAO//4QDw/+EA8//hAPX/4QD2/+EA+//hAQD/4QEV/+8BLv++ATH/4QE2/74BQP/hAUX/4QIc/+ECJv/vAif/7wJk/+ECZv/hAmj/4QJp/+ECgP++AoL/vgKE/74Clf/vAxL/4QMY/+8DM/++Azf/4QM5/+EDO//vAz7/4QND/+EDRP/vA0z/7wNU/+EDXf/hA2H/7wNp/+8Dfv/hA4D/4QOK/+8DjP/vA47/7wOS/+ED6//vA+3/7wPv/+8D8//hA/X/4QP2/74D///hBAz/4QQO/+EEEP/hAFsANv/mADj/5wA6//IAO//nAE//1gBQ/9YAUv/WAFr/8QC8/9YAzf/mANH/5gDV//IA2f/uANz/6ADn/9YA6f/xAOv/1gDs/9YA7v/WAO//1gDw/9YA8//WAPX/1gD2/9YA+//WAQD/1gEU/+cBLv/mATH/1gE2/+YBQP/WAUX/1gIL/+cCHP/WAmT/1gJm/9YCaP/WAmn/1gKA/+YCgv/mAoT/5gKU/+cClv/nAv3/5wMM/+cDDf/yAw//5wMS/9YDJ//uAzP/5gM0//IDN//WAzn/1gM8//EDPv/WA0P/1gNL/+cDVP/WA13/1gNg/+cDaP/nA2v/8gNs//EDef/yA3r/8QN+/9YDgP/WA4n/7gOL/+4Djf/uA4//6AOS/9YDk//yA5T/8QPq/+cD7P/nA+7/5wPz/9YD9f/WA/b/5gP4//ID+f/xA/r/6AP8/+gD///WBAD/8gQB//EEDP/WBA7/1gQQ/9YEE//nAIQAIwAQACX/6AAp/+gAMf/oADP/6AA2/+AAOP/gADv/3wCB/+gAkP/oAJT/6ACtABAArv/oAK8AEADN/+AAzv/oAM8AEADR/+AA2AAQANz/4QDtABAA9P/gAP8AEAED/+gBCAAQARL/6AEU/+ABFv/oARj/6AEa/+gBHP/oAS7/4AE0/+gBNv/gAU0AEAFR/+gB8QAQAfIAEAHzABAB9AAQAfUAEAH2ABAB9wAQAfj/6AIC/+gCA//oAgT/6AIF/+gCBv/oAgv/3wIoABACKgAQAiwAEAIu/+gCMP/oAjL/6AI0/+gCQv/oAkT/6AJG/+gCSP/oAmr/6AJs/+gCbv/oAoD/4AKC/+AChP/gApT/3wKW/98Cn//oAvgAEAL8/+gC/f/fAwAAEAMJ/+gDDP/fAw//3wMoABADL//oAzL/6AMz/+ADS//fA1UAEANX/+gDYP/gA2P/6ANm/+gDaP/fA24AEANwABADgf/oA4P/6AOF/+gDj//hA5D/4AOWABADlwAQA5gAEAOaABADnAAQA54AEAOgABADogAQA6QAEAOmABADqAAQA6oAEAOsABADrgAQA8T/6APG/+gDyP/oA8r/6APM/+gDzv/oA9D/6APS/+gD1P/oA9b/6APY/+gD2v/oA+r/3wPs/98D7v/fA/b/4AP6/+ED+//gA/z/4QP9/+AEEQAQBBIAEAQT/98ALQA2//EAOP/0ADr/9AA7//AAzf/xAM//9QDR//EA1f/0ANj/9QDZ//MBFP/0AS7/8QE2//EBTf/1Agv/8AKA//ECgv/xAoT/8QKU//AClv/wAv3/8AMM//ADDf/0Aw//8AMn//MDM//xAzT/9ANL//ADYP/0A2j/8ANr//QDef/0A4n/8wOL//MDjf/zA5P/9AOW//UD6v/wA+z/8APu//AD9v/xA/j/9AQA//QEEf/1BBP/8ABZACMADwA2/+YAOP/mADoADgA7/+YArQAPAK8ADwDN/+YAzwAOANH/5gDVAA4A2AAOANkACwDc/+UA7QAPAPT/6AD/AA8BCAAPART/5gEu/+YBNv/mAU0ADgHxAA8B8gAPAfMADwH0AA8B9QAPAfYADwH3AA8CC//mAigADwIqAA8CLAAPAoD/5gKC/+YChP/mApT/5gKW/+YC+AAPAv3/5gMAAA8DDP/mAw0ADgMP/+YDJwALAygADwMz/+YDNAAOA0v/5gNVAA8DYP/mA2j/5gNrAA4DbgAPA3AADwN5AA4DiQALA4sACwONAAsDj//lA5D/6AOTAA4DlgAOA5cADwOYAA8DmgAPA5wADwOeAA8DoAAPA6IADwOkAA8DpgAPA6gADwOqAA8DrAAPA64ADwPq/+YD7P/mA+7/5gP2/+YD+AAOA/r/5QP7/+gD/P/lA/3/6AQAAA4EEQAOBBIADwQT/+YALQAE/78ACf+/ADb/nwA4/8kAO/+tAM3/nwDR/58A2f/sANz/5gEU/8kBLv+fATb/nwFl/78BZv+/AWj/vwFp/78Bav+/Agv/rQKA/58Cgv+fAoT/nwKU/60Clv+tAv3/rQMM/60DD/+tAyf/7AMz/58DS/+tA03/vwNO/78DUv+/A2D/yQNo/60Dif/sA4v/7AON/+wDj//mA+r/rQPs/60D7v+tA/b/nwP6/+YD/P/mBBP/rQAuADb/4wA6/+UAO//kAM3/4wDP/+UA0f/jANX/5QDY/+UA2f/pAO3/6gD//+oBLv/jATb/4wFN/+UCC//kAoD/4wKC/+MChP/jApT/5AKW/+QC/f/kAwz/5AMN/+UDD//kAyf/6QMz/+MDNP/lA0v/5ANo/+QDa//lA3n/5QOJ/+kDi//pA43/6QOT/+UDlv/lA5f/6gPq/+QD7P/kA+7/5AP2/+MD+P/lBAD/5QQR/+UEEv/qBBP/5AAhADb/4gA6/+QAzf/iAM//5ADR/+IA1f/kANj/5ADZ/+kA7f/rAP//6wEu/+IBNv/iAU3/5AKA/+ICgv/iAoT/4gMN/+QDJ//pAzP/4gM0/+QDa//kA3n/5AOJ/+kDi//pA43/6QOT/+QDlv/kA5f/6wP2/+ID+P/kBAD/5AQR/+QEEv/rABcANv/rADv/8wDN/+sA0f/rAS7/6wE2/+sCC//zAoD/6wKC/+sChP/rApT/8wKW//MC/f/zAwz/8wMP//MDM//rA0v/8wNo//MD6v/zA+z/8wPu//MD9v/rBBP/8wAvAE//7wBQ/+8AUv/vAFr/8AC8/+8A5//vAOn/8ADr/+8A7P/vAO7/7wDv/+8A8P/vAPP/7wD1/+8A9v/vAPv/7wEA/+8BMf/vAUD/7wFF/+8CHP/vAmT/7wJm/+8CaP/vAmn/7wMS/+8DN//vAzn/7wM8//ADPv/vA0P/7wNU/+8DXf/vA2z/8AN6//ADfv/vA4D/7wOS/+8DlP/wA/P/7wP1/+8D+f/wA///7wQB//AEDP/vBA7/7wQQ/+8AHQAE//IACf/yAFj/9QBb//UAuP/1ARX/9QFl//IBZv/yAWj/8gFp//IBav/yAib/9QIn//UClf/1Axj/9QM7//UDRP/1A0z/9QNN//IDTv/yA1L/8gNh//UDaf/1A4r/9QOM//UDjv/1A+v/9QPt//UD7//1ACsAT//uAFD/7gBS/+4AvP/uAOf/7gDr/+4A7P/uAO7/7gDv/+4A8P/uAPP/7gD0/+0A9f/uAPb/7gD7/+4BAP/uATH/7gFA/+4BRf/uAhz/7gJk/+4CZv/uAmj/7gJp/+4DEv/uAzf/7gM5/+4DPv/uA0P/7gNU/+4DXf/uA37/7gOA/+4DkP/tA5L/7gPz/+4D9f/uA/v/7QP9/+0D///uBAz/7gQO/+4EEP/uAAoABP/1AAn/9QFl//UBZv/1AWj/9QFp//UBav/1A03/9QNO//UDUv/1AFQARf/wAEb/8ABH//AASf/wAFH/xwBT//AAkf/wAJX/8AC2//AAw//wAMT/8ADy//AA/v/wARP/xwEZ//ABHf/wATX/8AFH//ABSP/wAVL/8AIT//ACFP/wAhX/8AIW//ACF//wAh3/xwIe/8cCH//HAiD/xwIh/8cCL//wAjH/8AIz//ACNf/wAjf/8AI5//ACO//wAj3/8AI///ACQf/wAkP/8AJF//ACR//wAkn/8AJr/8cCbf/HAm//xwMQ//ADFv/HAxz/xwM2//ADOP/HAzr/8AM9//ADXP/wA2L/8ANn//ADdf/wA3f/8AN4//ADgv/HA4T/8AOG/8cDlf/wA7H/8AOz//ADtf/wA7f/8AO5//ADu//wA73/8AO///ADxf/HA8f/xwPJ/8cDy//HA83/xwPP/8cD0f/HA9P/8APV//AD1//wA9n/xwPb//AAjwAEAA0ACQANAEP/8ABF/8AARv/AAEf/wABJ/8AAUf/iAFP/wABYAAsAWwALAJH/wACV/8AAtv/AALgACwDE/8AA7f/XAPL/wAD+/8AA///XARP/4gEVAAsBGf/AAR3/wAE1/8ABR//AAUj/wAFS/8ABZQANAWYADQFoAA0BaQANAWoADQIM//ACDf/wAg7/8AIP//ACEP/wAhH/8AIS//ACE//AAhT/wAIV/8ACFv/AAhf/wAId/+ICHv/iAh//4gIg/+ICIf/iAiYACwInAAsCKf/wAiv/8AIt//ACL//AAjH/wAIz/8ACNf/AAjf/wAI5/8ACO//AAj3/wAI//8ACQf/AAkP/wAJF/8ACR//AAkn/wAJr/+ICbf/iAm//4gKVAAsDEP/AAxb/4gMYAAsDHP/iAzX/8AM2/8ADOP/iAzr/wAM7AAsDPf/AA0QACwNMAAsDTQANA04ADQNSAA0DVv/wA1z/wANhAAsDYv/AA2f/wANpAAsDb//wA3H/8AN1/8ADd//AA3j/wAOC/+IDhP/AA4b/4gOKAAsDjAALA44ACwOV/8ADl//XA5n/8AOb//ADnf/wA5//8AOh//ADo//wA6X/8AOn//ADqf/wA6v/8AOt//ADr//wA7H/wAOz/8ADtf/AA7f/wAO5/8ADu//AA73/wAO//8ADxf/iA8f/4gPJ/+IDy//iA83/4gPP/+ID0f/iA9P/wAPV/8AD1//AA9n/4gPb/8AD6wALA+0ACwPvAAsEEv/XAAgA7QAQAPT/8AD/ABADkP/wA5cAEAP7//AD/f/wBBIAEABFAEX/7gBG/+4AR//uAEn/7gBT/+4Akf/uAJX/7gC2/+4Aw//uAMT/7gDtAA4A8v/uAPT/4wD+/+4A/wAOARn/7gEd/+4BNf/uAUf/7gFI/+4BUv/uAhP/7gIU/+4CFf/uAhb/7gIX/+4CL//uAjH/7gIz/+4CNf/uAjf/7gI5/+4CO//uAj3/7gI//+4CQf/uAkP/7gJF/+4CR//uAkn/7gMQ/+4DNv/uAzr/7gM9/+4DXP/uA2L/7gNn/+4Ddf/uA3f/7gN4/+4DhP/uA5D/4wOV/+4DlwAOA7H/7gOz/+4Dtf/uA7f/7gO5/+4Du//uA73/7gO//+4D0//uA9X/7gPX/+4D2//uA/v/4wP9/+MEEgAOABcAWP/AAFv/wAC4/8AA9P/uARX/wAIm/8ACJ//AApX/wAMY/8ADO//AA0T/wANM/8ADYf/AA2n/wAOK/8ADjP/AA47/wAOQ/+4D6//AA+3/wAPv/8AD+//uA/3/7gAfAFj/9ABa//AAW//0ALj/9ADp//AA7f/zAP//8wEV//QCJv/0Aif/9AKV//QDGP/0Azv/9AM8//ADRP/0A0z/9ANh//QDaf/0A2z/8AN6//ADiv/0A4z/9AOO//QDlP/wA5f/8wPr//QD7f/0A+//9AP5//AEAf/wBBL/8wAKAAT/1gAJ/9YBZf/WAWb/1gFo/9YBaf/WAWr/1gNN/9YDTv/WA1L/1gAMAFr/4ADp/+AA9P/CAzz/4ANs/+ADev/gA5D/wgOU/+AD+f/gA/v/wgP9/8IEAf/gAAQA9P/SA5D/0gP7/9ID/f/SAAoABP/XAAn/1wFl/9cBZv/XAWj/1wFp/9cBav/XA03/1wNO/9cDUv/XAF4ABAALAAkACwBF/+sARv/rAEf/6wBJ/+sAUf/pAFP/6wCR/+sAlf/rALb/6wDD/+sAxP/rAPL/6wD+/+sBE//p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ANcCYwJvANgCcQJxAOUCcwJzAOYCdQJ1AOcCgAKAAOgCggKCAOkChAKEAOoChgKGAOsCiAKIAOwCigKKAO0CjAKMAO4CjgKOAO8CkAKQAPACkgKSAPEClAKXAPICmQKZAPYCmwKbAPcC+AL9APgDAAMPAP4DEgMSAQ4DFgMWAQ8DGAMYARADHAMcAREDHwMgARIDIgMrARQDLQMvAR4DMQM2ASEDOAM5AScDOwM+ASkDRANFAS0DRwNHAS8DSQNJATADSwNOATEDUgNXATUDWgNaATsDXANcATwDYANhAT0DZgNmAT8DaANxAUADdAN1AUoDdwN6AUwDgQOCAVADhgOGAVIDiAOOAVMDkwOUAVoDmAPAAVwDwgPCAYUDxAPRAYYD2QPZAZQD3APcAZUD3gPeAZYD6gPvAZcD8gPyAZ0D9AP0AZ4D9gP2AZ8D+AP5AaAD/gQBAaIEBAQEAaYEBgQHAacECQQJAakEDQQNAaoEDwQPAasEEwQTAawAAQAGAAoAKAAzADQAPQBIAAEALABIAE0AVgBZAF0AmQCwALIAswC0ALsAvgDAAMUAxwDIAMkAzQDPANAA0QDTANQA1gDeAN8A4gDjAOQA5QDmAOgA6gDsAPEA8wD2APcA+wD+AP8BAAEdAdwAAgB2AAQABAAAAAkACQABAA4ADgACABAAEAADACMAJwAEACoAMgAJADYAPAASAEMARQAZAEcARwAcAEoASgAdAE8AUgAeAFQAVAAiAFgAWAAjAFoAXAAkAIgAiAAnAKwArwAoALgAuAAsALwAvAAtAMIAwgAuAM8A0AAvANIA0gAxANUA1QAyANcA2QAzANsA2wA2AN0A3QA3AN8A3wA4AOEA4QA5AOcA5wA6AOkA6QA7APIA8gA8APcA9wA9APkA+gA+AP8BAABAAQUBBQBCAQgBCABDARMBFQBEAScBKQBHASwBLABKAS4BLgBLAUUBRQBMAWUBawBNAW8BcABUAewB7QBWAe8B7wBYAfECFwBZAhwCIQCAAiYCNgCGAjgCQQCXAkoCTAChAk4CTgCkAlACUAClAlICUgCmAlQCVACnAlcCVwCoAlkCWQCpAlsCWwCqAl0CXQCrAl8CXwCsAmECYQCtAmMCbwCuAnECcQC7AnMCcwC8AnUCdQC9AoACgAC+AoICggC/AoQChADAAoYChgDBAogCiADCAooCigDDAowCjADEAo4CjgDFApACkADGApICkgDHApQCnADIAvgC/QDRAwADDwDXAxIDEgDnAxYDFgDoAxgDGADpAxwDHADqAx8DIADrAyIDKwDtAy0DLwD3AzEDNgD6AzgDPgEAA0QDRQEHA0cDRwEJA0kDSQEKA0sDTgELA1IDVwEPA1oDWgEVA1wDXAEWA2ADYQEXA2YDcQEZA3QDdQElA3cDegEnA4EDggErA4YDhgEtA4gDjgEuA5MDlAE1A5gDwAE3A8IDwgFgA8QD0QFhA9kD2QFvA9wD3AFwA94D3gFxA+oD7wFyA/ID8gF4A/QD9AF5A/YD9gF6A/gD+QF7A/4EAQF9BAQEBAGBBAYEBwGCBAkECQGEBA0EDQGFBA8EDwGGBBMEEwGHAAIBOAAEAAQAHQAJAAkAHQAOAA4AHgAQABAAHgAkACQAAQAlACUABAAmACYAAwAnACcABQAqACsAAgAsACwADAAtAC0ACQAuAC4ACgAvADAAAgAxADEAAwAyADIACwA2ADYABgA3ADcADAA4ADgADQA5ADkAEAA6ADoADgA7ADsADwA8ADwAEQBDAEMAEwBEAEQAFQBFAEUAFABHAEcAFgBKAEoAFwBPAFAAFwBRAFEAGABSAFIAFQBUAFQAGgBYAFgAGQBaAFoAGwBbAFsAGQBcAFwAHACIAIgAFQCsAKwABwCuAK4AAwC4ALgAGQC8ALwAFwDCAMIAFQDPANAAHwDSANIAAgDVANUADgDXANgAAgDZANkAEgDbANsAAgDdAN0AAgDfAN8AHwDhAOEAHwDnAOcACADpAOkAGwDyAPIAFQD3APcAIAD5APkAIAD6APoAFQD/AQAAIAEFAQUAIAETARMAGAEUARQADQEVARUAGQEnAScAFQEoASgABwEpASkACAEsASwACQEuAS4ACQFFAUUACAFlAWYAHQFnAWcAHgFoAWoAHQFrAWsAHgFvAXAAHgHsAe0AAwHvAe8ABgH4AfgABAH5AfwABQH9AgEAAgICAgYAAwIHAgoADAILAgsADwIMAhIAEwITAhMAFAIUAhcAFgIcAhwAFwIdAiEAGAImAicAGQIpAikAEwIrAisAEwItAi0AEwIuAi4ABAIvAi8AFAIwAjAABAIxAjEAFAIyAjIABAIzAjMAFAI0AjQABAI1AjUAFAI2AjYAAwI4AjgABQI5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AAAAEgAAAAAAAAAAAAAAAAAAAAAAAAAGAAQABwAFAAYAAAAGABYABgAAAAYAFgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwAAAAAAAkAAAAAAAYAFgAMAAAAAAAAAAAAAAAAAAAAAAAAAAkAAAAAAAAAAAAJAAAAFgAWAAAAAAAAAAAAAgAAAAAAAAAGABYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGQAZAAAACwALABUACwALAAsAFQAAAAAAAAAVABUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABkAAAAAAAAAAAAAABIAEgASABIAEgASABIABgAAAAAAAAAAAAAAAAAAAAAAAAAGAAYABgAGAAYACAAIAAgACAAKABsAGwAbABsAGwAbABsAFgAWABYAFgAWAAAAAAAAAAAACQAEAAQABAAEAAQADQANAA0ADQAFAAUAEgAbABIAGwASABsABgAWAAYAFgAGABYABgAWAAAAFgAAABYAAAAWAAAAFgAAABYAAAAWAAYAFgAGABYABgAWAAYAFgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACQAAAAkAAAAJAAkABgAEAAYABAAGAAQAAAAAAAAAAAAAAAAAGgAYABoAGAAaABgAGgAYABoAGAAMAAAADAAAAAwAAAAIAA0ACAANAAgADQAIAA0ACAANAAgADQAPAAAACgAFAAoAFAABABQAAQAUAAEAAAAAAAYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAASAAAAAAAAAAYACgAAAAAAEgAAAAAAFAAAAAAAAAAAAAAABgAAAAAACgATAAAACgAWAAAACQAAAA0AAAAEAAAABQAAAAAADQAEAA0AAAAAAAAAAAAAAAAAHAAAAAAAEQASAAAAAAAAAAAAAAAAAAYAAAAAAAYADAATABsAFgAJAAQACQAWAAUAFwAWAAkAGAAAAAAAAAAJAAUADwAAAA8AAAAPAAAACgAFAAsACwAAAAAAAAALAAAACQASABsABgAAAAAAAAAAABYACQAAAAAABwAFABYABgAAAAAABgAWAAoABQAAABMAFwAAABIAGwASABsAAAAAAAAAFgAAABYAFgATABcAAAAAAAAACQAAAAkABgAEAAYAFgAGAAQAAAAAABEABQARAAUAEQAFAA4AAwAAAAkAEwAXABYAAgAQABIAGwASABsAEgAbABIAGwASABsAEgAbABIAGwASABsAEgAbABIAGwASABsAEgAbAAAAFgAAABYAAAAWAAAAFgAAABYAAAAWAAAAFgAAABYAAAAAAAAAAAAGAAQABgAEAAYABAAGAAQABgAEAAYABAAGAAQABgAWAAYAFgAGABYABgAEAAYAFgAIAA0ACAANAAAADQAAAA0AAAANAAAADQAAAA0ACgAFAAoABQAKAAUAAAAAAAAACQAAAAkADAAAABMAFwAOAAMADgADAAAACQATABcAAAAAAAAAAAAAAAAAAAAAAAAAAAAJAAAACQAAAAkAAgAQAAoAAAAAAAAAAAAAABkAAAABAAAACgAsAI4AAURGTFQACAAEAAAAAP//AAgAAAABAAIAAwAEAAUABgAHAAhsaWdhADJsbnVtADhzbWNwAD5zczAxAERzczAyAEpzczAzAFBzczA0AFZzczA1AFwAAAABAAEAAAABAAIAAAABAAAAAAABAAMAAAABAAQAAAABAAUAAAABAAYAAAABAAcACAASABoAIgAqADIAOgBCAEoAAQAAAAEAQAAEAAAAAQH2AAEAAAABAgAAAQAAAAECEgABAAAAAQIQAAEAAAABAg4AAQAAAAECDAABAAAAAQIOAAICEADcAaYBpwGoAakBqgGrAawBrQGuAa8BsAGxAbIBswG0AegBtQG2AbcBuAG5AboBuwG8Ab0BvgGmAacBqAGpAaoBqwGsAa0BrgGvAbABsQGyAbMBtAHoAbUBtgG3AbgBuQG6AbsBvAG9Ab4C9wKiAqECogKjAqMCpAKlAqYCpwKoAqkCqgKrAqwCrQKuAq8CsAKxArICswK0ArUCtgK3ArgCuQK6ArsCvAK9Ar4CpAKlAqYCpwKoAqkCqgKrAqwCrQKuAq8CsAKxArICswK0ArUCtgK3ArgCuQK6ArsCvAK9Ar4C8wK/Ar8CwALAAsECwQLCAsICwwLDAsUCxQLGAsYCxwLHAsgCyALJAskCygLKAssCywLMAswCzQLNAs8CzwLQAtAC0QLRAtIC0gLTAtMC1ALUAtUC1gLWAtcC1wLYAtgC2QLZAtoC2gLbAtsC3ALcAt0C3QLeAt4C3wLfAuAC4ALhAuEC4gLiAuMC4wLkAuQC5QLlAuYC5gLnAucC6ALo/////wLqAuoC6wLrAuwC7ALtAu0C7gLuAu8C7wLwAvAC8QLxAvIC8gLzAvQC9AL1AvUC9gL2AqEAAQCkAAEACAABAAQBkgACAEsAAgCYAAoBmAHMAcQB1gHXAdgB2QHbAd0B5wABAIgBkQABAIgBKAABAIgBrgACAIgAAgHjAeQAAgB+AAIB5QHmAAIADQAjADwAAABDAFwAGgCDAIMANACFAIUANQHsAe0ANgHvAjEAOAI0AkUAewJIAlQAjQJXAmgAmgJqAnsArAJ+An8AvgKCApwAwAPwA/AA2wABAAEASAACAAEAEgAbAAAAAQABAEkAAQABALYAAQABADQAAQACAC0ATQ==","Roboto-Regular.ttf":"AAEAAAAOAIAAAwBgR0RFRgsuCy8AASx0AAAASEdQT1OC3T4oAAEsvAAAkPhHU1VCeolvLwABvbQAAANsT1MvMrivKcMAAAFoAAAAYFZETVhu6nZPAAASOAAABeBjbWFwf76BZgAAGBgAAA7iZ2x5ZusE9WMAACb8AADUeGhlYWT1kQ7EAAAA7AAAADZoaGVhC3AJkwAAASQAAAAkaG10eJaDaacAAAHIAAAQcGxvY2EvrvnGAAD7dAAACDptYXhwBDsA9gAAAUgAAAAgbmFtZbs83bQAAQOwAAAEeXBvc3Tfb5xiAAEILAAAJEYAAQAAAAEAAHdFsyVfDzz1AAkIAAAAAADE8BEuAAAAAM2CsmH6jf3VCXQIYgAAAAkAAgAAAAAAAAABAAAHbP4MAAAJkvqN/dgJdAABAAAAAAAAAAAAAAAAAAAEHAABAAAEHACXABYAXQAFAAEAAAAAAAAAAAAAAAAAAwABAAMElwGQAAUAAAWaBTMAAAEfBZoFMwAAA9EAZgIAAAAAAAAAAAAAAAAA4AAC/1AAIFsAAAAgAAAAAHB5cnMAQAAA//0GAP4AAGYHmgIAIAABn08BAAAEOgWwAAAAIAACAfsAAAAAAAAB+wAAAfsAAAKPAGkE+wBGBH4AbgXcAGkE+QBEAWUAZwKhAIUCqgAIA3IAHASJAE4BkgAdAjUAJQIbAKIDTAASBH4AcgR+ANcEfgBdBH4AXgR+ADkEfgCaBH4AhwR+AE0EfgBmBH4AVAH4AKACAABKBBEASASAAJgELgCGA8cAOgcvAGEFSgAnBRcAtgUeAIMFaQC2BKoAtgSnALYFfgCFBbMAtgI/AMMEagA/BSQAtgRgALYHAwC2BbQAtgWQAIIFGQC2BZAAggVMALUE4wBaBMYAOwVoAJYFKQAnBw0ASAUJAEEE8gAeBMkAYQIfAJIDSAAoAh8ACQNYAEADnAAEAnkATwRiAHIEiACRBDsAYQSIAGQENwBiAr4AQgSIAGYEiACRAfwAoQIL/7YEEwCSAfwAoQcCAJAEiACRBIgAYASIAJEEiABkAsoAkQQrAGYCjAAdBIgAjQQCAC4GDgAwBAIALgQCABsEAgBeArUAQAHzAK8CtQATBXEAggHzAJAEYQBuBKYARgW0AGkE2AAgAesAkwToAFoD9ACpBkkAWwOTAHoDwQBmBG4AfwZKAFoDqgB4Av0AggRHAGEDXwBxA2gAaQKCAIEEiACaA+kAQgIWAKIB+wB0AiYAXgOjAHoDwABvBjYAtAaWALQG6wB7A+0AcQd6//IERABZBXIAcwS6AKYEwgCLBsEAPQSwAEwEkQBHBIkAYAScAJoFmwAeAfoAmwRzAJoEMwAmAioAIwWLAKQEiACRB6EAaQdEAGEB/ACgArn/5AV/AHEEkwBgBZAAlgTzAI0CA/+0BDcAYgPEAKkDjQCMA2oAgQIhAKACtQCLAioAMgPGAIIC/ABoAp0AtgAA/NoAAP13AAD8kwAA/V4AAPwnAAD9QwINAMMECwChAhcAogRzALUFpAAgBXIAcwU+ADQEkQB6BbUAtgSRAEUFuwBOBYkAXQVSAHIEhQBkBL0AoAQCAC4EiABgBFAAYwQlAG0EiACRBI8AegKXAMMEbgAlA+wAZQTFAE8EiACRBE0AZQSIAGAELABRBF0AjwWjAFcFmgBfBpcAegTwAHQEQv/nBkgASgX/ACsFZQCHCJkAMgikALUGggBABbQAtQULAKYGBAA0B0MAGwS/AFEFtAC2BakAMAUHAFEGLQBTBdkAtAV6AJcHhwC0B8AAtAYSABEG6wC1BQUApgVkALEHJwDDBRgAYwRsAGEEkgCdA1sAmgTUAC4GIAAVBBAAWASeAJwEUgCcBKAAKAXvAJ0EnQCcBJ4AnAPYACgFzQBkBL0AnARZAGcGeACcBp8AkQT3AB4GNgCdBFgAnQRNAGQGiACdBGQALwSJ/+cETgBsBskAJwbkAJwEif/9BJ4AnAcIAJ8GKwCBBFb/3AcsAMQF+QCZBNIAKgRGAA8HDADWBgwAvAbRAJYF4QCWCQUAwwfRAJsEJABQA9sATAVyAHMEjABgBQoAFwQDAC4FcgBzBIkAYAcBAJ8GJAB+BwkAnwYsAIEFMgB4BEcAZAT9AHQAAPxnAAD8cQAA/WYAAP2kAAD6jQAA+qQEVv/cBRsAtQSKAJEEZACmA5AAkQTbALUEBgCRBQkApgR+AJoGjABFBYQAPgfPALUFtACRCDEAtAb0AJEF7gBzBNMAbQctADQFXAAfBXAAlwRrAIMFcACOBi8ARwS+/+MFCQCmBFoAmgWyALUEiACRBYcAXwSoAGkEqABpBLcAOgNJADsE9gBZBpQAWQbkAGQGVgA2BSsAMQRKAFMECAB5B8EARQZ1AD8H+wCtBqEAkAT2AHkEHQBlBa0AJAUgAEYFZACbBBQAAAgpAAAEFAAACCkAAAK5AAACCgAAAVwAAAR/AAACMAAAAaIAAADRAAAAAAAABYgAswZ9ALsDpgANAZkAYAGZADABlwAkAZoAUALUAGAC2wA8AsEAJARpAEYEjwBXArIAigPEAKYFWgCmB6oARAJmAGwCZgBZA6MAOwOrAEgDYAB6BKYARgaRAKcEPgBPBegAewPOAGgIywCrBQEAZgUXAJgGuwBvB1AAawd/AGwG2wBrBKIATAWOAKkErwBFBJIAqATFAD8IOgBrAgz/tASCAGUELQCYBDYAngQ8AJkECAArAkwAxwKPAG4CAwBcBG4AHwAAAAAIMwBbCDUAXAQcAFwDjQBXBIAAcwML/6IB/P+2AiUAGwGRAGcDpACDA54AgQOfAIED9ABtBA4AaQPz/14D7wBuA6QAWwH9AJ8EtQApBHUAmwSPAHIEpgCbBEMAmwQdAJsEzwByBPYAmwH6AJsECwBBBF0AmwO5AJsF9ACbBRkAmwTLAHIE4QByBKkAmwRvAF0ELABHBQIAjAS4ACoGBQBBBIQAOAReACAEPgBOBHcAewJpAEID4QBaBBIAWQRkAEcEaQBdBC0AegO5AEcELQBcBCcASwInAF4DVQBxA2gAaQL8AEoDeQByA3oAewMMAF4DggByA2sAaQOkAHwDlgCPArUAngNHAG8EfgBeBH4AOQR+AJoEjwCHBDoAHgRCADsEbwBaBH4AZgTDAGQEiABgBUQAtgRiAHIFLwC1BSQAtgQTAJIFPQC2BA8AkgR+AFQEdQCbA2oAgQH7AAACNQAlBYcALgWHAC4EpgAGBMYAOwKM/+MFSgAnBUoAJwVKACcFSgAnBUoAJwVKACcFSgAnBR4AgwSqALYEqgC2BKoAtgSqALYCP//cAj8AwwI///ICP//MBbQAtgWQAIIFkACCBZAAggWQAIIFkACCBWgAlgVoAJYFaACWBWgAlgTyAB4EYgByBGIAcgRiAHIEYgByBGIAcgRiAHIEYgByBDsAYQQ3AGIENwBiBDcAYgQ3AGIB+v+1AfoAmwH6/8sB+v+lBIgAkQSIAGAEiABgBIgAYASIAGAEiABgBIgAjQSIAI0EiACNBIgAjQQCABsEAgAbBUoAJwRiAHIFSgAnBGIAcgVKACcEYgByBR4AgwQ7AGEFHgCDBDsAYQUeAIMEOwBhBR4AgwQ7AGEFaQC2BR4AZASqALYENwBiBKoAtgQ3AGIEqgC2BDcAYgSqALYENwBiBKoAtgQ3AGIFfgCFBIgAZgV+AIUEiABmBX4AhQSIAGYFfgCFBIgAZgWzALYEiACRAj//xQH6/54CP/+/Afr/mAI///UB+v/OAj8AIQH8AAACPwC3BqkAwwQHAKEEagA/AgP/tAUkALYEEwCSBGAAtgH8AKEEYAC2AfwAWwRgALYCkgChBGAAtgLYAKEFtAC2BIgAkQW0ALYEiACRBbQAtgSIAJEEiP/SBZAAggSIAGAFkACCBIgAYAWQAIIEiABgBUwAtQLKAJEFTAC1AsoAWAVMALUCygBpBOMAWgQrAGYE4wBaBCsAZgTjAFoEKwBmBOMAWgQrAGYE4wBaBCsAZgTGADsCjAAdBMYAOwKMAB0ExgA7ArQAHQVoAJYEiACNBWgAlgSIAI0FaACWBIgAjQVoAJYEiACNBWgAlgSIAI0FaACWBIgAjQcNAEgGDgAwBPIAHgQCABsE8gAeBMkAYQQCAF4EyQBhBAIAXgTJAGEEAgBeB3r/8gbBAD0FcgBzBIkAYASm//MEpv/zBCwARwS1ACkEtQApBLUAKQS1ACkEtQApBLUAKQS1ACkEjwByBEMAmwRDAJsEQwCbBEMAmwH6/7MB+gCbAfr/yQH6/6MFGQCbBMsAcgTLAHIEywByBMsAcgTLAHIFAgCMBQIAjAUCAIwFAgCMBF4AIAS1ACkEtQApBLUAKQSPAHIEjwByBI8AcgSPAHIEpgCbBEMAmwRDAJsEQwCbBEMAmwRDAJsEzwByBM8AcgTPAHIEzwByBPYAmwH6/5wB+v+WAfr/zAH6//cB+gCPBAsAQQRdAJsDuQCbA7kAmwO5AJsDuQCbBRkAmwUZAJsFGQCbBMsAcgTLAHIEywByBKkAmwSpAJsEqQCbBG8AXQRvAF0EbwBdBG8AXQQsAEcELABHBQIAjAUCAIwFAgCMBQIAjAUCAIwFAgCMBgUAQQReACAEXgAgBD4ATgQ+AE4EPgBOCN4AXQVKACcFDv/mBhcAEwKjABkFpABSBVb/jQVmAD8Cl//IBUoAJwUXALYEqgC2BMkAYQWzALYCPwDDBSQAtgcDALYFtAC2BZAAggUZALYExgA7BPIAHgUJAEECP//MBPIAHgSFAGQEUABjBIgAkQKXAMMEXQCPBHMAmgSIAGAEiACaBAIALgQCAC4Cl//TBF0AjwSIAGAEXQCPBpcAegSqALYEcwC1BOMAWgI/AMMCP//MBGoAPwUkALYFJAC2BQcAUQVKACcFFwC2BHMAtQSqALYFtAC2BwMAtgWzALYFkACCBbUAtgUZALYFHgCDBMYAOwUJAEEEYgByBDcAYgSeAJwEiABgBIgAkQQ7AGEEAgAbBAIALgQ3AGIDWwCaBCsAZgH8AKEB+v+lAgv/tgRSAJwEAgAbBw0ASAYOADAHDQBIBg4AMAcNAEgGDgAwBPIAHgQCABsBZQBnAo8AaQQeAKkEugBCAgP/tAGZADAHAwC2BwIAkAVKACcEYgByBZD/PgcsAEIHeABCBKoAtgW0ALYENwBiBJ4AnAWJAF0FmgBfBQoAFwQD//kIigBgCZIAggS/AFEEEABYBR4AgwQ7AGEE8gAeBAIALgI/AMMHQwAbBiAAFQI/AMMFSgAnBGIAcgVKACcEYgByB3r/8gbBAD0EqgC2BDcAYgWHAF8ENwBiBDcAYgdDABsGIAAVBL8AUQQQAFgFtAC2BJ4AnAW0ALYEngCcBZAAggSIAGAFcgBzBIwAYAVyAHMEjABgBWQAsQRNAGQFBwBRBAIAGwUHAFEEAgAbBQcAUQQCABsFegCXBFkAZwbrALUGNgCdBQkAQQQCAC4EiABkBakAMASgACgFSgAnBGIAcgVKACcEYgByBUoAJwRiAHIFSgAnBGL/rgVKACcEYgByBUoAJwRiAHIFSgAnBGIAcgVKACcEYgByBUoAJwRiAHIFSgAnBGIAcgVKACcEYgByBUoAJwRiAHIEqgC2BDcAYgSqALYENwBiBKoAtgQ3AGIEqgC2BDcAYgSq//gEN/+zBKoAtgQ3AGIEqgC2BDcAYgSqALYENwBiAj8AwwH6AJsCPwC3AfwAlgWQAIIEiABgBZAAggSIAGAFkACCBIgAYAWQAEwEiP/LBZAAggSIAGAFkACCBIgAYAWQAIIEiABgBX8AcQSTAGAFfwBxBJMAYAV/AHEEkwBgBX8AcQSTAGAFfwBxBJMAYAVoAJYEiACNBWgAlgSIAI0FkACWBPMAjQWQAJYE8wCNBZAAlgTzAI0FkACWBPMAjQWQAJYE8wCNBPIAHgQCABsE8gAeBAIAGwTyAB4EAgAbBKYAZASmAGQFJAC2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ABEQACEzNTMDIgYVFBY7AREzETMyNjU0JiMDeBsBAgFO/rL+/hu5Hf79/rQBTAEDHbnWxtHRxh25HcTS0sQFHv69/vv++f67xsYBQwEHAQUBRc7+nenMzucDavyW6c7L6AAAAAABALT+oQWSBbAACwAAEzMRIREzETMDIxEhtLkC17mVEqX72QWw+uUFG/rp/ggBXwABAJcAAATEBbAAEwAAAREjEQ4BIyImNREzERQWMzI2NxEExLlhsHv187qMomm8ZwWw+lACYR0azvIBxv46q38cHAK4AAEAtAAABtIFsAALAAABESERMxEhETMRIREBbgH6uQH4ufniBbD65QUb+uUFG/pQBbAAAAABALT+oQdrBbAADwAAAREhETMRIREzETMDIxEhEQFuAfq5Afi5mRKm+gEFsPrlBRv65QUb+uX+DAFfBbAAAAAAAgARAAAFuAWwAAwAFQAAEyERITIWFRQGIyERIQERITI2NTQmIxECVQFo7vz97f3f/mQCVQFonJSUnAWw/ajhx8joBRv9qP3Sn355mAAAAAADALUAAAY1BbAACgATABcAAAEhMhYVFAYjIREzGQEhMjY1NCYjASMRMwFuAWju/P3t/d+5AWiclJScA1+5uQNY4cfI6AWw/RP90p9+eZj9PQWwAAACAKYAAASxBbAACgATAAABITIWFRQGIyERMxkBITI2NTQmIwFfAWju/P3t/d+5AWiclJScA1jhx8joBbD9E/3Sn355mAAAAAABALH/7AT2BcYAHwAAEzQAMzIAGQEQACMiADUzFBYzMhI9ASE1ITU0AiMiBhWxAST2+wEw/tD7+/7hubWsq8f9uwJFx6ustQPf1QES/qb+7f7//uz+qAEB46CvAQjNOJU2zgEJsKEAAAIAw//rBt4FxQAVACMAAAEQACEgABE1IxEjETMRMzUQACEgABEnNAIjIgIVERQSMzISNQbe/rv+9v7+/sbXubnXAToBAgEKAUW52ry0z8+0vdkCV/70/qABYAEMKP2BBbD9ZEQBCwFi/p7+9QLJAQb++sn+/cv++gEFzAACAGMAAARnBbAADQAWAAAhIwEuATU0JDMhESMRIQEhIgYVFBYzIQEoxQFVkJABC/UBz7r+qwFV/uujpKSdARsCbzbDktTi+lACPALeloiHowAAAAACAGH/6wQoBhEAGwApAAABMhId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ACkAAAAHAJoA0QFy//8AZv5MA/cGBAImAEkAAAAGAJpdGwAA//8Ahf/rBNsHYQImACkAAAAHAJwA/AGx//8AZv5MA/cGCgImAEkAAAAHAJwAiABa//8Ahf/rBNsHIgImACkAAAAHAJ0BoAFy//8AZv5MA/cFywImAEkAAAAHAJ0BLAAb//8Ahf3lBNsFxQImACkAAAAHAZEBq/62//8AZv5MA/cGbQImAEkAAAAHAaUBMwBW//8AtgAABP0HRgImACoAAAAHAJoA+gFd//8AkQAAA/oHRQImAEoAAAAHAJoAIwFc////xQAAAncHUQImACsAAAAHAKD/QwFg////ngAAAlAF+gImAIoAAAAHAKD/HAAJ////vwAAAokG+gImACsAAAAHAG7/RwFK////mAAAAmIFpAImAIoAAAAHAG7/IP/0////9QAAAkwHTAImACsAAAAHAJz/dAGc////zgAAAiUF9QImAIoAAAAHAJz/TQBF//8AIf5YAYEFsAImACsAAAAGAJ/vCAAA//8AAP5QAWAGGAImAEsAAAAGAJ/OAAAA//8AtwAAAYYHDQImACsAAAAHAJ0AFwFd//8Aw//rBf8FsAAmACsAAAAHACwCPwAA//8Aof5LA2MGGAAmAEsAAAAHAEwB/AAA//8AP//rBIsHOQImACwAAAAHAJoBhQFQ////tP5LAjkF3AImAJgAAAAHAJr/M//z//8Atv31BRwFsAImAC0AAAAHAZEBev7G//8Akv33BBQGGAImAE0AAAAHAZEBGP7I//8AtgAABCUG4AImAC4AAAAHAHMANwEa//8AoQAAAkMHXAImAE4AAAAHAHMAJQGW//8Atv33BCUFsAImAC4AAAAHAZEBdP7I//8AW/33AVoGGAImAE4AAAAHAZH///7I//8AtgAABCUFsQImAC4AAAAHAZEB2QTF//8AoQAAAq0GGAAmAE4AAAAHAZEBVgUs//8AtgAABCUFsAImAC4AAAAHAJ0Bxf3F//8AoQAAAq0GGAAmAE4AAAAHAJ0BPv23//8AtgAABP4HHwImADAAAAAHAHMB/wFZ//8AkQAAA/gF3QImAFAAAAAHAHMBaQAX//8Atv33BP4FsAImADAAAAAHAZEB2P7I//8Akf33A/gETgImAFAAAAAHAZEBQv7I//8AtgAABP4HRwImADAAAAAHAJsBFwFe//8AkQAAA/gGBQImAFAAAAAHAJsAgQAc////0gAAA/gGGAImAFAAAAAHAZH/dgUs//8Agv/rBQ0HDwImADEAAAAHAG4A7gFf//8AYP/sBCcFuAImAFEAAAAGAG5tCAAA//8Agv/rBQ0HYQImADEAAAAHAJwBGwGx//8AYP/sBCcGCgImAFEAAAAHAJwAmgBa//8Agv/rBQ0HYAImADEAAAAHAKEBdwFy//8AYP/sBD4GCQImAFEAAAAHAKEA9gAb//8AtQAABOIHHwImADQAAAAHAHMBkgFZ//8AkQAAAuIF3QImAFQAAAAHAHMAxAAX//8Atf33BOIFrwImADQAAAAHAZEBa/7I//8AWP33ArEETgImAFQAAAAHAZH//P7I//8AtQAABOIHRwImADQAAAAHAJsAqgFe//8AaQAAAtQGBQImAFQAAAAGAJvdHAAA//8AWv/rBIoHNAImADUAAAAHAHMBiQFu//8AZv/sA8IF3QImAFUAAAAHAHMBPAAX//8AWv/rBIoHWwImADUAAAAHAJoAiwFy//8AZv/sA8IGBAImAFUAAAAGAJo+GwAA//8AWv5EBIoFxQImADUAAAAHAHcBjf/3//8AZv5FA8IETgImAFUAAAAHAHcBQP/4//8AWv3jBIoFxQImADUAAAAHAZEBYv60//8AZv3kA8IETgImAFUAAAAHAZEBFf61//8AWv/rBIoHXAImADUAAAAHAJsAoQFz//8AZv/sA8IGBQImAFUAAAAGAJtUHAAA//8AO/31BIoFsAImADYAAAAHAZEBZf7G//8AHf3tAk4FQQImAFYAAAAHAZEArP6+//8AO/5VBIoFsAImADYAAAAHAHcBkAAI//8AHf5NAoEFQQImAFYAAAAHAHcA1wAA//8AOwAABIoHRgImADYAAAAHAJsApAFd//8AHf/sAuwGMQAmAFYAAAAHAZEBlQVF//8Alv/rBNcHUQImADcAAAAHAKAA3AFg//8Ajf/sA/YF+gImAFcAAAAGAKBnCQAA//8Alv/rBNcG+gImADcAAAAHAG4A4AFK//8Ajf/sA/YFpAImAFcAAAAGAG5r9AAA//8Alv/rBNcHTAImADcAAAAHAJwBDQGc//8Ajf/sA/YF9QImAFcAAAAHAJwAmABF//8Alv/rBNcHiAImADcAAAAHAJ4BYwGo//8Ajf/sA/YGMQImAFcAAAAHAJ4A7gBR//8Alv/rBNcHSwImADcAAAAHAKEBaQFd//8Ajf/sBDwF9AImAFcAAAAHAKEA9AAGAAEAlv5uBNcFsAAnAAABERQGBw4BFRQWMzI2NxcOASMiJjU0NjciBiMiJDURMxEUFjMyNjURBNeRhFNYIysdLxgNIEo2V2kuMgcbBvT+3Lq9oanHBbD8JaXaOD1lPCQmEAx4ExliWzRhLAH48gPb/CWrqqqrA9sAAAEAjf5QBAkEOgAnAAAhDgEVFBYzMjY3Fw4BIyImNTQ2Ny8BDgEjIiY1ETMRFBYzMjY3ETMRA/VTWCMrHS8YDSBKNldpUFYMAzKebbTCumhxcIkkuT1lPCQmEAx4ExliW0R8NpsBV1zd9AJ9/YGyg1dTAwr7xgAA//8ASAAABsIHRgImADkAAAAHAJoBrQFd//8AMAAABdgF7wImAFkAAAAHAJoBLgAG//8AHgAABNMHRAImADsAAAAHAJoAogFb//8AG/5LA+QF7wImAFsAAAAGAJorBgAA//8AHgAABNMHCgImADsAAAAHAGgAfAFa//8AYQAABG0HHwImADwAAAAHAHMBiAFZ//8AXgAAA7gFyAImAFwAAAAHAHMBMwAC//8AYQAABG0HDQImADwAAAAHAJ0BWQFd//8AXgAAA7gFtgImAFwAAAAHAJ0BBAAG//8AYQAABG0HRwImADwAAAAHAJsAoAFe//8AXgAAA7gF8AImAFwAAAAGAJtLBwAA////8gAAB1cHHwImAH8AAAAHAHMC0QFZ//8APf/rBnwF3gImAIQAAAAHAHMCggAY//8Ac/+jBP4HXQImAIEAAAAHAHMB4gGX//8AYP95BCcF3AImAIcAAAAHAHMBQAAW////8wAABC0EjQImAakAAAAHAdP/ZP97////8wAABC0EjQImAakAAAAHAdP/ZP97//8ARwAAA88EjQImAbgAAAAGAdMx9wAA//8AKQAABIMF3wImAaYAAAAHAEIAvwAa//8AKQAABIMF3AImAaYAAAAHAHMBeQAW//8AKQAABIMGAwImAaYAAAAGAJp7GgAA//8AKQAABIMGDgImAaYAAAAGAKB1HQAA//8AKQAABIMFyQImAaYAAAAGAGhVGQAA//8AKQAABIMGRQImAaYAAAAHAJ4A/ABl//8AKQAABIMGXQImAaYAAAAHAdQBDP/q//8Acv5HBCQEnQImAagAAAAHAHcBb//6//8AmwAAA8cF3wImAaoAAAAHAEIAjgAa//8AmwAAA8cF3AImAaoAAAAHAHMBSAAW//8AmwAAA8cGAwImAaoAAAAGAJpKGgAA//8AmwAAA8cFyQImAaoAAAAGAGgkGQAA////swAAAVQF3wImAa4AAAAHAEL/ZAAa//8AmwAAAjsF3AImAa4AAAAGAHMdFgAA////yQAAAiYGAwImAa4AAAAHAJr/IAAa////owAAAkwFyQImAa4AAAAHAGj++gAZ//8AmwAABHIGDgImAbMAAAAHAKAAlgAd//8Acv/vBFcF7wImAbQAAAAHAEIAwAAq//8Acv/vBFcF7AImAbQAAAAHAHMBegAm//8Acv/vBFcGEwImAbQAAAAGAJp8KgAA//8Acv/vBFcGHgImAbQAAAAGAKB2LQAA//8Acv/vBFcF2QImAbQAAAAGAGhWKQAA//8AjP/vBHAF4AImAbkAAAAHAEIA4AAb//8AjP/vBHAF3QImAbkAAAAHAHMBmgAX//8AjP/vBHAGBAImAbkAAAAHAJoAnAAb//8AjP/vBHAFygImAbkAAAAGAGh2GgAA//8AIAAABDAF2wImAb0AAAAHAHMBSQAV//8AKQAABIMFtwImAaYAAAAGAG55BwAA//8AKQAABIMGCQImAaYAAAAHAJwApgBZAAIAKf5QBIMEjQAaAB0AAAEzASMOARUUFjMyNjcXDgEjIiY1NDY3JyEDIwEhAwH/rwHVN1NYIysdLxgNIEo2V2lcYWP9+GnAAWIBlswEjftzPWU8JCYQDHgTGWJbSYM4//7wAaQCDQD//wBy/+8EJAXsAiYBqAAAAAcAcwFrACb//wBy/+8EJAYTAiYBqAAAAAYAmm0qAAD//wBy/+8EJAXaAiYBqAAAAAcAnQE8ACr//wBy/+8EJAYUAiYBqAAAAAcAmwCDACv//wCbAAAELQYEAiYBqQAAAAYAmy8bAAD//wCbAAADxwW3AiYBqgAAAAYAbkgHAAD//wCbAAADxwYJAiYBqgAAAAYAnHVZAAD//wCbAAADxwXKAiYBqgAAAAcAnQEZABoAAQCb/lADxwSNACAAAAEhESEVIw4BFRQWMzI2NxcOASMiJjU0NjcnIREhFSERIQNw/eUCckhTWCMrHS8YDSBKNldpTVAB/cwDLP2OAhsCFf5+kz1lPCQmEAx4ExliW0N6MwMEjZT+sP//AJsAAAPHBgQCJgGqAAAABgCbYBsAAP//AHL/7wRHBhMCJgGsAAAABgCadSoAAP//AHL/7wRHBhkCJgGsAAAABwCcAKAAaf//AHL/7wRHBdoCJgGsAAAABwCdAUQAKv//AHL95wRHBJ0CJgGsAAAABwGRAVL+uP//AJsAAARVBgMCJgGtAAAABwCaAIMAGv///5wAAAJOBg4CJgGuAAAABwCg/xoAHf///5YAAAJgBbcCJgGuAAAABwBu/x4AB////8wAAAIjBgkCJgGuAAAABwCc/0sAWf////f+UAFXBI0CJgGuAAAABgCfxQAAAP//AI8AAAFeBcoCJgGuAAAABgCd7xoAAP//AEH/7wQ9BfkCJgGvAAAABwCaATcAEP//AJv98wRABI0CJgGwAAAABwGRAP/+xP//AJsAAANqBcECJgGxAAAABgBzI/sAAP//AJv99QNqBI0CJgGxAAAABwGRANz+xv//AJsAAANqBI4CJgGxAAAABwGRAUUDov//AJsAAANqBI0CJgGxAAAABwCdATH9Jv//AJsAAARyBdwCJgGzAAAABwBzAZoAFv//AJv99QRyBI0CJgGzAAAABwGRAXP+xv//AJsAAARyBgQCJgGzAAAABwCbALIAG///AHL/7wRXBccCJgG0AAAABgBuehcAAP//AHL/7wRXBhkCJgG0AAAABwCcAKcAaf//AHL/7wRXBhgCJgG0AAAABwChAQMAKv//AJsAAAQ6BdwCJgG2AAAABwBzASYAFv//AJv99QQ6BI0CJgG2AAAABwGRAP/+xv//AJsAAAQ6BgQCJgG2AAAABgCbPhsAAP//AF3/7wQNBewCJgG3AAAABwBzAVQAJv//AF3/7wQNBhMCJgG3AAAABgCaVioAAP//AF3+RwQNBJ0CJgG3AAAABwB3AVj/+v//AF3/7wQNBhQCJgG3AAAABgCbbCsAAP//AEf99QPPBI0CJgG4AAAABwGRAQP+xv//AEcAAAPPBgMCJgG4AAAABgCbQhoAAP//AIz/7wRwBg8CJgG5AAAABwCgAJYAHv//AIz/7wRwBbgCJgG5AAAABwBuAJoACP//AIz/7wRwBgoCJgG5AAAABwCcAMcAWv//AIz/7wRwBkYCJgG5AAAABwCeAR0AZv//AIz/7wRwBgkCJgG5AAAABwChASMAGwABAIz+ewRwBI0AJwAAAREUBgcOARUUFjMyNjcXDgEjIiY1NDY3IgYjIiQ1ETMRFBYzMjY1EQRwcGhTWCMrHS8YDSBKNldpKi0HGAbh/u+4rI6QqgSN/QF9sjQ9ZTwkJhAMeBMZYlsyWysB2McC//0BgIyMgAL/AP//AEEAAAXABgMCJgG7AAAABwCaASEAGv//ACAAAAQwBgICJgG9AAAABgCaSxkAAP//ACAAAAQwBcgCJgG9AAAABgBoJRgAAP//AE4AAAPYBdwCJgG+AAAABwBzAScAFv//AE4AAAPYBcoCJgG+AAAABwCdAPgAGv//AE4AAAPYBgQCJgG+AAAABgCbPxsAAP//AF3/7wh8BJ0AJgG3AAAABwG3BG8AAP//ACcAAAUiBngCJgAjAAAABgCpOgAAAP///+YAAATZBnoAJgAnZAAABwCp/yMAAv//ABMAAAVhBnoAJgAqZAAABwCp/1AAAv//ABkAAAHgBnkAJgArZAAABwCp/1YAAf//AFL/6wUhBngAJgAxFAAABgCpjwAAAP///40AAAU3BngAJgA7ZAAABwCp/soAAP//AD8AAAThBngAJgC1FAAABwCp/3wAAP///8j/6wKDBj8CJgC+AAAABwCq/yf/t///ACcAAAUiBbACBgAjAAD//wC2AAAEqQWwAgYAJAAA//8AtgAABHUFsAIGACcAAP//AGEAAARtBbACBgA8AAD//wC2AAAE/QWwAgYAKgAA//8AwwAAAXwFsAIGACsAAP//ALYAAAUcBbACBgAtAAD//wC2AAAGTQWwAgYALwAA//8AtgAABP4FsAIGADAAAP//AIL/6wUNBcUCBgAxAAD//wC2AAAExAWwAgYAMgAA//8AOwAABIoFsAIGADYAAP//AB4AAATTBbACBgA7AAD//wBBAAAE0AWwAgYAOgAA////zAAAAnUHDAImACsAAAAHAGj/IwFc//8AHgAABNMHCgImADsAAAAHAGgAfAFa//8AZP/rBHcGegImALYAAAAHAKkBdQAC//8AY//tA+wGeQImALoAAAAHAKkBKwAB//8Akf5hA/AGegImALwAAAAHAKkBRgAC//8Aw//rAmsGZgImAL4AAAAGAKkq7gAA//8Aj//rA/YGPwImAMYAAAAGAKoetwAA//8AmgAABD8EOgIGAIsAAP//AGD/7AQnBE4CBgBRAAD//wCa/mAD7gQ6AgYAdAAA//8ALgAAA98EOgIGAFgAAP//AC4AAAPPBDoCBgBaAAD////T/+sCfAW1AiYAvgAAAAcAaP8qAAX//wCP/+sD9gW1AiYAxgAAAAYAaCEFAAD//wBg/+wEJwZ6AiYAUQAAAAcAqQFKAAL//wCP/+sD9gZmAiYAxgAAAAcAqQEi/+7//wB6/+sGGQZjAiYAyQAAAAcAqQJT/+v//wC2AAAEdQcMAiYAJwAAAAcAaAB2AVz//wC1AAAEMAcfAiYArAAAAAcAcwGYAVkAAQBa/+sEigXFACUAAAE0JicuATU0JDMyABUjNCYjIgYVFBYXHgEVFAQjIiQ1MxQWMzI2A9CWx+z+ARPh8QEYuaykm6CpyOrt/uXr3/61udOenLABbmiFMTjQpa3f/v62hJ6FbmJ/MTvYp7PS6M+RkX4AAP//AMMAAAF8BbACBgArAAD////MAAACdQcMAiYAKwAAAAcAaP8jAVz//wA//+sDwAWwAgYALAAA//8AtgAABRwFsAIGAC0AAP//ALYAAAUcBscCJgAtAAAABwBzAYwBAf//AFH/6wTIB0wCJgDZAAAABwCcANoBnP//ACcAAAUiBbACBgAjAAD//wC2AAAEqQWwAgYAJAAA//8AtQAABDAFsAIGAKwAAP//ALYAAAR1BbACBgAnAAD//wC2AAAE/gdMAiYA1wAAAAcAnAExAZz//wC2AAAGTQWwAgYALwAA//8AtgAABP0FsAIGACoAAP//AIL/6wUNBcUCBgAxAAD//wC2AAAE/wWwAgYAsQAA//8AtgAABMQFsAIGADIAAP//AIP/6wTJBcUCBgAlAAD//wA7AAAEigWwAgYANgAA//8AQQAABNAFsAIGADoAAP//AHL/7APsBE4CBgBDAAD//wBi/+wD6QROAgYARwAA//8AnAAABAEF9QImAOsAAAAHAJwAogBF//8AYP/sBCcETgIGAFEAAP//AJH+YAQkBE4CBgBSAAAAAQBh/+wD8gROABsAACUyNjczDgEjIgI9ATQSMzIWFyMuASMiBh0BFBYCQ2eXAbAB/6/u9PTuv+8BsAGOcKGHhoF4XJTVAS/tKuwBMNysaIrfpyqr3AAA//8AG/5LA+QEOgIGAFsAAP//AC4AAAPPBDoCBgBaAAD//wBi/+wD6QXLAiYARwAAAAYAaDEbAAD//wCaAAADRwXIAiYA5wAAAAcAcwDVAAL//wBm/+wDwgROAgYAVQAA//8AoQAAAVoGGAIGAEsAAP///6UAAAJOBbUCJgCKAAAABwBo/vwABf///7b+SwFnBhgCBgBMAAD//wCcAAAEPwXHAiYA7AAAAAcAcwFDAAH//wAb/ksD5AX1AiYAWwAAAAYAnFZFAAD//wBIAAAGwgciAiYAOQAAAAcAQgHxAV3//wAwAAAF2AXLAiYAWQAAAAcAQgFyAAb//wBIAAAGwgcfAiYAOQAAAAcAcwKrAVn//wAwAAAF2AXIAiYAWQAAAAcAcwIsAAL//wBIAAAGwgcMAiYAOQAAAAcAaAGHAVz//wAwAAAF2AW1AiYAWQAAAAcAaAEIAAX//wAeAAAE0wcgAiYAOwAAAAcAQgDmAVv//wAb/ksD5AXLAiYAWwAAAAYAQm8GAAD//wBnBCMA/QYYAgYACQAA//8AaQQUAh8GGAIGAAQAAP//AKkAAAN1BbAAJgQbAAAABwQbAg8AAP//AEIAAAQYBi0AJgBIAAAABwBOAr4AAP///7T+SwJABd0CJgCYAAAABwCb/0n/9P//ADAD5wFHBhgCBgFmAAD//wC2AAAGTQcfAiYALwAAAAcAcwKpAVn//wCQAAAGcgXdAiYATwAAAAcAcwK7ABf//wAn/ocFIgWwAiYAIwAAAAcAogFPAAD//wBy/ocD7AROAiYAQwAAAAcAogCeAAD///8+/+sFDQaiAiYAMQAAAAcB1f7PAMz//wBCAAAGiwYtACYASAAAAAcBkgK+AAD//wBCAAAG1gYtACYASAAAACcASAK+AAAABwBOBXwAAP//ALYAAAR1ByICJgAnAAAABwBCAOABXf//ALYAAAT+ByICJgDXAAAABwBCAUoBXf//AGL/7APpBeECJgBHAAAABwBCAJsAHP//AJwAAAQBBcsCJgDrAAAABwBCALsABv//AF0AAAUYBbACBgC0AAD//wBf/ikFQwQ6AgYAyAAA//8AFwAABNoHRwImARQAAAAHAKcENwFZ////+QAABAsGHwImARUAAAAHAKcD0gAx//8AYP5LCGwETgAmAFEAAAAHAFsEiAAA//8Agv5LCXQFxQAmADEAAAAHAFsFkAAA//8AUf5RBGcFxQImANYAAAAHAZwBnP+4//8AWP5SA6wETAImAOoAAAAHAZwBQ/+5//8Ag/5RBMkFxQImACUAAAAHAZwB7v+4//8AYf5RA/IETgImAEUAAAAHAZwBWP+4//8AHgAABNMFsAIGADsAAP//AC7+YAPfBDoCBgC4AAD//wDDAAABfAWwAgYAKwAA//8AGwAABygHTAImANUAAAAHAJwB+AGc//8AFQAABgQF9QImAOkAAAAHAJwBjQBF//8AwwAAAXwFsAIGACsAAP//ACcAAAUiB0wCJgAjAAAABwCcAPsBnP//AHL/7APsBgoCJgBDAAAABgCcfVoAAP//ACcAAAUiBwwCJgAjAAAABwBoAKoBXP//AHL/7APsBcoCJgBDAAAABgBoLBoAAP////IAAAdXBbACBgB/AAD//wA9/+sGfAROAgYAhAAA//8AtgAABHUHTAImACcAAAAHAJwAxwGc//8AYv/sA+kGCwImAEcAAAAHAJwAggBb//8AX//rBRAG3gImAUEAAAAHAGgAfQEu//8AYv/sA+kETwIGAJkAAP//AGL/7APpBcsCJgCZAAAABgBoMRsAAP//ABsAAAcoBwwCJgDVAAAABwBoAacBXP//ABUAAAYEBbUCJgDpAAAABwBoATwABf//AFH/6wRnByECJgDWAAAABwBoAGEBcf//AFj/7QOsBckCJgDqAAAABgBoCBkAAP//ALYAAAT+BvoCJgDXAAAABwBuAQQBSv//AJwAAAQBBaQCJgDrAAAABgBudfQAAP//ALYAAAT+BwwCJgDXAAAABwBoAOABXP//AJwAAAQBBbUCJgDrAAAABgBoUQUAAP//AIL/6wUNByECJgAxAAAABwBoAMoBcf//AGD/7AQnBcoCJgBRAAAABgBoSRoAAP//AHP/6wT+BcUCBgESAAD//wBg/+wEJwROAgYBEwAA//8Ac//rBP4HBwImARIAAAAHAGgA0gFX//8AYP/sBCcF5gImARMAAAAGAGgyNgAA//8Asf/sBPYHIgImAOIAAAAHAGgAtwFy//8AZP/rA+AFygImAPoAAAAGAGgmGgAA//8AUf/rBMgG+gImANkAAAAHAG4ArQFK//8AG/5LA+QFpAImAFsAAAAGAG4p9AAA//8AUf/rBMgHDAImANkAAAAHAGgAiQFc//8AG/5LA+QFtQImAFsAAAAGAGgFBQAA//8AUf/rBMgHSwIm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IABMAGkAYwBlAG4AcwBlACwAIABWAGUAcgBzAGkAbwBuACAAMgAuADAAaAB0AHQAcAA6AC8ALwB3AHcAdwAuAGEAcABhAGMAaABlAC4AbwByAGcALwBsAGkAYwBlAG4AcwBlAHMALwBMAEkAQwBFAE4AUwBFAC0AMgAuADAAAAAAAgAAAAAAAP9qAGQAAAAAAAAAAAAAAAAAAAAAAAAAAAQcAAABAgACAAMABQAGAAcACAAJAAoACwAMAA0ADgAPABAAEQASABMAFAAVABYAFwAYABkAGgAbABwAHQAeAB8AIAAhACIAIwAkACUAJgAnACgAKQAqACsALAAtAC4ALwAwADEAMgAzADQANQA2ADcAOAA5ADoAOwA8AD0APgA/AEAAQQBCAEMARABFAEYARwBIAEkASgBLAEwATQBOAE8AUABRAFIAUwBUAFUAVgBXAFgAWQBaAFsAXABdAF4AXwBgAGEAowCEAIUAvQCWAOgAhgCOAIsAnQCpAKQAigEDAIMAkwDyAPMAjQCXAIgBBADeAPEAngCqAPUA9AD2AKIAkADwAJEA7QCJAKAA6gC4AKEA7gEFANcBBgDiAOMBBwEIALAAsQEJAKYBCgELAQwBDQEOAQ8A2ADhANsA3ADdAOAA2QDfARABEQESARMBFAEVARYBFwEYARkBGgEbARwBHQEeAR8BIAEhASIAnwEjASQBJQEmAScBKAEpASoBKwEsAS0AmwEuAS8BMAExATIBMwE0ATUBNgE3ATgBOQE6ATsBPAE9AT4BPwFAAUEBQgFDAUQBRQFGAUcBSAFJAUoBSwFMAU0BTgFPAVABUQFSAVMBVAFVAVYBVwFYAVkBWgFbAVwBXQFeAV8BYAFhAWIBYwFkAWUBZgFnAWgBaQFqAWsBbAFtAW4BbwFwAXEBcgFzAXQBdQF2AXcBeAF5AXoBewF8AX0BfgF/AYABgQGCAYMBhAGFAYYBhwGIAYkBigGLAYwBjQGOAY8BkAGRAZIBkwGUAZUBlgGXAZgBmQGaAZsBnAGdAZ4BnwGgAaEBogGjAaQBpQGmAacBqAGpAaoBqwGsAa0BrgGvAbABsQGyAbMBtAG1AbYBtwG4AbkBugG7AbwBvQG+Ab8BwAHBAcIBwwHEAcUBxgHHAcgByQHKAcsBzAHNALIAswHOALYAtwDEAc8AtAC1AMUAggDCAIcB0ACrAMYAvgC/ALwB0QHSAdMB1AHVAdYB1wHYAIwB2QHaAdsB3AHdAJgAmgCZAO8ApQCSAJwApwCPAJQAlQC5Ad4B3wHgAMAB4QHiAeMB5AHlAeYB5wHoAekB6gHrAewB7QHuAe8B8AHxAfIB8wH0AfUB9gH3AfgB+QH6AfsB/AH9Af4B/wIAAgECAgIDAgQCBQIGAgcCCAIJAgoCCwIMAg0CDgIPAhACEQISAhMCFAIVAhYCFwIYAhkCGgIbAhwCHQIeAh8CIAIhAiICIwIkAiUCJgInAigCKQIqAisCLAItAi4CLwIwAjECMgIzAjQCNQI2AjcArAI4AjkA6QI6AjsCPACtAMkAxwCuAGIAYwI9AGQAywBlAMgAygDPAMwAzQDOAGYA0wDQANEArwBnANYA1ADVAGgA6wBqAGkAawBtAGwAbgI+AG8AcQBwAHIAcwB1AHQAdgB3AHgAegB5AHsAfQB8AH8AfgCAAIEA7AC6Aj8CQAJBAkICQwJEAP0A/gJFAkYCRwJIAP8BAAJJAkoCSwJMAk0CTgJPAlACUQJSAlMCVAJVAlYA+AD5AlcCWAJZAloCWwJcAl0CXgJfAmACYQJiAmMCZAJlAmYCZwJoAmkCagJrAmwCbQJuAm8CcAJxAnICcwJ0AnUCdgJ3AngCeQJ6AnsCfAJ9An4CfwKAAoECggKDAoQChQKGAocCiAKJAooA+wD8AosCjADkAOUCjQKOAo8CkAKRApICkwKUApUClgKXApgCmQKaApsCnAKdAp4CnwKgAqECogC7AqMCpAKlAqYA5gDnAqcCqAKpAqoCqwKsAq0CrgKvArACsQKyArMCtAK1ArYCtwK4ArkCugK7ArwCvQK+Ar8CwALBAsICwwLEAsUCxgLHAsgCyQLKAssCzALNAs4CzwLQAtEC0gLTAtQC1QLWAtcC2ALZAtoC2wLcAt0C3gLfAuAC4QLiAuMC5ALlAuYC5wLoAukC6gLrAuwC7QLuAu8C8ALxAvIC8wL0AvUC9gL3AvgC+QL6AvsC/AL9Av4C/wMAAwEDAgMDAwQDBQMGAwcDCAMJAwoDCwMMAw0DDgMPAxADEQMSAxMDFAMVAxYDFwMYAxkDGgMbAxwDHQMeAx8DIAMhAyIDIwMkAyUDJgMnAygDKQMqAysDLAMtAy4DLwMwAzEDMgMzAzQDNQM2AzcDOAM5AzoDOwM8Az0DPgM/A0ADQQNCA0MDRANFA0YDRwNIA0kDSgNLA0wDTQNOA08DUANRA1IDUwNUA1UDVgNXA1gDWQNaA1sDXANdA14DXwNgA2EDYgNjA2QDZQNmA2cDaANpA2oDawNsA20DbgNvA3ADcQNyA3MDdAN1A3YDdwN4A3kDegN7A3wDfQN+A38DgAOBA4IDgwOEA4UDhgOHA4gDiQOKA4sDjAONA44DjwOQA5EDkgOTA5QDlQOWA5cDmAOZA5oDmwOcA50DngOfA6ADoQOiA6MDpAOlA6YDpwOoA6kDqgOrA6wDrQOuA68DsAOxA7IDswO0A7UDtgO3A7gDuQO6A7sDvAO9A74DvwPAA8EDwgPDA8QDxQPGA8cDyAPJA8oDywPMA80DzgPPA9AD0QPSA9MD1APVA9YD1wPYA9kD2gPbA9wD3QPeA98D4APhA+ID4wPkA+UD5gPnA+gD6QPqA+sD7APtA+4D7wPwA/ED8gPzA/QD9QP2A/cD+AP5A/oD+wP8A/0D/gP/BAAEAQQCBAMEBAQFBAYEBwQIBAkECgQLBAwEDQQOBA8EEAQRBBIEEwQUBBUEFgQXBBgEGQQaBBsEHAQdBB4EHwQgBCEA9wQiBCMABAd1bmkwMDA5Bm1hY3Jvbg5wZXJpb2RjZW50ZXJlZARIYmFyDGtncmVlbmxhbmRpYwNFbmcDZW5nBWxvbmdzBU9ob3JuBW9ob3JuBVVob3JuBXVob3JuB3VuaTAyMzcFc2Nod2EHdW5pMDJGMwlncmF2ZWNvbWIJYWN1dGVjb21iCXRpbGRlY29tYgRob29rB3VuaTAzMEYIZG90YmVsb3cFdG9ub3MNZGllcmVzaXN0b25vcwlhbm90ZWxlaWEFR2FtbWEFRGVsdGEFVGhldGEGTGFtYmRhAlhpAlBpBVNpZ21hA1BoaQNQc2kFYWxwaGEEYmV0YQVnYW1tYQVkZWx0YQdlcHNpbG9uBHpldGEDZXRhBXRoZXRhBGlvdGEGbGFtYmRhAnhpA3JobwZzaWdtYTEFc2lnbWEDdGF1B3Vwc2lsb24DcGhpA3BzaQVvbWVnYQd1bmkwM0QxB3VuaTAzRDIHdW5pMDNENgd1bmkwNDAyB3VuaTA0MDQHdW5pMDQwOQd1bmkwNDBBB3VuaTA0MEIHdW5pMDQwRgd1bmkwNDExB3VuaTA0MTQHdW5pMDQxNgd1bmkwNDE3B3VuaTA0MTgHdW5pMDQxQgd1bmkwNDIzB3VuaTA0MjQHdW5pMDQyNgd1bmkwNDI3B3VuaTA0MjgHdW5pMDQyOQd1bmkwNDJBB3VuaTA0MkIHdW5pMDQyQwd1bmkwNDJEB3VuaTA0MkUHdW5pMDQyRgd1bmkwNDMxB3VuaTA0MzIHdW5pMDQzMwd1bmkwNDM0B3VuaTA0MzYHdW5pMDQzNwd1bmkwNDM4B3VuaTA0M0EHdW5pMDQzQgd1bmkwNDNDB3VuaTA0M0QHdW5pMDQzRgd1bmkwNDQyB3VuaTA0NDQHdW5pMDQ0Ngd1bmkwNDQ3B3VuaTA0NDgHdW5pMDQ0OQd1bmkwNDRBB3VuaTA0NEIHdW5pMDQ0Qwd1bmkwNDREB3VuaTA0NEUHdW5pMDQ0Rgd1bmkwNDUyB3VuaTA0NTQHdW5pMDQ1OQd1bmkwNDVBB3VuaTA0NUIHdW5pMDQ1Rgd1bmkwNDYwB3VuaTA0NjEHdW5pMDQ2Mwd1bmkwNDY0B3VuaTA0NjUHdW5pMDQ2Ngd1bmkwNDY3B3VuaTA0NjgHdW5pMDQ2OQd1bmkwNDZBB3VuaTA0NkIHdW5pMDQ2Qwd1bmkwNDZEB3VuaTA0NkUHdW5pMDQ2Rgd1bmkwNDcyB3VuaTA0NzMHdW5pMDQ3NAd1bmkwNDc1B3VuaTA0N0EHdW5pMDQ3Qgd1bmkwNDdDB3VuaTA0N0QHdW5pMDQ3RQd1bmkwNDdGB3VuaTA0ODAHdW5pMDQ4MQd1bmkwNDgyB3VuaTA0ODMHdW5pMDQ4NAd1bmkwNDg1B3VuaTA0ODYHdW5pMDQ4OAd1bmkwNDg5B3VuaTA0OEQHdW5pMDQ4RQd1bmkwNDhGB3VuaTA0OTAHdW5pMDQ5MQd1bmkwNDk0B3VuaTA0OTUHdW5pMDQ5Qwd1bmkwNDlEB3VuaTA0QTAHdW5pMDRBMQd1bmkwNEE0B3VuaTA0QTUHdW5pMDRBNgd1bmkwNEE3B3VuaTA0QTgHdW5pMDRBOQd1bmkwNEI0B3VuaTA0QjUHdW5pMDRCOAd1bmkwNEI5B3VuaTA0QkEHdW5pMDRCQwd1bmkwNEJEB3VuaTA0QzMHdW5pMDRDNAd1bmkwNEM3B3VuaTA0QzgHdW5pMDREOAd1bmkwNEUwB3VuaTA0RTEHdW5pMDRGQQd1bmkwNEZCB3VuaTA1MDAHdW5pMDUwMgd1bmkwNTAzB3VuaTA1MDQHdW5pMDUwNQd1bmkwNTA2B3VuaTA1MDcHdW5pMDUwOAd1bmkwNTA5B3VuaTA1MEEHdW5pMDUwQgd1bmkwNTBDB3VuaTA1MEQHdW5pMDUwRQd1bmkwNTBGB3VuaTA1MTAHdW5pMjAwMAd1bmkyMDAxB3VuaTIwMDIHdW5pMjAwMwd1bmkyMDA0B3VuaTIwMDUHdW5pMjAwNgd1bmkyMDA3B3VuaTIwMDgHdW5pMjAwOQd1bmkyMDBBB3VuaTIwMEINdW5kZXJzY29yZWRibA1xdW90ZXJldmVyc2VkB3VuaTIwMjUHdW5pMjA3NAluc3VwZXJpb3IEbGlyYQZwZXNldGEERXVybwd1bmkyMTA1B3VuaTIxMTMHdW5pMjExNgllc3RpbWF0ZWQJb25lZWlnaHRoDHRocmVlZWlnaHRocwtmaXZlZWlnaHRocwxzZXZlbmVpZ2h0aHMKY29sb24ubG51bQlxdW90ZWRibHgLY29tbWFhY2NlbnQHdW5pRkVGRgd1bmlGRkZDB3VuaUZGRkQJZml2ZS5zbWNwCGZvdXIuc3VwCXplcm8ubG51bQ5sYXJnZXJpZ2h0aG9vawxjeXJpbGxpY2hvb2sQY3lyaWxsaWNob29rbGVmdAtjeXJpbGxpY3RpYw5icmV2ZXRpbGRlY29tYg1icmV2ZWhvb2tjb21iDmJyZXZlYWN1dGVjb21iE2NpcmN1bWZsZXh0aWxkZWNvbWISY2lyY3VtZmxleGhvb2tjb21iE2NpcmN1bWZsZXhncmF2ZWNvbWITY2lyY3VtZmxleGFjdXRlY29tYg5icmV2ZWdyYXZlY29tYhFjb21tYWFjY2VudHJvdGF0ZQZBLnNtY3AGQi5zbWNwBkMuc21jcAZELnNtY3AGRS5zbWNwBkYuc21jcAZHLnNtY3AGSC5zbWNwBkkuc21jcAZKLnNtY3AGSy5zbWNwBkwuc21jcAZNLnNtY3AGTi5zbWNwBk8uc21jcAZRLnNtY3AGUi5zbWNwBlMuc21jcAZULnNtY3AGVS5zbWNwBlYuc21jcAZXLnNtY3AGWC5zbWNwBlkuc21jcAZaLnNtY3AJemVyby5zbWNwCG9uZS5zbWNwCHR3by5zbWNwCnRocmVlLnNtY3AJZm91ci5zbWNwCHR3by5sbnVtCHNpeC5zbWNwCnNldmVuLnNtY3AKZWlnaHQuc21jcAluaW5lLnNtY3AHb25lLnN1cAd0d28uc3VwCXRocmVlLnN1cAhvbmUubG51bQhmaXZlLnN1cAdzaXguc3VwCXNldmVuLnN1cAllaWdodC5zdXAIbmluZS5zdXAIemVyby5zdXAIY3Jvc3NiYXIJcmluZ2FjdXRlCWRhc2lhb3hpYQp0aHJlZS5sbnVtCWZvdXIubG51bQlmaXZlLmxudW0Ic2l4LmxudW0FZy5hbHQKc2V2ZW4ubG51bQdjaGkuYWx0CmVpZ2h0LmxudW0JYWxwaGEuYWx0CWRlbHRhLmFsdARELmNuBGEuY24FUi5hbHQFSy5hbHQFay5hbHQGSy5hbHQyBmsuYWx0MgluaW5lLmxudW0GUC5zbWNwDWN5cmlsbGljYnJldmUHdW5pMDBBRAZEY3JvYXQEaGJhcgRUYmFyBHRiYXIKQXJpbmdhY3V0ZQphcmluZ2FjdXRlB0FtYWNyb24HYW1hY3JvbgZBYnJldmUGYWJyZXZlB0FvZ29uZWsHYW9nb25lawtDY2lyY3VtZmxleAtjY2lyY3VtZmxleAd1bmkwMTBBB3VuaTAxMEIGRGNhcm9uBmRjYXJvbgdFbWFjcm9uB2VtYWNyb24GRWJyZXZlBmVicmV2ZQpFZG90YWNjZW50CmVkb3RhY2NlbnQHRW9nb25lawdlb2dvbmVrBkVjYXJvbgZlY2Fyb24LR2NpcmN1bWZsZXgLZ2NpcmN1bWZsZXgHdW5pMDEyMAd1bmkwMTIxDEdjb21tYWFjY2VudAxnY29tbWFhY2NlbnQLSGNpcmN1bWZsZXgLaGNpcmN1bWZsZXgGSXRpbGRlBml0aWxkZQdJbWFjcm9uB2ltYWNyb24GSWJyZXZlBmlicmV2ZQdJb2dvbmVrB2lvZ29uZWsKSWRvdGFjY2VudAJJSgJpagtKY2lyY3VtZmxleAtqY2lyY3VtZmxleAxLY29tbWFhY2NlbnQMa2NvbW1hYWNjZW50BkxhY3V0ZQZsYWN1dGUMTGNvbW1hYWNjZW50DGxjb21tYWFjY2VudAZMY2Fyb24GbGNhcm9uBExkb3QEbGRvdAZOYWN1dGUGbmFjdXRlDE5jb21tYWFjY2VudAxuY29tbWFhY2NlbnQGTmNhcm9uBm5jYXJvbgtuYXBvc3Ryb3BoZQdPbWFjcm9uB29tYWNyb24GT2JyZXZlBm9icmV2ZQ1PaHVuZ2FydW1sYXV0DW9odW5nYXJ1bWxhdXQGUmFjdXRlBnJhY3V0ZQxSY29tbWFhY2NlbnQMcmNvbW1hYWNjZW50BlJjYXJvbgZyY2Fyb24GU2FjdXRlBnNhY3V0ZQtTY2lyY3VtZmxleAtzY2lyY3VtZmxleAd1bmkwMjE4B3VuaTAyMTkHdW5pMDIxQQd1bmkwMjFCB3VuaTAxNjIHdW5pMDE2MwZUY2Fyb24GdGNhcm9uBlV0aWxkZQZ1dGlsZGUHVW1hY3Jvbgd1bWFjcm9uBlVicmV2ZQZ1YnJldmUFVXJpbmcFdXJpbmcNVWh1bmdhcnVtbGF1dA11aHVuZ2FydW1sYXV0B1VvZ29uZWsHdW9nb25lawtXY2lyY3VtZmxleAt3Y2lyY3VtZmxleAtZY2lyY3VtZmxleAt5Y2lyY3VtZmxleAZaYWN1dGUGemFjdXRlClpkb3RhY2NlbnQKemRvdGFjY2VudAdBRWFjdXRlB2FlYWN1dGULT3NsYXNoYWN1dGULb3NsYXNoYWN1dGULRGNyb2F0LnNtY3AIRXRoLnNtY3AJVGJhci5zbWNwC0FncmF2ZS5zbWNwC0FhY3V0ZS5zbWNwEEFjaXJjdW1mbGV4LnNtY3ALQXRpbGRlLnNtY3AOQWRpZXJlc2lzLnNtY3AKQXJpbmcuc21jcA9BcmluZ2FjdXRlLnNtY3ANQ2NlZGlsbGEuc21jcAtFZ3JhdmUuc21jcAtFYWN1dGUuc21jcBBFY2lyY3VtZmxleC5zbWNwDkVkaWVyZXNpcy5zbWNwC0lncmF2ZS5zbWNwC0lhY3V0ZS5zbWNwEEljaXJjdW1mbGV4LnNtY3AOSWRpZXJlc2lzLnNtY3ALTnRpbGRlLnNtY3ALT2dyYXZlLnNtY3ALT2FjdXRlLnNtY3AQT2NpcmN1bWZsZXguc21jcAtPdGlsZGUuc21jcA5PZGllcmVzaXMuc21jcAtVZ3JhdmUuc21jcAtVYWN1dGUuc21jcBBVY2lyY3VtZmxleC5zbWNwDlVkaWVyZXNpcy5zbWNwC1lhY3V0ZS5zbWNwDEFtYWNyb24uc21jcAtBYnJldmUuc21jcAxBb2dvbmVrLnNtY3ALQ2FjdXRlLnNtY3AQQ2NpcmN1bWZsZXguc21jcAx1bmkwMTBBLnNtY3ALQ2Nhcm9uLnNtY3ALRGNhcm9uLnNtY3AMRW1hY3Jvbi5zbWNwC0VicmV2ZS5zbWNwD0Vkb3RhY2NlbnQuc21jcAxFb2dvbmVrLnNtY3ALRWNhcm9uLnNtY3AQR2NpcmN1bWZsZXguc21jcAtHYnJldmUuc21jcAx1bmkwMTIwLnNtY3ARR2NvbW1hYWNjZW50LnNtY3AQSGNpcmN1bWZsZXguc21jcAtJdGlsZGUuc21jcAxJbWFjcm9uLnNtY3ALSWJyZXZlLnNtY3AMSW9nb25lay5zbWNwD0lkb3RhY2NlbnQuc21jcBBKY2lyY3VtZmxleC5zbWNwEUtjb21tYWFjY2VudC5zbWNwC0xhY3V0ZS5zbWNwEUxjb21tYWFjY2VudC5zbWNwC0xjYXJvbi5zbWNwCUxkb3Quc21jcAtOYWN1dGUuc21jcBFOY29tbWFhY2NlbnQuc21jcAtOY2Fyb24uc21jcAxPbWFjcm9uLnNtY3ALT2JyZXZlLnNtY3AST2h1bmdhcnVtbGF1dC5zbWNwC1JhY3V0ZS5zbWNwEVJjb21tYWFjY2VudC5zbWNwC1JjYXJvbi5zbWNwC1NhY3V0ZS5zbWNwEFNjaXJjdW1mbGV4LnNtY3ANU2NlZGlsbGEuc21jcAtTY2Fyb24uc21jcBFUY29tbWFhY2NlbnQuc21jcAtUY2Fyb24uc21jcAtVdGlsZGUuc21jcAxVbWFjcm9uLnNtY3ALVWJyZXZlLnNtY3AKVXJpbmcuc21jcBJVaHVuZ2FydW1sYXV0LnNtY3AMVW9nb25lay5zbWNwEFdjaXJjdW1mbGV4LnNtY3AQWWNpcmN1bWZsZXguc21jcA5ZZGllcmVzaXMuc21jcAtaYWN1dGUuc21jcA9aZG90YWNjZW50LnNtY3ALWmNhcm9uLnNtY3APZ2VybWFuZGJscy5zbWNwCkFscGhhdG9ub3MMRXBzaWxvbnRvbm9zCEV0YXRvbm9zCUlvdGF0b25vcwxPbWljcm9udG9ub3MMVXBzaWxvbnRvbm9zCk9tZWdhdG9ub3MRaW90YWRpZXJlc2lzdG9ub3MFQWxwaGEEQmV0YQdFcHNpbG9uBFpldGEDRXRhBElvdGEFS2FwcGECTXUCTnUHT21pY3JvbgNSaG8DVGF1B1Vwc2lsb24DQ2hpDElvdGFkaWVyZXNpcw9VcHNpbG9uZGllcmVzaXMKYWxwaGF0b25vcwxlcHNpbG9udG9ub3MIZXRhdG9ub3MJaW90YXRvbm9zFHVwc2lsb25kaWVyZXNpc3Rvbm9zBWthcHBhB29taWNyb24HdW5pMDNCQwJudQNjaGkMaW90YWRpZXJlc2lzD3Vwc2lsb25kaWVyZXNpcwxvbWljcm9udG9ub3MMdXBzaWxvbnRvbm9zCm9tZWdhdG9ub3MHdW5pMDQwMQd1bmkwNDAzB3VuaTA0MDUHdW5pMDQwNgd1bmkwNDA3B3VuaTA0MDgHdW5pMDQxQQd1bmkwNDBDB3VuaTA0MEUHdW5pMDQxMAd1bmkwNDEyB3VuaTA0MTMHdW5pMDQxNQd1bmkwNDE5B3VuaTA0MUMHdW5pMDQxRAd1bmkwNDFFB3VuaTA0MUYHdW5pMDQyMAd1bmkwNDIxB3VuaTA0MjIHdW5pMDQyNQd1bmkwNDMwB3VuaTA0MzUHdW5pMDQzOQd1bmkwNDNFB3VuaTA0NDAHdW5pMDQ0MQd1bmkwNDQzB3VuaTA0NDUHdW5pMDQ1MQd1bmkwNDUzB3VuaTA0NTUHdW5pMDQ1Ngd1bmkwNDU3B3VuaTA0NTgHdW5pMDQ1Qwd1bmkwNDVFBldncmF2ZQZ3Z3JhdmUGV2FjdXRlBndhY3V0ZQlXZGllcmVzaXMJd2RpZXJlc2lzBllncmF2ZQZ5Z3JhdmUGbWludXRlBnNlY29uZAlleGNsYW1kYmwHdW5pRkIwMgd1bmkwMUYwB3VuaTAyQkMHdW5pMUUzRQd1bmkxRTNGB3VuaTFFMDAHdW5pMUUwMQd1bmkxRjREB3VuaUZCMDMHdW5pRkIwNAd1bmkwNDAwB3VuaTA0MEQHdW5pMDQ1MAd1bmkwNDVEB3VuaTA0NzAHdW5pMDQ3MQd1bmkwNDc2B3VuaTA0NzcHdW5pMDQ3OQd1bmkwNDc4B3VuaTA0OTgHdW5pMDQ5OQd1bmkwNEFBB3VuaTA0QUIHdW5pMDRBRQd1bmkwNEFGB3VuaTA0QzAHdW5pMDRDMQd1bmkwNEMyB3VuaTA0Q0YHdW5pMDREMAd1bmkwNEQxB3VuaTA0RDIHdW5pMDREMwd1bmkwNEQ0B3VuaTA0RDUHdW5pMDRENgd1bmkwNEQ3B3VuaTA0REEHdW5pMDREOQd1bmkwNERCB3VuaTA0REMHdW5pMDRERAd1bmkwNERFB3VuaTA0REYHdW5pMDRFMgd1bmkwNEUzB3VuaTA0RTQHdW5pMDRFNQd1bmkwNEU2B3VuaTA0RTcHdW5pMDRFOAd1bmkwNEU5B3VuaTA0RUEHdW5pMDRFQgd1bmkwNEVDB3VuaTA0RUQHdW5pMDRFRQd1bmkwNEVGB3VuaTA0RjAHdW5pMDRGMQd1bmkwNEYyB3VuaTA0RjMHdW5pMDRGNAd1bmkwNEY1B3VuaTA0RjgHdW5pMDRGOQd1bmkwNEZDB3VuaTA0RkQHdW5pMDUwMQd1bmkwNTEyB3VuaTA1MTMHdW5pMUVBMAd1bmkxRUExB3VuaTFFQTIHdW5pMUVBMwd1bmkxRUE0B3VuaTFFQTUHdW5pMUVBNgd1bmkxRUE3B3VuaTFFQTgHdW5pMUVBOQd1bmkxRUFBB3VuaTFFQUIHdW5pMUVBQwd1bmkxRUFEB3VuaTFFQUUHdW5pMUVBRgd1bmkxRUIwB3VuaTFFQjEHdW5pMUVCMgd1bmkxRUIzB3VuaTFFQjQHdW5pMUVCNQd1bmkxRUI2B3VuaTFFQjcHdW5pMUVCOAd1bmkxRUI5B3VuaTFFQkEHdW5pMUVCQgd1bmkxRUJDB3VuaTFFQkQHdW5pMUVCRQd1bmkxRUJGB3VuaTFFQzAHdW5pMUVDMQd1bmkxRUMyB3VuaTFFQzMHdW5pMUVDNAd1bmkxRUM1B3VuaTFFQzYHdW5pMUVDNwd1bmkxRUM4B3VuaTFFQzkHdW5pMUVDQQd1bmkxRUNCB3VuaTFFQ0MHdW5pMUVDRAd1bmkxRUNFB3VuaTFFQ0YHdW5pMUVEMAd1bmkxRUQxB3VuaTFFRDIHdW5pMUVEMwd1bmkxRUQ0B3VuaTFFRDUHdW5pMUVENgd1bmkxRUQ3B3VuaTFFRDgHdW5pMUVEOQd1bmkxRURBB3VuaTFFREIHdW5pMUVEQwd1bmkxRUREB3VuaTFFREUHdW5pMUVERgd1bmkxRUUwB3VuaTFFRTEHdW5pMUVFMgd1bmkxRUUzB3VuaTFFRTQHdW5pMUVFNQd1bmkxRUU2B3VuaTFFRTcHdW5pMUVFOAd1bmkxRUU5B3VuaTFFRUEHdW5pMUVFQgd1bmkxRUVDB3VuaTFFRUQHdW5pMUVFRQd1bmkxRUVGB3VuaTFFRjAHdW5pMUVGMQd1bmkxRUY0B3VuaTFFRjUHdW5pMUVGNgd1bmkxRUY3B3VuaTFFRjgHdW5pMUVGOQZkY3JvYXQHdW5pMjBBQgd1bmkwNDlBB3VuaTA0OUIHdW5pMDRBMgd1bmkwNEEzB3VuaTA0QUMHdW5pMDRBRAd1bmkwNEIyB3VuaTA0QjMHdW5pMDRCNgd1bmkwNEI3B3VuaTA0Q0IHdW5pMDRDQwd1bmkwNEY2B3VuaTA0RjcHdW5pMDQ5Ngd1bmkwNDk3B3VuaTA0QkUHdW5pMDRCRgd1bmkwNEJCB3VuaTA0OEMHdW5pMDQ2Mgd1bmkwNDkyB3VuaTA0OTMHdW5pMDQ5RQd1bmkwNDlGB3VuaTA0OEEHdW5pMDQ4Qgd1bmkwNEM5B3VuaTA0Q0EHdW5pMDRDRAd1bmkwNENFB3VuaTA0QzUHdW5pMDRDNgd1bmkwNEIwB3VuaTA0QjEHdW5pMDRGRQd1bmkwNEZGB3VuaTA1MTEHdW5pMjAxNQd1bmkwMDAyAAAAAQAAAAwAAAAAAAAAAgAIAMoAygABAR4BJAABAVYBYQABAXYBdgABAXsBfAABAX4BfgABAZMBlQABAdUB1QABAAAAAAAAAAAAAQAAAAoAHgAsAAFERkxUAAgABAAAAAD//wABAAAAAWtlcm4ACAAAAAEAAAABAAQAAgAAAAQADk1oVQZzXAABetgABAAAAa0DZANqA3ADdgPoA/IEBAQqBEAESgRsBI4ElATiBRAFMgVUBXoFoAWmBowGkga4Bt4HQAfSB/QIEggsCDIIQAhGCEwIUgh4CJIIoAi+CMQI4gj8CQIJxAo2ClwKzgrUCt4K5ArqCvALDgscC0YLTAtiC3wLggucC6ILqAveC+QL7gwcDEIMaAyKDKwMzgz8DV4NdA2WDbgOAg4kDkYOeA6eDsQOzg7YDvIPBA8ODygPLg9ED5IPrA/GD9wP/hAgEDoQQBBiEIQQphEYET4RZBGCEZwSXhJoErYTBBMOExQTGhMgEyYTLBNSE1wTYhN0E54TtBPGE9gT/hQEFBoUJBQ2FFwUchR4FH4UmBSeFMQU6hXQFkIWtBcmF5gYChh8GO4ZABkWGSwZQhlYGXoZnBm+GeAaAhooGk4adBqaGsAaxhrMGtIa2BtqG4gbphvEG+IcABweHDwcQhxIHE4cVBxaHIAcphzMHPIdGB02HVQdxh3kHlYedB7mHwQfFh8oHzofTB9yH4gfjh+kH6ofwB/GH9wf4h/4H/4gICAmIEggaiCMIK4g0CDWISQhUiGAIa4h3CH+IgQiJiIsIk4iVCJaIoAipiLMIvIjGCM+I0wjWiNoJE4lNCYaJiAmJiYsJjImOCY+JmQm9icUJ6YnyCfqKAwofiiUKLYo2Cj+KZAqAioMKiIqRCpmKogq1ir4KxorQCtmLEws3i1ALWIt9C36LiAuPi5kLnovPC9eL4Avhi/UMCIwbDDeMOgxqjHAMeIyBDIqMlAyYjNIM6ozyDPOM/Q0DjQsNDI0ODRCNGA0hjSsNNI1ZDWCNYg1jjWUNbY1vDYuNkw2cjaINo42tDbSNuQ3djeUN7Y4GDgeOEA4sjjQOUI5YDl2OXw5gjmIOeo58DoWOjw6Yjp8OsY65DsuO0w7lju0PBY8HDyOPKw9Hj08Pa49zD4+Plw+zj7sP14/fD/uQAxAfkCcQQ5BLEGeQbxCLkJMQr5C3ELyQvhDDkMUQypDMENGQ0xDYkNoQ35DhEOaQ6BDtkO8Q95EAEQmRExEckSYRL5E5EUKRTBFVkV8RaJFyEXuRhRGOkZARkZG2Eb2R4hHpkg4SFZIpEjGSaxKDkoUStZK4EtCS0hLTkt0TDZMhEymTMgAAQBZAAsAAQBZAAsAAQAR/yAAHAAh/8MAVv/vAFn/3wCW/+4As//lALT/0QC/ABEAxf/IANQAEwDh/8UA8f/KAS//nwE4/1EBOf97ATv/ygE8/90BQf/yAUn/dQFL/8oBU/9PAVT/jAGt//UBtf/1Abn/xwG6//EBu//NAbz/3QG+/8QAAgEMAAsBU//mAAQAC//mAD//9ABf/+8BPP/tAAkAf//fALD/8wCy//AAv//qANT/3wDh/+ABU//gAaf/7QG9//UABQBI/+4AWf/qAbv/8AG8/+0Bvv/wAAIAVP/mAaf/wAAIANQAFQDoABUBOP/kATn/5QE7/+QBSf/jAUv/4gFT/+QACADUABUA6AAVATj/5AE5/+UBO//kAUn/4wFL/+IBU//kAAEBp//rABMAWf/BALP/xQDF/7QA5f/XAPH/uQEE/7IBF//SARv/yAEv/6ABOf/FAUH/5AFK/8wBTP/MAVT/ywFV/+8Bqf/oAa3/5gG1/+cBtv/nAAsAWf+kAacAEwGp//MBrf/xAbX/8gG2//EBuf87Abr/2gG7/1QBvP+RAb7/PwAIANQAFQDoABUBOP/kATn/5QE7/+QBSf/jAUv/4gFT/+QACADUABUA6AAVATj/5AE5/+UBO//kAUn/4wFL/+IBU//kAAkAf//fALD/8wCy//AAv//qANT/3wDh/+ABU//gAaf/7QG9//UACQBWAA4Af/+fAL//3gDC/+UA1P+oAOj/ygFG/+MBp//GAd//9QABAacADgA5AFT/tQBZ/8cAa/64AHr/KAB//00AhP+OAIf/oQCz/64Auv9+AL7/ZwDB/4cAwv9lAMX/ngDH/2oAyP9zAMn/XgDU/6UA4QAPAOX/5ADm/6AA6P90AOr/gADx/7IA+P99APr/gAD8/3kBAv99AQT/fwEX/5gBG//aASf/gQEp/5gBLf99AS//swEz/6ABOf98ATv/mgE8/2wBQf/mAUb/awFK/5IBTP+tAVD/ewFTAA8BVP+RAVX/8gGn/68Bqf+5Aa3/uQG1/7kBtv+5Abj/vAG5//EBvP/xAb3/7QHc/6kB3//JAAEBp//rAAkACwAUAD8AEQBU/+IAXwATAaf/tAGp/9kBrf/ZAbX/2QG2/9kACQALAA8APwAMAFT/6wBfAA4Bp//LAan/6QGt/+cBtf/nAbb/5wAYALP/1AC9/+0AvwARAMX/4ADH/+cAyP/lAMn/7gDUABIA5f/pAPH/1wEv/9cBOf/TATv/1gE8/8UBQf/nAUkADQFLAAwBVP/WAVX/8gGp/+kBrf/nAbX/5wG2/+kB3//wACQACP/iAAsAFAAM/88APwASAEj/6gBU/9gAVv/qAF8AEwBr/64Aev/NAH//oACE/8EAh//AALP/0AC3/+oAuv/GALsADQC9/+kAvv/WAMH/6ADC/7oAxf/pAMf/ywDI/9oAyf/HAW7/0wGn/6sBqf/NAa3/ywG1/8sBtv/LAbn/8wG8//MBvf/vAdz/6AHf/+4ACABZ/+UAs//LAMj/5AGnAA0Bqf/tAa3/6wG1/+wBtv/sAAcA8f/wAQT/8QEb//MBL//xAUr/8wFM/+kBVP/TAAYAxf/qAOj/7gDx/7ABL//sAVT/7AHc/+gAAQDx//UAAwALABQAPwASAF8AEwABAPH/wAABAPH/wAABAPH/wAAJAMX/6gDo/7gA8f/qAQT/8AEb//EBL//rAUr/9QFU/+wB3P/qAAYAxf/qAOj/7gDx/7ABL//sAVT/7AHc/+gAAwBIAA8AVgAgAFkAEQAHAEgADQDBAAsAwv/qAMUADADo/8gBF//xAd//9QABARf/8QAHAEgADQDBAAsAwv/qAMUADADo/8gBF//xAd//9QAGAMX/6gDo/+4A8f+wAS//7AFU/+wB3P/oAAEA8f/1ADAAVP9tAFn/jABr/b8Aev59AH/+vACE/ysAh/9LALP/YQC6/w8Avv7oAMH/HwDC/uUAxf9GAMf+7QDI/v0Ayf7ZANT/UgDhAAUA5f+9AOb/SQDo/v4A6v8TAPH/aAD4/w4A+v8TAPz/BwEC/w4BBP8RARf/PAEb/6wBJ/8VASn/PAEt/w4BL/9qATP/SQE5/wwBO/8/ATz+8QFB/8ABRv7vAUr/MQFM/18BUP8KAVMABQFU/zABVf/VAdz/WQHf/48AHAAh/8MAVv/vAFn/3wCW/+4As//lALT/0QC/ABEAxf/IANQAEwDh/8UA8f/KAS//nwE4/1EBOf97ATv/ygE8/90BQf/yAUn/dQFL/8oBU/9PAVT/jAGt//UBtf/1Abn/xwG6//EBu//NAbz/3QG+/8QACQB//98AsP/zALL/8AC//+oA1P/fAOH/4AFT/+ABp//tAb3/9QAcACH/wwBW/+8AWf/fAJb/7gCz/+UAtP/RAL8AEQDF/8gA1AATAOH/xQDx/8oBL/+fATj/UQE5/3sBO//KATz/3QFB//IBSf91AUv/ygFT/08BVP+MAa3/9QG1//UBuf/HAbr/8QG7/80BvP/dAb7/xAABAL8ADQACALP/wgC/ABAAAQC//+IAAQDC//IAAQC/AA4ABwBIAA0AwQALAML/6gDFAAwA6P/IARf/8QHf//UAAwDF/+0A8f/AAdz/7AAKALr/5gC9/+sAvv/pAMD/8ADB/+cAxf/jAMf/zgDI/9QAyf/bAd//7gABAPH/wAAFAL3/7AC/AA8Awf/qAMX/xADH/+cABgBI/+kAvf/uAL8AEADB/+wAxf8gAdz/2gABAL8ADwAGAMX/6gDo/+4A8f+rAS//7AFU/+wB3P/oAAEA8f/VAAEAxQALAA0ASAAMAMEACwDFAAwBp/+/Aan/7gGt/+wBtf/tAbb/7AG4//UBuQAOAbsADQG+AA0B3//tAAEA8f/YAAIA8f+qAdz/4QALAOH/1ADx/8kBBP/lARv/4wEv/8QBOP/hAUn/1AFK//UBS//nAVP/0gFU/8kACQDh/8MA8f/PAS//zgE4/+cBO//fAUn/0QFL/+wBU/+gAVT/0QAJAOH/wwDx/88BL//OATj/5wE7/98BSf/RAUv/7AFT/6ABVP/RAAgA4f/JAPH/3wEE/+0BG//rAS//3wE7/+kBSv/1AVT/4AAIANQAFQDoABUBOP/kATn/5QE7/+QBSf/jAUv/4gFT/+QACADh/+YA8f/QAS//zgE4/+gBSf/nAUv/7QFT/+YBVP/QAAsA1AAUAOH/4ADoABMBOP/hATn/4AE8/+EBQf/pAUn/3wFL/94BU//fAVX/8gAYALP/1AC9/+0AvwARAMX/4ADH/+cAyP/lAMn/7gDUABIA5f/pAPH/1wEv/9cBOf/TATv/1gE8/8UBQf/nAUkADQFLAAwBVP/WAVX/8gGp/+kBrf/nAbX/5wG2/+kB3//wAAUAGf/yAOH/8QFJ//IBS//yAVP/8gAIANQAFQDoABUBOP/kATn/5QE7/+QBSf/jAUv/4gFT/+QACADUABUA6AAVATj/5AE5/+UBO//kAUn/4wFL/+IBU//kABIA1P+uAOEAEgDm/+AA6P+tAOr/1gD4/98A/P/SAQL/4AEX/84BJ//dASn/4gEt/+ABM//gATn/6QE8/9oBRv+9AVD/3wFTABEACADUABUA6AAVATj/5AE5/+UBO//kAUn/4wFL/+IBU//kAAgA1AAVAOgAFQE4/+QBOf/lATv/5AFJ/+MBS//iAVP/5AAMANQAEwDh/+YA4v/0AOgAEgDx/+cBL//nATj/5QE5/+gBSf/mAUv/5gFT/+YBVP/nAAkA4f/DAPH/zwEv/84BOP/nATv/3wFJ/9EBS//sAVP/oAFU/9EACQDh/8MA8f/PAS//zgE4/+cBO//fAUn/0QFL/+wBU/+gAVT/0QACANT/4gFT/+QAAgDU/+EA6P/kAAYA6P/uAPH/7gEE//QBG//xAS//7wFU/+8ABADx//QBBP/1AS//9QFU//UAAgDo/8kBF//uAAYA6AAUAPH/7QD3/+IBL//tATn/7QFU/+0AAQEX//EABQEX/+sBqf/rAa3/6QG1/+sBtv/rABMASAANAML/qwDD/8AAx//VAOj/qgEX/+IBGwAMAUoACwFMAAsBp/+/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/1EBOf97ATv/ygE8/90BQf/yAUn/dQFL/8oBU/9PAVT/jAGt//UBtf/1Abn/xwG6//EBu//NAbz/3QG+/8QAHAAh/8MAVv/vAFn/3wCW/+4As//lALT/0QC/ABEAxf/IANQAEwDh/8UA8f/KAS//nwE4/1EBOf97ATv/ygE8/90BQf/yAUn/dQFL/8oBU/9PAVT/jAGt//UBtf/1Abn/xwG6//EBu//NAbz/3QG+/8QAHAAh/8MAVv/vAFn/3wCW/+4As//lALT/0QC/ABEAxf/IANQAEwDh/8UA8f/KAS//nwE4/1EBOf97ATv/ygE8/90BQf/yAUn/dQFL/8oBU/9PAVT/jAGt//UBtf/1Abn/xwG6//EBu//NAbz/3QG+/8QAHAAh/8MAVv/vAFn/3wCW/+4As//lALT/0QC/ABEAxf/IANQAEwDh/8UA8f/KAS//nwE4/1EBOf97ATv/ygE8/90BQf/yAUn/dQFL/8oBU/9PAVT/jAGt//UBtf/1Abn/xwG6//EBu//NAbz/3QG+/8QAHAAh/8MAVv/vAFn/3wCW/+4As//lALT/0QC/ABEAxf/IANQAEwDh/8UA8f/KAS//nwE4/1EBOf97ATv/ygE8/90BQf/yAUn/dQFL/8oBU/9PAVT/jAGt//UBtf/1Abn/xwG6//EBu//NAbz/3QG+/8QAHAAh/8MAVv/vAFn/3wCW/+4As//lALT/0QC/ABEAxf/IANQAEwDh/8UA8f/KAS//nwE4/1EBOf97ATv/ygE8/90BQf/yAUn/dQFL/8oBU/9PAVT/jAGt//UBtf/1Abn/xwG6//EBu//NAbz/3QG+/8QABAAL/+YAP//0AF//7wE8/+0ABQBI/+4AWf/qAbv/8AG8/+0Bvv/wAAUASP/uAFn/6gG7//ABvP/tAb7/8AAFAEj/7gBZ/+oBu//wAbz/7QG+//AABQBI/+4AWf/qAbv/8AG8/+0Bvv/wAAgA1AAVAOgAFQE4/+QBOf/lATv/5AFJ/+MBS//iAVP/5AAIANQAFQDoABUBOP/kATn/5QE7/+QBSf/jAUv/4gFT/+QACADUABUA6AAVATj/5AE5/+UBO//kAUn/4wFL/+IBU//kAAgA1AAVAOgAFQE4/+QBOf/lATv/5AFJ/+MBS//iAVP/5AAIANQAFQDoABUBOP/kATn/5QE7/+QBSf/jAUv/4gFT/+QACQB//98AsP/zALL/8AC//+oA1P/fAOH/4AFT/+ABp//tAb3/9QAJAH//3wCw//MAsv/wAL//6gDU/98A4f/gAVP/4AGn/+0Bvf/1AAkAf//fALD/8wCy//AAv//qANT/3wDh/+ABU//gAaf/7QG9//UACQB//98AsP/zALL/8AC//+oA1P/fAOH/4AFT/+ABp//tAb3/9QAJAH//3wCw//MAsv/wAL//6gDU/98A4f/gAVP/4AGn/+0Bvf/1AAEBp//rAAEBp//rAAEBp//rAAEBp//rACQACP/iAAsAFAAM/88APwASAEj/6gBU/9gAVv/qAF8AEwBr/64Aev/NAH//oACE/8EAh//AALP/0AC3/+oAuv/GALsADQC9/+kAvv/WAMH/6ADC/7oAxf/pAMf/ywDI/9oAyf/HAW7/0wGn/6sBqf/NAa3/ywG1/8sBtv/LAbn/8wG8//MBvf/vAdz/6AHf/+4ABwDx//ABBP/xARv/8wEv//EBSv/zAUz/6QFU/9MABwDx//ABBP/xARv/8wEv//EBSv/zAUz/6QFU/9MABwDx//ABBP/xARv/8wEv//EBSv/zAUz/6QFU/9MABwDx//ABBP/xARv/8wEv//EBSv/zAUz/6QFU/9MABwDx//ABBP/xARv/8wEv//EBSv/zAUz/6QFU/9MABwDx//ABBP/xARv/8wEv//EBSv/zAUz/6QFU/9MABwDx//ABBP/xARv/8wEv//EBSv/zAUz/6QFU/9MAAQDx//UAAQDx//UAAQDx//UAAQDx//UAAQDx/8AACQDF/+oA6P+4APH/6gEE//ABG//xAS//6wFK//UBVP/sAdz/6gAJAMX/6gDo/7gA8f/qAQT/8AEb//EBL//rAUr/9QFU/+wB3P/qAAkAxf/qAOj/uADx/+oBBP/wARv/8QEv/+sBSv/1AVT/7AHc/+oACQDF/+oA6P+4APH/6gEE//ABG//xAS//6wFK//UBVP/sAdz/6gAJAMX/6gDo/7gA8f/qAQT/8AEb//EBL//rAUr/9QFU/+wB3P/qAAcASAANAMEACwDC/+oAxQAMAOj/yAEX//EB3//1AAcASAANAMEACwDC/+oAxQAMAOj/yAEX//EB3//1ABwAIf/DAFb/7wBZ/98Alv/uALP/5QC0/9EAvwARAMX/yADUABMA4f/FAPH/ygEv/58BOP9RATn/ewE7/8oBPP/dAUH/8gFJ/3UBS//KAVP/TwFU/4wBrf/1AbX/9QG5/8cBuv/xAbv/zQG8/90Bvv/EAAcA8f/wAQT/8QEb//MBL//xAUr/8wFM/+kBVP/TABwAIf/DAFb/7wBZ/98Alv/uALP/5QC0/9EAvwARAMX/yADUABMA4f/FAPH/ygEv/58BOP9RATn/ewE7/8oBPP/dAUH/8gFJ/3UBS//KAVP/TwFU/4wBrf/1AbX/9QG5/8cBuv/xAbv/zQG8/90Bvv/EAAcA8f/wAQT/8QEb//MBL//xAUr/8wFM/+kBVP/TABwAIf/DAFb/7wBZ/98Alv/uALP/5QC0/9EAvwARAMX/yADUABMA4f/FAPH/ygEv/58BOP9RATn/ewE7/8oBPP/dAUH/8gFJ/3UBS//KAVP/TwFU/4wBrf/1AbX/9QG5/8cBuv/xAbv/zQG8/90Bvv/EAAcA8f/wAQT/8QEb//MBL//xAUr/8wFM/+kBVP/TAAQAC//mAD//9ABf/+8BPP/tAAQAC//mAD//9ABf/+8BPP/tAAQAC//mAD//9ABf/+8BPP/tAAQAC//mAD//9ABf/+8BPP/tAAkAf//fALD/8wCy//AAv//qANT/3wDh/+ABU//gAaf/7QG9//UABQBI/+4AWf/qAbv/8AG8/+0Bvv/wAAEA8f/1AAUASP/uAFn/6gG7//ABvP/tAb7/8AABAPH/9QAFAEj/7gBZ/+oBu//wAbz/7QG+//AAAQDx//UABQBI/+4AWf/qAbv/8AG8/+0Bvv/wAAEA8f/1AAUASP/uAFn/6gG7//ABvP/tAb7/8AABAPH/9QAIANQAFQDoABUBOP/kATn/5QE7/+QBSf/jAUv/4gFT/+QAAQDx/8AACADUABUA6AAVATj/5AE5/+UBO//kAUn/4wFL/+IBU//kAAgA1AAVAOgAFQE4/+QBOf/lATv/5AFJ/+MBS//iAVP/5AAIANQAFQDoABUBOP/kATn/5QE7/+QBSf/jAUv/4gFT/+QACADUABUA6AAVATj/5AE5/+UBO//kAUn/4wFL/+IBU//kAAgA1AAVAOgAFQE4/+QBOf/lATv/5AFJ/+MBS//iAVP/5AABAaf/6wATAFn/wQCz/8UAxf+0AOX/1wDx/7kBBP+yARf/0gEb/8gBL/+gATn/xQFB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/+wAHAAh/8MAVv/vAFn/3wCW/+4As//lALT/0QC/ABEAxf/IANQAEwDh/8UA8f/KAS//nwE4/1EBOf97ATv/ygE8/90BQf/yAUn/dQFL/8oBU/9PAVT/jAGt//UBtf/1Abn/xwG6//EBu//NAbz/3QG+/8QABQBI/+4AWf/qAbv/8AG8/+0Bvv/wAAgA1AAVAOgAFQE4/+QBOf/lATv/5AFJ/+MBS//iAVP/5AAIANQAFQDoABUBOP/kATn/5QE7/+QBSf/jAUv/4gFT/+QACQB//98AsP/zALL/8AC//+oA1P/fAOH/4AFT/+ABp//tAb3/9QAkAAj/4gALABQADP/PAD8AEgBI/+oAVP/YAFb/6gBfABMAa/+uAHr/zQB//6AAhP/BAIf/wACz/9AAt//qALr/xgC7AA0Avf/pAL7/1gDB/+gAwv+6AMX/6QDH/8sAyP/aAMn/xwFu/9MBp/+rAan/zQGt/8sBtf/LAbb/ywG5//MBvP/zAb3/7wHc/+gB3//uABwAIf/DAFb/7wBZ/98Alv/uALP/5QC0/9EAvwARAMX/yADUABMA4f/FAPH/ygEv/58BOP9RATn/ewE7/8oBPP/dAUH/8gFJ/3UBS//KAVP/TwFU/4wBrf/1AbX/9QG5/8cBuv/xAbv/zQG8/90Bvv/EAAIBDAALAVP/5gAFAEj/7gBZ/+oBu//wAbz/7QG+//AACABZ/+UAs//LAMj/5AGnAA0Bqf/tAa3/6wG1/+wBtv/sAAgA1AAVAOgAFQE4/+QBOf/lATv/5AFJ/+MBS//iAVP/5AAIANQAFQDoABUBOP/kATn/5QE7/+QBSf/jAUv/4gFT/+QAEwBZ/8EAs//FAMX/tADl/9cA8f+5AQT/sgEX/9IBG//IAS//oAE5/8UBQf/kAUr/zAFM/8wBVP/LAVX/7wGp/+gBrf/mAbX/5wG2/+cACADUABUA6AAVATj/5AE5/+UBO//kAUn/4wFL/+IBU//kAAgA1AAVAOgAFQE4/+QBOf/lATv/5AFJ/+MBS//iAVP/5AAJAH//3wCw//MAsv/wAL//6gDU/98A4f/gAVP/4AGn/+0Bvf/1AAkAVgAOAH//nwC//94Awv/lANT/qADo/8oBRv/jAaf/xgHf//UAOQBU/7UAWf/HAGv+uAB6/ygAf/9NAIT/jgCH/6EAs/+uALr/fgC+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Abn/xwG6//EBu//NAbz/3QG+/8QABwDx//ABBP/xARv/8wEv//EBSv/zAUz/6QFU/9MACQB//98AsP/zALL/8AC//+oA1P/fAOH/4AFT/+ABp//tAb3/9QAFAEj/7gBZ/+oBu//wAbz/7QG+//AAAQDx//UACQALABQAPwARAFT/4gBfABMBp/+0Aan/2QGt/9kBtf/ZAbb/2QAHAEgADQDBAAsAwv/qAMUADADo/8gBF//xAd//9QAEAAv/5gA///QAX//vATz/7QAkAAj/4gALABQADP/PAD8AEgBI/+oAVP/YAFb/6gBfABMAa/+uAHr/zQB//6AAhP/BAIf/wACz/9AAt//qALr/xgC7AA0Avf/pAL7/1gDB/+gAwv+6AMX/6QDH/8sAyP/aAMn/xwFu/9MBp/+rAan/zQGt/8sBtf/LAbb/ywG5//MBvP/zAb3/7wHc/+gB3//uAAcASAANAMEACwDC/+oAxQAMAOj/yAEX//EB3//1AAgA1AAVAOgAFQE4/+QBOf/lATv/5AFJ/+MBS//iAVP/5AAYALP/1AC9/+0AvwARAMX/4ADH/+cAyP/lAMn/7gDUABIA5f/pAPH/1wEv/9cBOf/TATv/1gE8/8UBQf/nAUkADQFLAAwBVP/WAVX/8gGp/+kBrf/nAbX/5wG2/+kB3//wAAEBF//xAAgA1AAVAOgAFQE4/+QBOf/lATv/5AFJ/+MBS//iAVP/5AAcACH/wwBW/+8AWf/fAJb/7gCz/+UAtP/RAL8AEQDF/8gA1AATAOH/xQDx/8oBL/+fATj/UQE5/3sBO//KATz/3QFB//IBSf91AUv/ygFT/08BVP+MAa3/9QG1//UBuf/HAbr/8QG7/80BvP/dAb7/xAAHAPH/8AEE//EBG//zAS//8QFK//MBTP/pAVT/0wAcACH/wwBW/+8AWf/fAJb/7gCz/+UAtP/RAL8AEQDF/8gA1AATAOH/xQDx/8oBL/+fATj/UQE5/3sBO//KATz/3QFB//IBSf91AUv/ygFT/08BVP+MAa3/9QG1//UBuf/HAbr/8QG7/80BvP/dAb7/xAAHAPH/8AEE//EBG//zAS//8QFK//MBTP/pAVT/0wAFAEj/7gBZ/+oBu//wAbz/7QG+//AAAQDx//UAAQDx//UAAQDx//UAGACz/9QAvf/tAL8AEQDF/+AAx//nAMj/5QDJ/+4A1AASAOX/6QDx/9cBL//XATn/0wE7/9YBPP/FAUH/5wFJAA0BSwAMAVT/1gFV//IBqf/pAa3/5wG1/+cBtv/pAd//8AABARf/8QAJAH//3wCw//MAsv/wAL//6gDU/98A4f/gAVP/4AGn/+0Bvf/1AAkAxf/qAOj/uADx/+oBBP/wARv/8QEv/+sBSv/1AVT/7AHc/+oACQDF/+oA6P+4APH/6gEE//ABG//xAS//6wFK//UBVP/sAdz/6gAGAMX/6gDo/+4A8f+wAS//7AFU/+wB3P/oABIA1P+uAOEAEgDm/+AA6P+tAOr/1gD4/98A/P/SAQL/4AEX/84BJ//dASn/4gEt/+ABM//gATn/6QE8/9oBRv+9AVD/3wFTABEABwBIAA0AwQALAML/6gDFAAwA6P/IARf/8QHf//UAEgDU/64A4QASAOb/4ADo/60A6v/WAPj/3wD8/9IBAv/gARf/zgEn/90BKf/iAS3/4AEz/+ABOf/pATz/2gFG/70BUP/fAVMAEQAHAEgADQDBAAsAwv/qAMUADADo/8gBF//xAd//9QASANT/rgDhABIA5v/gAOj/rQDq/9YA+P/fAPz/0gEC/+ABF//OASf/3QEp/+IBLf/gATP/4AE5/+kBPP/aAUb/vQFQ/98BUwARAAcASAANAMEACwDC/+oAxQAMAOj/yAEX//EB3//1ABgAs//UAL3/7QC/ABEAxf/gAMf/5wDI/+UAyf/uANQAEgDl/+kA8f/XAS//1wE5/9MBO//WATz/xQFB/+cBSQANAUsADAFU/9YBVf/yAan/6QGt/+cBtf/nAbb/6QHf//AAAQEX//EAHAAh/8MAVv/vAFn/3wCW/+4As//lALT/0QC/ABEAxf/IANQAEwDh/8UA8f/KAS//nwE4/1EBOf97ATv/ygE8/90BQf/yAUn/dQFL/8oBU/9PAVT/jAGt//UBtf/1Abn/xwG6//EBu//NAbz/3QG+/8QABwDx//ABBP/xARv/8wEv//EBSv/zAUz/6QFU/9MAHAAh/8MAVv/vAFn/3wCW/+4As//lALT/0QC/ABEAxf/IANQAEwDh/8UA8f/KAS//nwE4/1EBOf97ATv/ygE8/90BQf/yAUn/dQFL/8oBU/9PAVT/jAGt//UBtf/1Abn/xwG6//EBu//NAbz/3QG+/8QABwDx//ABBP/xARv/8wEv//EBSv/zAUz/6QFU/9MAHAAh/8MAVv/vAFn/3wCW/+4As//lALT/0QC/ABEAxf/IANQAEwDh/8UA8f/KAS//nwE4/1EBOf97ATv/ygE8/90BQf/yAUn/dQFL/8oBU/9PAVT/jAGt//UBtf/1Abn/xwG6//EBu//NAbz/3QG+/8QABwDx//ABBP/xARv/8wEv//EBSv/zAUz/6QFU/9MAHAAh/8MAVv/vAFn/3wCW/+4As//lALT/0QC/ABEAxf/IANQAEwDh/8UA8f/KAS//nwE4/1EBOf97ATv/ygE8/90BQf/yAUn/dQFL/8oBU/9PAVT/jAGt//UBtf/1Abn/xwG6//EBu//NAbz/3QG+/8QABwDx//ABBP/xARv/8wEv//EBSv/zAUz/6QFU/9MAHAAh/8MAVv/vAFn/3wCW/+4As//lALT/0QC/ABEAxf/IANQAEwDh/8UA8f/KAS//nwE4/1EBOf97ATv/ygE8/90BQf/yAUn/dQFL/8oBU/9PAVT/jAGt//UBtf/1Abn/xwG6//EBu//NAbz/3QG+/8QABwDx//ABBP/xARv/8wEv//EBSv/zAUz/6QFU/9MAHAAh/8MAVv/vAFn/3wCW/+4As//lALT/0QC/ABEAxf/IANQAEwDh/8UA8f/KAS//nwE4/1EBOf97ATv/ygE8/90BQf/yAUn/dQFL/8oBU/9PAVT/jAGt//UBtf/1Abn/xwG6//EBu//NAbz/3QG+/8QABwDx//ABBP/xARv/8wEv//EBSv/zAUz/6QFU/9MAHAAh/8MAVv/vAFn/3wCW/+4As//lALT/0QC/ABEAxf/IANQAEwDh/8UA8f/KAS//nwE4/1EBOf97ATv/ygE8/90BQf/yAUn/dQFL/8oBU/9PAVT/jAGt//UBtf/1Abn/xwG6//EBu//NAbz/3QG+/8QABwDx//ABBP/xARv/8wEv//EBSv/zAUz/6QFU/9MAHAAh/8MAVv/vAFn/3wCW/+4As//lALT/0QC/ABEAxf/IANQAEwDh/8UA8f/KAS//nwE4/1EBOf97ATv/ygE8/90BQf/yAUn/dQFL/8oBU/9PAVT/jAGt//UBtf/1Abn/xwG6//EBu//NAbz/3QG+/8QABwDx//ABBP/xARv/8wEv//EBSv/zAUz/6QFU/9MAHAAh/8MAVv/vAFn/3wCW/+4As//lALT/0QC/ABEAxf/IANQAEwDh/8UA8f/KAS//nwE4/1EBOf97ATv/ygE8/90BQf/yAUn/dQFL/8oBU/9PAVT/jAGt//UBtf/1Abn/xwG6//EBu//NAbz/3QG+/8QABwDx//ABBP/xARv/8wEv//EBSv/zAUz/6QFU/9MAHAAh/8MAVv/vAFn/3wCW/+4As//lALT/0QC/ABEAxf/IANQAEwDh/8UA8f/KAS//nwE4/1EBOf97ATv/ygE8/90BQf/yAUn/dQFL/8oBU/9PAVT/jAGt//UBtf/1Abn/xwG6//EBu//NAbz/3QG+/8QABwDx//ABBP/xARv/8wEv//EBSv/zAUz/6QFU/9MAHAAh/8MAVv/vAFn/3wCW/+4As//lALT/0QC/ABEAxf/IANQAEwDh/8UA8f/KAS//nwE4/1EBOf97ATv/ygE8/90BQf/yAUn/dQFL/8oBU/9PAVT/jAGt//UBtf/1Abn/xwG6//EBu//NAbz/3QG+/8QABwDx//ABBP/xARv/8wEv//EBSv/zAUz/6QFU/9MAHAAh/8MAVv/vAFn/3wCW/+4As//lALT/0QC/ABEAxf/IANQAEwDh/8UA8f/KAS//nwE4/1EBOf97ATv/ygE8/90BQf/yAUn/dQFL/8oBU/9PAVT/jAGt//UBtf/1Abn/xwG6//EBu//NAbz/3QG+/8QABwDx//ABBP/xARv/8wEv//EBSv/zAUz/6QFU/9MABQBI/+4AWf/qAbv/8AG8/+0Bvv/wAAEA8f/1AAUASP/uAFn/6gG7//ABvP/tAb7/8AABAPH/9QAFAEj/7gBZ/+oBu//wAbz/7QG+//AAAQDx//UABQBI/+4AWf/qAbv/8AG8/+0Bvv/wAAEA8f/1AAUASP/uAFn/6gG7//ABvP/tAb7/8AABAPH/9QAFAEj/7gBZ/+oBu//wAbz/7QG+//AAAQDx//UABQBI/+4AWf/qAbv/8AG8/+0Bvv/wAAEA8f/1AAUASP/uAFn/6gG7//ABvP/tAb7/8AABAPH/9QAIANQAFQDoABUBOP/kATn/5QE7/+QBSf/jAUv/4gFT/+QACADUABUA6AAVATj/5AE5/+UBO//kAUn/4wFL/+IBU//kAAkAf//fALD/8wCy//AAv//qANT/3wDh/+ABU//gAaf/7QG9//UACQDF/+oA6P+4APH/6gEE//ABG//xAS//6wFK//UBVP/sAdz/6gAJAH//3wCw//MAsv/wAL//6gDU/98A4f/gAVP/4AGn/+0Bvf/1AAkAxf/qAOj/uADx/+oBBP/wARv/8QEv/+sBSv/1AVT/7AHc/+oACQB//98AsP/zALL/8AC//+oA1P/fAOH/4AFT/+ABp//tAb3/9QAJAMX/6gDo/7gA8f/qAQT/8AEb//EBL//rAUr/9QFU/+wB3P/qAAkAf//fALD/8wCy//AAv//qANT/3wDh/+ABU//gAaf/7QG9//UACQDF/+oA6P+4APH/6gEE//ABG//xAS//6wFK//UBVP/sAdz/6gAJAH//3wCw//MAsv/wAL//6gDU/98A4f/gAVP/4AGn/+0Bvf/1AAkAxf/qAOj/uADx/+oBBP/wARv/8QEv/+sBSv/1AVT/7AHc/+oACQB//98AsP/zALL/8AC//+oA1P/fAOH/4AFT/+ABp//tAb3/9QAJAMX/6gDo/7gA8f/qAQT/8AEb//EBL//rAUr/9QFU/+wB3P/qAAkAf//fALD/8wCy//AAv//qANT/3wDh/+ABU//gAaf/7QG9//UACQDF/+oA6P+4APH/6gEE//ABG//xAS//6wFK//UBVP/sAdz/6gAJAMX/6gDo/7gA8f/qAQT/8AEb//EBL//rAUr/9QFU/+wB3P/qAAEBp//rAAEBp//rACQACP/iAAsAFAAM/88APwASAEj/6gBU/9gAVv/qAF8AEwBr/64Aev/NAH//oACE/8EAh//AALP/0AC3/+oAuv/GALsADQC9/+kAvv/WAMH/6ADC/7oAxf/pAMf/ywDI/9oAyf/HAW7/0wGn/6sBqf/NAa3/ywG1/8sBtv/LAbn/8wG8//MBvf/vAdz/6AHf/+4ABwBIAA0AwQALAML/6gDFAAwA6P/IARf/8QHf//UAJAAI/+IACwAUAAz/zwA/ABIASP/qAFT/2ABW/+oAXwATAGv/rgB6/80Af/+gAIT/wQCH/8AAs//QALf/6gC6/8YAuwANAL3/6QC+/9YAwf/oAML/ugDF/+kAx//LAMj/2gDJ/8cBbv/TAaf/qwGp/80Brf/LAbX/ywG2/8sBuf/zAbz/8wG9/+8B3P/oAd//7gAHAEgADQDBAAsAwv/qAMUADADo/8gBF//xAd//9QAkAAj/4gAL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/94CE//rAhT/6wIV/+sCFv/rAhf/6wId/+sCHv/rAh//6wIg/+sCIf/rAiL/6gIj/+oCJP/qAiX/6gIm/+gCJ//oAij/VgIp/94CKv9WAiv/3gIs/1YCLf/eAi//6wIx/+sCM//rAjX/6wI3/+sCOf/rAjv/6wI9/+sCP//rAkH/6wJD/+sCRf/rAkf/6wJJ/+sCV/74Amv/6wJt/+sCb//rAoAAFAKCABQChAAUAof/6gKJ/+oCi//qAo3/6gKP/+oCkf/qApX/6AL4/1YDAP9WAxD/6wMU/+oDFv/rAxj/6AMb/+oDHP/rAx3/6gMk/vgDKP9WAzMAFAM1/94DNv/rAzj/6wM6/+sDO//oAz3/6wNE/+gDTP/oA1X/VgNW/94DXP/rA2H/6ANi/+sDZ//rA2n/6ANu/1YDb//eA3D/VgNx/94Ddf/rA3f/6wN4/+sDgv/rA4T/6wOG/+sDiv/oA4z/6AOO/+gDlf/rA5j/VgOZ/94Dmv9WA5v/3gOc/1YDnf/eA57/VgOf/94DoP9WA6H/3gOi/1YDo//eA6T/VgOl/94Dpv9WA6f/3gOo/1YDqf/eA6r/VgOr/94DrP9WA63/3gOu/1YDr//eA7H/6wOz/+sDtf/rA7f/6wO5/+sDu//rA73/6wO//+sDxf/rA8f/6wPJ/+sDy//rA83/6wPP/+sD0f/rA9P/6wPV/+sD1//rA9n/6wPb/+sD3f/qA9//6gPh/+oD4//qA+X/6gPn/+oD6f/qA+v/6APt/+gD7//oA/YAFAAfADb/1QA4/+QAOf/sADv/3QDN/9UA0f/VART/5AEu/9UBNv/VAgv/3QKA/9UCgv/VAoT/1QKS/+wClP/dApb/3QL9/90DDP/dAw//3QMz/9UDRf/sA0f/7ANJ/+wDS//dA2D/5ANo/90D6v/dA+z/3QPu/90D9v/VBBP/3QAaADb/sAA4/+0AO//QAM3/sADR/7ABFP/tAS7/sAE2/7ACC//QAoD/sAKC/7AChP+wApT/0AKW/9AC/f/QAwz/0AMP/9ADM/+wA0v/0ANg/+0DaP/QA+r/0APs/9AD7v/QA/b/sAQT/9AAEAAs/+4AN//uAgf/7gII/+4CCf/uAgr/7gJX/+4Chv/uAoj/7gKK/+4CjP/uAo7/7gKQ/+4DJP/uA9z/7gPe/+4ARwAEABAACQAQAEX/6ABG/+gAR//oAEn/6ABT/+gAkf/oAJX/6AC2/+gAw//oAMT/6ADy/+gA/v/oARn/6AEd/+gBNf/oAUf/6AFI/+gBUv/oAWUAEAFmABABaAAQAWkAEAFqABACE//oAhT/6AIV/+gCFv/oAhf/6AIv/+gCMf/oAjP/6AI1/+gCN//oAjn/6AI7/+gCPf/oAj//6AJB/+gCQ//oAkX/6AJH/+gCSf/oAxD/6AM2/+gDOv/oAz3/6ANNABADTgAQA1IAEANc/+gDYv/oA2f/6AN1/+gDd//oA3j/6AOE/+gDlf/oA7H/6AOz/+gDtf/oA7f/6AO5/+gDu//oA73/6AO//+gD0//oA9X/6APX/+gD2//oAD0ARf/sAEb/7ABH/+wASf/sAFP/7ACR/+wAlf/sALb/7ADD/+wAxP/sAPL/7AD+/+wBGf/sAR3/7AE1/+wBR//sAUj/7AFS/+wCE//sAhT/7AIV/+wCFv/sAhf/7AIv/+wCMf/sAjP/7AI1/+wCN//sAjn/7AI7/+wCPf/sAj//7AJB/+wCQ//sAkX/7AJH/+wCSf/sAxD/7AM2/+wDOv/sAz3/7ANc/+wDYv/sA2f/7AN1/+wDd//sA3j/7AOE/+wDlf/sA7H/7AOz/+wDtf/sA7f/7AO5/+wDu//sA73/7AO//+wD0//sA9X/7APX/+wD2//sABcAUf/sARP/7AId/+wCHv/sAh//7AIg/+wCIf/sAmv/7AJt/+wCb//sAxb/7AMc/+wDOP/sA4L/7AOG/+wDxf/sA8f/7APJ/+wDy//sA83/7APP/+wD0f/sA9n/7AAGAA7/hAAQ/4QBZ/+EAWv/hAFv/4QBcP+EABAALP/sADf/7AIH/+wCCP/sAgn/7AIK/+wCV//sAob/7AKI/+wCiv/sAoz/7AKO/+wCkP/sAyT/7APc/+wD3v/sAAEpLAAEAAAAIgBOAMQBqgKQA2oEBAaeCGQJNgosC/IMJAxWDNQOug8wEAISFBLKFDAU6hVwFc4WkBcGFxgXQhiUGtIa9BwKHIgcshzcAB0ABP/yAAn/8gBY//MAW//zALj/8wEV//MBZf/yAWb/8gFo//IBaf/yAWr/8gIm//MCJ//zApX/8wMY//MDO//zA0T/8wNM//MDTf/yA07/8gNS//IDYf/zA2n/8wOK//MDjP/zA47/8wPr//MD7f/zA+//8wA5ACX/8wAp//MAMf/zADP/8wCB//MAkP/zAJT/8wCu//MAzv/zAQP/8wES//MBFv/zARj/8wEa//MBHP/zATT/8wFR//MB+P/zAgL/8wID//MCBP/zAgX/8wIG//MCLv/zAjD/8wIy//MCNP/zAkL/8wJE//MCRv/zAkj/8wJq//MCbP/zAm7/8wKf//MC/P/zAwn/8wMv//MDMv/zA1f/8wNj//MDZv/zA4H/8wOD//MDhf/zA8T/8wPG//MDyP/zA8r/8wPM//MDzv/zA9D/8wPS//MD1P/zA9b/8wPY//MD2v/zADkAJf/mACn/5gAx/+YAM//mAIH/5gCQ/+YAlP/mAK7/5gDO/+YBA//mARL/5gEW/+YBGP/mARr/5gEc/+YBNP/mAVH/5gH4/+YCAv/mAgP/5gIE/+YCBf/mAgb/5gIu/+YCMP/mAjL/5gI0/+YCQv/mAkT/5gJG/+YCSP/mAmr/5gJs/+YCbv/mAp//5gL8/+YDCf/mAy//5gMy/+YDV//mA2P/5gNm/+YDgf/mA4P/5gOF/+YDxP/mA8b/5gPI/+YDyv/mA8z/5gPO/+YD0P/mA9L/5gPU/+YD1v/mA9j/5gPa/+YANgAj/+QAOv/SADv/0wCt/+QAr//kANX/0gEI/+QB8f/kAfL/5AHz/+QB9P/kAfX/5AH2/+QB9//kAgv/0wIo/+QCKv/kAiz/5AKU/9MClv/TAvj/5AL9/9MDAP/kAwz/0wMN/9IDD//TAyj/5AM0/9IDS//TA1X/5ANo/9MDa//SA27/5ANw/+QDef/SA5P/0gOY/+QDmv/kA5z/5AOe/+QDoP/kA6L/5AOk/+QDpv/kA6j/5AOq/+QDrP/kA67/5APq/9MD7P/TA+7/0wP4/9IEAP/SBBP/0wAmAA7/HgAQ/x4AI//NAK3/zQCv/80BCP/NAWf/HgFr/x4Bb/8eAXD/HgHx/80B8v/NAfP/zQH0/80B9f/NAfb/zQH3/80CKP/NAir/zQIs/80C+P/NAwD/zQMo/80DVf/NA27/zQNw/80DmP/NA5r/zQOc/80Dnv/NA6D/zQOi/80DpP/NA6b/zQOo/80Dqv/NA6z/zQOu/80ApgBF/9wARv/cAEf/3ABJ/9wAT//zAFD/8wBR/9YAUv/zAFP/3ABX/90AWP/hAFv/4QCR/9wAlf/cAJf/3QC2/9wAuP/hALz/8wDD/9wAxP/cAMb/3QDn//MA6//zAOz/8wDu//MA7//zAPD/8wDy/9wA8//zAPX/8wD2//MA+f/zAPv/8wD+/9wBAP/zARP/1gEV/+EBGf/cAR3/3AEx//MBNf/cAUD/8wFF//MBR//cAUj/3AFS/9wCE//cAhT/3AIV/9wCFv/cAhf/3AIc//MCHf/WAh7/1gIf/9YCIP/WAiH/1gIi/90CI//dAiT/3QIl/90CJv/hAif/4QIv/9wCMf/cAjP/3AI1/9wCN//cAjn/3AI7/9wCPf/cAj//3AJB/9wCQ//cAkX/3AJH/9wCSf/cAmT/8wJm//MCaP/zAmn/8wJr/9YCbf/WAm//1gKH/90Cif/dAov/3QKN/90Cj//dApH/3QKV/+EDEP/cAxL/8wMU/90DFv/WAxj/4QMb/90DHP/WAx3/3QM2/9wDN//zAzj/1gM5//MDOv/cAzv/4QM9/9wDPv/zA0P/8wNE/+EDTP/hA1T/8wNc/9wDXf/zA2H/4QNi/9wDZ//cA2n/4QN1/9wDd//cA3j/3AN+//MDgP/zA4L/1gOE/9wDhv/WA4r/4QOM/+EDjv/hA5L/8wOV/9wDsf/cA7P/3AO1/9wDt//cA7n/3AO7/9wDvf/cA7//3APF/9YDx//WA8n/1gPL/9YDzf/WA8//1gPR/9YD0//cA9X/3APX/9wD2f/WA9v/3APd/90D3//dA+H/3QPj/90D5f/dA+f/3QPp/90D6//hA+3/4QPv/+ED8//zA/X/8wP///MEDP/zBA7/8wQQ//MAcQAE/9oACf/aAEX/8ABG//AAR//wAEn/8ABT//AAV//vAFj/3ABb/9wAkf/wAJX/8ACX/+8Atv/wALj/3ADD//AAxP/wAMb/7wDy//AA/v/wARX/3AEZ//ABHf/wATX/8AFH//ABSP/wAVL/8AFl/9oBZv/aAWj/2gFp/9oBav/aAhP/8AIU//ACFf/wAhb/8AIX//ACIv/vAiP/7wIk/+8CJf/vAib/3AIn/9wCL//wAjH/8AIz//ACNf/wAjf/8AI5//ACO//wAj3/8AI///ACQf/wAkP/8AJF//ACR//wAkn/8AKH/+8Cif/vAov/7wKN/+8Cj//vApH/7wKV/9wDEP/wAxT/7wMY/9wDG//vAx3/7wM2//ADOv/wAzv/3AM9//ADRP/cA0z/3ANN/9oDTv/aA1L/2gNc//ADYf/cA2L/8ANn//ADaf/cA3X/8AN3//ADeP/wA4T/8AOK/9wDjP/cA47/3AOV//ADsf/wA7P/8AO1//ADt//wA7n/8AO7//ADvf/wA7//8APT//AD1f/wA9f/8APb//AD3f/vA9//7wPh/+8D4//vA+X/7wPn/+8D6f/vA+v/3APt/9wD7//cADQABP+gAAn/oABX//EAWP/FAFv/xQCX//EAuP/FAMb/8QEV/8UBZf+gAWb/oAFo/6ABaf+gAWr/oAIi//ECI//xAiT/8QIl//ECJv/FAif/xQKH//ECif/xAov/8QKN//ECj//xApH/8QKV/8UDFP/xAxj/xQMb//EDHf/xAzv/xQNE/8UDTP/FA03/oANO/6ADUv+gA2H/xQNp/8UDiv/FA4z/xQOO/8UD3f/xA9//8QPh//ED4//xA+X/8QPn//ED6f/xA+v/xQPt/8UD7//FAD0ARf/nAEb/5wBH/+cASf/nAFP/5wCR/+cAlf/nALb/5wDD/+cAxP/nAPL/5wD+/+cBGf/nAR3/5wE1/+cBR//nAUj/5wFS/+cCE//nAhT/5wIV/+cCFv/nAhf/5wIv/+cCMf/nAjP/5wI1/+cCN//nAjn/5wI7/+cCPf/nAj//5wJB/+cCQ//nAkX/5wJH/+cCSf/nAxD/5wM2/+cDOv/nAz3/5wNc/+cDYv/nA2f/5wN1/+cDd//nA3j/5wOE/+cDlf/nA7H/5wOz/+cDtf/nA7f/5wO5/+cDu//nA73/5wO//+cD0//nA9X/5wPX/+cD2//nAHEABAAMAAkADABF/+gARv/oAEf/6ABJ/+gAUf/qAFP/6ABYAAsAWwALAJH/6ACV/+gAtv/oALgACwDD/+gAxP/oAPL/6AD+/+gBE//qARUACwEZ/+gBHf/oATX/6AFH/+gBSP/oAVL/6AFlAAwBZgAMAWgADAFpAAwBagAMAhP/6AIU/+gCFf/oAhb/6AIX/+gCHf/qAh7/6gIf/+oCIP/qAiH/6gImAAsCJwALAi//6AIx/+gCM//oAjX/6AI3/+gCOf/oAjv/6AI9/+gCP//oAkH/6AJD/+gCRf/oAkf/6AJJ/+gCa//qAm3/6gJv/+oClQALAxD/6AMW/+oDGAALAxz/6gM2/+gDOP/qAzr/6AM7AAsDPf/oA0QACwNMAAsDTQAMA04ADANSAAwDXP/oA2EACwNi/+gDZ//oA2kACwN1/+gDd//oA3j/6AOC/+oDhP/oA4b/6gOKAAsDjAALA44ACwOV/+gDsf/oA7P/6AO1/+gDt//oA7n/6AO7/+gDvf/oA7//6APF/+oDx//qA8n/6gPL/+oDzf/qA8//6gPR/+oD0//oA9X/6APX/+gD2f/qA9v/6APrAAsD7QALA+8ACwAMAFr/7QBc/+0A6f/tApj/7QKa/+0CnP/tAzz/7QNs/+0Dev/tA5T/7QP5/+0EAf/tAAwAWv/yAFz/8gDp//ICmP/yApr/8gKc//IDPP/yA2z/8gN6//IDlP/yA/n/8gQB//IAHwBY//QAWv/yAFv/9ABc//MAuP/0AOn/8gEV//QCJv/0Aif/9AKV//QCmP/zApr/8wKc//MDGP/0Azv/9AM8//IDRP/0A0z/9ANh//QDaf/0A2z/8gN6//IDiv/0A4z/9AOO//QDlP/yA+v/9APt//QD7//0A/n/8gQB//IAeQAE/8oACf/KADb/0gA4/9QAOv/0ADv/0wBP/9EAUP/RAFL/0QBY/+YAWv/vAFv/5gC4/+YAvP/RAM3/0gDR/9IA1f/0ANn/7QDc/+EA5//RAOn/7wDr/9EA7P/RAO7/0QDv/9EA8P/RAPP/0QD1/9EA9v/RAPn/0QD7/9EBAP/RART/1AEV/+YBLv/SATH/0QE2/9IBQP/RAUX/0QFl/8oBZv/KAWj/ygFp/8oBav/KAgv/0wIc/9ECJv/mAif/5gJk/9ECZv/RAmj/0QJp/9ECgP/SAoL/0gKE/9IClP/TApX/5gKW/9MC/f/TAwz/0wMN//QDD//TAxL/0QMY/+YDJ//tAzP/0gM0//QDN//RAzn/0QM7/+YDPP/vAz7/0QND/9EDRP/mA0v/0wNM/+YDTf/KA07/ygNS/8oDVP/RA13/0QNg/9QDYf/mA2j/0wNp/+YDa//0A2z/7wN5//QDev/vA37/0QOA/9EDif/tA4r/5gOL/+0DjP/mA43/7QOO/+YDj//hA5L/0QOT//QDlP/vA+r/0wPr/+YD7P/TA+3/5gPu/9MD7//mA/P/0QP1/9ED9v/SA/j/9AP5/+8D+v/hA/z/4QP//9EEAP/0BAH/7wQM/9EEDv/RBBD/0QQT/9MAHQA2/74AWP/vAFv/7wC4/+8Azf++ANH/vgEV/+8BLv++ATb/vgIm/+8CJ//vAoD/vgKC/74ChP++ApX/7wMY/+8DM/++Azv/7wNE/+8DTP/vA2H/7wNp/+8Div/vA4z/7wOO/+8D6//vA+3/7wPv/+8D9v++ADQANv/mADj/5wA6//IAO//nAFr/8QDN/+YA0f/mANX/8gDZ/+4A3P/oAOn/8QEU/+cBLv/mATb/5gIL/+cCgP/mAoL/5gKE/+YClP/nApb/5wL9/+cDDP/nAw3/8gMP/+cDJ//uAzP/5gM0//IDPP/xA0v/5wNg/+cDaP/nA2v/8gNs//EDef/yA3r/8QOJ/+4Di//uA43/7gOP/+gDk//yA5T/8QPq/+cD7P/nA+7/5wP2/+YD+P/yA/n/8QP6/+gD/P/oBAD/8gQB//EEE//nAIQAIwAQACX/6AAp/+gAMf/oADP/6AA2/+AAOP/gADv/3wCB/+gAkP/oAJT/6ACtABAArv/oAK8AEADN/+AAzv/oAM8AEADR/+AA2AAQANz/4QDtABAA9P/gAP8AEAED/+gBCAAQARL/6AEU/+ABFv/oARj/6AEa/+gBHP/oAS7/4AE0/+gBNv/gAU0AEAFR/+gB8QAQAfIAEAHzABAB9AAQAfUAEAH2ABAB9wAQAfj/6AIC/+gCA//oAgT/6AIF/+gCBv/oAgv/3wIoABACKgAQAiwAEAIu/+gCMP/oAjL/6AI0/+gCQv/oAkT/6AJG/+gCSP/oAmr/6AJs/+gCbv/oAoD/4AKC/+AChP/gApT/3wKW/98Cn//oAvgAEAL8/+gC/f/fAwAAEAMJ/+gDDP/fAw//3wMoABADL//oAzL/6AMz/+ADS//fA1UAEANX/+gDYP/gA2P/6ANm/+gDaP/fA24AEANwABADgf/oA4P/6AOF/+gDj//hA5D/4AOWABADlwAQA5gAEAOaABADnAAQA54AEAOgABADogAQA6QAEAOmABADqAAQA6oAEAOsABADrgAQA8T/6APG/+gDyP/oA8r/6APM/+gDzv/oA9D/6APS/+gD1P/oA9b/6APY/+gD2v/oA+r/3wPs/98D7v/fA/b/4AP6/+ED+//gA/z/4QP9/+AEEQAQBBIAEAQT/98ALQA2//EAOP/0ADr/9AA7//AAzf/xAM//9QDR//EA1f/0ANj/9QDZ//MBFP/0AS7/8QE2//EBTf/1Agv/8AKA//ECgv/xAoT/8QKU//AClv/wAv3/8AMM//ADDf/0Aw//8AMn//MDM//xAzT/9ANL//ADYP/0A2j/8ANr//QDef/0A4n/8wOL//MDjf/zA5P/9AOW//UD6v/wA+z/8APu//AD9v/xA/j/9AQA//QEEf/1BBP/8ABZACMADwA2/+YAOP/mADoADgA7/+YArQAPAK8ADwDN/+YAzwAOANH/5gDVAA4A2AAOANkACwDc/+UA7QAPAPT/6AD/AA8BCAAPART/5gEu/+YBNv/mAU0ADgHxAA8B8gAPAfMADwH0AA8B9QAPAfYADwH3AA8CC//mAigADwIqAA8CLAAPAoD/5gKC/+YChP/mApT/5gKW/+YC+AAPAv3/5gMAAA8DDP/mAw0ADgMP/+YDJwALAygADwMz/+YDNAAOA0v/5gNVAA8DYP/mA2j/5gNrAA4DbgAPA3AADwN5AA4DiQALA4sACwONAAsDj//lA5D/6AOTAA4DlgAOA5cADwOYAA8DmgAPA5wADwOeAA8DoAAPA6IADwOkAA8DpgAPA6gADwOqAA8DrAAPA64ADwPq/+YD7P/mA+7/5gP2/+YD+AAOA/r/5QP7/+gD/P/lA/3/6AQAAA4EEQAOBBIADwQT/+YALgA2/+MAOv/lADv/5ADN/+MAz//lANH/4wDV/+UA2P/lANn/6QDt/+oA///qAS7/4wE2/+MBTf/lAgv/5AKA/+MCgv/jAoT/4wKU/+QClv/kAv3/5AMM/+QDDf/lAw//5AMn/+kDM//jAzT/5QNL/+QDaP/kA2v/5QN5/+UDif/pA4v/6QON/+kDk//lA5b/5QOX/+oD6v/kA+z/5APu/+QD9v/jA/j/5QQA/+UEEf/lBBL/6gQT/+QAIQA2/+IAOv/kAM3/4gDP/+QA0f/iANX/5ADY/+QA2f/pAO3/6wD//+sBLv/iATb/4gFN/+QCgP/iAoL/4gKE/+IDDf/kAyf/6QMz/+IDNP/kA2v/5AN5/+QDif/pA4v/6QON/+kDk//kA5b/5AOX/+sD9v/iA/j/5AQA/+QEEf/kBBL/6wAXADb/6wA7//MAzf/rANH/6wEu/+sBNv/rAgv/8wKA/+sCgv/rAoT/6wKU//MClv/zAv3/8wMM//MDD//zAzP/6wNL//MDaP/zA+r/8wPs//MD7v/zA/b/6wQT//MAMABP/+8AUP/vAFL/7wBa//AAvP/vAOf/7wDp//AA6//vAOz/7wDu/+8A7//vAPD/7wDz/+8A9f/vAPb/7wD5/+8A+//vAQD/7wEx/+8BQP/vAUX/7wIc/+8CZP/vAmb/7wJo/+8Caf/vAxL/7wM3/+8DOf/vAzz/8AM+/+8DQ//vA1T/7wNd/+8DbP/wA3r/8AN+/+8DgP/vA5L/7wOU//AD8//vA/X/7wP5//AD///vBAH/8AQM/+8EDv/vBBD/7wAdAAT/8gAJ//IAWP/1AFv/9QC4//UBFf/1AWX/8gFm//IBaP/yAWn/8gFq//ICJv/1Aif/9QKV//UDGP/1Azv/9QNE//UDTP/1A03/8gNO//IDUv/yA2H/9QNp//UDiv/1A4z/9QOO//UD6//1A+3/9QPv//UABAD0/+0DkP/tA/v/7QP9/+0ACgAE//UACf/1AWX/9QFm//UBaP/1AWn/9QFq//UDTf/1A07/9QNS//UAVABF//AARv/wAEf/8ABJ//AAUf/rAFP/8ACR//AAlf/wALb/8ADD//AAxP/wAPL/8AD+//ABE//rARn/8AEd//ABNf/wAUf/8AFI//ABUv/wAhP/8AIU//ACFf/wAhb/8AIX//ACHf/rAh7/6wIf/+sCIP/rAiH/6wIv//ACMf/wAjP/8AI1//ACN//wAjn/8AI7//ACPf/wAj//8AJB//ACQ//wAkX/8AJH//ACSf/wAmv/6wJt/+sCb//rAxD/8AMW/+sDHP/rAzb/8AM4/+sDOv/wAz3/8ANc//ADYv/wA2f/8AN1//ADd//wA3j/8AOC/+sDhP/wA4b/6wOV//ADsf/wA7P/8AO1//ADt//wA7n/8AO7//ADvf/wA7//8APF/+sDx//rA8n/6wPL/+sDzf/rA8//6wPR/+sD0//wA9X/8APX//AD2f/rA9v/8ACPAAQADQAJAA0AQ//wAEX/sABG/7AAR/+wAEn/sABR/9YAU/+wAFgACwBbAAsAkf+wAJX/sAC2/7AAuAALAMT/sADt/68A8v+wAP7/sAD//68BE//WARUACwEZ/7ABHf+wATX/sAFH/7ABSP+wAVL/sAFlAA0BZgANAWgADQFpAA0BagANAgz/8AIN//ACDv/wAg//8AIQ//ACEf/wAhL/8AIT/7ACFP+wAhX/sAIW/7ACF/+wAh3/1gIe/9YCH//WAiD/1gIh/9YCJgAL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AlQA0QJXAlcA0gJZAlkA0wJbAlsA1AJdAl0A1QJfAl8A1gJhAmEA1wJjAm8A2AJxAnEA5QJzAnMA5gJ1AnUA5wKAAoAA6AKCAoIA6QKEAoQA6gKGAoYA6wKIAogA7AKKAooA7QKMAowA7gKOAo4A7wKQApAA8AKSApIA8QKUApcA8gKZApkA9gKbApsA9wL4Av0A+AMAAw8A/gMSAxIBDgMWAxYBDwMYAxgBEAMcAxwBEQMfAyABEgMiAysBFAMtAy8BHgMxAzYBIQM4AzkBJwM7Az4BKQNEA0UBLQNHA0cBLwNJA0kBMANLA04BMQNSA1cBNQNaA1oBOwNcA1wBPANgA2EBPQNmA2YBPwNoA3EBQAN0A3UBSgN3A3oBTAOBA4IBUAOGA4YBUgOIA44BUwOTA5QBWgOYA8ABXAPCA8IBhQPEA9EBhgPZA9kBlAPcA9wBlQPeA94BlgPqA+8BlwPyA/IBnQP0A/QBngP2A/YBnwP4A/kBoAP+BAEBogQEBAQBpgQGBAcBpwQJBAkBqQQNBA0BqgQPBA8BqwQTBBMBrAABAAoACgAoADMANAA9AEgATQBWAFkAXQABACIAmQCwALIAswC0ALsAvgC/AMAAxQDHAMgAyQDNANEA0wDUANYA3gDiAOMA5ADlAOYA6ADqAOwA8QDzAPYA+wD+AR0B3AACAHYABAAEAAAACQAJAAEADgAOAAIAEAAQAAMAIwAnAAQAKgAyAAkANgA8ABIAQwBFABkARwBHABwASgBKAB0ATwBSAB4AVABUACIAWABYACMAWgBcACQAiACIACcArACvACgAuAC4ACwAvAC8AC0AwgDCAC4AzwDQAC8A0gDSADEA1QDVADIA1wDZADMA2wDbADYA3QDdADcA3wDfADgA4QDhADkA5wDnADoA6QDpADsA8gDyADwA9wD3AD0A+QD6AD4A/wEAAEABBQEFAEIBCAEIAEMBEwEVAEQBJwEpAEcBLAEsAEoBLgEuAEsBRQFFAEwBZQFrAE0BbwFwAFQB7AHtAFYB7wHvAFgB8QIXAFkCHAIhAIACJgI2AIYCOAJBAJcCSgJMAKECTgJOAKQCUAJQAKUCUgJSAKYCVAJUAKcCVwJXAKgCWQJZAKkCWwJbAKoCXQJdAKsCXwJfAKwCYQJhAK0CYwJvAK4CcQJxALsCcwJzALwCdQJ1AL0CgAKAAL4CggKCAL8ChAKEAMAChgKGAMECiAKIAMICigKKAMMCjAKMAMQCjgKOAMUCkAKQAMYCkgKSAMcClAKcAMgC+AL9ANEDAAMPANcDEgMSAOcDFgMWAOgDGAMYAOkDHAMcAOoDHwMgAOsDIgMrAO0DLQMvAPcDMQM2APoDOAM+AQADRANFAQcDRwNHAQkDSQNJAQoDSwNOAQsDUgNXAQ8DWgNaARUDXANcARYDYANhARcDZgNxARkDdAN1ASUDdwN6AScDgQOCASsDhgOGAS0DiAOOAS4DkwOUATUDmAPAATcDwgPCAWADxAPRAWED2QPZAW8D3APcAXAD3gPeAXED6gPvAXID8gPyAXgD9AP0AXkD9gP2AXoD+AP5AXsD/gQBAX0EBAQEAYEEBgQHAYIECQQJAYQEDQQNAYUEDwQPAYYEEwQTAYcAAgE4AAQABAAdAAkACQAdAA4ADgAeABAAEAAeACQAJAABACUAJQAEACYAJgADACcAJwAFACoAKwACACwALAAMAC0ALQAJAC4ALgAKAC8AMAACADEAMQADADIAMgALADYANgAGADcANwAMADgAOAANADkAOQAQADoAOgAOADsAOwAPADwAPAARAEMAQwATAEQARAAVAEUARQAUAEcARwAWAEoASgAXAE8AUAAXAFEAUQAYAFIAUgAVAFQAVAAaAFgAWAAZAFoAWgAbAFsAWwAZAFwAXAAcAIgAiAAVAKwArAAHAK4ArgADALgAuAAZALwAvAAXAMIAwgAVAM8A0AAfANIA0gACANUA1QAOANcA2AACANkA2QASANsA2wACAN0A3QACAN8A3wAfAOEA4QAfAOcA5wAIAOkA6QAbAPIA8gAVAPcA9wAgAPkA+QAgAPoA+gAVAP8BAAAgAQUBBQAgARMBEwAYARQBFAANARUBFQAZAScBJwAVASgBKAAHASkBKQAIASwBLAAJAS4BLgAJAUUBRQAIAWUBZgAdAWcBZwAeAWgBagAdAWsBawAeAW8BcAAeAewB7QADAe8B7wAGAfgB+AAEAfkB/AAFAf0CAQACAgICBgADAgcCCgAMAgsCCwAPAgwCEgATAhMCEwAUAhQCFwAWAhwCHAAXAh0CIQAYAiYCJwAZAikCKQATAisCKwATAi0CLQATAi4CLgAEAi8CLwAUAjACMAAEAjECMQAUAjICMgAEAjMCMwAU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AAAAGAAAAAAAFQAEABgAAAAAAAUAAAAAAAAAAAARAAAAAAAAAAAAAAAAAAAAAAAAAAUACAANAAIABQAAAAUAFQAFAAAABQAVAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAAAGAAAAAAABQAVAAoAAAAAAAAAAAAAAAAAAAAAAAAAGAAAAAAAAAAAABgAAAAVABUAAAAAAAAAAAABAAAAAAAAAAUAFQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAXABcAAAAHAAcAEwAHAAcABwATAAAAAAAAABMAEwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFwAAAAAAAAAAAAAAEQARABEAEQARABEAEQAFAAAAAAAAAAAAAAAAAAAAAAAAAAUABQAFAAUABQAGAAYABgAGAA4AGgAaABoAGgAaABoAGgAVABUAFQAVABUAAAAAAAAAAAAYAAgACAAIAAgACAALAAsACwALAAIAAgARABoAEQAaABEAGgAFABUABQAVAAUAFQAFABUAAAAVAAAAFQAAABUAAAAVAAAAFQAAABUABQAVAAUAFQAFABUABQAVAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYAAAAGAAAABgAGAAFAAgABQAIAAUACAAAAAAAAAAAAAAAAAAZABsAGQAbABkAGwAZABsAGQAbAAoAAAAKAAAACgAAAAYACwAGAAsABgALAAYACwAGAAsABgALAAkAAAAOAAIADgAUAAwAFAAMABQADAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABEAAAAAAAAABQAOAAAAAAARAAAAAAAUAAAAAAAAAAAAAAAFAAAAAAAOABIAAAAOABUAAAAYAAAACwAAAAgAAAACAAAAAAALAAgACwAAAAAAAAAAAAAAAAAcAAAAAAAQABEAAAAAAAAAAAAAAAAABQAAAAAABQAKABIAGgAVABgACAAYABUAAgAWABUAGAAbAAAAAAAAABgAAgAJAAAACQAAAAkAAAAOAAIABwAHAAAAAAAAAAcAAAAYABEAGgAFAAAAAAAAAAAAFQAYAAAAAAANAAIAFQAFAAAAAAAFABUADgACAAAAEgAWAAAAEQAaABEAGgAAAAAAAAAVAAAAFQAVABIAFgAAAAAAAAAYAAAAGAAFAAgABQAVAAUACAAAAAAAEAACABAAAgAQAAIADwADAAAAGAASABYAFQABAAQAEQAaABEAGgARABoAEQAaABEAGgARABoAEQAaABEAGgARABoAEQAaABEAGgARABoAAAAVAAAAFQAAABUAAAAVAAAAFQAAABUAAAAVAAAAFQAAAAAAAAAAAAUACAAFAAgABQAIAAUACAAFAAgABQAIAAUACAAFABUABQAVAAUAFQAFAAgABQAVAAYACwAGAAsAAAALAAAACwAAAAsAAAALAAAACwAOAAIADgACAA4AAgAAAAAAAAAYAAAAGAAKAAAAEgAWAA8AAwAPAAMAAAAYABIAFgAAAAAAAAAAAAAAAAAAAAAAAAAAABgAAAAYAAAAGAABAAQADgAAAAAAAAAAAAAAFwABAAAACgAsAI4AAURGTFQACAAEAAAAAP//AAgAAAABAAIAAwAEAAUABgAHAAhsaWdhADJsbnVtADhzbWNwAD5zczAxAERzczAyAEpzczAzAFBzczA0AFZzczA1AFwAAAABAAEAAAABAAIAAAABAAAAAAABAAMAAAABAAQAAAABAAUAAAABAAYAAAABAAcACAASABoAIgAqADIAOgBCAEoAAQAAAAEAQAAEAAAAAQH2AAEAAAABAgAAAQAAAAECEgABAAAAAQIQAAEAAAABAg4AAQAAAAECDAABAAAAAQIOAAICEADcAaYBpwGoAakBqgGrAawBrQGuAa8BsAGxAbIBswG0AegBtQG2AbcBuAG5AboBuwG8Ab0BvgGmAacBqAGpAaoBqwGsAa0BrgGvAbABsQGyAbMBtAHoAbUBtgG3AbgBuQG6AbsBvAG9Ab4C9wKiAqECogKjAqMCpAKlAqYCpwKoAqkCqgKrAqwCrQKuAq8CsAKxArICswK0ArUCtgK3ArgCuQK6ArsCvAK9Ar4CpAKlAqYCpwKoAqkCqgKrAqwCrQKuAq8CsAKxArICswK0ArUCtgK3ArgCuQK6ArsCvAK9Ar4C8wK/Ar8CwALAAsECwQLCAsICwwLDAsUCxQLGAsYCxwLHAsgCyALJAskCygLKAssCywLMAswCzQLNAs8CzwLQAtAC0QLRAtIC0gLTAtMC1ALUAtUC1gLWAtcC1wLYAtgC2QLZAtoC2gLbAtsC3ALcAt0C3QLeAt4C3wLfAuAC4ALhAuEC4gLiAuMC4wLkAuQC5QLlAuYC5gLnAucC6ALo/////wLqAuoC6wLrAuwC7ALtAu0C7gLuAu8C7wLwAvAC8QLxAvIC8gLzAvQC9AL1AvUC9gL2AqEAAQCkAAEACAABAAQBkgACAEsAAgCYAAoBmAHMAcQB1gHXAdgB2QHbAd0B5wABAIgBkQABAIgBKAABAIgBrgACAIgAAgHjAeQAAgB+AAIB5QHmAAIADQAjADwAAABDAFwAGgCDAIMANACFAIUANQHsAe0ANgHvAjEAOAI0AkUAewJIAlQAjQJXAmgAmgJqAnsArAJ+An8AvgKCApwAwAPwA/AA2wABAAEASAACAAEAEgAbAAAAAQABAEkAAQABALYAAQABADQAAQACAC0ATQ==","sampleImage.jpg":"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AAGyAAAAEAAAAAEAAAAAABJwcmludE91dHB1dE9wdGlvbnMAAAASAAAAAENwdG5ib29sAAAAAABDbGJyYm9vbAAAAAAAUmdzTWJvb2wAAAAAAENybkNib29sAAAAAABDbnRDYm9vbAAAAAAATGJsc2Jvb2wAAAAAAE5ndHZib29sAAAAAABFbWxEYm9vbAAAAAAASW50cmJvb2wAAAAAAEJja2dPYmpjAAAAAQAAAAAAAFJHQkMAAAADAAAAAFJkICBkb3ViQG/gAAAAAAAAAAAAR3JuIGRvdWJAb+AAAAAAAAAAAABCbCAgZG91YkBv4AAAAAAAAAAAAEJyZFRVbnRGI1JsdAAAAAAAAAAAAAAAAEJsZCBVbnRGI1JsdAAAAAAAAAAAAAAAAFJzbHRVbnRGI1B4bEBSAAAAAAAAAAAACnZlY3RvckRhdGFib29sAQAAAABQZ1BzZW51bQAAAABQZ1BzAAAAAFBnUEMAAAAATGVmdFVudEYjUmx0AAAAAAAAAAAAAAAAVG9wIFVudEYjUmx0AAAAAAAAAAAAAAAAU2NsIFVudEYjUHJjQFkAAAAAAAA4QklNA+0AAAAAABAASAAAAAEAAgBIAAAAAQACOEJJTQQmAAAAAAAOAAAAAAAAAAAAAD+AAAA4QklNBA0AAAAAAAQAAAB4OEJJTQQZAAAAAAAEAAAAHjhCSU0D8wAAAAAACQAAAAAAAAAAAQA4QklNJxAAAAAAAAoAAQAAAAAAAAACOEJJTQP1AAAAAABIAC9mZgABAGxmZgAGAAAAAAABAC9mZgABAKGZmgAGAAAAAAABADIAAAABAFoAAAAGAAAAAAABADUAAAABAC0AAAAGAAAAAAABOEJJTQP4AAAAAABwAAD/////////////////////////////A+gAAAAA/////////////////////////////wPoAAAAAP////////////////////////////8D6AAAAAD/////////////////////////////A+gAADhCSU0EAAAAAAAAAgABOEJJTQQCAAAAAAAEAAAAADhCSU0EMAAAAAAAAgEBOEJJTQQtAAAAAAAGAAEAAAACOEJJTQQIAAAAAAAQAAAAAQAAAkAAAAJAAAAAADhCSU0EHgAAAAAABAAAAAA4QklNBBoAAAAAA0sAAAAGAAAA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aHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL3NUeXBlL1Jlc291cmNlRXZlbnQjIiB4bWxuczpkYz0iaHR0cDovL3B1cmwub3JnL2RjL2VsZW1lbnRzLzEuMS8iIHhtbG5zOnBob3Rvc2hvcD0iaHR0cDovL25zLmFkb2JlLmNvbS9waG90b3Nob3AvMS4wLyIgeG1wOkNyZWF0b3JUb29sPSJBZG9iZSBQaG90b3Nob3AgQ1M1LjEgTWFjaW50b3NoIiB4bXA6Q3JlYXRlRGF0ZT0iMjAxNC0wMy0xOVQwMzowMjoyNiswMTowMCIgeG1wOk1ldGFkYXRhRGF0ZT0iMjAxNC0wMy0xOVQwMzowMjoyNiswMTowMCIgeG1wOk1vZGlmeURhdGU9IjIwMTQtMDMtMTlUMDM6MDI6MjYrMDE6MDAiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6MDI4MDExNzQwNzIwNjgxMTg3MUY4MTMxRkI2RTY4OTgiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6MDE4MDExNzQwNzIwNjgxMTg3MUY4MTMxRkI2RTY4OTgiIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDowMTgwMTE3NDA3MjA2ODExODcxRjgxMzFGQjZFNjg5OCIgZGM6Zm9ybWF0PSJpbWFnZS9qcGVnIiBwaG90b3Nob3A6Q29sb3JNb2RlPSIzIiBwaG90b3Nob3A6SUNDUHJvZmlsZT0ic1JHQiBJRUM2MTk2Ni0yLjEiPiA8eG1wTU06SGlzdG9yeT4gPHJkZjpTZXE+IDxyZGY6bGkgc3RFdnQ6YWN0aW9uPSJjcmVhdGVkIiBzdEV2dDppbnN0YW5jZUlEPSJ4bXAuaWlkOjAxODAxMTc0MDcyMDY4MTE4NzFGODEzMUZCNkU2ODk4IiBzdEV2dDp3aGVuPSIyMDE0LTAzLTE5VDAzOjAyOjI2KzAxOjAwIiBzdEV2dDpzb2Z0d2FyZUFnZW50PSJBZG9iZSBQaG90b3Nob3AgQ1M1LjEgTWFjaW50b3NoIi8+IDxyZGY6bGkgc3RFdnQ6YWN0aW9uPSJzYXZlZCIgc3RFdnQ6aW5zdGFuY2VJRD0ieG1wLmlpZDowMjgwMTE3NDA3MjA2ODExODcxRjgxMzFGQjZFNjg5OCIgc3RFdnQ6d2hlbj0iMjAxNC0wMy0xOVQwMzowMjoyNiswMTowMCIgc3RFdnQ6c29mdHdhcmVBZ2VudD0iQWRvYmUgUGhvdG9zaG9wIENTNS4xIE1hY2ludG9zaCIgc3RFdnQ6Y2hhbmdlZD0iLyIvPiA8L3JkZjpTZXE+IDwveG1wTU06SGlzdG9yeT4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPD94cGFja2V0IGVuZD0idyI/Pv/iDFhJQ0NfUFJPRklMRQABAQAADEhMaW5vAhAAAG1udHJSR0IgWFlaIAfOAAIACQAGADEAAGFjc3BNU0ZUAAAAAElFQyBzUkdCAAAAAAAAAAAAAAABAAD21gABAAAAANMtSFAgIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEWNwcnQAAAFQAAAAM2Rlc2MAAAGEAAAAbHd0cHQAAAHwAAAAFGJrcHQAAAIEAAAAFHJYWVoAAAIYAAAAFGdYWVoAAAIsAAAAFGJYWVoAAAJAAAAAFGRtbmQAAAJUAAAAcGRtZGQAAALEAAAAiHZ1ZWQAAANMAAAAhnZpZXcAAAPUAAAAJGx1bWkAAAP4AAAAFG1lYXMAAAQMAAAAJHRlY2gAAAQwAAAADHJUUkMAAAQ8AAAIDGdUUkMAAAQ8AAAIDGJUUkMAAAQ8AAAIDHRleHQAAAAAQ29weXJpZ2h0IChjKSAxOTk4IEhld2xldHQtUGFja2FyZCBDb21wYW55AABkZXNjAAAAAAAAABJzUkdCIElFQzYxOTY2LTIuMQAAAAAAAAAA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"};
\ No newline at end of file
diff --git a/public/index.html b/public/index.html
index 1f6a91b..1e1997f 100644
--- a/public/index.html
+++ b/public/index.html
@@ -12,8 +12,8 @@
     <meta name="description" content="">
     <meta name="viewport" content="width=device-width">
     <!-- Place favicon.ico and apple-touch-icon.png in the root directory -->
-    <link rel="stylesheet" href="app/f3572dd3.vendor.css">
-    <link rel="stylesheet" href="app/7b2a74e6.app.css">
+    <link rel="stylesheet" href="app/67dd0d05.vendor.css">
+    <link rel="stylesheet" href="app/ec36ec5b.app.css">
 
     <!-- BEGIN DYMANICLY LOADED CSS FILES (all plugin and page related styles must be loaded between GLOBAL and THEME css files ) -->
     <link id="ng_load_plugins_before"/>
@@ -59,9 +59,9 @@
     <script src="bower_components/es5-shim/es5-shim.js"></script>
     <script src="bower_components/json3/lib/json3.min.js"></script>
     <![endif]-->
-    <script src="app/bff60da8.vendor.js"></script>
+    <script src="app/4942fdcb.vendor.js"></script>
 
-    <script src="app/9210b25d.app.js"></script>
+    <script src="app/76616549.app.js"></script>
 
     <!-- BEGIN JAVASCRIPTS(Load javascripts at bottom, this will reduce page load time) -->
     <!-- BEGIN CORE PLUGINS -->
diff --git a/release-notes/changelog_0.0.28.txt b/release-notes/changelog_0.0.28.txt
deleted file mode 100644
index a6e436c..0000000
--- a/release-notes/changelog_0.0.28.txt
+++ /dev/null
@@ -1,49 +0,0 @@
-# xCALLY MOTION Changelog
-
-- * afd017d - 2016-01-18: new version 
-- * 366410c - 2016-01-18: Add Seed for production 
-- * 7e4f41e - 2016-01-18: new version 
-- * a8d3a8d - 2016-01-18: new version 
-- * 87fa6b7 - 2016-01-18: server api 
-- * 962a059 - 2016-01-18: new version 
-- * c55811e - 2016-01-18: package.json 
-- * e82a344 - 2016-01-18: server side api 
-- * 570bf89 - 2016-01-18: client side license 
-- * cc90ac0 - 2016-01-18: new version 
-- * 9ea0d16 - 2016-01-18: client side app chat Template resource 
-- * f6401b7 - 2016-01-18: foxed socket and routes require 
-- * 11cecf2 - 2016-01-18: Add jscripty section 
-- * d9d3084 - 2016-01-18: Reload page after the language is changed only for csqaure and jscripty. 
-- * e78ed04 - 2016-01-18: Add jscripty label in languages 
-- * aee7365 - 2016-01-15: Report extraction modal 
-- * d53412c - 2016-01-15: package.json 
-- * 61fe1e8 - 2016-01-15: new version 
-- * c8fa5ef - 2016-01-15: Session Secret 
-- * d9f5e3b - 2016-01-15: session secret installer 
-- * 6546aa4 - 2016-01-15: server side config smtp. Node mailer sendmail already implements by mean promise. 
-- * 278cd3a - 2016-01-15: server config license 
-- * 2ad392b - 2016-01-15: server side api 
-- * e2f08ed - 2016-01-15: client side app 
-- * fe7830b - 2016-01-15: active sidebar with dashboard state 
-- * c7023c8 - 2016-01-15: darkblue.css 
-- * c0648bf - 2016-01-15: client side app setting template factory 
-- * 60f9717 - 2016-01-14: Modify links from http to https 
-- * 21d1dd8 - 2016-01-14: Obfuscation Server Side 
-- * f2c009b - 2016-01-14: package.json 
-- * 24350ff - 2016-01-14: socketio.js 
-- * 9d9d046 - 2016-01-14: server side app.js + routes.js 
-- * 991b0bd - 2016-01-14: server side models 
-- * 46eafec - 2016-01-14: server side config license 
-- * 0ed1f10 - 2016-01-14: server side config environment 
-- * f90b580 - 2016-01-14: server side auth 
-- * 5a77e0e - 2016-01-14: client side components sidebar 
-- * 58d21ae - 2016-01-14: server side api 
-- * 5253808 - 2016-01-14: client side assets 
-- * cafd169 - 2016-01-14: client side app 
-- * 1903f04 - 2016-01-14: Fixed report preview limit. 
-- * bef9612 - 2016-01-14: Added report copy; Added report json import/export. 
-- * 1c98d29 - 2016-01-13: Added server side report building; Added report preview(custom, client side, edit view). 
-- * 3defec8 - 2016-01-12: Added client side report query builder. 
-- * b7b6646 - 2016-01-12: restored seed.js 
-- * e04072d - 2016-01-12: server side config seed.js 
-
diff --git a/release-notes/changelog_0.0.29.txt b/release-notes/changelog_0.0.29.txt
new file mode 100644
index 0000000..59c3837
--- /dev/null
+++ b/release-notes/changelog_0.0.29.txt
@@ -0,0 +1,57 @@
+# xCALLY MOTION Changelog
+
+- * bcd50b9 - 2016-01-19: no message 
+- * b29c95f - 2016-01-19: server side api 
+- * 8591a85 - 2016-01-19: client app 
+- * 1d431f6 - 2016-01-19: client side assets 
+- * d09c82b - 2016-01-19: update dependancies 
+- * d9bd3a8 - 2016-01-19: client side app.js license management 
+- * 597c722 - 2016-01-18: Updated Report Section 
+- * 5639970 - 2016-01-18: new version 
+- * 1831403 - 2016-01-18: I modified csquare mxgraph library paths 
+- * 1193f35 - 2016-01-18: i created new directories for csquare and jscripty mxgraph library scripts 
+- * afd017d - 2016-01-18: new version 
+- * 366410c - 2016-01-18: Add Seed for production 
+- * 7e4f41e - 2016-01-18: new version 
+- * a8d3a8d - 2016-01-18: new version 
+- * 87fa6b7 - 2016-01-18: server api 
+- * 962a059 - 2016-01-18: new version 
+- * c55811e - 2016-01-18: package.json 
+- * e82a344 - 2016-01-18: server side api 
+- * 570bf89 - 2016-01-18: client side license 
+- * cc90ac0 - 2016-01-18: new version 
+- * 9ea0d16 - 2016-01-18: client side app chat Template resource 
+- * f6401b7 - 2016-01-18: foxed socket and routes require 
+- * 11cecf2 - 2016-01-18: Add jscripty section 
+- * d9d3084 - 2016-01-18: Reload page after the language is changed only for csqaure and jscripty. 
+- * e78ed04 - 2016-01-18: Add jscripty label in languages 
+- * aee7365 - 2016-01-15: Report extraction modal 
+- * d53412c - 2016-01-15: package.json 
+- * 61fe1e8 - 2016-01-15: new version 
+- * c8fa5ef - 2016-01-15: Session Secret 
+- * d9f5e3b - 2016-01-15: session secret installer 
+- * 6546aa4 - 2016-01-15: server side config smtp. Node mailer sendmail already implements by mean promise. 
+- * 278cd3a - 2016-01-15: server config license 
+- * 2ad392b - 2016-01-15: server side api 
+- * e2f08ed - 2016-01-15: client side app 
+- * fe7830b - 2016-01-15: active sidebar with dashboard state 
+- * c7023c8 - 2016-01-15: darkblue.css 
+- * c0648bf - 2016-01-15: client side app setting template factory 
+- * 60f9717 - 2016-01-14: Modify links from http to https 
+- * 21d1dd8 - 2016-01-14: Obfuscation Server Side 
+- * f2c009b - 2016-01-14: package.json 
+- * 24350ff - 2016-01-14: socketio.js 
+- * 9d9d046 - 2016-01-14: server side app.js + routes.js 
+- * 991b0bd - 2016-01-14: server side models 
+- * 46eafec - 2016-01-14: server side config license 
+- * 0ed1f10 - 2016-01-14: server side config environment 
+- * f90b580 - 2016-01-14: server side auth 
+- * 5a77e0e - 2016-01-14: client side components sidebar 
+- * 58d21ae - 2016-01-14: server side api 
+- * 5253808 - 2016-01-14: client side assets 
+- * cafd169 - 2016-01-14: client side app 
+- * 1903f04 - 2016-01-14: Fixed report preview limit. 
+- * bef9612 - 2016-01-14: Added report copy; Added report json import/export. 
+- * 1c98d29 - 2016-01-13: Added server side report building; Added report preview(custom, client side, edit view). 
+- * 3defec8 - 2016-01-12: Added client side report query builder. 
+
diff --git a/server/api/agent/agent.controller.js b/server/api/agent/agent.controller.js
index 83c4563..975c465 100644
--- a/server/api/agent/agent.controller.js
+++ b/server/api/agent/agent.controller.js
@@ -1 +1 @@
\ No newline at end of file
\ No newline at end of file
diff --git a/server/api/agent/agent.socket.js b/server/api/agent/agent.socket.js
index 925ee6d..324a377 100644
--- a/server/api/agent/agent.socket.js
+++ b/server/api/agent/agent.socket.js
@@ -1 +1 @@
\ No newline at end of file
\ No newline at end of file
diff --git a/server/api/agent/agent.spec.js b/server/api/agent/agent.spec.js
index 975f5c5..a665cd0 100644
--- a/server/api/agent/agent.spec.js
+++ b/server/api/agent/agent.spec.js
@@ -1 +1 @@
\ No newline at end of file
\ No newline at end of file
diff --git a/server/api/agent/index.js b/server/api/agent/index.js
index 8971ebc..b1cbf71 100644
--- a/server/api/agent/index.js
+++ b/server/api/agent/index.js
@@ -1 +1 @@
\ No newline at end of file
\ No newline at end of file
diff --git a/server/api/ami/ami.ami.js b/server/api/ami/ami.ami.js
index b10cc7c..7e73cd3 100644
--- a/server/api/ami/ami.ami.js
+++ b/server/api/ami/ami.ami.js
@@ -1 +1 @@
\ No newline at end of file
\ No newline at end of file
diff --git a/server/api/ami/ami.controller.js b/server/api/ami/ami.controller.js
index 447c862..8994b95 100644
--- a/server/api/ami/ami.controller.js
+++ b/server/api/ami/ami.controller.js
@@ -1 +1 @@
\ No newline at end of file
\ No newline at end of file
diff --git a/server/api/ami/ami.socket.js b/server/api/ami/ami.socket.js
index 941ce0c..a8e86d7 100644
--- a/server/api/ami/ami.socket.js
+++ b/server/api/ami/ami.socket.js
@@ -1 +1 @@
\ No newline at end of file
\ No newline at end of file
diff --git a/server/api/ami/ami.spec.js b/server/api/ami/ami.spec.js
index 7ea4466..4334eac 100644
--- a/server/api/ami/ami.spec.js
+++ b/server/api/ami/ami.spec.js
@@ -1 +1 @@
\ No newline at end of file
\ No newline at end of file
diff --git a/server/api/ami/index.js b/server/api/ami/index.js
index c5672b5..7267118 100644
--- a/server/api/ami/index.js
+++ b/server/api/ami/index.js
@@ -1 +1 @@
\ No newline at end of file
\ No newline at end of file
diff --git a/server/api/automation/automation.controller.js b/server/api/automation/automation.controller.js
index 658cf63..176af73 100644
--- a/server/api/automation/automation.controller.js
+++ b/server/api/automation/automation.controller.js
@@ -1 +1 @@
\ No newline at end of file
\ No newline at end of file
diff --git a/server/api/automation/automation.socket.js b/server/api/automation/automation.socket.js
index d1dab8a..3ac477e 100644
--- a/server/api/automation/automation.socket.js
+++ b/server/api/automation/automation.socket.js
@@ -1 +1 @@
\ No newline at end of file
\ No newline at end of file
diff --git a/server/api/automation/automation.spec.js b/server/api/automation/automation.spec.js
index 3b0bd10..abf5793 100644
--- a/server/api/automation/automation.spec.js
+++ b/server/api/automation/automation.spec.js
@@ -1 +1 @@
\ No newline at end of file
\ No newline at end of file
diff --git a/server/api/automation/index.js b/server/api/automation/index.js
index 61c79f8..551abe4 100644
--- a/server/api/automation/index.js
+++ b/server/api/automation/index.js
@@ -1 +1 @@
\ No newline at end of file
\ No newline at end of file
diff --git a/server/api/business_action/business_action.controller.js b/server/api/business_action/business_action.controller.js
index 543a7a9..94b4821 100644
--- a/server/api/business_action/business_action.controller.js
+++ b/server/api/business_action/business_action.controller.js
@@ -1 +1 @@
\ No newline at end of file
\ No newline at end of file
diff --git a/server/api/business_action/business_action.socket.js b/server/api/business_action/business_action.socket.js
index aa1eecc..673d9fe 100644
--- a/server/api/business_action/business_action.socket.js
+++ b/server/api/business_action/business_action.socket.js
@@ -1 +1 @@
\ No newline at end of file
\ No newline at end of file
diff --git a/server/api/business_action/business_action.spec.js b/server/api/business_action/business_action.spec.js
index 9f42a3c..89b4522 100644
--- a/server/api/business_action/business_action.spec.js
+++ b/server/api/business_action/business_action.spec.js
@@ -1 +1 @@
\ No newline at end of file
\ No newline at end of file
diff --git a/server/api/business_action/index.js b/server/api/business_action/index.js
index 2e88d7a..7271dc0 100644
--- a/server/api/business_action/index.js
+++ b/server/api/business_action/index.js
@@ -1 +1 @@
\ No newline at end of file
\ No newline at end of file
diff --git a/server/api/business_condition/business_condition.controller.js b/server/api/business_condition/business_condition.controller.js
index 73373cb..34342dd 100644
--- a/server/api/business_condition/business_condition.controller.js
+++ b/server/api/business_condition/business_condition.controller.js
@@ -1 +1 @@
\ No newline at end of file
\ No newline at end of file
diff --git a/server/api/business_condition/business_condition.socket.js b/server/api/business_condition/business_condition.socket.js
index fa004bd..e36be9d 100644
--- a/server/api/business_condition/business_condition.socket.js
+++ b/server/api/business_condition/business_condition.socket.js
@@ -1 +1 @@
\ No newline at end of file
\ No newline at end of file
diff --git a/server/api/business_condition/business_condition.spec.js b/server/api/business_condition/business_condition.spec.js
index d2e7602..5e12a41 100644
--- a/server/api/business_condition/business_condition.spec.js
+++ b/server/api/business_condition/business_condition.spec.js
@@ -1 +1 @@
\ No newline at end of file
\ No newline at end of file
diff --git a/server/api/business_condition/index.js b/server/api/business_condition/index.js
index b4d0436..ca78f5e 100644
--- a/server/api/business_condition/index.js
+++ b/server/api/business_condition/index.js
@@ -1 +1 @@
\ No newline at end of file
\ No newline at end of file
diff --git a/server/api/chat_application/chat_application.controller.js b/server/api/chat_application/chat_application.controller.js
index 8fe5293..d3aef55 100644
--- a/server/api/chat_application/chat_application.controller.js
+++ b/server/api/chat_application/chat_application.controller.js
@@ -1 +1 @@
\ No newline at end of file
\ No newline at end of file
diff --git a/server/api/chat_application/chat_application.socket.js b/server/api/chat_application/chat_application.socket.js
index 16914c1..822e4ce 100644
--- a/server/api/chat_application/chat_application.socket.js
+++ b/server/api/chat_application/chat_application.socket.js
@@ -1 +1 @@
\ No newline at end of file
\ No newline at end of file
diff --git a/server/api/chat_application/chat_application.spec.js b/server/api/chat_application/chat_application.spec.js
index bed4ec6..0160dfa 100644
--- a/server/api/chat_application/chat_application.spec.js
+++ b/server/api/chat_application/chat_application.spec.js
@@ -1 +1 @@
\ No newline at end of file
\ No newline at end of file
diff --git a/server/api/chat_application/index.js b/server/api/chat_application/index.js
index 6b13908..1795dad 100644
--- a/server/api/chat_application/index.js
+++ b/server/api/chat_application/index.js
@@ -1 +1 @@
\ No newline at end of file
\ No newline at end of file
diff --git a/server/api/chat_enquiry/enquiry.controller.js b/server/api/chat_enquiry/enquiry.controller.js
index a9bde8b..7187c92 100644
--- a/server/api/chat_enquiry/enquiry.controller.js
+++ b/server/api/chat_enquiry/enquiry.controller.js
@@ -1 +1 @@
\ No newline at end of file
\ No newline at end of file
diff --git a/server/api/chat_enquiry/enquiry.socket.js b/server/api/chat_enquiry/enquiry.socket.js
index 553e63c..0384db2 100644
--- a/server/api/chat_enquiry/enquiry.socket.js
+++ b/server/api/chat_enquiry/enquiry.socket.js
@@ -1 +1 @@
\ No newline at end of file
\ No newline at end of file
diff --git a/server/api/chat_enquiry/index.js b/server/api/chat_enquiry/index.js
index baf61dc..2b56e6e 100644
--- a/server/api/chat_enquiry/index.js
+++ b/server/api/chat_enquiry/index.js
@@ -1 +1 @@
\ No newline at end of file
\ No newline at end of file
diff --git a/server/api/chat_message/chat_message.controller.js b/server/api/chat_message/chat_message.controller.js
index ca97e1f..bfe47e7 100644
--- a/server/api/chat_message/chat_message.controller.js
+++ b/server/api/chat_message/chat_message.controller.js
@@ -1 +1 @@
\ No newline at end of file
\ No newline at end of file
diff --git a/server/api/chat_message/chat_message.socket.js b/server/api/chat_message/chat_message.socket.js
index 40c0df5..1d5a03d 100644
--- a/server/api/chat_message/chat_message.socket.js
+++ b/server/api/chat_message/chat_message.socket.js
@@ -1 +1 @@
\ No newline at end of file
\ No newline at end of file
diff --git a/server/api/chat_message/chat_message.spec.js b/server/api/chat_message/chat_message.spec.js
index cb5a885..3dd2638 100644
--- a/server/api/chat_message/chat_message.spec.js
+++ b/server/api/chat_message/chat_message.spec.js
@@ -1 +1 @@
\ No newline at end of file
\ No newline at end of file
diff --git a/server/api/chat_message/index.js b/server/api/chat_message/index.js
index 62dcd8a..5dc50e7 100644
--- a/server/api/chat_message/index.js
+++ b/server/api/chat_message/index.js
@@ -1 +1 @@
\ No newline at end of file
\ No newline at end of file
diff --git a/server/api/chat_queue/chat_queue.controller.js b/server/api/chat_queue/chat_queue.controller.js
index a009fab..de23521 100644
--- a/server/api/chat_queue/chat_queue.controller.js
+++ b/server/api/chat_queue/chat_queue.controller.js
@@ -1 +1 @@
\ No newline at end of file
\ No newline at end of file
diff --git a/server/api/chat_queue/chat_queue.socket.js b/server/api/chat_queue/chat_queue.socket.js
index 46e0cc8..a1cb818 100644
--- a/server/api/chat_queue/chat_queue.socket.js
+++ b/server/api/chat_queue/chat_queue.socket.js
@@ -1 +1 @@
\ No newline at end of file
\ No newline at end of file
diff --git a/server/api/chat_queue/chat_queue.spec.js b/server/api/chat_queue/chat_queue.spec.js
index a730339..68900fa 100644
--- a/server/api/chat_queue/chat_queue.spec.js
+++ b/server/api/chat_queue/chat_queue.spec.js
@@ -1 +1 @@
\ No newline at end of file
\ No newline at end of file
diff --git a/server/api/chat_queue/index.js b/server/api/chat_queue/index.js
index 344c18d..96118fe 100644
--- a/server/api/chat_queue/index.js
+++ b/server/api/chat_queue/index.js
@@ -1 +1 @@
\ No newline at end of file
\ No newline at end of file
diff --git a/server/api/chat_room/chat_room.controller.js b/server/api/chat_room/chat_room.controller.js
index ce7bb17..4df19b5 100644
--- a/server/api/chat_room/chat_room.controller.js
+++ b/server/api/chat_room/chat_room.controller.js
@@ -1 +1 @@
\ No newline at end of file
\ No newline at end of file
diff --git a/server/api/chat_room/chat_room.socket.js b/server/api/chat_room/chat_room.socket.js
index 976b0b1..717c58e 100644
--- a/server/api/chat_room/chat_room.socket.js
+++ b/server/api/chat_room/chat_room.socket.js
@@ -1 +1 @@
\ No newline at end of file
\ No newline at end of file
diff --git a/server/api/chat_room/chat_room.spec.js b/server/api/chat_room/chat_room.spec.js
index c9b99b3..d098b09 100644
--- a/server/api/chat_room/chat_room.spec.js
+++ b/server/api/chat_room/chat_room.spec.js
@@ -1 +1 @@
\ No newline at end of file
\ No newline at end of file
diff --git a/server/api/chat_room/index.js b/server/api/chat_room/index.js
index 020b763..da7f45e 100644
--- a/server/api/chat_room/index.js
+++ b/server/api/chat_room/index.js
@@ -1 +1 @@
\ No newline at end of file
\ No newline at end of file
diff --git a/server/api/chat_visitor/chat_visitor.controller.js b/server/api/chat_visitor/chat_visitor.controller.js
index 949c4c5..f2bc296 100644
--- a/server/api/chat_visitor/chat_visitor.controller.js
+++ b/server/api/chat_visitor/chat_visitor.controller.js
@@ -1 +1 @@
\ No newline at end of file
\ No newline at end of file
diff --git a/server/api/chat_visitor/chat_visitor.socket.js b/server/api/chat_visitor/chat_visitor.socket.js
index 31e2619..b998376 100644
--- a/server/api/chat_visitor/chat_visitor.socket.js
+++ b/server/api/chat_visitor/chat_visitor.socket.js
@@ -1 +1 @@
\ No newline at end of file
\ No newline at end of file
diff --git a/server/api/chat_visitor/chat_visitor.spec.js b/server/api/chat_visitor/chat_visitor.spec.js
index 51751a0..8c237c9 100644
--- a/server/api/chat_visitor/chat_visitor.spec.js
+++ b/server/api/chat_visitor/chat_visitor.spec.js
@@ -1 +1 @@
\ No newline at end of file
\ No newline at end of file
diff --git a/server/api/chat_visitor/index.js b/server/api/chat_visitor/index.js
index 7077325..bf17812 100644
--- a/server/api/chat_visitor/index.js
+++ b/server/api/chat_visitor/index.js
@@ -1 +1 @@
\ No newline at end of file
\ No newline at end of file
diff --git a/server/api/chat_website/chat_website.controller.js b/server/api/chat_website/chat_website.controller.js
index 17600e4..ee9b330 100644
--- a/server/api/chat_website/chat_website.controller.js
+++ b/server/api/chat_website/chat_website.controller.js
@@ -1 +1 @@
\ No newline at end of file
\ No newline at end of file
diff --git a/server/api/chat_website/chat_website.socket.js b/server/api/chat_website/chat_website.socket.js
index 7710d42..d819790 100644
--- a/server/api/chat_website/chat_website.socket.js
+++ b/server/api/chat_website/chat_website.socket.js
@@ -1 +1 @@
\ No newline at end of file
\ No newline at end of file
diff --git a/server/api/chat_website/chat_website.spec.js b/server/api/chat_website/chat_website.spec.js
index 273700b..d96023d 100644
--- a/server/api/chat_website/chat_website.spec.js
+++ b/server/api/chat_website/chat_website.spec.js
@@ -1 +1 @@
\ No newline at end of file
\ No newline at end of file
diff --git a/server/api/chat_website/index.js b/server/api/chat_website/index.js
index 6f85793..bf4de41 100644
--- a/server/api/chat_website/index.js
+++ b/server/api/chat_website/index.js
@@ -1 +1 @@
\ No newline at end of file
\ No newline at end of file
diff --git a/server/api/company/company.controller.js b/server/api/company/company.controller.js
index 724b75c..c0f2d3e 100644
--- a/server/api/company/company.controller.js
+++ b/server/api/company/company.controller.js
@@ -1 +1 @@
\ No newline at end of file
\ No newline at end of file
diff --git a/server/api/company/company.socket.js b/server/api/company/company.socket.js
index ddb1ee6..938fb73 100644
--- a/server/api/company/company.socket.js
+++ b/server/api/company/company.socket.js
@@ -1 +1 @@
\ No newline at end of file
\ No newline at end of file
diff --git a/server/api/company/company.spec.js b/server/api/company/company.spec.js
index f35abe5..597588f 100644
--- a/server/api/company/company.spec.js
+++ b/server/api/company/company.spec.js
@@ -1 +1 @@
\ No newline at end of file
\ No newline at end of file
diff --git a/server/api/company/index.js b/server/api/company/index.js
index 821af63..afb7740 100644
--- a/server/api/company/index.js
+++ b/server/api/company/index.js
@@ -1 +1 @@
\ No newline at end of file
\ No newline at end of file
diff --git a/server/api/contact/contact.controller.js b/server/api/contact/contact.controller.js
index f9ad2bb..80e7100 100644
--- a/server/api/contact/contact.controller.js
+++ b/server/api/contact/contact.controller.js
@@ -1 +1 @@
\ No newline at end of file
\ No newline at end of file
diff --git a/server/api/contact/contact.model.js b/server/api/contact/contact.model.js
index 02ff499..7a2e603 100644
--- a/server/api/contact/contact.model.js
+++ b/server/api/contact/contact.model.js
@@ -1 +1 @@
-var _0x33ea=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x65\x78\x70\x6F\x72\x74","\x43\x6F\x6E\x74\x61\x63\x74","\x64\x65\x66\x69\x6E\x65"];_0x33ea[0];module[_0x33ea[1]]=function(_0x6177x1,_0x6177x2){var _0x6177x3=_0x6177x1[_0x33ea[3]](_0x33ea[2],{name:String,info:String,active:Boolean});return _0x6177x3;};
\ No newline at end of file
+var _0x3d5c=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x65\x78\x70\x6F\x72\x74","\x43\x6F\x6E\x74\x61\x63\x74","\x64\x65\x66\x69\x6E\x65"];_0x3d5c[0];module[_0x3d5c[1]]=function(_0x3517x1,_0x3517x2){var _0x3517x3=_0x3517x1[_0x3d5c[3]](_0x3d5c[2],{name:String,info:String,active:Boolean});return _0x3517x3;};
\ No newline at end of file
diff --git a/server/api/contact/contact.socket.js b/server/api/contact/contact.socket.js
index 9242ab4..5f9569a 100644
--- a/server/api/contact/contact.socket.js
+++ b/server/api/contact/contact.socket.js
@@ -1 +1 @@
\ No newline at end of file
\ No newline at end of file
diff --git a/server/api/contact/contact.spec.js b/server/api/contact/contact.spec.js
index 975fec2..f38daa8 100644
--- a/server/api/contact/contact.spec.js
+++ b/server/api/contact/contact.spec.js
@@ -1 +1 @@
\ No newline at end of file
\ No newline at end of file
diff --git a/server/api/contact/index.js b/server/api/contact/index.js
index 7c2a73c..a5876c5 100644
--- a/server/api/contact/index.js
+++ b/server/api/contact/index.js
@@ -1 +1 @@
\ No newline at end of file
\ No newline at end of file
diff --git a/server/api/contact_manager/contact_manager.controller.js b/server/api/contact_manager/contact_manager.controller.js
index 725a0be..3bf1393 100644
--- a/server/api/contact_manager/contact_manager.controller.js
+++ b/server/api/contact_manager/contact_manager.controller.js
@@ -1 +1 @@
\ No newline at end of file
\ No newline at end of file
diff --git a/server/api/contact_manager/contact_manager.socket.js b/server/api/contact_manager/contact_manager.socket.js
index 2f25a0b..302dd02 100644
--- a/server/api/contact_manager/contact_manager.socket.js
+++ b/server/api/contact_manager/contact_manager.socket.js
@@ -1 +1 @@
\ No newline at end of file
\ No newline at end of file
diff --git a/server/api/contact_manager/contact_manager.spec.js b/server/api/contact_manager/contact_manager.spec.js
index a86f1f5..a732b4f 100644
--- a/server/api/contact_manager/contact_manager.spec.js
+++ b/server/api/contact_manager/contact_manager.spec.js
@@ -1 +1 @@
\ No newline at end of file
\ No newline at end of file
diff --git a/server/api/contact_manager/index.js b/server/api/contact_manager/index.js
index a3a937e..2ac753e 100644
--- a/server/api/contact_manager/index.js
+++ b/server/api/contact_manager/index.js
@@ -1 +1 @@
\ No newline at end of file
\ No newline at end of file
diff --git a/server/api/custom_field/custom_field.controller.js b/server/api/custom_field/custom_field.controller.js
index f39e494..35c1f5e 100644
--- a/server/api/custom_field/custom_field.controller.js
+++ b/server/api/custom_field/custom_field.controller.js
@@ -1 +1 @@
\ No newline at end of file
\ No newline at end of file
diff --git a/server/api/custom_field/custom_field.socket.js b/server/api/custom_field/custom_field.socket.js
index a3a053b..41ed4e7 100644
--- a/server/api/custom_field/custom_field.socket.js
+++ b/server/api/custom_field/custom_field.socket.js
@@ -1 +1 @@
\ No newline at end of file
\ No newline at end of file
diff --git a/server/api/custom_field/custom_field.spec.js b/server/api/custom_field/custom_field.spec.js
index 2f8ca08..93083d5 100644
--- a/server/api/custom_field/custom_field.spec.js
+++ b/server/api/custom_field/custom_field.spec.js
@@ -1 +1 @@
\ No newline at end of file
\ No newline at end of file
diff --git a/server/api/custom_field/index.js b/server/api/custom_field/index.js
index 05cb6b8..4798c15 100644
--- a/server/api/custom_field/index.js
+++ b/server/api/custom_field/index.js
@@ -1 +1 @@
\ No newline at end of file
\ No newline at end of file
diff --git a/server/api/custom_report/custom_report.controller.js b/server/api/custom_report/custom_report.controller.js
index 514d256..489fcfc 100644
--- a/server/api/custom_report/custom_report.controller.js
+++ b/server/api/custom_report/custom_report.controller.js
@@ -1 +1 @@
\ No newline at end of file
\ No newline at end of file
diff --git a/server/api/custom_report/custom_report.socket.js b/server/api/custom_report/custom_report.socket.js
index a0bb733..390cde2 100644
--- a/server/api/custom_report/custom_report.socket.js
+++ b/server/api/custom_report/custom_report.socket.js
@@ -1 +1 @@
\ No newline at end of file
\ No newline at end of file
diff --git a/server/api/custom_report/custom_report.spec.js b/server/api/custom_report/custom_report.spec.js
index e59cd48..2c057e8 100644
--- a/server/api/custom_report/custom_report.spec.js
+++ b/server/api/custom_report/custom_report.spec.js
@@ -1 +1 @@
\ No newline at end of file
\ No newline at end of file
diff --git a/server/api/custom_report/index.js b/server/api/custom_report/index.js
index 6dca3cc..6703fde 100644
--- a/server/api/custom_report/index.js
+++ b/server/api/custom_report/index.js
@@ -1 +1 @@
\ No newline at end of file
\ No newline at end of file
diff --git a/server/api/dashboard/dashboard.controller.js b/server/api/dashboard/dashboard.controller.js
index 375941f..b7f37b8 100644
--- a/server/api/dashboard/dashboard.controller.js
+++ b/server/api/dashboard/dashboard.controller.js
@@ -1 +1 @@
\ No newline at end of file
\ No newline at end of file
diff --git a/server/api/dashboard/dashboard.socket.js b/server/api/dashboard/dashboard.socket.js
index d672ca9..5035f3d 100644
--- a/server/api/dashboard/dashboard.socket.js
+++ b/server/api/dashboard/dashboard.socket.js
@@ -1 +1 @@
\ No newline at end of file
\ No newline at end of file
diff --git a/server/api/dashboard/dashboard.spec.js b/server/api/dashboard/dashboard.spec.js
index 560e2b8..e91df51 100644
--- a/server/api/dashboard/dashboard.spec.js
+++ b/server/api/dashboard/dashboard.spec.js
@@ -1 +1 @@
\ No newline at end of file
\ No newline at end of file
diff --git a/server/api/dashboard/index.js b/server/api/dashboard/index.js
index d33bc4f..7a9206d 100644
--- a/server/api/dashboard/index.js
+++ b/server/api/dashboard/index.js
@@ -1 +1 @@
\ No newline at end of file
\ No newline at end of file
diff --git a/server/api/default_report/default_report.controller.js b/server/api/default_report/default_report.controller.js
index a93f866..638c0fa 100644
--- a/server/api/default_report/default_report.controller.js
+++ b/server/api/default_report/default_report.controller.js
@@ -1 +1 @@
\ No newline at end of file
\ No newline at end of file
diff --git a/server/api/default_report/default_report.socket.js b/server/api/default_report/default_report.socket.js
index add37c8..6a43675 100644
--- a/server/api/default_report/default_report.socket.js
+++ b/server/api/default_report/default_report.socket.js
@@ -1 +1 @@
\ No newline at end of file
\ No newline at end of file
diff --git a/server/api/default_report/default_report.spec.js b/server/api/default_report/default_report.spec.js
index 1224b0e..ecff8a3 100644
--- a/server/api/default_report/default_report.spec.js
+++ b/server/api/default_report/default_report.spec.js
@@ -1 +1 @@
\ No newline at end of file
\ No newline at end of file
diff --git a/server/api/default_report/index.js b/server/api/default_report/index.js
index cf057c1..1cd6912 100644
--- a/server/api/default_report/index.js
+++ b/server/api/default_report/index.js
@@ -1 +1 @@
\ No newline at end of file
\ No newline at end of file
diff --git a/server/api/desk_account/desk_account.controller.js b/server/api/desk_account/desk_account.controller.js
index c3c05a7..a9e39f0 100644
--- a/server/api/desk_account/desk_account.controller.js
+++ b/server/api/desk_account/desk_account.controller.js
@@ -1 +1 @@
\ No newline at end of file
\ No newline at end of file
diff --git a/server/api/desk_account/desk_account.socket.js b/server/api/desk_account/desk_account.socket.js
index b03942c..af74fcb 100644
--- a/server/api/desk_account/desk_account.socket.js
+++ b/server/api/desk_account/desk_account.socket.js
@@ -1 +1 @@
\ No newline at end of file
\ No newline at end of file
diff --git a/server/api/desk_account/desk_account.spec.js b/server/api/desk_account/desk_account.spec.js
index 13725ce..0482b5c 100644
--- a/server/api/desk_account/desk_account.spec.js
+++ b/server/api/desk_account/desk_account.spec.js
@@ -1 +1 @@
\ No newline at end of file
\ No newline at end of file
diff --git a/server/api/desk_account/index.js b/server/api/desk_account/index.js
index 8d1bcee..af8f2d7 100644
--- a/server/api/desk_account/index.js
+++ b/server/api/desk_account/index.js
@@ -1 +1 @@
\ No newline at end of file
\ No newline at end of file
diff --git a/server/api/desk_configuration/desk_configuration.controller.js b/server/api/desk_configuration/desk_configuration.controller.js
index d464e57..a300bd8 100644
--- a/server/api/desk_configuration/desk_configuration.controller.js
+++ b/server/api/desk_configuration/desk_configuration.controller.js
@@ -1 +1 @@
\ No newline at end of file
\ No newline at end of file
diff --git a/server/api/desk_configuration/desk_configuration.socket.js b/server/api/desk_configuration/desk_configuration.socket.js
index ffd9694..abcd37f 100644
--- a/server/api/desk_configuration/desk_configuration.socket.js
+++ b/server/api/desk_configuration/desk_configuration.socket.js
@@ -1 +1 @@
\ No newline at end of file
\ No newline at end of file
diff --git a/server/api/desk_configuration/index.js b/server/api/desk_configuration/index.js
index 4f0babb..55ab44b 100644
--- a/server/api/desk_configuration/index.js
+++ b/server/api/desk_configuration/index.js
@@ -1 +1 @@
\ No newline at end of file
\ No newline at end of file
diff --git a/server/api/desk_configuration/index.spec.js b/server/api/desk_configuration/index.spec.js
index 81845aa..8c16cae 100644
--- a/server/api/desk_configuration/index.spec.js
+++ b/server/api/desk_configuration/index.spec.js
@@ -1 +1 @@
\ No newline at end of file
\ No newline at end of file
diff --git a/server/api/desk_field/desk_field.controller.js b/server/api/desk_field/desk_field.controller.js
index 7ba8ad3..c11284c 100644
--- a/server/api/desk_field/desk_field.controller.js
+++ b/server/api/desk_field/desk_field.controller.js
@@ -1 +1 @@
\ No newline at end of file
\ No newline at end of file
diff --git a/server/api/desk_field/desk_field.socket.js b/server/api/desk_field/desk_field.socket.js
index 92446a4..3c554f0 100644
--- a/server/api/desk_field/desk_field.socket.js
+++ b/server/api/desk_field/desk_field.socket.js
@@ -1 +1 @@
\ No newline at end of file
\ No newline at end of file
diff --git a/server/api/desk_field/index.js b/server/api/desk_field/index.js
index b97f4b2..7cd7fdc 100644
--- a/server/api/desk_field/index.js
+++ b/server/api/desk_field/index.js
@@ -1 +1 @@
\ No newline at end of file
\ No newline at end of file
diff --git a/server/api/desk_field/index.spec.js b/server/api/desk_field/index.spec.js
index 7c8c807..f1f7682 100644
--- a/server/api/desk_field/index.spec.js
+++ b/server/api/desk_field/index.spec.js
@@ -1 +1 @@
\ No newline at end of file
\ No newline at end of file
diff --git a/server/api/event/event.controller.js b/server/api/event/event.controller.js
index 96a57f9..cb7f5db 100644
--- a/server/api/event/event.controller.js
+++ b/server/api/event/event.controller.js
@@ -1 +1 @@
\ No newline at end of file
\ No newline at end of file
diff --git a/server/api/event/event.socket.js b/server/api/event/event.socket.js
index 7850b5d..cbd4b75 100644
--- a/server/api/event/event.socket.js
+++ b/server/api/event/event.socket.js
@@ -1 +1 @@
\ No newline at end of file
\ No newline at end of file
diff --git a/server/api/event/event.spec.js b/server/api/event/event.spec.js
index 4700b22..50d2cf5 100644
--- a/server/api/event/event.spec.js
+++ b/server/api/event/event.spec.js
@@ -1 +1 @@
\ No newline at end of file
\ No newline at end of file
diff --git a/server/api/event/index.js b/server/api/event/index.js
index e4cf13e..5bb2cab 100644
--- a/server/api/event/index.js
+++ b/server/api/event/index.js
@@ -1 +1 @@
\ No newline at end of file
\ No newline at end of file
diff --git a/server/api/fax_account/fax_account.controller.js b/server/api/fax_account/fax_account.controller.js
index 872d65c..73d6e77 100644
--- a/server/api/fax_account/fax_account.controller.js
+++ b/server/api/fax_account/fax_account.controller.js
@@ -1 +1 @@
\ No newline at end of file
\ No newline at end of file
diff --git a/server/api/fax_account/fax_account.socket.js b/server/api/fax_account/fax_account.socket.js
index eb2b934..9eaffef 100644
--- a/server/api/fax_account/fax_account.socket.js
+++ b/server/api/fax_account/fax_account.socket.js
@@ -1 +1 @@
\ No newline at end of file
\ No newline at end of file
diff --git a/server/api/fax_account/fax_account.spec.js b/server/api/fax_account/fax_account.spec.js
index b0f97a3..88f51b6 100644
--- a/server/api/fax_account/fax_account.spec.js
+++ b/server/api/fax_account/fax_account.spec.js
@@ -1 +1 @@
\ No newline at end of file
\ No newline at end of file
diff --git a/server/api/fax_account/index.js b/server/api/fax_account/index.js
index 263911d..c9d4095 100644
--- a/server/api/fax_account/index.js
+++ b/server/api/fax_account/index.js
@@ -1 +1 @@
\ No newline at end of file
\ No newline at end of file
diff --git a/server/api/fax_application/fax_application.controller.js b/server/api/fax_application/fax_application.controller.js
index f4da8d5..261583d 100644
--- a/server/api/fax_application/fax_application.controller.js
+++ b/server/api/fax_application/fax_application.controller.js
@@ -1 +1 @@
\ No newline at end of file
\ No newline at end of file
diff --git a/server/api/fax_application/fax_application.socket.js b/server/api/fax_application/fax_application.socket.js
index 6865a30..2a01890 100644
--- a/server/api/fax_application/fax_application.socket.js
+++ b/server/api/fax_application/fax_application.socket.js
@@ -1 +1 @@
\ No newline at end of file
\ No newline at end of file
diff --git a/server/api/fax_application/fax_application.spec.js b/server/api/fax_application/fax_application.spec.js
index be65cf5..dd7b38a 100644
--- a/server/api/fax_application/fax_application.spec.js
+++ b/server/api/fax_application/fax_application.spec.js
@@ -1 +1 @@
\ No newline at end of file
\ No newline at end of file
diff --git a/server/api/fax_application/index.js b/server/api/fax_application/index.js
index 7088d1d..5e15c8e 100644
--- a/server/api/fax_application/index.js
+++ b/server/api/fax_application/index.js
@@ -1 +1 @@
\ No newline at end of file
\ No newline at end of file
diff --git a/server/api/fax_business_automation/fax_business_automation.controller.js b/server/api/fax_business_automation/fax_business_automation.controller.js
index 2bc199f..01ef0a3 100644
--- a/server/api/fax_business_automation/fax_business_automation.controller.js
+++ b/server/api/fax_business_automation/fax_business_automation.controller.js
@@ -1 +1 @@
\ No newline at end of file
\ No newline at end of file
diff --git a/server/api/fax_business_automation/fax_business_automation.socket.js b/server/api/fax_business_automation/fax_business_automation.socket.js
index 1ee2407..036450a 100644
--- a/server/api/fax_business_automation/fax_business_automation.socket.js
+++ b/server/api/fax_business_automation/fax_business_automation.socket.js
@@ -1 +1 @@
\ No newline at end of file
\ No newline at end of file
diff --git a/server/api/fax_business_automation/fax_business_automation.spec.js b/server/api/fax_business_automation/fax_business_automation.spec.js
index aaa268b..2dc23ad 100644
--- a/server/api/fax_business_automation/fax_business_automation.spec.js
+++ b/server/api/fax_business_automation/fax_business_automation.spec.js
@@ -1 +1 @@
\ No newline at end of file
\ No newline at end of file
diff --git a/server/api/fax_business_automation/index.js b/server/api/fax_business_automation/index.js
index d48792f..64a9f9e 100644
--- a/server/api/fax_business_automation/index.js
+++ b/server/api/fax_business_automation/index.js
@@ -1 +1 @@
\ No newline at end of file
\ No newline at end of file
diff --git a/server/api/fax_message/fax_message.ami.js b/server/api/fax_message/fax_message.ami.js
index 728f8b1..154a2dd 100644
--- a/server/api/fax_message/fax_message.ami.js
+++ b/server/api/fax_message/fax_message.ami.js
@@ -1 +1 @@
\ No newline at end of file
\ No newline at end of file
diff --git a/server/api/fax_message/fax_message.controller.js b/server/api/fax_message/fax_message.controller.js
index b9644ed..53b304e 100644
--- a/server/api/fax_message/fax_message.controller.js
+++ b/server/api/fax_message/fax_message.controller.js
@@ -1 +1 @@
\ No newline at end of file
\ No newline at end of file
diff --git a/server/api/fax_message/fax_message.socket.js b/server/api/fax_message/fax_message.socket.js
index d9c283c..5c48042 100644
--- a/server/api/fax_message/fax_message.socket.js
+++ b/server/api/fax_message/fax_message.socket.js
@@ -1 +1 @@
\ No newline at end of file
\ No newline at end of file
diff --git a/server/api/fax_message/fax_message.spec.js b/server/api/fax_message/fax_message.spec.js
index 38d5937..e599a30 100644
--- a/server/api/fax_message/fax_message.spec.js
+++ b/server/api/fax_message/fax_message.spec.js
@@ -1 +1 @@
\ No newline at end of file
\ No newline at end of file
diff --git a/server/api/fax_message/index.js b/server/api/fax_message/index.js
index 34acd27..b4b3c08 100644
--- a/server/api/fax_message/index.js
+++ b/server/api/fax_message/index.js
@@ -1 +1 @@
\ No newline at end of file
\ No newline at end of file
diff --git a/server/api/fax_queue/fax_queue.controller.js b/server/api/fax_queue/fax_queue.controller.js
index 2e5d087..62809ad 100644
--- a/server/api/fax_queue/fax_queue.controller.js
+++ b/server/api/fax_queue/fax_queue.controller.js
@@ -1 +1 @@
\ No newline at end of file
\ No newline at end of file
diff --git a/server/api/fax_queue/fax_queue.socket.js b/server/api/fax_queue/fax_queue.socket.js
index ebef697..fc9f507 100644
--- a/server/api/fax_queue/fax_queue.socket.js
+++ b/server/api/fax_queue/fax_queue.socket.js
@@ -1 +1 @@
\ No newline at end of file
\ No newline at end of file
diff --git a/server/api/fax_queue/fax_queue.spec.js b/server/api/fax_queue/fax_queue.spec.js
index 3b94d1d..bbf72cb 100644
--- a/server/api/fax_queue/fax_queue.spec.js
+++ b/server/api/fax_queue/fax_queue.spec.js
@@ -1 +1 @@
\ No newline at end of file
\ No newline at end of file
diff --git a/server/api/fax_queue/index.js b/server/api/fax_queue/index.js
index f91ceff..5cfc4e1 100644
--- a/server/api/fax_queue/index.js
+++ b/server/api/fax_queue/index.js
@@ -1 +1 @@
\ No newline at end of file
\ No newline at end of file
diff --git a/server/api/fax_room/fax_room.controller.js b/server/api/fax_room/fax_room.controller.js
index dab8f01..f3cb499 100644
--- a/server/api/fax_room/fax_room.controller.js
+++ b/server/api/fax_room/fax_room.controller.js
@@ -1 +1 @@
\ No newline at end of file
\ No newline at end of file
diff --git a/server/api/fax_room/fax_room.kue.js b/server/api/fax_room/fax_room.kue.js
index 4338cbb..caaa6dc 100644
--- a/server/api/fax_room/fax_room.kue.js
+++ b/server/api/fax_room/fax_room.kue.js
@@ -1 +1 @@
\ No newline at end of file
\ No newline at end of file
diff --git a/server/api/fax_room/fax_room.socket.js b/server/api/fax_room/fax_room.socket.js
index 27c9b4b..814eb82 100644
--- a/server/api/fax_room/fax_room.socket.js
+++ b/server/api/fax_room/fax_room.socket.js
@@ -1 +1 @@
\ No newline at end of file
\ No newline at end of file
diff --git a/server/api/fax_room/fax_room.spec.js b/server/api/fax_room/fax_room.spec.js
index 72bf07c..7d3afce 100644
--- a/server/api/fax_room/fax_room.spec.js
+++ b/server/api/fax_room/fax_room.spec.js
@@ -1 +1 @@
\ No newline at end of file
\ No newline at end of file
diff --git a/server/api/fax_room/index.js b/server/api/fax_room/index.js
index c522e59..6f2b2b3 100644
--- a/server/api/fax_room/index.js
+++ b/server/api/fax_room/index.js
@@ -1 +1 @@
\ No newline at end of file
\ No newline at end of file
diff --git a/server/api/freshdesk_account/freshdesk_account.controller.js b/server/api/freshdesk_account/freshdesk_account.controller.js
index 5408847..e4da00b 100644
--- a/server/api/freshdesk_account/freshdesk_account.controller.js
+++ b/server/api/freshdesk_account/freshdesk_account.controller.js
@@ -1 +1 @@
\ No newline at end of file
\ No newline at end of file
diff --git a/server/api/freshdesk_account/freshdesk_account.socket.js b/server/api/freshdesk_account/freshdesk_account.socket.js
index 5ccde11..9d0ee92 100644
--- a/server/api/freshdesk_account/freshdesk_account.socket.js
+++ b/server/api/freshdesk_account/freshdesk_account.socket.js
@@ -1 +1 @@
\ No newline at end of file
\ No newline at end of file
diff --git a/server/api/freshdesk_account/index.js b/server/api/freshdesk_account/index.js
index 81a97fc..fa6a3f7 100644
--- a/server/api/freshdesk_account/index.js
+++ b/server/api/freshdesk_account/index.js
@@ -1 +1 @@
\ No newline at end of file
\ No newline at end of file
diff --git a/server/api/freshdesk_account/index.spec.js b/server/api/freshdesk_account/index.spec.js
index d4d9c89..ec55bf3 100644
--- a/server/api/freshdesk_account/index.spec.js
+++ b/server/api/freshdesk_account/index.spec.js
@@ -1 +1 @@
\ No newline at end of file
\ No newline at end of file
diff --git a/server/api/freshdesk_configuration/freshdesk_configuration.controller.js b/server/api/freshdesk_configuration/freshdesk_configuration.controller.js
index dae41bb..27a67ee 100644
--- a/server/api/freshdesk_configuration/freshdesk_configuration.controller.js
+++ b/server/api/freshdesk_configuration/freshdesk_configuration.controller.js
@@ -1 +1 @@
\ No newline at end of file
\ No newline at end of file
diff --git a/server/api/freshdesk_configuration/freshdesk_configuration.socket.js b/server/api/freshdesk_configuration/freshdesk_configuration.socket.js
index 36642f6..e8c866a 100644
--- a/server/api/freshdesk_configuration/freshdesk_configuration.socket.js
+++ b/server/api/freshdesk_configuration/freshdesk_configuration.socket.js
@@ -1 +1 @@
\ No newline at end of file
\ No newline at end of file
diff --git a/server/api/freshdesk_configuration/index.js b/server/api/freshdesk_configuration/index.js
index 3f88592..b9899d4 100644
--- a/server/api/freshdesk_configuration/index.js
+++ b/server/api/freshdesk_configuration/index.js
@@ -1 +1 @@
\ No newline at end of file
\ No newline at end of file
diff --git a/server/api/freshdesk_configuration/index.spec.js b/server/api/freshdesk_configuration/index.spec.js
index 8184fa5..8c86b97 100644
--- a/server/api/freshdesk_configuration/index.spec.js
+++ b/server/api/freshdesk_configuration/index.spec.js
@@ -1 +1 @@
\ No newline at end of file
\ No newline at end of file
diff --git a/server/api/freshdesk_field/freshdesk_field.controller.js b/server/api/freshdesk_field/freshdesk_field.controller.js
index 3bba17a..3dcdeb6 100644
--- a/server/api/freshdesk_field/freshdesk_field.controller.js
+++ b/server/api/freshdesk_field/freshdesk_field.controller.js
@@ -1 +1 @@
\ No newline at end of file
\ No newline at end of file
diff --git a/server/api/freshdesk_field/freshdesk_field.socket.js b/server/api/freshdesk_field/freshdesk_field.socket.js
index 727e744..d773b6f 100644
--- a/server/api/freshdesk_field/freshdesk_field.socket.js
+++ b/server/api/freshdesk_field/freshdesk_field.socket.js
@@ -1 +1 @@
\ No newline at end of file
\ No newline at end of file
diff --git a/server/api/freshdesk_field/index.js b/server/api/freshdesk_field/index.js
index 54c9e05..9d16962 100644
--- a/server/api/freshdesk_field/index.js
+++ b/server/api/freshdesk_field/index.js
@@ -1 +1 @@
\ No newline at end of file
\ No newline at end of file
diff --git a/server/api/freshdesk_field/index.spec.js b/server/api/freshdesk_field/index.spec.js
index 619a9de..2321d5b 100644
--- a/server/api/freshdesk_field/index.spec.js
+++ b/server/api/freshdesk_field/index.spec.js
@@ -1 +1 @@
\ No newline at end of file
\ No newline at end of file
diff --git a/server/api/integration/index.js b/server/api/integration/index.js
index 1bc9125..6bf05f0 100644
--- a/server/api/integration/index.js
+++ b/server/api/integration/index.js
@@ -1 +1 @@
\ No newline at end of file
\ No newline at end of file
diff --git a/server/api/integration/integration.controller.js b/server/api/integration/integration.controller.js
index 9b4f3fb..987d060 100644
--- a/server/api/integration/integration.controller.js
+++ b/server/api/integration/integration.controller.js
@@ -1 +1 @@
\ No newline at end of file
\ No newline at end of file
diff --git a/server/api/integration/integration.socket.js b/server/api/integration/integration.socket.js
index 6808327..972cf7d 100644
--- a/server/api/integration/integration.socket.js
+++ b/server/api/integration/integration.socket.js
@@ -1 +1 @@
\ No newline at end of file
\ No newline at end of file
diff --git a/server/api/integration/integration.spec.js b/server/api/integration/integration.spec.js
index 2d048be..d2fbaf5 100644
--- a/server/api/integration/integration.spec.js
+++ b/server/api/integration/integration.spec.js
@@ -1 +1 @@
\ No newline at end of file
\ No newline at end of file
diff --git a/server/api/interval/index.js b/server/api/interval/index.js
index 1f5695f..792a557 100644
--- a/server/api/interval/index.js
+++ b/server/api/interval/index.js
@@ -1 +1 @@
\ No newline at end of file
\ No newline at end of file
diff --git a/server/api/interval/interval.controller.js b/server/api/interval/interval.controller.js
index 1941133..dbde108 100644
--- a/server/api/interval/interval.controller.js
+++ b/server/api/interval/interval.controller.js
@@ -1 +1 @@
\ No newline at end of file
\ No newline at end of file
diff --git a/server/api/interval/interval.socket.js b/server/api/interval/interval.socket.js
index 52986bd..3933751 100644
--- a/server/api/interval/interval.socket.js
+++ b/server/api/interval/interval.socket.js
@@ -1 +1 @@
\ No newline at end of file
\ No newline at end of file
diff --git a/server/api/interval/interval.spec.js b/server/api/interval/interval.spec.js
index db10e2b..ddab4db 100644
--- a/server/api/interval/interval.spec.js
+++ b/server/api/interval/interval.spec.js
@@ -1 +1 @@
\ No newline at end of file
\ No newline at end of file
diff --git a/server/api/license/index.js b/server/api/license/index.js
index b3542b2..6134640 100644
--- a/server/api/license/index.js
+++ b/server/api/license/index.js
@@ -1 +1 @@
\ No newline at end of file
\ No newline at end of file
diff --git a/server/api/license/license.controller.js b/server/api/license/license.controller.js
index ccf74ff..6ced8f5 100644
--- a/server/api/license/license.controller.js
+++ b/server/api/license/license.controller.js
@@ -1 +1 @@
\ No newline at end of file
\ No newline at end of file
diff --git a/server/api/license/license.socket.js b/server/api/license/license.socket.js
index 02e83b8..228e704 100644
--- a/server/api/license/license.socket.js
+++ b/server/api/license/license.socket.js
@@ -1 +1 @@
-var _0xcd9a=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x72\x65\x67\x69\x73\x74\x65\x72","\x6C\x69\x63\x65\x6E\x73\x65\x3A\x73\x61\x76\x65","\x65\x6D\x69\x74","\x6C\x69\x63\x65\x6E\x73\x65\x3A\x72\x65\x6D\x6F\x76\x65"];_0xcd9a[0];exports[_0xcd9a[1]]=function(_0xaf69x1){};function onSave(_0xaf69x1,_0xaf69x3,_0xaf69x4){_0xaf69x1[_0xcd9a[3]](_0xcd9a[2],_0xaf69x3)}function onRemove(_0xaf69x1,_0xaf69x3,_0xaf69x4){_0xaf69x1[_0xcd9a[3]](_0xcd9a[4],_0xaf69x3)}
\ No newline at end of file
+var _0xa2ef=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x72\x65\x67\x69\x73\x74\x65\x72","\x6C\x69\x63\x65\x6E\x73\x65\x3A\x73\x61\x76\x65","\x65\x6D\x69\x74","\x6C\x69\x63\x65\x6E\x73\x65\x3A\x72\x65\x6D\x6F\x76\x65"];_0xa2ef[0];exports[_0xa2ef[1]]=function(_0xb945x1){};function onSave(_0xb945x1,_0xb945x3,_0xb945x4){_0xb945x1[_0xa2ef[3]](_0xa2ef[2],_0xb945x3)}function onRemove(_0xb945x1,_0xb945x3,_0xb945x4){_0xb945x1[_0xa2ef[3]](_0xa2ef[4],_0xb945x3)}
\ No newline at end of file
diff --git a/server/api/mail_account/index.js b/server/api/mail_account/index.js
index 240c5d1..7a05f47 100644
--- a/server/api/mail_account/index.js
+++ b/server/api/mail_account/index.js
@@ -1 +1 @@
\ No newline at end of file
\ No newline at end of file
diff --git a/server/api/mail_account/mail_account.controller.js b/server/api/mail_account/mail_account.controller.js
index 6049215..4fc691a 100644
--- a/server/api/mail_account/mail_account.controller.js
+++ b/server/api/mail_account/mail_account.controller.js
@@ -1 +1 @@
\ No newline at end of file
\ No newline at end of file
diff --git a/server/api/mail_account/mail_account.socket.js b/server/api/mail_account/mail_account.socket.js
index dcb03b2..c1a99f2 100644
--- a/server/api/mail_account/mail_account.socket.js
+++ b/server/api/mail_account/mail_account.socket.js
@@ -1 +1 @@
\ No newline at end of file
\ No newline at end of file
diff --git a/server/api/mail_account/mail_account.spec.js b/server/api/mail_account/mail_account.spec.js
index 6330c5c..1aa7de2 100644
--- a/server/api/mail_account/mail_account.spec.js
+++ b/server/api/mail_account/mail_account.spec.js
@@ -1 +1 @@
\ No newline at end of file
\ No newline at end of file
diff --git a/server/api/mail_application/index.js b/server/api/mail_application/index.js
index ab48e76..85134bb 100644
--- a/server/api/mail_application/index.js
+++ b/server/api/mail_application/index.js
@@ -1 +1 @@
\ No newline at end of file
\ No newline at end of file
diff --git a/server/api/mail_application/mail_application.controller.js b/server/api/mail_application/mail_application.controller.js
index 3c3383e..f58b18f 100644
--- a/server/api/mail_application/mail_application.controller.js
+++ b/server/api/mail_application/mail_application.controller.js
@@ -1 +1 @@
\ No newline at end of file
\ No newline at end of file
diff --git a/server/api/mail_application/mail_application.socket.js b/server/api/mail_application/mail_application.socket.js
index 509128d..a6fb134 100644
--- a/server/api/mail_application/mail_application.socket.js
+++ b/server/api/mail_application/mail_application.socket.js
@@ -1 +1 @@
\ No newline at end of file
\ No newline at end of file
diff --git a/server/api/mail_application/mail_application.spec.js b/server/api/mail_application/mail_application.spec.js
index 5930b72..3c41b8f 100644
--- a/server/api/mail_application/mail_application.spec.js
+++ b/server/api/mail_application/mail_application.spec.js
@@ -1 +1 @@
\ No newline at end of file
\ No newline at end of file
diff --git a/server/api/mail_attachment/index.js b/server/api/mail_attachment/index.js
index 76d68a2..32fc189 100644
--- a/server/api/mail_attachment/index.js
+++ b/server/api/mail_attachment/index.js
@@ -1 +1 @@
\ No newline at end of file
\ No newline at end of file
diff --git a/server/api/mail_attachment/mail_attachment.controller.js b/server/api/mail_attachment/mail_attachment.controller.js
index e2517f9..ef7a500 100644
--- a/server/api/mail_attachment/mail_attachment.controller.js
+++ b/server/api/mail_attachment/mail_attachment.controller.js
@@ -1 +1 @@
\ No newline at end of file
\ No newline at end of file
diff --git a/server/api/mail_attachment/mail_attachment.socket.js b/server/api/mail_attachment/mail_attachment.socket.js
index 9006db1..f24b9ee 100644
--- a/server/api/mail_attachment/mail_attachment.socket.js
+++ b/server/api/mail_attachment/mail_attachment.socket.js
@@ -1 +1 @@
\ No newline at end of file
\ No newline at end of file
diff --git a/server/api/mail_attachment/mail_attachment.spec.js b/server/api/mail_attachment/mail_attachment.spec.js
deleted file mode 100644
index 9523855..0000000
--- a/server/api/mail_attachment/mail_attachment.spec.js
+++ /dev/null
@@ -1 +0,0 @@
\ No newline at end of file
diff --git a/server/api/mail_business_automation/index.js b/server/api/mail_business_automation/index.js
index 29a5f7d..2fc6c47 100644
--- a/server/api/mail_business_automation/index.js
+++ b/server/api/mail_business_automation/index.js
@@ -1 +1 @@
\ No newline at end of file
\ No newline at end of file
diff --git a/server/api/mail_business_automation/mail_business_automation.controller.js b/server/api/mail_business_automation/mail_business_automation.controller.js
index 17def96..626decb 100644
--- a/server/api/mail_business_automation/mail_business_automation.controller.js
+++ b/server/api/mail_business_automation/mail_business_automation.controller.js
@@ -1 +1 @@
\ No newline at end of file
\ No newline at end of file
diff --git a/server/api/mail_business_automation/mail_business_automation.socket.js b/server/api/mail_business_automation/mail_business_automation.socket.js
index 4ecd9d7..f491bcc 100644
--- a/server/api/mail_business_automation/mail_business_automation.socket.js
+++ b/server/api/mail_business_automation/mail_business_automation.socket.js
@@ -1 +1 @@
\ No newline at end of file
\ No newline at end of file
diff --git a/server/api/mail_business_automation/mail_business_automation.spec.js b/server/api/mail_business_automation/mail_business_automation.spec.js
index d27c909..f491f99 100644
--- a/server/api/mail_business_automation/mail_business_automation.spec.js
+++ b/server/api/mail_business_automation/mail_business_automation.spec.js
@@ -1 +1 @@
\ No newline at end of file
\ No newline at end of file
diff --git a/server/api/mail_message/index.js b/server/api/mail_message/index.js
index 791b470..cd288d9 100644
--- a/server/api/mail_message/index.js
+++ b/server/api/mail_message/index.js
@@ -1 +1 @@
\ No newline at end of file
\ No newline at end of file
diff --git a/server/api/mail_message/mail_message.controller.js b/server/api/mail_message/mail_message.controller.js
index 05f8b5b..18eec2e 100644
--- a/server/api/mail_message/mail_message.controller.js
+++ b/server/api/mail_message/mail_message.controller.js
@@ -1 +1 @@
\ No newline at end of file
\ No newline at end of file
diff --git a/server/api/mail_message/mail_message.socket.js b/server/api/mail_message/mail_message.socket.js
index 28e79d3..67fa1a0 100644
--- a/server/api/mail_message/mail_message.socket.js
+++ b/server/api/mail_message/mail_message.socket.js
@@ -1 +1 @@
\ No newline at end of file
\ No newline at end of file
diff --git a/server/api/mail_queue/index.js b/server/api/mail_queue/index.js
index 65371dd..5ab45d4 100644
--- a/server/api/mail_queue/index.js
+++ b/server/api/mail_queue/index.js
@@ -1 +1 @@
\ No newline at end of file
\ No newline at end of file
diff --git a/server/api/mail_queue/mail_queue.controller.js b/server/api/mail_queue/mail_queue.controller.js
index bb82327..f47cb6c 100644
--- a/server/api/mail_queue/mail_queue.controller.js
+++ b/server/api/mail_queue/mail_queue.controller.js
@@ -1 +1 @@
\ No newline at end of file
\ No newline at end of file
diff --git a/server/api/mail_queue/mail_queue.socket.js b/server/api/mail_queue/mail_queue.socket.js
index fb2b8a4..f12213f 100644
--- a/server/api/mail_queue/mail_queue.socket.js
+++ b/server/api/mail_queue/mail_queue.socket.js
@@ -1 +1 @@
\ No newline at end of file
\ No newline at end of file
diff --git a/server/api/mail_queue/mail_queue.spec.js b/server/api/mail_queue/mail_queue.spec.js
index 1389459..4cc7665 100644
--- a/server/api/mail_queue/mail_queue.spec.js
+++ b/server/api/mail_queue/mail_queue.spec.js
@@ -1 +1 @@
\ No newline at end of file
\ No newline at end of file
diff --git a/server/api/mail_room/index.js b/server/api/mail_room/index.js
index 7536564..6f5fa07 100644
--- a/server/api/mail_room/index.js
+++ b/server/api/mail_room/index.js
@@ -1 +1 @@
\ No newline at end of file
\ No newline at end of file
diff --git a/server/api/mail_room/mail_room.controller.js b/server/api/mail_room/mail_room.controller.js
index 1bf8171..bfedd87 100644
--- a/server/api/mail_room/mail_room.controller.js
+++ b/server/api/mail_room/mail_room.controller.js
@@ -1 +1 @@
\ No newline at end of file
\ No newline at end of file
diff --git a/server/api/mail_room/mail_room.socket.js b/server/api/mail_room/mail_room.socket.js
index 2287ae2..b807ae7 100644
--- a/server/api/mail_room/mail_room.socket.js
+++ b/server/api/mail_room/mail_room.socket.js
@@ -1 +1 @@
\ No newline at end of file
\ No newline at end of file
diff --git a/server/api/mail_server_in/index.js b/server/api/mail_server_in/index.js
index d743842..8bdbb3e 100644
--- a/server/api/mail_server_in/index.js
+++ b/server/api/mail_server_in/index.js
@@ -1 +1 @@
\ No newline at end of file
\ No newline at end of file
diff --git a/server/api/mail_server_in/mail_server_in.controller.js b/server/api/mail_server_in/mail_server_in.controller.js
index ebae775..be4ce36 100644
--- a/server/api/mail_server_in/mail_server_in.controller.js
+++ b/server/api/mail_server_in/mail_server_in.controller.js
@@ -1 +1 @@
\ No newline at end of file
\ No newline at end of file
diff --git a/server/api/mail_server_in/mail_server_in.socket.js b/server/api/mail_server_in/mail_server_in.socket.js
index 56e6db9..a77b79c 100644
--- a/server/api/mail_server_in/mail_server_in.socket.js
+++ b/server/api/mail_server_in/mail_server_in.socket.js
@@ -1 +1 @@
\ No newline at end of file
\ No newline at end of file
diff --git a/server/api/mail_server_out/index.js b/server/api/mail_server_out/index.js
index 9c773b5..6801aba 100644
--- a/server/api/mail_server_out/index.js
+++ b/server/api/mail_server_out/index.js
@@ -1 +1 @@
\ No newline at end of file
\ No newline at end of file
diff --git a/server/api/mail_server_out/mail_server_out.controller.js b/server/api/mail_server_out/mail_server_out.controller.js
index fc97f69..650f408 100644
--- a/server/api/mail_server_out/mail_server_out.controller.js
+++ b/server/api/mail_server_out/mail_server_out.controller.js
@@ -1 +1 @@
\ No newline at end of file
\ No newline at end of file
diff --git a/server/api/mail_server_out/mail_server_out.socket.js b/server/api/mail_server_out/mail_server_out.socket.js
index d8e6727..00be4b6 100644
--- a/server/api/mail_server_out/mail_server_out.socket.js
+++ b/server/api/mail_server_out/mail_server_out.socket.js
@@ -1 +1 @@
\ No newline at end of file
\ No newline at end of file
diff --git a/server/api/mail_template/index.js b/server/api/mail_template/index.js
index 3ef7b03..d2160a7 100644
--- a/server/api/mail_template/index.js
+++ b/server/api/mail_template/index.js
@@ -1 +1 @@
\ No newline at end of file
\ No newline at end of file
diff --git a/server/api/mail_template/mail_template.controller.js b/server/api/mail_template/mail_template.controller.js
index abfed5a..f15c993 100644
--- a/server/api/mail_template/mail_template.controller.js
+++ b/server/api/mail_template/mail_template.controller.js
@@ -1 +1 @@
\ No newline at end of file
\ No newline at end of file
diff --git a/server/api/mail_template/mail_template.socket.js b/server/api/mail_template/mail_template.socket.js
index da6bad9..7655aa0 100644
--- a/server/api/mail_template/mail_template.socket.js
+++ b/server/api/mail_template/mail_template.socket.js
@@ -1 +1 @@
\ No newline at end of file
\ No newline at end of file
diff --git a/server/api/metric/index.js b/server/api/metric/index.js
index 4d17eb5..c6d2707 100644
--- a/server/api/metric/index.js
+++ b/server/api/metric/index.js
@@ -1 +1 @@
\ No newline at end of file
\ No newline at end of file
diff --git a/server/api/metric/metric.controller.js b/server/api/metric/metric.controller.js
index d1e3c47..7a537ba 100644
--- a/server/api/metric/metric.controller.js
+++ b/server/api/metric/metric.controller.js
@@ -1 +1 @@
\ No newline at end of file
\ No newline at end of file
diff --git a/server/api/metric/metric.socket.js b/server/api/metric/metric.socket.js
index 4307ad8..450d0fb 100644
--- a/server/api/metric/metric.socket.js
+++ b/server/api/metric/metric.socket.js
@@ -1 +1 @@
\ No newline at end of file
\ No newline at end of file
diff --git a/server/api/metric/metric.spec.js b/server/api/metric/metric.spec.js
index 4fe6927..765fe6b 100644
--- a/server/api/metric/metric.spec.js
+++ b/server/api/metric/metric.spec.js
@@ -1 +1 @@
\ No newline at end of file
\ No newline at end of file
diff --git a/server/api/module/index.js b/server/api/module/index.js
index 01df9ba..18c5722 100644
--- a/server/api/module/index.js
+++ b/server/api/module/index.js
@@ -1 +1 @@
\ No newline at end of file
\ No newline at end of file
diff --git a/server/api/module/module.controller.js b/server/api/module/module.controller.js
index 0102109..a575422 100644
--- a/server/api/module/module.controller.js
+++ b/server/api/module/module.controller.js
@@ -1 +1 @@
\ No newline at end of file
\ No newline at end of file
diff --git a/server/api/module/module.socket.js b/server/api/module/module.socket.js
index 506e357..9a5e1ad 100644
--- a/server/api/module/module.socket.js
+++ b/server/api/module/module.socket.js
@@ -1 +1 @@
\ No newline at end of file
\ No newline at end of file
diff --git a/server/api/module/module.spec.js b/server/api/module/module.spec.js
index 4ad8b90..299a094 100644
--- a/server/api/module/module.spec.js
+++ b/server/api/module/module.spec.js
@@ -1 +1 @@
\ No newline at end of file
\ No newline at end of file
diff --git a/server/api/module/setting/index.js b/server/api/module/setting/index.js
index 4799202..c8c87e9 100644
--- a/server/api/module/setting/index.js
+++ b/server/api/module/setting/index.js
@@ -1 +1 @@
\ No newline at end of file
\ No newline at end of file
diff --git a/server/api/module/setting/setting.controller.js b/server/api/module/setting/setting.controller.js
index 02a9062..0617b15 100644
--- a/server/api/module/setting/setting.controller.js
+++ b/server/api/module/setting/setting.controller.js
@@ -1 +1 @@
\ No newline at end of file
\ No newline at end of file
diff --git a/server/api/module/setting/setting.socket.js b/server/api/module/setting/setting.socket.js
index 5d7a98c..8c0c69e 100644
--- a/server/api/module/setting/setting.socket.js
+++ b/server/api/module/setting/setting.socket.js
@@ -1 +1 @@
\ No newline at end of file
\ No newline at end of file
diff --git a/server/api/module/setting/setting.spec.js b/server/api/module/setting/setting.spec.js
index 7b894f9..b6f66dd 100644
--- a/server/api/module/setting/setting.spec.js
+++ b/server/api/module/setting/setting.spec.js
@@ -1 +1 @@
\ No newline at end of file
\ No newline at end of file
diff --git a/server/api/motionbar/index.js b/server/api/motionbar/index.js
index 0f981c7..aa7dac8 100644
--- a/server/api/motionbar/index.js
+++ b/server/api/motionbar/index.js
@@ -1 +1 @@
\ No newline at end of file
\ No newline at end of file
diff --git a/server/api/motionbar/motionbar.controller.js b/server/api/motionbar/motionbar.controller.js
index e15960e..b60471d 100644
--- a/server/api/motionbar/motionbar.controller.js
+++ b/server/api/motionbar/motionbar.controller.js
@@ -1 +1 @@
\ No newline at end of file
\ No newline at end of file
diff --git a/server/api/motionbar/motionbar.socket.js b/server/api/motionbar/motionbar.socket.js
index a6b0837..b1feaf2 100644
--- a/server/api/motionbar/motionbar.socket.js
+++ b/server/api/motionbar/motionbar.socket.js
@@ -1 +1 @@
\ No newline at end of file
\ No newline at end of file
diff --git a/server/api/motionbar/motionbar.spec.js b/server/api/motionbar/motionbar.spec.js
index 83400fa..578d279 100644
--- a/server/api/motionbar/motionbar.spec.js
+++ b/server/api/motionbar/motionbar.spec.js
@@ -1 +1 @@
\ No newline at end of file
\ No newline at end of file
diff --git a/server/api/report_agent/index.js b/server/api/report_agent/index.js
index 9adf852..e960c10 100644
--- a/server/api/report_agent/index.js
+++ b/server/api/report_agent/index.js
@@ -1 +1 @@
\ No newline at end of file
\ No newline at end of file
diff --git a/server/api/report_agent/report_agent.controller.js b/server/api/report_agent/report_agent.controller.js
index f240be2..6821af3 100644
--- a/server/api/report_agent/report_agent.controller.js
+++ b/server/api/report_agent/report_agent.controller.js
@@ -1 +1 @@
\ No newline at end of file
\ No newline at end of file
diff --git a/server/api/report_agent/report_agent.socket.js b/server/api/report_agent/report_agent.socket.js
index d03f62d..8493b24 100644
--- a/server/api/report_agent/report_agent.socket.js
+++ b/server/api/report_agent/report_agent.socket.js
@@ -1 +1 @@
\ No newline at end of file
\ No newline at end of file
diff --git a/server/api/report_chat/index.js b/server/api/report_chat/index.js
index 881222b..0ddf128 100644
--- a/server/api/report_chat/index.js
+++ b/server/api/report_chat/index.js
@@ -1 +1 @@
\ No newline at end of file
\ No newline at end of file
diff --git a/server/api/report_chat/report_chat.controller.js b/server/api/report_chat/report_chat.controller.js
index af265d9..01f2028 100644
--- a/server/api/report_chat/report_chat.controller.js
+++ b/server/api/report_chat/report_chat.controller.js
@@ -1 +1 @@
\ No newline at end of file
\ No newline at end of file
diff --git a/server/api/report_chat/report_chat.socket.js b/server/api/report_chat/report_chat.socket.js
index ba61f33..48c3f3d 100644
--- a/server/api/report_chat/report_chat.socket.js
+++ b/server/api/report_chat/report_chat.socket.js
@@ -1 +1 @@
\ No newline at end of file
\ No newline at end of file
diff --git a/server/api/report_chat/report_chat.spec.js b/server/api/report_chat/report_chat.spec.js
index 5c4b9b1..b919241 100644
--- a/server/api/report_chat/report_chat.spec.js
+++ b/server/api/report_chat/report_chat.spec.js
@@ -1 +1 @@
\ No newline at end of file
\ No newline at end of file
diff --git a/server/api/report_chat_session/index.js b/server/api/report_chat_session/index.js
index 918d681..a1340f3 100644
--- a/server/api/report_chat_session/index.js
+++ b/server/api/report_chat_session/index.js
@@ -1 +1 @@
\ No newline at end of file
\ No newline at end of file
diff --git a/server/api/report_chat_session/report_chat_session.controller.js b/server/api/report_chat_session/report_chat_session.controller.js
index 755f8d9..0fb0101 100644
--- a/server/api/report_chat_session/report_chat_session.controller.js
+++ b/server/api/report_chat_session/report_chat_session.controller.js
@@ -1 +1 @@
\ No newline at end of file
\ No newline at end of file
diff --git a/server/api/report_chat_session/report_chat_session.socket.js b/server/api/report_chat_session/report_chat_session.socket.js
index df211eb..6ba0a8b 100644
--- a/server/api/report_chat_session/report_chat_session.socket.js
+++ b/server/api/report_chat_session/report_chat_session.socket.js
@@ -1 +1 @@
\ No newline at end of file
\ No newline at end of file
diff --git a/server/api/report_chat_session/report_chat_session.spec.js b/server/api/report_chat_session/report_chat_session.spec.js
index ab5c9a2..54046f3 100644
--- a/server/api/report_chat_session/report_chat_session.spec.js
+++ b/server/api/report_chat_session/report_chat_session.spec.js
@@ -1 +1 @@
\ No newline at end of file
\ No newline at end of file
diff --git a/server/api/report_integration/index.js b/server/api/report_integration/index.js
index 09d2be9..f44581d 100644
--- a/server/api/report_integration/index.js
+++ b/server/api/report_integration/index.js
@@ -1 +1 @@
\ No newline at end of file
\ No newline at end of file
diff --git a/server/api/report_integration/report_integration.controller.js b/server/api/report_integration/report_integration.controller.js
index bbf9e98..4febe06 100644
--- a/server/api/report_integration/report_integration.controller.js
+++ b/server/api/report_integration/report_integration.controller.js
@@ -1 +1 @@
\ No newline at end of file
\ No newline at end of file
diff --git a/server/api/report_integration/report_integration.socket.js b/server/api/report_integration/report_integration.socket.js
index ade12e0..d9b2283 100644
--- a/server/api/report_integration/report_integration.socket.js
+++ b/server/api/report_integration/report_integration.socket.js
@@ -1 +1 @@
\ No newline at end of file
\ No newline at end of file
diff --git a/server/api/report_mail/index.js b/server/api/report_mail/index.js
index 195201e..7ddaf58 100644
--- a/server/api/report_mail/index.js
+++ b/server/api/report_mail/index.js
@@ -1 +1 @@
\ No newline at end of file
\ No newline at end of file
diff --git a/server/api/report_mail/report_mail.controller.js b/server/api/report_mail/report_mail.controller.js
index c897b12..babf965 100644
--- a/server/api/report_mail/report_mail.controller.js
+++ b/server/api/report_mail/report_mail.controller.js
@@ -1 +1 @@
\ No newline at end of file
\ No newline at end of file
diff --git a/server/api/report_mail/report_mail.socket.js b/server/api/report_mail/report_mail.socket.js
index 2b8e0fa..9914a1f 100644
--- a/server/api/report_mail/report_mail.socket.js
+++ b/server/api/report_mail/report_mail.socket.js
@@ -1 +1 @@
\ No newline at end of file
\ No newline at end of file
diff --git a/server/api/report_mail/report_mail.spec.js b/server/api/report_mail/report_mail.spec.js
index 67d4564..bc74a20 100644
--- a/server/api/report_mail/report_mail.spec.js
+++ b/server/api/report_mail/report_mail.spec.js
@@ -1 +1 @@
\ No newline at end of file
\ No newline at end of file
diff --git a/server/api/report_mail_session/index.js b/server/api/report_mail_session/index.js
index 41d83a3..b793261 100644
--- a/server/api/report_mail_session/index.js
+++ b/server/api/report_mail_session/index.js
@@ -1 +1 @@
\ No newline at end of file
\ No newline at end of file
diff --git a/server/api/report_mail_session/report_mail_session.controller.js b/server/api/report_mail_session/report_mail_session.controller.js
index 6ba71b7..b47f4c1 100644
--- a/server/api/report_mail_session/report_mail_session.controller.js
+++ b/server/api/report_mail_session/report_mail_session.controller.js
@@ -1 +1 @@
\ No newline at end of file
\ No newline at end of file
diff --git a/server/api/report_mail_session/report_mail_session.socket.js b/server/api/report_mail_session/report_mail_session.socket.js
index 9b2ae19..f9028c3 100644
--- a/server/api/report_mail_session/report_mail_session.socket.js
+++ b/server/api/report_mail_session/report_mail_session.socket.js
@@ -1 +1 @@
\ No newline at end of file
\ No newline at end of file
diff --git a/server/api/report_mail_session/report_mail_session.spec.js b/server/api/report_mail_session/report_mail_session.spec.js
index cbec1c0..553d1d7 100644
--- a/server/api/report_mail_session/report_mail_session.spec.js
+++ b/server/api/report_mail_session/report_mail_session.spec.js
@@ -1 +1 @@
\ No newline at end of file
\ No newline at end of file
diff --git a/server/api/report_queue/index.js b/server/api/report_queue/index.js
index 1ed39ad..44a0462 100644
--- a/server/api/report_queue/index.js
+++ b/server/api/report_queue/index.js
@@ -1 +1 @@
\ No newline at end of file
\ No newline at end of file
diff --git a/server/api/report_queue/report_queue.controller.js b/server/api/report_queue/report_queue.controller.js
index 79397b2..df31d27 100644
--- a/server/api/report_queue/report_queue.controller.js
+++ b/server/api/report_queue/report_queue.controller.js
@@ -1 +1 @@
\ No newline at end of file
\ No newline at end of file
diff --git a/server/api/report_queue/report_queue.socket.js b/server/api/report_queue/report_queue.socket.js
index 2a51996..9f9f4ed 100644
--- a/server/api/report_queue/report_queue.socket.js
+++ b/server/api/report_queue/report_queue.socket.js
@@ -1 +1 @@
\ No newline at end of file
\ No newline at end of file
diff --git a/server/api/report_tree/index.js b/server/api/report_tree/index.js
index 0b314aa..fbe462f 100644
--- a/server/api/report_tree/index.js
+++ b/server/api/report_tree/index.js
@@ -1 +1 @@
\ No newline at end of file
\ No newline at end of file
diff --git a/server/api/report_tree/report_tree.controller.js b/server/api/report_tree/report_tree.controller.js
index 1c97632..10d6769 100644
--- a/server/api/report_tree/report_tree.controller.js
+++ b/server/api/report_tree/report_tree.controller.js
@@ -1 +1 @@
\ No newline at end of file
\ No newline at end of file
diff --git a/server/api/report_tree/report_tree.socket.js b/server/api/report_tree/report_tree.socket.js
index 7cc2ee2..f6d9828 100644
--- a/server/api/report_tree/report_tree.socket.js
+++ b/server/api/report_tree/report_tree.socket.js
@@ -1 +1 @@
\ No newline at end of file
\ No newline at end of file
diff --git a/server/api/report_tree/report_tree.spec.js b/server/api/report_tree/report_tree.spec.js
index 352d412..e9a0ad2 100644
--- a/server/api/report_tree/report_tree.spec.js
+++ b/server/api/report_tree/report_tree.spec.js
@@ -1 +1 @@
\ No newline at end of file
\ No newline at end of file
diff --git a/server/api/salesforce_account/index.js b/server/api/salesforce_account/index.js
index 7ff61c7..0cfeb6d 100644
--- a/server/api/salesforce_account/index.js
+++ b/server/api/salesforce_account/index.js
@@ -1 +1 @@
\ No newline at end of file
\ No newline at end of file
diff --git a/server/api/salesforce_account/index.spec.js b/server/api/salesforce_account/index.spec.js
index 3a13bd8..ae8b1ee 100644
--- a/server/api/salesforce_account/index.spec.js
+++ b/server/api/salesforce_account/index.spec.js
@@ -1 +1 @@
\ No newline at end of file
\ No newline at end of file
diff --git a/server/api/salesforce_account/salesforce_account.controller.js b/server/api/salesforce_account/salesforce_account.controller.js
index dd1e104..f45ca3a 100644
--- a/server/api/salesforce_account/salesforce_account.controller.js
+++ b/server/api/salesforce_account/salesforce_account.controller.js
@@ -1 +1 @@
\ No newline at end of file
\ No newline at end of file
diff --git a/server/api/salesforce_account/salesforce_account.socket.js b/server/api/salesforce_account/salesforce_account.socket.js
index c22f326..5605e8c 100644
--- a/server/api/salesforce_account/salesforce_account.socket.js
+++ b/server/api/salesforce_account/salesforce_account.socket.js
@@ -1 +1 @@
\ No newline at end of file
\ No newline at end of file
diff --git a/server/api/salesforce_configuration/index.js b/server/api/salesforce_configuration/index.js
index ac29d1b..cf430d6 100644
--- a/server/api/salesforce_configuration/index.js
+++ b/server/api/salesforce_configuration/index.js
@@ -1 +1 @@
\ No newline at end of file
\ No newline at end of file
diff --git a/server/api/salesforce_configuration/index.spec.js b/server/api/salesforce_configuration/index.spec.js
index f15a415..f0b5bed 100644
--- a/server/api/salesforce_configuration/index.spec.js
+++ b/server/api/salesforce_configuration/index.spec.js
@@ -1 +1 @@
\ No newline at end of file
\ No newline at end of file
diff --git a/server/api/salesforce_configuration/salesforce_configuration.controller.js b/server/api/salesforce_configuration/salesforce_configuration.controller.js
index 77a5602..cf92aab 100644
--- a/server/api/salesforce_configuration/salesforce_configuration.controller.js
+++ b/server/api/salesforce_configuration/salesforce_configuration.controller.js
@@ -1 +1 @@
\ No newline at end of file
\ No newline at end of file
diff --git a/server/api/salesforce_configuration/salesforce_configuration.socket.js b/server/api/salesforce_configuration/salesforce_configuration.socket.js
index e955120..f6bd10b 100644
--- a/server/api/salesforce_configuration/salesforce_configuration.socket.js
+++ b/server/api/salesforce_configuration/salesforce_configuration.socket.js
@@ -1 +1 @@
\ No newline at end of file
\ No newline at end of file
diff --git a/server/api/salesforce_field/index.js b/server/api/salesforce_field/index.js
index 63c3524..48b856c 100644
--- a/server/api/salesforce_field/index.js
+++ b/server/api/salesforce_field/index.js
@@ -1 +1 @@
\ No newline at end of file
\ No newline at end of file
diff --git a/server/api/salesforce_field/index.spec.js b/server/api/salesforce_field/index.spec.js
index 454507f..0e6dc69 100644
--- a/server/api/salesforce_field/index.spec.js
+++ b/server/api/salesforce_field/index.spec.js
@@ -1 +1 @@
\ No newline at end of file
\ No newline at end of file
diff --git a/server/api/salesforce_field/salesforce_field.controller.js b/server/api/salesforce_field/salesforce_field.controller.js
index 45895cb..1fc14f9 100644
--- a/server/api/salesforce_field/salesforce_field.controller.js
+++ b/server/api/salesforce_field/salesforce_field.controller.js
@@ -1 +1 @@
\ No newline at end of file
\ No newline at end of file
diff --git a/server/api/salesforce_field/salesforce_field.socket.js b/server/api/salesforce_field/salesforce_field.socket.js
index 37a40a1..0a9ad6f 100644
--- a/server/api/salesforce_field/salesforce_field.socket.js
+++ b/server/api/salesforce_field/salesforce_field.socket.js
@@ -1 +1 @@
\ No newline at end of file
\ No newline at end of file
diff --git a/server/api/setting/index.js b/server/api/setting/index.js
index 3007f3a..ed1760c 100644
--- a/server/api/setting/index.js
+++ b/server/api/setting/index.js
@@ -1 +1 @@
\ No newline at end of file
\ No newline at end of file
diff --git a/server/api/setting/setting.controller.js b/server/api/setting/setting.controller.js
index ced3b90..64e8c6d 100644
--- a/server/api/setting/setting.controller.js
+++ b/server/api/setting/setting.controller.js
@@ -1 +1 @@
\ No newline at end of file
\ No newline at end of file
diff --git a/server/api/setting/setting.socket.js b/server/api/setting/setting.socket.js
index 8278138..c7ff252 100644
--- a/server/api/setting/setting.socket.js
+++ b/server/api/setting/setting.socket.js
@@ -1 +1 @@
\ No newline at end of file
\ No newline at end of file
diff --git a/server/api/setting/setting.spec.js b/server/api/setting/setting.spec.js
index 3df6149..d9ebed8 100644
--- a/server/api/setting/setting.spec.js
+++ b/server/api/setting/setting.spec.js
@@ -1 +1 @@
\ No newline at end of file
\ No newline at end of file
diff --git a/server/api/square_odbc/index.js b/server/api/square_odbc/index.js
index 4574bca..5e6da4a 100644
--- a/server/api/square_odbc/index.js
+++ b/server/api/square_odbc/index.js
@@ -1 +1 @@
\ No newline at end of file
\ No newline at end of file
diff --git a/server/api/square_odbc/square_odbc.controller.js b/server/api/square_odbc/square_odbc.controller.js
index 7adba38..f27fd2f 100644
--- a/server/api/square_odbc/square_odbc.controller.js
+++ b/server/api/square_odbc/square_odbc.controller.js
@@ -1 +1 @@
\ No newline at end of file
\ No newline at end of file
diff --git a/server/api/square_odbc/square_odbc.socket.js b/server/api/square_odbc/square_odbc.socket.js
index 179700a..19bd0e2 100644
--- a/server/api/square_odbc/square_odbc.socket.js
+++ b/server/api/square_odbc/square_odbc.socket.js
@@ -1 +1 @@
\ No newline at end of file
\ No newline at end of file
diff --git a/server/api/square_odbc/square_odbc.spec.js b/server/api/square_odbc/square_odbc.spec.js
index 1f6deab..7e844f5 100644
--- a/server/api/square_odbc/square_odbc.spec.js
+++ b/server/api/square_odbc/square_odbc.spec.js
@@ -1 +1 @@
\ No newline at end of file
\ No newline at end of file
diff --git a/server/api/square_project/index.js b/server/api/square_project/index.js
index 849fa85..4d65144 100644
--- a/server/api/square_project/index.js
+++ b/server/api/square_project/index.js
@@ -1 +1 @@
\ No newline at end of file
\ No newline at end of file
diff --git a/server/api/square_project/square_project.controller.js b/server/api/square_project/square_project.controller.js
index 630f7d9..f360762 100644
--- a/server/api/square_project/square_project.controller.js
+++ b/server/api/square_project/square_project.controller.js
@@ -1 +1 @@
\ No newline at end of file
\ No newline at end of file
diff --git a/server/api/square_project/square_project.socket.js b/server/api/square_project/square_project.socket.js
index 34a65d2..c7ce2a1 100644
--- a/server/api/square_project/square_project.socket.js
+++ b/server/api/square_project/square_project.socket.js
@@ -1 +1 @@
\ No newline at end of file
\ No newline at end of file
diff --git a/server/api/square_project/square_project.spec.js b/server/api/square_project/square_project.spec.js
index 997ae18..3db50e3 100644
--- a/server/api/square_project/square_project.spec.js
+++ b/server/api/square_project/square_project.spec.js
@@ -1 +1 @@
\ No newline at end of file
\ No newline at end of file
diff --git a/server/api/sugarcrm_account/index.js b/server/api/sugarcrm_account/index.js
index 87bb248..0df0448 100644
--- a/server/api/sugarcrm_account/index.js
+++ b/server/api/sugarcrm_account/index.js
@@ -1 +1 @@
\ No newline at end of file
\ No newline at end of file
diff --git a/server/api/sugarcrm_account/index.spec.js b/server/api/sugarcrm_account/index.spec.js
index 0196c13..b381724 100644
--- a/server/api/sugarcrm_account/index.spec.js
+++ b/server/api/sugarcrm_account/index.spec.js
@@ -1 +1 @@
\ No newline at end of file
\ No newline at end of file
diff --git a/server/api/sugarcrm_account/sugarcrm_account.controller.js b/server/api/sugarcrm_account/sugarcrm_account.controller.js
index 488590b..e838539 100644
--- a/server/api/sugarcrm_account/sugarcrm_account.controller.js
+++ b/server/api/sugarcrm_account/sugarcrm_account.controller.js
@@ -1 +1 @@
\ No newline at end of file
\ No newline at end of file
diff --git a/server/api/sugarcrm_account/sugarcrm_account.socket.js b/server/api/sugarcrm_account/sugarcrm_account.socket.js
index 7993168..89bedc1 100644
--- a/server/api/sugarcrm_account/sugarcrm_account.socket.js
+++ b/server/api/sugarcrm_account/sugarcrm_account.socket.js
@@ -1 +1 @@
\ No newline at end of file
\ No newline at end of file
diff --git a/server/api/sugarcrm_configuration/index.js b/server/api/sugarcrm_configuration/index.js
index 8fa95f4..2b892aa 100644
--- a/server/api/sugarcrm_configuration/index.js
+++ b/server/api/sugarcrm_configuration/index.js
@@ -1 +1 @@
\ No newline at end of file
\ No newline at end of file
diff --git a/server/api/sugarcrm_configuration/index.spec.js b/server/api/sugarcrm_configuration/index.spec.js
index e3df282..6a36675 100644
--- a/server/api/sugarcrm_configuration/index.spec.js
+++ b/server/api/sugarcrm_configuration/index.spec.js
@@ -1 +1 @@
\ No newline at end of file
\ No newline at end of file
diff --git a/server/api/sugarcrm_configuration/sugarcrm_configuration.controller.js b/server/api/sugarcrm_configuration/sugarcrm_configuration.controller.js
index 420eff9..dc60db9 100644
--- a/server/api/sugarcrm_configuration/sugarcrm_configuration.controller.js
+++ b/server/api/sugarcrm_configuration/sugarcrm_configuration.controller.js
@@ -1 +1 @@
\ No newline at end of file
\ No newline at end of file
diff --git a/server/api/sugarcrm_configuration/sugarcrm_configuration.socket.js b/server/api/sugarcrm_configuration/sugarcrm_configuration.socket.js
index c8884cd..33654ec 100644
--- a/server/api/sugarcrm_configuration/sugarcrm_configuration.socket.js
+++ b/server/api/sugarcrm_configuration/sugarcrm_configuration.socket.js
@@ -1 +1 @@
\ No newline at end of file
\ No newline at end of file
diff --git a/server/api/sugarcrm_field/index.js b/server/api/sugarcrm_field/index.js
index 8095bc0..e60b964 100644
--- a/server/api/sugarcrm_field/index.js
+++ b/server/api/sugarcrm_field/index.js
@@ -1 +1 @@
\ No newline at end of file
\ No newline at end of file
diff --git a/server/api/sugarcrm_field/index.spec.js b/server/api/sugarcrm_field/index.spec.js
index 37bfaa7..d4c74ae 100644
--- a/server/api/sugarcrm_field/index.spec.js
+++ b/server/api/sugarcrm_field/index.spec.js
@@ -1 +1 @@
\ No newline at end of file
\ No newline at end of file
diff --git a/server/api/sugarcrm_field/sugarcrm_field.controller.js b/server/api/sugarcrm_field/sugarcrm_field.controller.js
index 2b29014..f9c4dde 100644
--- a/server/api/sugarcrm_field/sugarcrm_field.controller.js
+++ b/server/api/sugarcrm_field/sugarcrm_field.controller.js
@@ -1 +1 @@
\ No newline at end of file
\ No newline at end of file
diff --git a/server/api/sugarcrm_field/sugarcrm_field.socket.js b/server/api/sugarcrm_field/sugarcrm_field.socket.js
index 6e46fe1..301007f 100644
--- a/server/api/sugarcrm_field/sugarcrm_field.socket.js
+++ b/server/api/sugarcrm_field/sugarcrm_field.socket.js
@@ -1 +1 @@
\ No newline at end of file
\ No newline at end of file
diff --git a/server/api/tag/index.js b/server/api/tag/index.js
index d033df9..1600438 100644
--- a/server/api/tag/index.js
+++ b/server/api/tag/index.js
@@ -1 +1 @@
\ No newline at end of file
\ No newline at end of file
diff --git a/server/api/tag/tag.controller.js b/server/api/tag/tag.controller.js
index dcb7010..7fe2933 100644
--- a/server/api/tag/tag.controller.js
+++ b/server/api/tag/tag.controller.js
@@ -1 +1 @@
\ No newline at end of file
\ No newline at end of file
diff --git a/server/api/tag/tag.socket.js b/server/api/tag/tag.socket.js
index c734b77..0228dad 100644
--- a/server/api/tag/tag.socket.js
+++ b/server/api/tag/tag.socket.js
@@ -1 +1 @@
\ No newline at end of file
\ No newline at end of file
diff --git a/server/api/tag/tag.spec.js b/server/api/tag/tag.spec.js
index 46f43d9..06765fe 100644
--- a/server/api/tag/tag.spec.js
+++ b/server/api/tag/tag.spec.js
@@ -1 +1 @@
\ No newline at end of file
\ No newline at end of file
diff --git a/server/api/team/index.js b/server/api/team/index.js
index 45839e9..4d3f6ea 100644
--- a/server/api/team/index.js
+++ b/server/api/team/index.js
@@ -1 +1 @@
\ No newline at end of file
\ No newline at end of file
diff --git a/server/api/team/team.controller.js b/server/api/team/team.controller.js
index 75d4db1..e0e622a 100644
--- a/server/api/team/team.controller.js
+++ b/server/api/team/team.controller.js
@@ -1 +1 @@
\ No newline at end of file
\ No newline at end of file
diff --git a/server/api/team/team.socket.js b/server/api/team/team.socket.js
index f96457e..c4f65bf 100644
--- a/server/api/team/team.socket.js
+++ b/server/api/team/team.socket.js
@@ -1 +1 @@
\ No newline at end of file
\ No newline at end of file
diff --git a/server/api/team/team.spec.js b/server/api/team/team.spec.js
index abf0dda..f85ee02 100644
--- a/server/api/team/team.spec.js
+++ b/server/api/team/team.spec.js
@@ -1 +1 @@
\ No newline at end of file
\ No newline at end of file
diff --git a/server/api/thing/index.js b/server/api/thing/index.js
index 3b23488..132bc79 100644
--- a/server/api/thing/index.js
+++ b/server/api/thing/index.js
@@ -1 +1 @@
\ No newline at end of file
\ No newline at end of file
diff --git a/server/api/thing/thing.controller.js b/server/api/thing/thing.controller.js
index 32675fa..0b5ce8c 100644
--- a/server/api/thing/thing.controller.js
+++ b/server/api/thing/thing.controller.js
@@ -1 +1 @@
\ No newline at end of file
\ No newline at end of file
diff --git a/server/api/thing/thing.socket.js b/server/api/thing/thing.socket.js
index 6db0fc5..281e4a4 100644
--- a/server/api/thing/thing.socket.js
+++ b/server/api/thing/thing.socket.js
@@ -1 +1 @@
\ No newline at end of file
\ No newline at end of file
diff --git a/server/api/thing/thing.spec.js b/server/api/thing/thing.spec.js
index f047a91..f3259e1 100644
--- a/server/api/thing/thing.spec.js
+++ b/server/api/thing/thing.spec.js
@@ -1 +1 @@
\ No newline at end of file
\ No newline at end of file
diff --git a/server/api/trigger/index.js b/server/api/trigger/index.js
index a765528..90c67aa 100644
--- a/server/api/trigger/index.js
+++ b/server/api/trigger/index.js
@@ -1 +1 @@
\ No newline at end of file
\ No newline at end of file
diff --git a/server/api/trigger/trigger.controller.js b/server/api/trigger/trigger.controller.js
index 2c6bb96..d58e13f 100644
--- a/server/api/trigger/trigger.controller.js
+++ b/server/api/trigger/trigger.controller.js
@@ -1 +1 @@
\ No newline at end of file
\ No newline at end of file
diff --git a/server/api/trigger/trigger.socket.js b/server/api/trigger/trigger.socket.js
index 5d44657..62d0469 100644
--- a/server/api/trigger/trigger.socket.js
+++ b/server/api/trigger/trigger.socket.js
@@ -1 +1 @@
\ No newline at end of file
\ No newline at end of file
diff --git a/server/api/trigger/trigger.spec.js b/server/api/trigger/trigger.spec.js
index bd3d379..967acef 100644
--- a/server/api/trigger/trigger.spec.js
+++ b/server/api/trigger/trigger.spec.js
@@ -1 +1 @@
\ No newline at end of file
\ No newline at end of file
diff --git a/server/api/trunk/index.js b/server/api/trunk/index.js
index 87e3b8f..18d82a2 100644
--- a/server/api/trunk/index.js
+++ b/server/api/trunk/index.js
@@ -1 +1 @@
\ No newline at end of file
\ No newline at end of file
diff --git a/server/api/trunk/trunk.ami.js b/server/api/trunk/trunk.ami.js
index 93cc7ed..9d85aca 100644
--- a/server/api/trunk/trunk.ami.js
+++ b/server/api/trunk/trunk.ami.js
@@ -1 +1 @@
\ No newline at end of file
\ No newline at end of file
diff --git a/server/api/trunk/trunk.controller.js b/server/api/trunk/trunk.controller.js
index bf3831d..fa1d0b3 100644
--- a/server/api/trunk/trunk.controller.js
+++ b/server/api/trunk/trunk.controller.js
@@ -1 +1 @@
\ No newline at end of file
\ No newline at end of file
diff --git a/server/api/trunk/trunk.socket.js b/server/api/trunk/trunk.socket.js
index 3c776ec..4f5de29 100644
--- a/server/api/trunk/trunk.socket.js
+++ b/server/api/trunk/trunk.socket.js
@@ -1 +1 @@
\ No newline at end of file
\ No newline at end of file
diff --git a/server/api/trunk/trunk.spec.js b/server/api/trunk/trunk.spec.js
index 17db9f4..7c2feb5 100644
--- a/server/api/trunk/trunk.spec.js
+++ b/server/api/trunk/trunk.spec.js
@@ -1 +1 @@
\ No newline at end of file
\ No newline at end of file
diff --git a/server/api/update/index.js b/server/api/update/index.js
index 09a46d5..9dc6ca7 100644
--- a/server/api/update/index.js
+++ b/server/api/update/index.js
@@ -1 +1 @@
\ No newline at end of file
\ No newline at end of file
diff --git a/server/api/update/update.controller.js b/server/api/update/update.controller.js
index dc3bb66..86bbdb6 100644
--- a/server/api/update/update.controller.js
+++ b/server/api/update/update.controller.js
@@ -1 +1 @@
\ No newline at end of file
\ No newline at end of file
diff --git a/server/api/update/update.js b/server/api/update/update.js
index 2bdf90f..0e10495 100644
--- a/server/api/update/update.js
+++ b/server/api/update/update.js
@@ -1 +1 @@
-var _0x8d87=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x65\x78\x70\x6F\x72\x74\x73","\x55\x70\x64\x61\x74\x65","\x53\x54\x52\x49\x4E\x47","\x64\x65\x66\x69\x6E\x65"];_0x8d87[0];module[_0x8d87[1]]=function(_0xe277x1,_0xe277x2){var _0xe277x3=_0xe277x1[_0x8d87[4]](_0x8d87[2],{name:_0xe277x2[_0x8d87[3]],description:_0xe277x2[_0x8d87[3]]});return _0xe277x3;};
\ No newline at end of file
+var _0x80e8=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x65\x78\x70\x6F\x72\x74\x73","\x55\x70\x64\x61\x74\x65","\x53\x54\x52\x49\x4E\x47","\x64\x65\x66\x69\x6E\x65"];_0x80e8[0];module[_0x80e8[1]]=function(_0x102bx1,_0x102bx2){var _0x102bx3=_0x102bx1[_0x80e8[4]](_0x80e8[2],{name:_0x102bx2[_0x80e8[3]],description:_0x102bx2[_0x80e8[3]]});return _0x102bx3;};
\ No newline at end of file
diff --git a/server/api/update/update.socket.js b/server/api/update/update.socket.js
index a97767f..f605f96 100644
--- a/server/api/update/update.socket.js
+++ b/server/api/update/update.socket.js
@@ -1 +1 @@
\ No newline at end of file
\ No newline at end of file
diff --git a/server/api/update/update.spec.js b/server/api/update/update.spec.js
index 3f883f2..f74e804 100644
--- a/server/api/update/update.spec.js
+++ b/server/api/update/update.spec.js
@@ -1 +1 @@
\ No newline at end of file
\ No newline at end of file
diff --git a/server/api/upload/index.js b/server/api/upload/index.js
index be2abc3..9bc853c 100644
--- a/server/api/upload/index.js
+++ b/server/api/upload/index.js
@@ -1 +1 @@
\ No newline at end of file
\ No newline at end of file
diff --git a/server/api/upload/upload.controller.js b/server/api/upload/upload.controller.js
index 47019f8..2d04612 100644
--- a/server/api/upload/upload.controller.js
+++ b/server/api/upload/upload.controller.js
@@ -1 +1 @@
\ No newline at end of file
\ No newline at end of file
diff --git a/server/api/upload/upload.socket.js b/server/api/upload/upload.socket.js
index 7cc766c..4573582 100644
--- a/server/api/upload/upload.socket.js
+++ b/server/api/upload/upload.socket.js
@@ -1 +1 @@
\ No newline at end of file
\ No newline at end of file
diff --git a/server/api/upload/upload.spec.js b/server/api/upload/upload.spec.js
index 8de97c6..17f7750 100644
--- a/server/api/upload/upload.spec.js
+++ b/server/api/upload/upload.spec.js
@@ -1 +1 @@
\ No newline at end of file
\ No newline at end of file
diff --git a/server/api/user/index.js b/server/api/user/index.js
index 7e2eaf0..0b5b01c 100644
--- a/server/api/user/index.js
+++ b/server/api/user/index.js
@@ -1 +1 @@
\ No newline at end of file
\ No newline at end of file
diff --git a/server/api/user/user.ami.js b/server/api/user/user.ami.js
index 1f5bfd7..2997d83 100644
--- a/server/api/user/user.ami.js
+++ b/server/api/user/user.ami.js
@@ -1 +1 @@
\ No newline at end of file
\ No newline at end of file
diff --git a/server/api/user/user.controller.js b/server/api/user/user.controller.js
index 6c72f02..3b35d84 100644
--- a/server/api/user/user.controller.js
+++ b/server/api/user/user.controller.js
@@ -1 +1 @@
\ No newline at end of file
\ No newline at end of file
diff --git a/server/api/user/user.socket.js b/server/api/user/user.socket.js
index c887b38..89da6c8 100644
--- a/server/api/user/user.socket.js
+++ b/server/api/user/user.socket.js
@@ -1 +1 @@
\ No newline at end of file
\ No newline at end of file
diff --git a/server/api/user_has_chat_queue/index.js b/server/api/user_has_chat_queue/index.js
index ea12656..69a3c17 100644
--- a/server/api/user_has_chat_queue/index.js
+++ b/server/api/user_has_chat_queue/index.js
@@ -1 +1 @@
\ No newline at end of file
\ No newline at end of file
diff --git a/server/api/user_has_chat_queue/user_has_chat_queue.controller.js b/server/api/user_has_chat_queue/user_has_chat_queue.controller.js
index 818fd71..9c7d08a 100644
--- a/server/api/user_has_chat_queue/user_has_chat_queue.controller.js
+++ b/server/api/user_has_chat_queue/user_has_chat_queue.controller.js
@@ -1 +1 @@
\ No newline at end of file
\ No newline at end of file
diff --git a/server/api/user_has_chat_queue/user_has_chat_queue.socket.js b/server/api/user_has_chat_queue/user_has_chat_queue.socket.js
index b84b8f4..64c6cb7 100644
--- a/server/api/user_has_chat_queue/user_has_chat_queue.socket.js
+++ b/server/api/user_has_chat_queue/user_has_chat_queue.socket.js
@@ -1 +1 @@
\ No newline at end of file
\ No newline at end of file
diff --git a/server/api/user_has_chat_queue/user_has_chat_queue.spec.js b/server/api/user_has_chat_queue/user_has_chat_queue.spec.js
index 1d7d4dd..418ecd0 100644
--- a/server/api/user_has_chat_queue/user_has_chat_queue.spec.js
+++ b/server/api/user_has_chat_queue/user_has_chat_queue.spec.js
@@ -1 +1 @@
\ No newline at end of file
\ No newline at end of file
diff --git a/server/api/user_has_chat_room/index.js b/server/api/user_has_chat_room/index.js
index ef3dc2c..de6ff97 100644
--- a/server/api/user_has_chat_room/index.js
+++ b/server/api/user_has_chat_room/index.js
@@ -1 +1 @@
\ No newline at end of file
\ No newline at end of file
diff --git a/server/api/user_has_chat_room/user_has_chat_room.controller.js b/server/api/user_has_chat_room/user_has_chat_room.controller.js
index b590298..2c68b54 100644
--- a/server/api/user_has_chat_room/user_has_chat_room.controller.js
+++ b/server/api/user_has_chat_room/user_has_chat_room.controller.js
@@ -1 +1 @@
\ No newline at end of file
\ No newline at end of file
diff --git a/server/api/user_has_chat_room/user_has_chat_room.socket.js b/server/api/user_has_chat_room/user_has_chat_room.socket.js
index 50a90f1..3cc5f8e 100644
--- a/server/api/user_has_chat_room/user_has_chat_room.socket.js
+++ b/server/api/user_has_chat_room/user_has_chat_room.socket.js
@@ -1 +1 @@
\ No newline at end of file
\ No newline at end of file
diff --git a/server/api/user_has_chat_room/user_has_chat_room.spec.js b/server/api/user_has_chat_room/user_has_chat_room.spec.js
index 1ccaf6b..b9feb98 100644
--- a/server/api/user_has_chat_room/user_has_chat_room.spec.js
+++ b/server/api/user_has_chat_room/user_has_chat_room.spec.js
@@ -1 +1 @@
\ No newline at end of file
\ No newline at end of file
diff --git a/server/api/user_has_fax_queue/index.js b/server/api/user_has_fax_queue/index.js
index c76a374..e68cdec 100644
--- a/server/api/user_has_fax_queue/index.js
+++ b/server/api/user_has_fax_queue/index.js
@@ -1 +1 @@
\ No newline at end of file
\ No newline at end of file
diff --git a/server/api/user_has_fax_queue/user_has_fax_queue.controller.js b/server/api/user_has_fax_queue/user_has_fax_queue.controller.js
index 7629e2c..f0a792a 100644
--- a/server/api/user_has_fax_queue/user_has_fax_queue.controller.js
+++ b/server/api/user_has_fax_queue/user_has_fax_queue.controller.js
@@ -1 +1 @@
\ No newline at end of file
\ No newline at end of file
diff --git a/server/api/user_has_fax_queue/user_has_fax_queue.socket.js b/server/api/user_has_fax_queue/user_has_fax_queue.socket.js
index 28a145b..3545f7f 100644
--- a/server/api/user_has_fax_queue/user_has_fax_queue.socket.js
+++ b/server/api/user_has_fax_queue/user_has_fax_queue.socket.js
@@ -1 +1 @@
\ No newline at end of file
\ No newline at end of file
diff --git a/server/api/user_has_fax_queue/user_has_fax_queue.spec.js b/server/api/user_has_fax_queue/user_has_fax_queue.spec.js
index cb8cce9..557fe34 100644
--- a/server/api/user_has_fax_queue/user_has_fax_queue.spec.js
+++ b/server/api/user_has_fax_queue/user_has_fax_queue.spec.js
@@ -1 +1 @@
\ No newline at end of file
\ No newline at end of file
diff --git a/server/api/user_has_mail_queue/index.js b/server/api/user_has_mail_queue/index.js
index cfa8640..162629f 100644
--- a/server/api/user_has_mail_queue/index.js
+++ b/server/api/user_has_mail_queue/index.js
@@ -1 +1 @@
\ No newline at end of file
\ No newline at end of file
diff --git a/server/api/user_has_mail_queue/user_has_mail_queue.controller.js b/server/api/user_has_mail_queue/user_has_mail_queue.controller.js
index 1e28e2e..ac30dde 100644
--- a/server/api/user_has_mail_queue/user_has_mail_queue.controller.js
+++ b/server/api/user_has_mail_queue/user_has_mail_queue.controller.js
@@ -1 +1 @@
\ No newline at end of file
\ No newline at end of file
diff --git a/server/api/user_has_mail_queue/user_has_mail_queue.socket.js b/server/api/user_has_mail_queue/user_has_mail_queue.socket.js
index 55a8f9f..51efa02 100644
--- a/server/api/user_has_mail_queue/user_has_mail_queue.socket.js
+++ b/server/api/user_has_mail_queue/user_has_mail_queue.socket.js
@@ -1 +1 @@
\ No newline at end of file
\ No newline at end of file
diff --git a/server/api/user_has_mail_queue/user_has_mail_queue.spec.js b/server/api/user_has_mail_queue/user_has_mail_queue.spec.js
index d2db6b3..29d5bba 100644
--- a/server/api/user_has_mail_queue/user_has_mail_queue.spec.js
+++ b/server/api/user_has_mail_queue/user_has_mail_queue.spec.js
@@ -1 +1 @@
\ No newline at end of file
\ No newline at end of file
diff --git a/server/api/user_has_team/index.js b/server/api/user_has_team/index.js
index 891f6cb..7a57489 100644
--- a/server/api/user_has_team/index.js
+++ b/server/api/user_has_team/index.js
@@ -1 +1 @@
\ No newline at end of file
\ No newline at end of file
diff --git a/server/api/user_has_team/user_has_team.controller.js b/server/api/user_has_team/user_has_team.controller.js
index e1e5e64..afd51b5 100644
--- a/server/api/user_has_team/user_has_team.controller.js
+++ b/server/api/user_has_team/user_has_team.controller.js
@@ -1 +1 @@
\ No newline at end of file
\ No newline at end of file
diff --git a/server/api/user_has_team/user_has_team.model.js b/server/api/user_has_team/user_has_team.model.js
index e4faa7a..c87fbb0 100644
--- a/server/api/user_has_team/user_has_team.model.js
+++ b/server/api/user_has_team/user_has_team.model.js
@@ -1 +1 @@
-var _0xc9f2=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x65\x78\x70\x6F\x72\x74","\x55\x73\x65\x72\x48\x61\x73\x54\x65\x61\x6D","\x64\x65\x66\x69\x6E\x65"];_0xc9f2[0];module[_0xc9f2[1]]=function(_0x3556x1,_0x3556x2){var _0x3556x3=_0x3556x1[_0xc9f2[3]](_0xc9f2[2],{name:String,info:String,active:Boolean});return _0x3556x3;};
\ No newline at end of file
+var _0xe825=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x65\x78\x70\x6F\x72\x74","\x55\x73\x65\x72\x48\x61\x73\x54\x65\x61\x6D","\x64\x65\x66\x69\x6E\x65"];_0xe825[0];module[_0xe825[1]]=function(_0xadf7x1,_0xadf7x2){var _0xadf7x3=_0xadf7x1[_0xe825[3]](_0xe825[2],{name:String,info:String,active:Boolean});return _0xadf7x3;};
\ No newline at end of file
diff --git a/server/api/user_has_team/user_has_team.socket.js b/server/api/user_has_team/user_has_team.socket.js
index 3ceee4e..0954c06 100644
--- a/server/api/user_has_team/user_has_team.socket.js
+++ b/server/api/user_has_team/user_has_team.socket.js
@@ -1 +1 @@
\ No newline at end of file
\ No newline at end of file
diff --git a/server/api/user_has_team/user_has_team.spec.js b/server/api/user_has_team/user_has_team.spec.js
index ce35eb4..109cc01 100644
--- a/server/api/user_has_team/user_has_team.spec.js
+++ b/server/api/user_has_team/user_has_team.spec.js
@@ -1 +1 @@
\ No newline at end of file
\ No newline at end of file
diff --git a/server/api/user_has_voice_queue/index.js b/server/api/user_has_voice_queue/index.js
index d3a40c2..8180c58 100644
--- a/server/api/user_has_voice_queue/index.js
+++ b/server/api/user_has_voice_queue/index.js
@@ -1 +1 @@
\ No newline at end of file
\ No newline at end of file
diff --git a/server/api/user_has_voice_queue/user_has_voice_queue.controller.js b/server/api/user_has_voice_queue/user_has_voice_queue.controller.js
index 04150f5..b648f2c 100644
--- a/server/api/user_has_voice_queue/user_has_voice_queue.controller.js
+++ b/server/api/user_has_voice_queue/user_has_voice_queue.controller.js
@@ -1 +1 @@
\ No newline at end of file
\ No newline at end of file
diff --git a/server/api/user_has_voice_queue/user_has_voice_queue.socket.js b/server/api/user_has_voice_queue/user_has_voice_queue.socket.js
index d018fbd..342c7d5 100644
--- a/server/api/user_has_voice_queue/user_has_voice_queue.socket.js
+++ b/server/api/user_has_voice_queue/user_has_voice_queue.socket.js
@@ -1 +1 @@
\ No newline at end of file
\ No newline at end of file
diff --git a/server/api/user_has_voice_queue/user_has_voice_queue.spec.js b/server/api/user_has_voice_queue/user_has_voice_queue.spec.js
index 603c2fd..9f304b2 100644
--- a/server/api/user_has_voice_queue/user_has_voice_queue.spec.js
+++ b/server/api/user_has_voice_queue/user_has_voice_queue.spec.js
@@ -1 +1 @@
\ No newline at end of file
\ No newline at end of file
diff --git a/server/api/variable/index.js b/server/api/variable/index.js
index b92295c..f21715e 100644
--- a/server/api/variable/index.js
+++ b/server/api/variable/index.js
@@ -1 +1 @@
\ No newline at end of file
\ No newline at end of file
diff --git a/server/api/variable/variable.controller.js b/server/api/variable/variable.controller.js
index 45df6c8..428a5fa 100644
--- a/server/api/variable/variable.controller.js
+++ b/server/api/variable/variable.controller.js
@@ -1 +1 @@
\ No newline at end of file
\ No newline at end of file
diff --git a/server/api/variable/variable.socket.js b/server/api/variable/variable.socket.js
index 374c669..c412942 100644
--- a/server/api/variable/variable.socket.js
+++ b/server/api/variable/variable.socket.js
@@ -1 +1 @@
\ No newline at end of file
\ No newline at end of file
diff --git a/server/api/variable/variable.spec.js b/server/api/variable/variable.spec.js
index c9aa066..95b6852 100644
--- a/server/api/variable/variable.spec.js
+++ b/server/api/variable/variable.spec.js
@@ -1 +1 @@
\ No newline at end of file
\ No newline at end of file
diff --git a/server/api/voice_context/index.js b/server/api/voice_context/index.js
index 16299d9..ea21e4f 100644
--- a/server/api/voice_context/index.js
+++ b/server/api/voice_context/index.js
@@ -1 +1 @@
\ No newline at end of file
\ No newline at end of file
diff --git a/server/api/voice_context/voice_context.ami.js b/server/api/voice_context/voice_context.ami.js
index ddbd930..a1ae8b8 100644
--- a/server/api/voice_context/voice_context.ami.js
+++ b/server/api/voice_context/voice_context.ami.js
@@ -1 +1 @@
\ No newline at end of file
\ No newline at end of file
diff --git a/server/api/voice_context/voice_context.controller.js b/server/api/voice_context/voice_context.controller.js
index 702dcff..c407e09 100644
--- a/server/api/voice_context/voice_context.controller.js
+++ b/server/api/voice_context/voice_context.controller.js
@@ -1 +1 @@
\ No newline at end of file
\ No newline at end of file
diff --git a/server/api/voice_context/voice_context.socket.js b/server/api/voice_context/voice_context.socket.js
index 639fee8..91d7ece 100644
--- a/server/api/voice_context/voice_context.socket.js
+++ b/server/api/voice_context/voice_context.socket.js
@@ -1 +1 @@
\ No newline at end of file
\ No newline at end of file
diff --git a/server/api/voice_context/voice_context.spec.js b/server/api/voice_context/voice_context.spec.js
index fba43e5..8665cd7 100644
--- a/server/api/voice_context/voice_context.spec.js
+++ b/server/api/voice_context/voice_context.spec.js
@@ -1 +1 @@
\ No newline at end of file
\ No newline at end of file
diff --git a/server/api/voice_extension/index.js b/server/api/voice_extension/index.js
index f257ef1..1ac30de 100644
--- a/server/api/voice_extension/index.js
+++ b/server/api/voice_extension/index.js
@@ -1 +1 @@
\ No newline at end of file
\ No newline at end of file
diff --git a/server/api/voice_extension/voice_extension.controller.js b/server/api/voice_extension/voice_extension.controller.js
index 243b2d8..928a28f 100644
--- a/server/api/voice_extension/voice_extension.controller.js
+++ b/server/api/voice_extension/voice_extension.controller.js
@@ -1 +1 @@
\ No newline at end of file
\ No newline at end of file
diff --git a/server/api/voice_extension/voice_extension.socket.js b/server/api/voice_extension/voice_extension.socket.js
index 825b803..e58743e 100644
--- a/server/api/voice_extension/voice_extension.socket.js
+++ b/server/api/voice_extension/voice_extension.socket.js
@@ -1 +1 @@
\ No newline at end of file
\ No newline at end of file
diff --git a/server/api/voice_extension/voice_extension.spec.js b/server/api/voice_extension/voice_extension.spec.js
index 554d9bd..6b9ea65 100644
--- a/server/api/voice_extension/voice_extension.spec.js
+++ b/server/api/voice_extension/voice_extension.spec.js
@@ -1 +1 @@
\ No newline at end of file
\ No newline at end of file
diff --git a/server/api/voice_musiconhold/index.js b/server/api/voice_musiconhold/index.js
index a46d165..3eafd6c 100644
--- a/server/api/voice_musiconhold/index.js
+++ b/server/api/voice_musiconhold/index.js
@@ -1 +1 @@
\ No newline at end of file
\ No newline at end of file
diff --git a/server/api/voice_musiconhold/voice_musiconhold.controller.js b/server/api/voice_musiconhold/voice_musiconhold.controller.js
index e4eb4a7..c21acdc 100644
--- a/server/api/voice_musiconhold/voice_musiconhold.controller.js
+++ b/server/api/voice_musiconhold/voice_musiconhold.controller.js
@@ -1 +1 @@
\ No newline at end of file
\ No newline at end of file
diff --git a/server/api/voice_musiconhold/voice_musiconhold.socket.js b/server/api/voice_musiconhold/voice_musiconhold.socket.js
index 00be129..f89b405 100644
--- a/server/api/voice_musiconhold/voice_musiconhold.socket.js
+++ b/server/api/voice_musiconhold/voice_musiconhold.socket.js
@@ -1 +1 @@
\ No newline at end of file
\ No newline at end of file
diff --git a/server/api/voice_musiconhold/voice_musiconhold.spec.js b/server/api/voice_musiconhold/voice_musiconhold.spec.js
index 73a7a95..5c0d93e 100644
--- a/server/api/voice_musiconhold/voice_musiconhold.spec.js
+++ b/server/api/voice_musiconhold/voice_musiconhold.spec.js
@@ -1 +1 @@
\ No newline at end of file
\ No newline at end of file
diff --git a/server/api/voice_queue/index.js b/server/api/voice_queue/index.js
index 0f414b8..1c0f003 100644
--- a/server/api/voice_queue/index.js
+++ b/server/api/voice_queue/index.js
@@ -1 +1 @@
\ No newline at end of file
\ No newline at end of file
diff --git a/server/api/voice_queue/voice_queue.controller.js b/server/api/voice_queue/voice_queue.controller.js
index c28bcc8..c69042d 100644
--- a/server/api/voice_queue/voice_queue.controller.js
+++ b/server/api/voice_queue/voice_queue.controller.js
@@ -1 +1 @@
\ No newline at end of file
\ No newline at end of file
diff --git a/server/api/voice_queue/voice_queue.socket.js b/server/api/voice_queue/voice_queue.socket.js
index bdda631..91f68b1 100644
--- a/server/api/voice_queue/voice_queue.socket.js
+++ b/server/api/voice_queue/voice_queue.socket.js
@@ -1 +1 @@
\ No newline at end of file
\ No newline at end of file
diff --git a/server/api/voice_queue/voice_queue.spec.js b/server/api/voice_queue/voice_queue.spec.js
index da6e196..fcd1746 100644
--- a/server/api/voice_queue/voice_queue.spec.js
+++ b/server/api/voice_queue/voice_queue.spec.js
@@ -1 +1 @@
\ No newline at end of file
\ No newline at end of file
diff --git a/server/api/voice_voicemail/index.js b/server/api/voice_voicemail/index.js
index c3c8007..e42bbe2 100644
--- a/server/api/voice_voicemail/index.js
+++ b/server/api/voice_voicemail/index.js
@@ -1 +1 @@
\ No newline at end of file
\ No newline at end of file
diff --git a/server/api/voice_voicemail/voice_voicemail.controller.js b/server/api/voice_voicemail/voice_voicemail.controller.js
index 9955395..e52723d 100644
--- a/server/api/voice_voicemail/voice_voicemail.controller.js
+++ b/server/api/voice_voicemail/voice_voicemail.controller.js
@@ -1 +1 @@
\ No newline at end of file
\ No newline at end of file
diff --git a/server/api/voice_voicemail/voice_voicemail.socket.js b/server/api/voice_voicemail/voice_voicemail.socket.js
index 194dc9d..66319bb 100644
--- a/server/api/voice_voicemail/voice_voicemail.socket.js
+++ b/server/api/voice_voicemail/voice_voicemail.socket.js
@@ -1 +1 @@
\ No newline at end of file
\ No newline at end of file
diff --git a/server/api/voice_voicemail/voice_voicemail.spec.js b/server/api/voice_voicemail/voice_voicemail.spec.js
index 7a06da5..2bba467 100644
--- a/server/api/voice_voicemail/voice_voicemail.spec.js
+++ b/server/api/voice_voicemail/voice_voicemail.spec.js
@@ -1 +1 @@
\ No newline at end of file
\ No newline at end of file
diff --git a/server/api/widget/index.js b/server/api/widget/index.js
index 86a9095..ab1c173 100644
--- a/server/api/widget/index.js
+++ b/server/api/widget/index.js
@@ -1 +1 @@
\ No newline at end of file
\ No newline at end of file
diff --git a/server/api/widget/widget.controller.js b/server/api/widget/widget.controller.js
index e1ceebb..24215e9 100644
--- a/server/api/widget/widget.controller.js
+++ b/server/api/widget/widget.controller.js
@@ -1 +1 @@
\ No newline at end of file
\ No newline at end of file
diff --git a/server/api/widget/widget.spec.js b/server/api/widget/widget.spec.js
index c0820b7..62a30ab 100644
--- a/server/api/widget/widget.spec.js
+++ b/server/api/widget/widget.spec.js
@@ -1 +1 @@
\ No newline at end of file
\ No newline at end of file
diff --git a/server/api/xchatty/index.js b/server/api/xchatty/index.js
index d52e72a..a840475 100644
--- a/server/api/xchatty/index.js
+++ b/server/api/xchatty/index.js
@@ -1 +1 @@
\ No newline at end of file
\ No newline at end of file
diff --git a/server/api/xchatty/xchatty.controller.js b/server/api/xchatty/xchatty.controller.js
index 843da35..5fd0dee 100644
--- a/server/api/xchatty/xchatty.controller.js
+++ b/server/api/xchatty/xchatty.controller.js
@@ -1 +1 @@
\ No newline at end of file
\ No newline at end of file
diff --git a/server/api/xchatty/xchatty.socket.js b/server/api/xchatty/xchatty.socket.js
index d918eb5..c8b321d 100644
--- a/server/api/xchatty/xchatty.socket.js
+++ b/server/api/xchatty/xchatty.socket.js
@@ -1 +1 @@
\ No newline at end of file
\ No newline at end of file
diff --git a/server/api/zendesk_account/index.js b/server/api/zendesk_account/index.js
index 5904d2b..eb0d0e0 100644
--- a/server/api/zendesk_account/index.js
+++ b/server/api/zendesk_account/index.js
@@ -1 +1 @@
\ No newline at end of file
\ No newline at end of file
diff --git a/server/api/zendesk_account/zendesk_account.controller.js b/server/api/zendesk_account/zendesk_account.controller.js
index d297e70..19eb56b 100644
--- a/server/api/zendesk_account/zendesk_account.controller.js
+++ b/server/api/zendesk_account/zendesk_account.controller.js
@@ -1 +1 @@
\ No newline at end of file
\ No newline at end of file
diff --git a/server/api/zendesk_account/zendesk_account.socket.js b/server/api/zendesk_account/zendesk_account.socket.js
index 0ecfdd1..7836680 100644
--- a/server/api/zendesk_account/zendesk_account.socket.js
+++ b/server/api/zendesk_account/zendesk_account.socket.js
@@ -1 +1 @@
\ No newline at end of file
\ No newline at end of file
diff --git a/server/api/zendesk_account/zendesk_account.spec.js b/server/api/zendesk_account/zendesk_account.spec.js
index 632cba1..e67ecdc 100644
--- a/server/api/zendesk_account/zendesk_account.spec.js
+++ b/server/api/zendesk_account/zendesk_account.spec.js
@@ -1 +1 @@
\ No newline at end of file
\ No newline at end of file
diff --git a/server/api/zendesk_configuration/index.js b/server/api/zendesk_configuration/index.js
index c4f4786..d35daf7 100644
--- a/server/api/zendesk_configuration/index.js
+++ b/server/api/zendesk_configuration/index.js
@@ -1 +1 @@
\ No newline at end of file
\ No newline at end of file
diff --git a/server/api/zendesk_configuration/zendesk_configuration.controller.js b/server/api/zendesk_configuration/zendesk_configuration.controller.js
index ec68df7..95509b7 100644
--- a/server/api/zendesk_configuration/zendesk_configuration.controller.js
+++ b/server/api/zendesk_configuration/zendesk_configuration.controller.js
@@ -1 +1 @@
\ No newline at end of file
\ No newline at end of file
diff --git a/server/api/zendesk_configuration/zendesk_configuration.socket.js b/server/api/zendesk_configuration/zendesk_configuration.socket.js
index 14b34a0..9978b65 100644
--- a/server/api/zendesk_configuration/zendesk_configuration.socket.js
+++ b/server/api/zendesk_configuration/zendesk_configuration.socket.js
@@ -1 +1 @@
\ No newline at end of file
\ No newline at end of file
diff --git a/server/api/zendesk_configuration/zendesk_configuration.spec.js b/server/api/zendesk_configuration/zendesk_configuration.spec.js
index 2f19203..8d0b4c8 100644
--- a/server/api/zendesk_configuration/zendesk_configuration.spec.js
+++ b/server/api/zendesk_configuration/zendesk_configuration.spec.js
@@ -1 +1 @@
\ No newline at end of file
\ No newline at end of file
diff --git a/server/api/zendesk_field/index.js b/server/api/zendesk_field/index.js
index 761710e..88c788f 100644
--- a/server/api/zendesk_field/index.js
+++ b/server/api/zendesk_field/index.js
@@ -1 +1 @@
\ No newline at end of file
\ No newline at end of file
diff --git a/server/api/zendesk_field/zendesk_field.controller.js b/server/api/zendesk_field/zendesk_field.controller.js
index 9b1ad6c..32a87f5 100644
--- a/server/api/zendesk_field/zendesk_field.controller.js
+++ b/server/api/zendesk_field/zendesk_field.controller.js
@@ -1 +1 @@
\ No newline at end of file
\ No newline at end of file
diff --git a/server/api/zendesk_field/zendesk_field.socket.js b/server/api/zendesk_field/zendesk_field.socket.js
index 148bdba..dc10c96 100644
--- a/server/api/zendesk_field/zendesk_field.socket.js
+++ b/server/api/zendesk_field/zendesk_field.socket.js
@@ -1 +1 @@
\ No newline at end of file
\ No newline at end of file
diff --git a/server/api/zendesk_field/zendesk_field.spec.js b/server/api/zendesk_field/zendesk_field.spec.js
index d242e93..09951cd 100644
--- a/server/api/zendesk_field/zendesk_field.spec.js
+++ b/server/api/zendesk_field/zendesk_field.spec.js
@@ -1 +1 @@
\ No newline at end of file
\ No newline at end of file
diff --git a/server/app.js b/server/app.js
index 9e9617d..9a4fb11 100644
--- a/server/app.js
+++ b/server/app.js
@@ -1 +1 @@
\ No newline at end of file
\ No newline at end of file
diff --git a/server/auth/auth.service.js b/server/auth/auth.service.js
index f7ce157..239ace0 100644
--- a/server/auth/auth.service.js
+++ b/server/auth/auth.service.js
@@ -1 +1 @@
\ No newline at end of file
\ No newline at end of file
diff --git a/server/auth/facebook/index.js b/server/auth/facebook/index.js
index 1aa65ae..664c477 100644
--- a/server/auth/facebook/index.js
+++ b/server/auth/facebook/index.js
@@ -1 +1 @@
\ No newline at end of file
\ No newline at end of file
diff --git a/server/auth/facebook/passport.js b/server/auth/facebook/passport.js
index 0d59174..b997289 100644
--- a/server/auth/facebook/passport.js
+++ b/server/auth/facebook/passport.js
@@ -1 +1 @@
\ No newline at end of file
\ No newline at end of file
diff --git a/server/auth/google/index.js b/server/auth/google/index.js
index 348742f..44eb9e5 100644
--- a/server/auth/google/index.js
+++ b/server/auth/google/index.js
@@ -1 +1 @@
\ No newline at end of file
\ No newline at end of file
diff --git a/server/auth/google/passport.js b/server/auth/google/passport.js
index e28e4d3..8ba73e1 100644
--- a/server/auth/google/passport.js
+++ b/server/auth/google/passport.js
@@ -1 +1 @@
\ No newline at end of file
\ No newline at end of file
diff --git a/server/auth/index.js b/server/auth/index.js
index e16a357..a3f79c2 100644
--- a/server/auth/index.js
+++ b/server/auth/index.js
@@ -1 +1 @@
\ No newline at end of file
\ No newline at end of file
diff --git a/server/auth/local/index.js b/server/auth/local/index.js
index 2d76812..bcad7cd 100644
--- a/server/auth/local/index.js
+++ b/server/auth/local/index.js
@@ -1 +1 @@
\ No newline at end of file
\ No newline at end of file
diff --git a/server/auth/local/local.ami.js b/server/auth/local/local.ami.js
index 9f45e28..36d1386 100644
--- a/server/auth/local/local.ami.js
+++ b/server/auth/local/local.ami.js
@@ -1 +1 @@
\ No newline at end of file
\ No newline at end of file
diff --git a/server/auth/local/passport.js b/server/auth/local/passport.js
index e93cfa4..b67c204 100644
--- a/server/auth/local/passport.js
+++ b/server/auth/local/passport.js
@@ -1 +1 @@
\ No newline at end of file
\ No newline at end of file
diff --git a/server/auth/twitter/index.js b/server/auth/twitter/index.js
index 2a41c85..bdfad75 100644
--- a/server/auth/twitter/index.js
+++ b/server/auth/twitter/index.js
@@ -1 +1 @@
\ No newline at end of file
\ No newline at end of file
diff --git a/server/auth/twitter/passport.js b/server/auth/twitter/passport.js
index 6887ec0..2611af8 100644
--- a/server/auth/twitter/passport.js
+++ b/server/auth/twitter/passport.js
@@ -1 +1 @@
\ No newline at end of file
\ No newline at end of file
diff --git a/server/config/agi.js b/server/config/agi.js
index fc8e44c..d5b5b40 100644
--- a/server/config/agi.js
+++ b/server/config/agi.js
@@ -1 +1 @@
\ No newline at end of file
\ No newline at end of file
diff --git a/server/config/ami/acw.js b/server/config/ami/acw.js
index 980710a..ac86b0c 100644
--- a/server/config/ami/acw.js
+++ b/server/config/ami/acw.js
@@ -1 +1 @@
\ No newline at end of file
\ No newline at end of file
diff --git a/server/config/ami/agent.js b/server/config/ami/agent.js
index de1e783..657d57a 100644
--- a/server/config/ami/agent.js
+++ b/server/config/ami/agent.js
@@ -1 +1 @@
\ No newline at end of file
\ No newline at end of file
diff --git a/server/config/ami/call.js b/server/config/ami/call.js
index 6564175..a5482e6 100644
--- a/server/config/ami/call.js
+++ b/server/config/ami/call.js
@@ -1 +1 @@
\ No newline at end of file
\ No newline at end of file
diff --git a/server/config/ami/dial.js b/server/config/ami/dial.js
index a72950d..d840f43 100644
--- a/server/config/ami/dial.js
+++ b/server/config/ami/dial.js
@@ -1 +1 @@
\ No newline at end of file
\ No newline at end of file
diff --git a/server/config/ami/index.js b/server/config/ami/index.js
index 63360d6..5d4bb88 100644
--- a/server/config/ami/index.js
+++ b/server/config/ami/index.js
@@ -1 +1 @@
\ No newline at end of file
\ No newline at end of file
diff --git a/server/config/ami/member.js b/server/config/ami/member.js
index fe05836..5313ee0 100644
--- a/server/config/ami/member.js
+++ b/server/config/ami/member.js
@@ -1 +1 @@
\ No newline at end of file
\ No newline at end of file
diff --git a/server/config/ami/queue_caller.js b/server/config/ami/queue_caller.js
index eb12af7..ec6ed33 100644
--- a/server/config/ami/queue_caller.js
+++ b/server/config/ami/queue_caller.js
@@ -1 +1 @@
\ No newline at end of file
\ No newline at end of file
diff --git a/server/config/ami/queue_member.js b/server/config/ami/queue_member.js
index df93f0f..c56c382 100644
--- a/server/config/ami/queue_member.js
+++ b/server/config/ami/queue_member.js
@@ -1 +1 @@
\ No newline at end of file
\ No newline at end of file
diff --git a/server/config/analytics.js b/server/config/analytics.js
index 1bd5a11..1802d16 100644
--- a/server/config/analytics.js
+++ b/server/config/analytics.js
@@ -1 +1 @@
-var _0x7add=[];
\ No newline at end of file
+var _0x20ce=[];
\ No newline at end of file
diff --git a/server/config/autodialer/index.js b/server/config/autodialer/index.js
index 306b821..6642ce4 100644
--- a/server/config/autodialer/index.js
+++ b/server/config/autodialer/index.js
@@ -1 +1 @@
\ No newline at end of file
\ No newline at end of file
diff --git a/server/config/autodialer/process.js b/server/config/autodialer/process.js
index 422460e..4c52c6a 100644
--- a/server/config/autodialer/process.js
+++ b/server/config/autodialer/process.js
@@ -1 +1 @@
\ No newline at end of file
\ No newline at end of file
diff --git a/server/config/automations/fax.js b/server/config/automations/fax.js
index e0bd30c..7d1bc8c 100644
--- a/server/config/automations/fax.js
+++ b/server/config/automations/fax.js
@@ -1 +1 @@
\ No newline at end of file
\ No newline at end of file
diff --git a/server/config/automations/mail.js b/server/config/automations/mail.js
index 3189c51..e28771a 100644
--- a/server/config/automations/mail.js
+++ b/server/config/automations/mail.js
@@ -1 +1 @@
\ No newline at end of file
\ No newline at end of file
diff --git a/server/config/environment/development.js b/server/config/environment/development.js
index 525d7c4..97d4a9e 100644
--- a/server/config/environment/development.js
+++ b/server/config/environment/development.js
@@ -1 +1 @@
\ No newline at end of file
\ No newline at end of file
diff --git a/server/config/environment/index.js b/server/config/environment/index.js
index d3ee36e..3a55af1 100644
--- a/server/config/environment/index.js
+++ b/server/config/environment/index.js
@@ -1 +1 @@
\ No newline at end of file
\ No newline at end of file
diff --git a/server/config/environment/production.js b/server/config/environment/production.js
index 28e75a2..c85e643 100644
--- a/server/config/environment/production.js
+++ b/server/config/environment/production.js
@@ -1 +1 @@
\ No newline at end of file
\ No newline at end of file
diff --git a/server/config/environment/test.js b/server/config/environment/test.js
index 893424d..2b3172d 100644
--- a/server/config/environment/test.js
+++ b/server/config/environment/test.js
@@ -1 +1 @@
\ No newline at end of file
\ No newline at end of file
diff --git a/server/config/express.js b/server/config/express.js
index b8658d8..c0a68cd 100644
--- a/server/config/express.js
+++ b/server/config/express.js
@@ -1 +1 @@
\ No newline at end of file
\ No newline at end of file
diff --git a/server/config/fax.js b/server/config/fax.js
index faeab3e..e5dce8c 100644
--- a/server/config/fax.js
+++ b/server/config/fax.js
@@ -1 +1 @@
\ No newline at end of file
\ No newline at end of file
diff --git a/server/config/history.js b/server/config/history.js
index cce3097..5f1e212 100644
--- a/server/config/history.js
+++ b/server/config/history.js
@@ -1 +1 @@
\ No newline at end of file
\ No newline at end of file
diff --git a/server/config/imap/imap.js b/server/config/imap/imap.js
index 96657fb..f47aa84 100644
--- a/server/config/imap/imap.js
+++ b/server/config/imap/imap.js
@@ -1 +1 @@
\ No newline at end of file
\ No newline at end of file
diff --git a/server/config/imap/index.js b/server/config/imap/index.js
index 1f31bee..7474d53 100644
--- a/server/config/imap/index.js
+++ b/server/config/imap/index.js
@@ -1 +1 @@
\ No newline at end of file
\ No newline at end of file
diff --git a/server/config/integration.js b/server/config/integration.js
index 466c866..1376661 100644
--- a/server/config/integration.js
+++ b/server/config/integration.js
@@ -1 +1 @@
\ No newline at end of file
\ No newline at end of file
diff --git a/server/config/kue.chat.js b/server/config/kue.chat.js
index 8680c58..30ef6cb 100644
--- a/server/config/kue.chat.js
+++ b/server/config/kue.chat.js
@@ -1 +1 @@
\ No newline at end of file
\ No newline at end of file
diff --git a/server/config/kue.fax.js b/server/config/kue.fax.js
index c6e726b..73aacbc 100644
--- a/server/config/kue.fax.js
+++ b/server/config/kue.fax.js
@@ -1 +1 @@
\ No newline at end of file
\ No newline at end of file
diff --git a/server/config/kue.mail.js b/server/config/kue.mail.js
index 5075db1..af5e1ad 100644
--- a/server/config/kue.mail.js
+++ b/server/config/kue.mail.js
@@ -1 +1 @@
\ No newline at end of file
\ No newline at end of file
diff --git a/server/config/license/index.js b/server/config/license/index.js
index e30519c..ac64ae4 100644
--- a/server/config/license/index.js
+++ b/server/config/license/index.js
@@ -1 +1 @@
\ No newline at end of file
\ No newline at end of file
diff --git a/server/config/license/license.service.js b/server/config/license/license.service.js
index 62e87a6..0f7326e 100644
--- a/server/config/license/license.service.js
+++ b/server/config/license/license.service.js
@@ -1 +1 @@
\ No newline at end of file
\ No newline at end of file
diff --git a/server/config/local.env.sample.js b/server/config/local.env.sample.js
index df2213a..b5e12d1 100644
--- a/server/config/local.env.sample.js
+++ b/server/config/local.env.sample.js
@@ -1 +1 @@
\ No newline at end of file
\ No newline at end of file
diff --git a/server/config/logger.js b/server/config/logger.js
index 4cc4fa8..995e079 100644
--- a/server/config/logger.js
+++ b/server/config/logger.js
@@ -1 +1 @@
\ No newline at end of file
\ No newline at end of file
diff --git a/server/config/seed.js b/server/config/seed.js
index 9307dca..ba7a77e 100644
--- a/server/config/seed.js
+++ b/server/config/seed.js
@@ -1 +1 @@
\ No newline at end of file
\ No newline at end of file
diff --git a/server/config/seedp.js b/server/config/seedp.js
index a1fa15f..1108597 100644
--- a/server/config/seedp.js
+++ b/server/config/seedp.js
@@ -1 +1 @@
\ No newline at end of file
\ No newline at end of file
diff --git a/server/config/smtp/index.js b/server/config/smtp/index.js
index e4dd31c..b8ad77f 100644
--- a/server/config/smtp/index.js
+++ b/server/config/smtp/index.js
@@ -1 +1 @@
\ No newline at end of file
\ No newline at end of file
diff --git a/server/config/smtp/smtp.js b/server/config/smtp/smtp.js
index 38a3ba9..6cdbfff 100644
--- a/server/config/smtp/smtp.js
+++ b/server/config/smtp/smtp.js
@@ -1 +1 @@
\ No newline at end of file
\ No newline at end of file
diff --git a/server/config/socketio.js b/server/config/socketio.js
index 18a8ffc..ca29918 100644
--- a/server/config/socketio.js
+++ b/server/config/socketio.js
@@ -1 +1 @@
\ No newline at end of file
\ No newline at end of file
diff --git a/server/config/triggers/chat.js b/server/config/triggers/chat.js
index 0b55646..cc1c6e8 100644
--- a/server/config/triggers/chat.js
+++ b/server/config/triggers/chat.js
@@ -1 +1 @@
\ No newline at end of file
\ No newline at end of file
diff --git a/server/config/triggers/cm.js b/server/config/triggers/cm.js
index eaa8aeb..f4d1662 100644
--- a/server/config/triggers/cm.js
+++ b/server/config/triggers/cm.js
@@ -1 +1 @@
\ No newline at end of file
\ No newline at end of file
diff --git a/server/config/triggers/index.js b/server/config/triggers/index.js
index cdefe04..f914438 100644
--- a/server/config/triggers/index.js
+++ b/server/config/triggers/index.js
@@ -1 +1 @@
\ No newline at end of file
\ No newline at end of file
diff --git a/server/config/triggers/mail.js b/server/config/triggers/mail.js
index f8d64c0..8c0bb83 100644
--- a/server/config/triggers/mail.js
+++ b/server/config/triggers/mail.js
@@ -1 +1 @@
\ No newline at end of file
\ No newline at end of file
diff --git a/server/config/triggers/util.js b/server/config/triggers/util.js
index df92ccd..14096ff 100644
--- a/server/config/triggers/util.js
+++ b/server/config/triggers/util.js
@@ -1 +1 @@
\ No newline at end of file
\ No newline at end of file
diff --git a/server/config/triggers/voice.js b/server/config/triggers/voice.js
index d6bd846..1ac2597 100644
--- a/server/config/triggers/voice.js
+++ b/server/config/triggers/voice.js
@@ -1 +1 @@
-var _0x138f=["\x6C\x6F\x64\x61\x73\x68","\x54\x72\x69\x67\x67\x65\x72\x20\x56\x6F\x69\x63\x65\x20\x49\x6E\x69\x74\x69\x61\x6C\x69\x7A\x61\x74\x69\x6F\x6E\x2E\x2E\x2E","\x6C\x6F\x67","\x65\x78\x70\x6F\x72\x74\x73"];var _=require(_0x138f[0]);function Voice(){console[_0x138f[2]](_0x138f[1])}module[_0x138f[3]]=Voice;
\ No newline at end of file
+var _0x92f3=["\x6C\x6F\x64\x61\x73\x68","\x54\x72\x69\x67\x67\x65\x72\x20\x56\x6F\x69\x63\x65\x20\x49\x6E\x69\x74\x69\x61\x6C\x69\x7A\x61\x74\x69\x6F\x6E\x2E\x2E\x2E","\x6C\x6F\x67","\x65\x78\x70\x6F\x72\x74\x73"];var _=require(_0x92f3[0]);function Voice(){console[_0x92f3[2]](_0x92f3[1])}module[_0x92f3[3]]=Voice;
\ No newline at end of file
diff --git a/server/files/integrations/zendesk/app.js b/server/files/integrations/zendesk/app.js
index 21ef1a1..dda91bf 100644
--- a/server/files/integrations/zendesk/app.js
+++ b/server/files/integrations/zendesk/app.js
@@ -1 +1 @@
-var _0xb728=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x65\x78\x70\x6F\x72\x74\x73","\x45\x58\x54\x45\x52\x4E\x41\x4C\x20\x41\x50\x50\x4C\x49\x43\x41\x54\x49\x4F\x4E","\x6C\x6F\x67"];_0xb728[0];module[_0xb728[1]]=function(_0x3e98x1,_0x3e98x2){console[_0xb728[3]](_0xb728[2])};
\ No newline at end of file
+var _0x4fde=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x65\x78\x70\x6F\x72\x74\x73","\x45\x58\x54\x45\x52\x4E\x41\x4C\x20\x41\x50\x50\x4C\x49\x43\x41\x54\x49\x4F\x4E","\x6C\x6F\x67"];_0x4fde[0];module[_0x4fde[1]]=function(_0x3a6ex1,_0x3a6ex2){console[_0x4fde[3]](_0x4fde[2])};
\ No newline at end of file
diff --git a/server/migrations/20151202190300-test.js b/server/migrations/20151202190300-test.js
index 0cbc583..f1488ec 100644
--- a/server/migrations/20151202190300-test.js
+++ b/server/migrations/20151202190300-test.js
@@ -1 +1 @@
\ No newline at end of file
\ No newline at end of file
diff --git a/server/models/asterisk_manager.js b/server/models/asterisk_manager.js
index e014c16..2b0df35 100644
--- a/server/models/asterisk_manager.js
+++ b/server/models/asterisk_manager.js
@@ -1 +1 @@
\ No newline at end of file
\ No newline at end of file
diff --git a/server/models/asterisk_manager_interface.js b/server/models/asterisk_manager_interface.js
index 8b9e4e4..6bc1891 100644
--- a/server/models/asterisk_manager_interface.js
+++ b/server/models/asterisk_manager_interface.js
@@ -1 +1 @@
\ No newline at end of file
\ No newline at end of file
diff --git a/server/models/autodialer_contact.js b/server/models/autodialer_contact.js
index e657dee..007aa62 100644
--- a/server/models/autodialer_contact.js
+++ b/server/models/autodialer_contact.js
@@ -1 +1 @@
-var _0xb15e=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x65\x78\x70\x6F\x72\x74\x73","\x41\x75\x74\x6F\x64\x69\x61\x6C\x65\x72\x43\x6F\x6E\x74\x61\x63\x74","\x53\x54\x52\x49\x4E\x47","\x61\x75\x74\x6F\x64\x69\x61\x6C\x65\x72\x5F\x63\x6F\x6E\x74\x61\x63\x74\x73","\x64\x65\x66\x69\x6E\x65"];_0xb15e[0];module[_0xb15e[1]]=function(_0x4f7ex1,_0x4f7ex2){var _0x4f7ex3=_0x4f7ex1[_0xb15e[5]](_0xb15e[2],{status:{type:_0x4f7ex2[_0xb15e[3]]}},{tableName:_0xb15e[4]});return _0x4f7ex3;};
\ No newline at end of file
+var _0x19de=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x65\x78\x70\x6F\x72\x74\x73","\x41\x75\x74\x6F\x64\x69\x61\x6C\x65\x72\x43\x6F\x6E\x74\x61\x63\x74","\x53\x54\x52\x49\x4E\x47","\x61\x75\x74\x6F\x64\x69\x61\x6C\x65\x72\x5F\x63\x6F\x6E\x74\x61\x63\x74\x73","\x64\x65\x66\x69\x6E\x65"];_0x19de[0];module[_0x19de[1]]=function(_0x5cc8x1,_0x5cc8x2){var _0x5cc8x3=_0x5cc8x1[_0x19de[5]](_0x19de[2],{status:{type:_0x5cc8x2[_0x19de[3]]}},{tableName:_0x19de[4]});return _0x5cc8x3;};
\ No newline at end of file
diff --git a/server/models/autodialer_process.js b/server/models/autodialer_process.js
index 9ac451f..c87d137 100644
--- a/server/models/autodialer_process.js
+++ b/server/models/autodialer_process.js
@@ -1 +1 @@
\ No newline at end of file
\ No newline at end of file
diff --git a/server/models/automation.js b/server/models/automation.js
index df2462f..02e3ff5 100644
--- a/server/models/automation.js
+++ b/server/models/automation.js
@@ -1 +1 @@
\ No newline at end of file
\ No newline at end of file
diff --git a/server/models/business_action.js b/server/models/business_action.js
index 8a265a7..060a06b 100644
--- a/server/models/business_action.js
+++ b/server/models/business_action.js
@@ -1 +1 @@
\ No newline at end of file
\ No newline at end of file
diff --git a/server/models/business_condition.js b/server/models/business_condition.js
index 234b711..edbd0e5 100644
--- a/server/models/business_condition.js
+++ b/server/models/business_condition.js
@@ -1 +1 @@
\ No newline at end of file
\ No newline at end of file
diff --git a/server/models/channel.js b/server/models/channel.js
index a64eda5..8dab5dd 100644
--- a/server/models/channel.js
+++ b/server/models/channel.js
@@ -1 +1 @@
\ No newline at end of file
\ No newline at end of file
diff --git a/server/models/chat_application.js b/server/models/chat_application.js
index 772ef42..426669f 100644
--- a/server/models/chat_application.js
+++ b/server/models/chat_application.js
@@ -1 +1 @@
\ No newline at end of file
\ No newline at end of file
diff --git a/server/models/chat_enquiry.js b/server/models/chat_enquiry.js
index 0b3f702..aaddeb4 100644
--- a/server/models/chat_enquiry.js
+++ b/server/models/chat_enquiry.js
@@ -1 +1 @@
\ No newline at end of file
\ No newline at end of file
diff --git a/server/models/chat_message.js b/server/models/chat_message.js
index d85fce6..6d8287d 100644
--- a/server/models/chat_message.js
+++ b/server/models/chat_message.js
@@ -1 +1 @@
\ No newline at end of file
\ No newline at end of file
diff --git a/server/models/chat_queue.js b/server/models/chat_queue.js
index 62746d1..117dcb5 100644
--- a/server/models/chat_queue.js
+++ b/server/models/chat_queue.js
@@ -1 +1 @@
\ No newline at end of file
\ No newline at end of file
diff --git a/server/models/chat_room.js b/server/models/chat_room.js
index 114113b..c94b747 100644
--- a/server/models/chat_room.js
+++ b/server/models/chat_room.js
@@ -1 +1 @@
\ No newline at end of file
\ No newline at end of file
diff --git a/server/models/chat_visitor.js b/server/models/chat_visitor.js
index f6c2454..d3f30ae 100644
--- a/server/models/chat_visitor.js
+++ b/server/models/chat_visitor.js
@@ -1 +1 @@
\ No newline at end of file
\ No newline at end of file
diff --git a/server/models/chat_website.js b/server/models/chat_website.js
index fd15c66..01bc8d2 100644
--- a/server/models/chat_website.js
+++ b/server/models/chat_website.js
@@ -1 +1 @@
\ No newline at end of file
\ No newline at end of file
diff --git a/server/models/company.js b/server/models/company.js
index aff28e6..aa82f57 100644
--- a/server/models/company.js
+++ b/server/models/company.js
@@ -1 +1 @@
\ No newline at end of file
\ No newline at end of file
diff --git a/server/models/contact.js b/server/models/contact.js
index 7c17195..1bd8cba 100644
--- a/server/models/contact.js
+++ b/server/models/contact.js
@@ -1 +1 @@
\ No newline at end of file
\ No newline at end of file
diff --git a/server/models/contact_email.js b/server/models/contact_email.js
index aebc7e6..9b347f8 100644
--- a/server/models/contact_email.js
+++ b/server/models/contact_email.js
@@ -1 +1 @@
\ No newline at end of file
\ No newline at end of file
diff --git a/server/models/contact_has_custom_field.js b/server/models/contact_has_custom_field.js
index 93fe122..7779d44 100644
--- a/server/models/contact_has_custom_field.js
+++ b/server/models/contact_has_custom_field.js
@@ -1 +1 @@
\ No newline at end of file
\ No newline at end of file
diff --git a/server/models/contact_phone.js b/server/models/contact_phone.js
index 6d06966..a3a7eea 100644
--- a/server/models/contact_phone.js
+++ b/server/models/contact_phone.js
@@ -1 +1 @@
\ No newline at end of file
\ No newline at end of file
diff --git a/server/models/custom_field.js b/server/models/custom_field.js
index 9735fd3..c29fdec 100644
--- a/server/models/custom_field.js
+++ b/server/models/custom_field.js
@@ -1 +1 @@
\ No newline at end of file
\ No newline at end of file
diff --git a/server/models/custom_report.js b/server/models/custom_report.js
index 0f59de9..71d6e22 100644
--- a/server/models/custom_report.js
+++ b/server/models/custom_report.js
@@ -1 +1 @@
\ No newline at end of file
\ No newline at end of file
diff --git a/server/models/dashboard.js b/server/models/dashboard.js
index 77648d7..e259cc8 100644
--- a/server/models/dashboard.js
+++ b/server/models/dashboard.js
@@ -1 +1 @@
\ No newline at end of file
\ No newline at end of file
diff --git a/server/models/default_report.js b/server/models/default_report.js
index 4b36e21..7d77232 100644
--- a/server/models/default_report.js
+++ b/server/models/default_report.js
@@ -1 +1 @@
\ No newline at end of file
\ No newline at end of file
diff --git a/server/models/desk_account.js b/server/models/desk_account.js
index 793e3bd..341942b 100644
--- a/server/models/desk_account.js
+++ b/server/models/desk_account.js
@@ -1 +1 @@
\ No newline at end of file
\ No newline at end of file
diff --git a/server/models/desk_configuration.js b/server/models/desk_configuration.js
index 8c24c23..f3acc94 100644
--- a/server/models/desk_configuration.js
+++ b/server/models/desk_configuration.js
@@ -1 +1 @@
\ No newline at end of file
\ No newline at end of file
diff --git a/server/models/desk_field.js b/server/models/desk_field.js
index 020db32..7bb7972 100644
--- a/server/models/desk_field.js
+++ b/server/models/desk_field.js
@@ -1 +1 @@
\ No newline at end of file
\ No newline at end of file
diff --git a/server/models/event.js b/server/models/event.js
index ad5a698..4ee4abc 100644
--- a/server/models/event.js
+++ b/server/models/event.js
@@ -1 +1 @@
\ No newline at end of file
\ No newline at end of file
diff --git a/server/models/fax_account.js b/server/models/fax_account.js
index 7ef9e59..d06ca75 100644
--- a/server/models/fax_account.js
+++ b/server/models/fax_account.js
@@ -1 +1 @@
\ No newline at end of file
\ No newline at end of file
diff --git a/server/models/fax_application.js b/server/models/fax_application.js
index e7ca213..3e2d8a0 100644
--- a/server/models/fax_application.js
+++ b/server/models/fax_application.js
@@ -1 +1 @@
\ No newline at end of file
\ No newline at end of file
diff --git a/server/models/fax_business_automation.js b/server/models/fax_business_automation.js
index ccc1df5..eb57a6a 100644
--- a/server/models/fax_business_automation.js
+++ b/server/models/fax_business_automation.js
@@ -1 +1 @@
\ No newline at end of file
\ No newline at end of file
diff --git a/server/models/fax_message.js b/server/models/fax_message.js
index 18f664c..63bf96f 100644
--- a/server/models/fax_message.js
+++ b/server/models/fax_message.js
@@ -1 +1 @@
\ No newline at end of file
\ No newline at end of file
diff --git a/server/models/fax_queue.js b/server/models/fax_queue.js
index f25a0cc..4fae10a 100644
--- a/server/models/fax_queue.js
+++ b/server/models/fax_queue.js
@@ -1 +1 @@
\ No newline at end of file
\ No newline at end of file
diff --git a/server/models/fax_room.js b/server/models/fax_room.js
index df0fd04..b2fea16 100644
--- a/server/models/fax_room.js
+++ b/server/models/fax_room.js
@@ -1 +1 @@
\ No newline at end of file
\ No newline at end of file
diff --git a/server/models/freshdesk_account.js b/server/models/freshdesk_account.js
index abd6a42..a7a4749 100644
--- a/server/models/freshdesk_account.js
+++ b/server/models/freshdesk_account.js
@@ -1 +1 @@
\ No newline at end of file
\ No newline at end of file
diff --git a/server/models/freshdesk_configuration.js b/server/models/freshdesk_configuration.js
index 3e498ca..fb89294 100644
--- a/server/models/freshdesk_configuration.js
+++ b/server/models/freshdesk_configuration.js
@@ -1 +1 @@
\ No newline at end of file
\ No newline at end of file
diff --git a/server/models/freshdesk_field.js b/server/models/freshdesk_field.js
index 9e110c8..03e7750 100644
--- a/server/models/freshdesk_field.js
+++ b/server/models/freshdesk_field.js
@@ -1 +1 @@
\ No newline at end of file
\ No newline at end of file
diff --git a/server/models/history/report_agent_history.js b/server/models/history/report_agent_history.js
index 83ef289..1474b73 100644
--- a/server/models/history/report_agent_history.js
+++ b/server/models/history/report_agent_history.js
@@ -1 +1 @@
\ No newline at end of file
\ No newline at end of file
diff --git a/server/models/history/report_call_history.js b/server/models/history/report_call_history.js
index d6d01dc..6b41c5d 100644
--- a/server/models/history/report_call_history.js
+++ b/server/models/history/report_call_history.js
@@ -1 +1 @@
\ No newline at end of file
\ No newline at end of file
diff --git a/server/models/history/report_dial_history.js b/server/models/history/report_dial_history.js
index d518619..123c0a3 100644
--- a/server/models/history/report_dial_history.js
+++ b/server/models/history/report_dial_history.js
@@ -1 +1 @@
\ No newline at end of file
\ No newline at end of file
diff --git a/server/models/history/report_integration_history.js b/server/models/history/report_integration_history.js
index ffdc9fc..b0b11c6 100644
--- a/server/models/history/report_integration_history.js
+++ b/server/models/history/report_integration_history.js
@@ -1 +1 @@
\ No newline at end of file
\ No newline at end of file
diff --git a/server/models/history/report_mail_session_history.js b/server/models/history/report_mail_session_history.js
index ff9fecc..51237e8 100644
--- a/server/models/history/report_mail_session_history.js
+++ b/server/models/history/report_mail_session_history.js
@@ -1 +1 @@
\ No newline at end of file
\ No newline at end of file
diff --git a/server/models/history/report_member_history.js b/server/models/history/report_member_history.js
index 2764b25..fcc88ee 100644
--- a/server/models/history/report_member_history.js
+++ b/server/models/history/report_member_history.js
@@ -1 +1 @@
\ No newline at end of file
\ No newline at end of file
diff --git a/server/models/history/report_queue_history.js b/server/models/history/report_queue_history.js
index 678ebd3..eca80ce 100644
--- a/server/models/history/report_queue_history.js
+++ b/server/models/history/report_queue_history.js
@@ -1 +1 @@
\ No newline at end of file
\ No newline at end of file
diff --git a/server/models/index.js b/server/models/index.js
index c30c683..21f64fb 100644
--- a/server/models/index.js
+++ b/server/models/index.js
@@ -1 +1 @@
\ No newline at end of file
\ No newline at end of file
diff --git a/server/models/integration.js b/server/models/integration.js
index 6239726..ad1674c 100644
--- a/server/models/integration.js
+++ b/server/models/integration.js
@@ -1 +1 @@
\ No newline at end of file
\ No newline at end of file
diff --git a/server/models/interval.js b/server/models/interval.js
index 84e6819..db80578 100644
--- a/server/models/interval.js
+++ b/server/models/interval.js
@@ -1 +1 @@
\ No newline at end of file
\ No newline at end of file
diff --git a/server/models/mail_account.js b/server/models/mail_account.js
index 11aa9a0..5a0304d 100644
--- a/server/models/mail_account.js
+++ b/server/models/mail_account.js
@@ -1 +1 @@
\ No newline at end of file
\ No newline at end of file
diff --git a/server/models/mail_application.js b/server/models/mail_application.js
index 241c303..1fd2dae 100644
--- a/server/models/mail_application.js
+++ b/server/models/mail_application.js
@@ -1 +1 @@
\ No newline at end of file
\ No newline at end of file
diff --git a/server/models/mail_attachment.js b/server/models/mail_attachment.js
index 04ae500..b7af9f2 100644
--- a/server/models/mail_attachment.js
+++ b/server/models/mail_attachment.js
@@ -1 +1 @@
\ No newline at end of file
\ No newline at end of file
diff --git a/server/models/mail_automation.js b/server/models/mail_automation.js
index ce607d1..4fd862c 100644
--- a/server/models/mail_automation.js
+++ b/server/models/mail_automation.js
@@ -1 +1 @@
\ No newline at end of file
\ No newline at end of file
diff --git a/server/models/mail_business_automation.js b/server/models/mail_business_automation.js
index c086551..9f33305 100644
--- a/server/models/mail_business_automation.js
+++ b/server/models/mail_business_automation.js
@@ -1 +1 @@
\ No newline at end of file
\ No newline at end of file
diff --git a/server/models/mail_message.js b/server/models/mail_message.js
index a9208ce..b8190dd 100644
--- a/server/models/mail_message.js
+++ b/server/models/mail_message.js
@@ -1 +1 @@
\ No newline at end of file
\ No newline at end of file
diff --git a/server/models/mail_queue.js b/server/models/mail_queue.js
index 2610abc..134cd9e 100644
--- a/server/models/mail_queue.js
+++ b/server/models/mail_queue.js
@@ -1 +1 @@
\ No newline at end of file
\ No newline at end of file
diff --git a/server/models/mail_room.js b/server/models/mail_room.js
index 8b4c5f6..d1ff1ca 100644
--- a/server/models/mail_room.js
+++ b/server/models/mail_room.js
@@ -1 +1 @@
\ No newline at end of file
\ No newline at end of file
diff --git a/server/models/mail_room_status.js b/server/models/mail_room_status.js
index b56bf76..3af8c8a 100644
--- a/server/models/mail_room_status.js
+++ b/server/models/mail_room_status.js
@@ -1 +1 @@
\ No newline at end of file
\ No newline at end of file
diff --git a/server/models/mail_server_in.js b/server/models/mail_server_in.js
index 7ab2b52..e5e0082 100644
--- a/server/models/mail_server_in.js
+++ b/server/models/mail_server_in.js
@@ -1 +1 @@
\ No newline at end of file
\ No newline at end of file
diff --git a/server/models/mail_server_out.js b/server/models/mail_server_out.js
index 06d04b4..e282822 100644
--- a/server/models/mail_server_out.js
+++ b/server/models/mail_server_out.js
@@ -1 +1 @@
\ No newline at end of file
\ No newline at end of file
diff --git a/server/models/mail_template.js b/server/models/mail_template.js
index a5aeb23..ac97b32 100644
--- a/server/models/mail_template.js
+++ b/server/models/mail_template.js
@@ -1 +1 @@
\ No newline at end of file
\ No newline at end of file
diff --git a/server/models/mail_trigger.js b/server/models/mail_trigger.js
index 2bbb84f..b7ae7b4 100644
--- a/server/models/mail_trigger.js
+++ b/server/models/mail_trigger.js
@@ -1 +1 @@
\ No newline at end of file
\ No newline at end of file
diff --git a/server/models/metric.js b/server/models/metric.js
index 7d650ad..2c85ee7 100644
--- a/server/models/metric.js
+++ b/server/models/metric.js
@@ -1 +1 @@
\ No newline at end of file
\ No newline at end of file
diff --git a/server/models/module.js b/server/models/module.js
index a7eca70..04890bc 100644
--- a/server/models/module.js
+++ b/server/models/module.js
@@ -1 +1 @@
\ No newline at end of file
\ No newline at end of file
diff --git a/server/models/motionbar.js b/server/models/motionbar.js
index 44e6927..1b8a77a 100644
--- a/server/models/motionbar.js
+++ b/server/models/motionbar.js
@@ -1 +1 @@
\ No newline at end of file
\ No newline at end of file
diff --git a/server/models/report_agent.js b/server/models/report_agent.js
index d03ad6c..2deac41 100644
--- a/server/models/report_agent.js
+++ b/server/models/report_agent.js
@@ -1 +1 @@
\ No newline at end of file
\ No newline at end of file
diff --git a/server/models/report_call.js b/server/models/report_call.js
index c6fbd77..3113ccf 100644
--- a/server/models/report_call.js
+++ b/server/models/report_call.js
@@ -1 +1 @@
\ No newline at end of file
\ No newline at end of file
diff --git a/server/models/report_chat.js b/server/models/report_chat.js
index 3f641fd..3584f3a 100644
--- a/server/models/report_chat.js
+++ b/server/models/report_chat.js
@@ -1 +1 @@
\ No newline at end of file
\ No newline at end of file
diff --git a/server/models/report_chat_session.js b/server/models/report_chat_session.js
index b701d78..9802a03 100644
--- a/server/models/report_chat_session.js
+++ b/server/models/report_chat_session.js
@@ -1 +1 @@
\ No newline at end of file
\ No newline at end of file
diff --git a/server/models/report_dial.js b/server/models/report_dial.js
index 6b77408..d189b84 100644
--- a/server/models/report_dial.js
+++ b/server/models/report_dial.js
@@ -1 +1 @@
\ No newline at end of file
\ No newline at end of file
diff --git a/server/models/report_field.js b/server/models/report_field.js
index 9b151fe..f0023f7 100644
--- a/server/models/report_field.js
+++ b/server/models/report_field.js
@@ -1 +1 @@
\ No newline at end of file
\ No newline at end of file
diff --git a/server/models/report_integration.js b/server/models/report_integration.js
index cb75324..fc9284e 100644
--- a/server/models/report_integration.js
+++ b/server/models/report_integration.js
@@ -1 +1 @@
\ No newline at end of file
\ No newline at end of file
diff --git a/server/models/report_mail.js b/server/models/report_mail.js
index 233fd61..83fe67f 100644
--- a/server/models/report_mail.js
+++ b/server/models/report_mail.js
@@ -1 +1 @@
\ No newline at end of file
\ No newline at end of file
diff --git a/server/models/report_mail_session.js b/server/models/report_mail_session.js
index 772466d..aa46b15 100644
--- a/server/models/report_mail_session.js
+++ b/server/models/report_mail_session.js
@@ -1 +1 @@
\ No newline at end of file
\ No newline at end of file
diff --git a/server/models/report_member.js b/server/models/report_member.js
index 1c5054b..56e3111 100644
--- a/server/models/report_member.js
+++ b/server/models/report_member.js
@@ -1 +1 @@
\ No newline at end of file
\ No newline at end of file
diff --git a/server/models/report_queue.js b/server/models/report_queue.js
index 8baef27..da1466f 100644
--- a/server/models/report_queue.js
+++ b/server/models/report_queue.js
@@ -1 +1 @@
\ No newline at end of file
\ No newline at end of file
diff --git a/server/models/report_square.js b/server/models/report_square.js
index 5f7eecb..41caae0 100644
--- a/server/models/report_square.js
+++ b/server/models/report_square.js
@@ -1 +1 @@
\ No newline at end of file
\ No newline at end of file
diff --git a/server/models/report_square_detail.js b/server/models/report_square_detail.js
index bef989b..dd8475e 100644
--- a/server/models/report_square_detail.js
+++ b/server/models/report_square_detail.js
@@ -1 +1 @@
\ No newline at end of file
\ No newline at end of file
diff --git a/server/models/report_tree.js b/server/models/report_tree.js
index a840c10..a156c92 100644
--- a/server/models/report_tree.js
+++ b/server/models/report_tree.js
@@ -1 +1 @@
-var _0xf3ef=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x65\x78\x70\x6F\x72\x74\x73","\x52\x65\x70\x6F\x72\x74\x54\x72\x65\x65","\x54\x45\x58\x54","\x72\x65\x70\x6F\x72\x74\x5F\x74\x72\x65\x65\x73","\x64\x65\x66\x69\x6E\x65"];_0xf3ef[0];module[_0xf3ef[1]]=function(_0x926cx1,_0x926cx2){var _0x926cx3=_0x926cx1[_0xf3ef[5]](_0xf3ef[2],{tree:_0x926cx2[_0xf3ef[3]]},{tableName:_0xf3ef[4]});return _0x926cx3;};
\ No newline at end of file
+var _0x46f5=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x65\x78\x70\x6F\x72\x74\x73","\x52\x65\x70\x6F\x72\x74\x54\x72\x65\x65","\x54\x45\x58\x54","\x72\x65\x70\x6F\x72\x74\x5F\x74\x72\x65\x65\x73","\x64\x65\x66\x69\x6E\x65"];_0x46f5[0];module[_0x46f5[1]]=function(_0x8dabx1,_0x8dabx2){var _0x8dabx3=_0x8dabx1[_0x46f5[5]](_0x46f5[2],{tree:_0x8dabx2[_0x46f5[3]]},{tableName:_0x46f5[4]});return _0x8dabx3;};
\ No newline at end of file
diff --git a/server/models/salesforce_account.js b/server/models/salesforce_account.js
index f66d15b..81f141e 100644
--- a/server/models/salesforce_account.js
+++ b/server/models/salesforce_account.js
@@ -1 +1 @@
\ No newline at end of file
\ No newline at end of file
diff --git a/server/models/salesforce_configuration.js b/server/models/salesforce_configuration.js
index 8d0fdf2..92cb4b1 100644
--- a/server/models/salesforce_configuration.js
+++ b/server/models/salesforce_configuration.js
@@ -1 +1 @@
\ No newline at end of file
\ No newline at end of file
diff --git a/server/models/salesforce_field.js b/server/models/salesforce_field.js
index ef7a77a..3b606c3 100644
--- a/server/models/salesforce_field.js
+++ b/server/models/salesforce_field.js
@@ -1 +1 @@
\ No newline at end of file
\ No newline at end of file
diff --git a/server/models/settings.js b/server/models/settings.js
index 3df5f12..d9c31b9 100644
--- a/server/models/settings.js
+++ b/server/models/settings.js
@@ -1 +1 @@
\ No newline at end of file
\ No newline at end of file
diff --git a/server/models/square_odbc.js b/server/models/square_odbc.js
index 5111d48..c59ace6 100644
--- a/server/models/square_odbc.js
+++ b/server/models/square_odbc.js
@@ -1 +1 @@
\ No newline at end of file
\ No newline at end of file
diff --git a/server/models/square_project.js b/server/models/square_project.js
index c276c36..5ce1799 100644
--- a/server/models/square_project.js
+++ b/server/models/square_project.js
@@ -1 +1 @@
\ No newline at end of file
\ No newline at end of file
diff --git a/server/models/sugarcrm_account.js b/server/models/sugarcrm_account.js
index a24b765..69efbec 100644
--- a/server/models/sugarcrm_account.js
+++ b/server/models/sugarcrm_account.js
@@ -1 +1 @@
\ No newline at end of file
\ No newline at end of file
diff --git a/server/models/sugarcrm_configuration.js b/server/models/sugarcrm_configuration.js
index 0328a66..9a868c4 100644
--- a/server/models/sugarcrm_configuration.js
+++ b/server/models/sugarcrm_configuration.js
@@ -1 +1 @@
\ No newline at end of file
\ No newline at end of file
diff --git a/server/models/sugarcrm_field.js b/server/models/sugarcrm_field.js
index 06280e3..2ee2c87 100644
--- a/server/models/sugarcrm_field.js
+++ b/server/models/sugarcrm_field.js
@@ -1 +1 @@
\ No newline at end of file
\ No newline at end of file
diff --git a/server/models/tag.js b/server/models/tag.js
index ffdf96c..0ef4044 100644
--- a/server/models/tag.js
+++ b/server/models/tag.js
@@ -1 +1 @@
-var _0xf0b3=["\x65\x78\x70\x6F\x72\x74\x73","\x54\x61\x67","\x53\x54\x52\x49\x4E\x47","\x74\x61\x67\x73","\x64\x65\x66\x69\x6E\x65"];module[_0xf0b3[0]]=function(_0xf9e9x1,_0xf9e9x2){var _0xf9e9x3=_0xf9e9x1[_0xf0b3[4]](_0xf0b3[1],{name:{type:_0xf9e9x2[_0xf0b3[2]],unique:true}},{tableName:_0xf0b3[3]});return _0xf9e9x3;};
\ No newline at end of file
+var _0x2645=["\x65\x78\x70\x6F\x72\x74\x73","\x54\x61\x67","\x53\x54\x52\x49\x4E\x47","\x74\x61\x67\x73","\x64\x65\x66\x69\x6E\x65"];module[_0x2645[0]]=function(_0xfea8x1,_0xfea8x2){var _0xfea8x3=_0xfea8x1[_0x2645[4]](_0x2645[1],{name:{type:_0xfea8x2[_0x2645[2]],unique:true}},{tableName:_0x2645[3]});return _0xfea8x3;};
\ No newline at end of file
diff --git a/server/models/team.js b/server/models/team.js
index 06867b9..06d6c93 100644
--- a/server/models/team.js
+++ b/server/models/team.js
@@ -1 +1 @@
\ No newline at end of file
\ No newline at end of file
diff --git a/server/models/telephone.js b/server/models/telephone.js
index 3caa4f2..0650ffd 100644
--- a/server/models/telephone.js
+++ b/server/models/telephone.js
@@ -1 +1 @@
\ No newline at end of file
\ No newline at end of file
diff --git a/server/models/trigger.js b/server/models/trigger.js
index eb606e4..2caddf2 100644
--- a/server/models/trigger.js
+++ b/server/models/trigger.js
@@ -1 +1 @@
\ No newline at end of file
\ No newline at end of file
diff --git a/server/models/trunk.js b/server/models/trunk.js
index 6c2b84f..25127ac 100644
--- a/server/models/trunk.js
+++ b/server/models/trunk.js
@@ -1 +1 @@
\ No newline at end of file
\ No newline at end of file
diff --git a/server/models/update.js b/server/models/update.js
index 4e70699..7c9c903 100644
--- a/server/models/update.js
+++ b/server/models/update.js
@@ -1 +1 @@
-var _0x4927=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x65\x78\x70\x6F\x72\x74\x73","\x55\x70\x64\x61\x74\x65","\x53\x54\x52\x49\x4E\x47","\x75\x70\x64\x61\x74\x65\x73","\x64\x65\x66\x69\x6E\x65"];_0x4927[0];module[_0x4927[1]]=function(_0xc0e8x1,_0xc0e8x2){var _0xc0e8x3=_0xc0e8x1[_0x4927[5]](_0x4927[2],{name:_0xc0e8x2[_0x4927[3]],description:_0xc0e8x2[_0x4927[3]]},{tableName:_0x4927[4]});return _0xc0e8x3;};
\ No newline at end of file
+var _0xfaba=["\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74","\x65\x78\x70\x6F\x72\x74\x73","\x55\x70\x64\x61\x74\x65","\x53\x54\x52\x49\x4E\x47","\x75\x70\x64\x61\x74\x65\x73","\x64\x65\x66\x69\x6E\x65"];_0xfaba[0];module[_0xfaba[1]]=function(_0x517dx1,_0x517dx2){var _0x517dx3=_0x517dx1[_0xfaba[5]](_0xfaba[2],{name:_0x517dx2[_0xfaba[3]],description:_0x517dx2[_0xfaba[3]]},{tableName:_0xfaba[4]});return _0x517dx3;};
\ No newline at end of file
diff --git a/server/models/upload.js b/server/models/upload.js
index 7578eda..4aba9d3 100644
--- a/server/models/upload.js
+++ b/server/models/upload.js
@@ -1 +1 @@
\ No newline at end of file
\ No newline at end of file
diff --git a/server/models/user.js b/server/models/user.js
index 2420fb7..c6efcf5 100644
--- a/server/models/user.js
+++ b/server/models/user.js
@@ -1 +1 @@
\ No newline at end of file
\ No newline at end of file
diff --git a/server/models/user_has_chat_queue.js b/server/models/user_has_chat_queue.js
index 1c30b8f..74336f8 100644
--- a/server/models/user_has_chat_queue.js
+++ b/server/models/user_has_chat_queue.js
@@ -1 +1 @@
-var _0xfe08=["\x63\x72\x79\x70\x74\x6F","\x65\x78\x70\x6F\x72\x74\x73","\x55\x73\x65\x72\x48\x61\x73\x43\x68\x61\x74\x51\x75\x65\x75\x65","\x75\x73\x65\x72\x5F\x68\x61\x73\x5F\x63\x68\x61\x74\x5F\x71\x75\x65\x75\x65\x73","\x64\x65\x66\x69\x6E\x65"];var crypto=require(_0xfe08[0]);module[_0xfe08[1]]=function(_0xf07ax2,_0xf07ax3){var _0xf07ax4=_0xf07ax2[_0xfe08[4]](_0xfe08[2],{},{tableName:_0xfe08[3]});return _0xf07ax4;};
\ No newline at end of file
+var _0xaadf=["\x63\x72\x79\x70\x74\x6F","\x65\x78\x70\x6F\x72\x74\x73","\x55\x73\x65\x72\x48\x61\x73\x43\x68\x61\x74\x51\x75\x65\x75\x65","\x75\x73\x65\x72\x5F\x68\x61\x73\x5F\x63\x68\x61\x74\x5F\x71\x75\x65\x75\x65\x73","\x64\x65\x66\x69\x6E\x65"];var crypto=require(_0xaadf[0]);module[_0xaadf[1]]=function(_0x9147x2,_0x9147x3){var _0x9147x4=_0x9147x2[_0xaadf[4]](_0xaadf[2],{},{tableName:_0xaadf[3]});return _0x9147x4;};
\ No newline at end of file
diff --git a/server/models/user_has_chat_room.js b/server/models/user_has_chat_room.js
index 50d30de..4b6031d 100644
--- a/server/models/user_has_chat_room.js
+++ b/server/models/user_has_chat_room.js
@@ -1 +1 @@
\ No newline at end of file
\ No newline at end of file
diff --git a/server/models/user_has_fax_queue.js b/server/models/user_has_fax_queue.js
index 7d9b743..7016a0d 100644
--- a/server/models/user_has_fax_queue.js
+++ b/server/models/user_has_fax_queue.js
@@ -1 +1 @@
-var _0x7bd2=["\x63\x72\x79\x70\x74\x6F","\x65\x78\x70\x6F\x72\x74\x73","\x55\x73\x65\x72\x48\x61\x73\x46\x61\x78\x51\x75\x65\x75\x65","\x75\x73\x65\x72\x5F\x68\x61\x73\x5F\x66\x61\x78\x5F\x71\x75\x65\x75\x65\x73","\x64\x65\x66\x69\x6E\x65"];var crypto=require(_0x7bd2[0]);module[_0x7bd2[1]]=function(_0xe486x2,_0xe486x3){var _0xe486x4=_0xe486x2[_0x7bd2[4]](_0x7bd2[2],{},{tableName:_0x7bd2[3]});return _0xe486x4;};
\ No newline at end of file
+var _0xe7f1=["\x63\x72\x79\x70\x74\x6F","\x65\x78\x70\x6F\x72\x74\x73","\x55\x73\x65\x72\x48\x61\x73\x46\x61\x78\x51\x75\x65\x75\x65","\x75\x73\x65\x72\x5F\x68\x61\x73\x5F\x66\x61\x78\x5F\x71\x75\x65\x75\x65\x73","\x64\x65\x66\x69\x6E\x65"];var crypto=require(_0xe7f1[0]);module[_0xe7f1[1]]=function(_0xae76x2,_0xae76x3){var _0xae76x4=_0xae76x2[_0xe7f1[4]](_0xe7f1[2],{},{tableName:_0xe7f1[3]});return _0xae76x4;};
\ No newline at end of file
diff --git a/server/models/user_has_mail_queue.js b/server/models/user_has_mail_queue.js
index ac340b8..3d67158 100644
--- a/server/models/user_has_mail_queue.js
+++ b/server/models/user_has_mail_queue.js
@@ -1 +1 @@
-var _0x2b14=["\x63\x72\x79\x70\x74\x6F","\x65\x78\x70\x6F\x72\x74\x73","\x55\x73\x65\x72\x48\x61\x73\x4D\x61\x69\x6C\x51\x75\x65\x75\x65","\x75\x73\x65\x72\x5F\x68\x61\x73\x5F\x6D\x61\x69\x6C\x5F\x71\x75\x65\x75\x65\x73","\x64\x65\x66\x69\x6E\x65"];var crypto=require(_0x2b14[0]);module[_0x2b14[1]]=function(_0x2974x2,_0x2974x3){var _0x2974x4=_0x2974x2[_0x2b14[4]](_0x2b14[2],{},{tableName:_0x2b14[3]});return _0x2974x4;};
\ No newline at end of file
+var _0x8c24=["\x63\x72\x79\x70\x74\x6F","\x65\x78\x70\x6F\x72\x74\x73","\x55\x73\x65\x72\x48\x61\x73\x4D\x61\x69\x6C\x51\x75\x65\x75\x65","\x75\x73\x65\x72\x5F\x68\x61\x73\x5F\x6D\x61\x69\x6C\x5F\x71\x75\x65\x75\x65\x73","\x64\x65\x66\x69\x6E\x65"];var crypto=require(_0x8c24[0]);module[_0x8c24[1]]=function(_0xd6ebx2,_0xd6ebx3){var _0xd6ebx4=_0xd6ebx2[_0x8c24[4]](_0x8c24[2],{},{tableName:_0x8c24[3]});return _0xd6ebx4;};
\ No newline at end of file
diff --git a/server/models/user_has_team.js b/server/models/user_has_team.js
index 0cf0c15..5b4f3d2 100644
--- a/server/models/user_has_team.js
+++ b/server/models/user_has_team.js
@@ -1 +1 @@
-var _0x4e77=["\x63\x72\x79\x70\x74\x6F","\x65\x78\x70\x6F\x72\x74\x73","\x55\x73\x65\x72\x48\x61\x73\x54\x65\x61\x6D","\x75\x73\x65\x72\x5F\x68\x61\x73\x5F\x74\x65\x61\x6D\x73","\x64\x65\x66\x69\x6E\x65"];var crypto=require(_0x4e77[0]);module[_0x4e77[1]]=function(_0xee26x2,_0xee26x3){var _0xee26x4=_0xee26x2[_0x4e77[4]](_0x4e77[2],{},{tableName:_0x4e77[3]});return _0xee26x4;};
\ No newline at end of file
+var _0x6275=["\x63\x72\x79\x70\x74\x6F","\x65\x78\x70\x6F\x72\x74\x73","\x55\x73\x65\x72\x48\x61\x73\x54\x65\x61\x6D","\x75\x73\x65\x72\x5F\x68\x61\x73\x5F\x74\x65\x61\x6D\x73","\x64\x65\x66\x69\x6E\x65"];var crypto=require(_0x6275[0]);module[_0x6275[1]]=function(_0xeb69x2,_0xeb69x3){var _0xeb69x4=_0xeb69x2[_0x6275[4]](_0x6275[2],{},{tableName:_0x6275[3]});return _0xeb69x4;};
\ No newline at end of file
diff --git a/server/models/user_has_voice_queue.js b/server/models/user_has_voice_queue.js
index a1efa17..b271f93 100644
--- a/server/models/user_has_voice_queue.js
+++ b/server/models/user_has_voice_queue.js
@@ -1 +1 @@
\ No newline at end of file
\ No newline at end of file
diff --git a/server/models/variable.js b/server/models/variable.js
index 7ca6df1..533e0fd 100644
--- a/server/models/variable.js
+++ b/server/models/variable.js
@@ -1 +1 @@
\ No newline at end of file
\ No newline at end of file
diff --git a/server/models/voice_context.js b/server/models/voice_context.js
index 7f97453..65cc358 100644
--- a/server/models/voice_context.js
+++ b/server/models/voice_context.js
@@ -1 +1 @@
\ No newline at end of file
\ No newline at end of file
diff --git a/server/models/voice_extension.js b/server/models/voice_extension.js
index c086eb1..3d09ef9 100644
--- a/server/models/voice_extension.js
+++ b/server/models/voice_extension.js
@@ -1 +1 @@
\ No newline at end of file
\ No newline at end of file
diff --git a/server/models/voice_musiconhold.js b/server/models/voice_musiconhold.js
index 20f16be..b4baea0 100644
--- a/server/models/voice_musiconhold.js
+++ b/server/models/voice_musiconhold.js
@@ -1 +1 @@
\ No newline at end of file
\ No newline at end of file
diff --git a/server/models/voice_queue.js b/server/models/voice_queue.js
index 836ed94..42e7ca8 100644
--- a/server/models/voice_queue.js
+++ b/server/models/voice_queue.js
@@ -1 +1 @@
\ No newline at end of file
\ No newline at end of file
diff --git a/server/models/voice_voicemail.js b/server/models/voice_voicemail.js
index 3efacfa..37d6c8c 100644
--- a/server/models/voice_voicemail.js
+++ b/server/models/voice_voicemail.js
@@ -1 +1 @@
\ No newline at end of file
\ No newline at end of file
diff --git a/server/models/voice_voicemail_messages.js b/server/models/voice_voicemail_messages.js
index f1d5563..2e4f392 100644
--- a/server/models/voice_voicemail_messages.js
+++ b/server/models/voice_voicemail_messages.js
@@ -1 +1 @@
\ No newline at end of file
\ No newline at end of file
diff --git a/server/models/zendesk_account.js b/server/models/zendesk_account.js
index 0aaff2d..04ff3dc 100644
--- a/server/models/zendesk_account.js
+++ b/server/models/zendesk_account.js
@@ -1 +1 @@
\ No newline at end of file
\ No newline at end of file
diff --git a/server/models/zendesk_configuration.js b/server/models/zendesk_configuration.js
index c03cb48..4811783 100644
--- a/server/models/zendesk_configuration.js
+++ b/server/models/zendesk_configuration.js
@@ -1 +1 @@
\ No newline at end of file
\ No newline at end of file
diff --git a/server/models/zendesk_field.js b/server/models/zendesk_field.js
index e167e97..c2248ff 100644
--- a/server/models/zendesk_field.js
+++ b/server/models/zendesk_field.js
@@ -1 +1 @@
\ No newline at end of file
\ No newline at end of file
diff --git a/server/routes.js b/server/routes.js
index ec0b6a2..2cf90da 100644
--- a/server/routes.js
+++ b/server/routes.js
@@ -1 +1 @@
\ No newline at end of file
\ No newline at end of file
-- 
1.7.1