Added mathjax and problem markdown editor
authorBrendan Hansen <brendan.f.hansen@gmail.com>
Tue, 17 Sep 2019 04:26:59 +0000 (23:26 -0500)
committerBrendan Hansen <brendan.f.hansen@gmail.com>
Tue, 17 Sep 2019 04:26:59 +0000 (23:26 -0500)
codebox/controllers/admin/problem/edit.moon
codebox/static/coffee/admin_problem.coffee
codebox/static/css/core.css
codebox/static/css/core.css.map
codebox/static/js/admin_problem.js
codebox/static/js/admin_problem.js.map
codebox/static/js/vendor/ace/mode-markdown.js [new file with mode: 0644]
codebox/static/scss/core.scss
codebox/views/admin/problem/edit.moon
codebox/views/problem/problem.moon

index fda419317dff82bb041a5305eee0fb316bdeee66..f39ca466ef55c1e7945ffd0a0253744392375404 100644 (file)
@@ -8,7 +8,7 @@ make_controller
 
        middleware: { 'logged_in', 'admin_required' }
 
-       scripts: { 'admin_problem' }
+       scripts: { 'admin_problem', 'vendor/ace/ace' }
 
        get: capture_errors_json =>
                @flow 'csrf_setup'
index 0fc07b54a7d5c51638705c88ce7cc7d547e110e1..346b2352590a4011cc71dfb30203fb77609a4738 100644 (file)
@@ -48,6 +48,20 @@ setup_handlers = ->
                        alert "Deleted #{problem_name}."
                        window.location.reload()
 
+       $('input[type=submit]').click (e) ->
+               e.preventDefault()
+               fields = {}
+               for f in $('form').serializeArray()
+                       fields[f.name] = f.value
+
+               edit = ace.edit 'code-editor'
+               fields.description = edit.getValue()
+
+               $.post window.location.pathname, fields, ->
+                       alert 'Updated problem info'
+                       window.location.reload()
+
+
 $(document).ready ->
        setup_handlers()
 
index c9c1a530e8b6ce9b94d681e078ce7cdaf584ee1d..ac4da034253cb745e1fd60d055fab55b89003b66 100644 (file)
@@ -1 +1 @@
-.navbar{z-index:10000;width:100%;background:#0077c2;height:47px;position:relative;box-shadow:0px 0px 10px 0px rgba(0,0,0,.7);display:grid;grid-template-columns:1fr 6fr 1fr}.navbar .navbar-logo{padding-left:8px;text-align:center}.navbar .navbar-logo img{max-height:calc(47px - 2px);display:inline}.navbar ul{display:block;text-align:center;font-size:0}.navbar ul a li{margin:0;display:inline-block;cursor:pointer;font-size:24px;list-style:none;line-height:40px;padding-left:30px;padding-right:30px;padding-top:4px;color:#f2f2f2;border-top-color:#0077c2;transition:200ms all}.navbar ul a li.selected,.navbar ul a li:hover{border-bottom:2px solid #ffe766;color:#fff}.navbar .navbar-username{position:relative;max-height:47px;font-size:24px;line-height:40px;text-align:center;padding-top:4px;cursor:pointer;background-color:#00385c;transition:background-color 150ms}.navbar .navbar-username:hover,.navbar .navbar-username.selected{background-color:#00588f}.navbar .navbar-username:hover .navbar-username-dropdown,.navbar .navbar-username.selected .navbar-username-dropdown{display:block}.navbar .navbar-username a{display:block;width:100%}.navbar .navbar-username .navbar-username-dropdown{display:none;position:absolute;top:100%;left:0;width:100%}.navbar .navbar-username .navbar-username-dropdown .navbar-username-dropdown-option{border-bottom:1px solid #00588f;background:#00385c}.navbar .navbar-username .navbar-username-dropdown .navbar-username-dropdown-option:last-child{border-bottom:none}.navbar .navbar-username .navbar-username-dropdown .navbar-username-dropdown-option:hover{background-color:#00588f}.content,.error-list{width:100%;padding:10px 10%}.right{float:right}.left{float:left}.hidden{visibility:hidden}a{text-decoration:none;color:inherit}.split-2{display:grid;grid-template-columns:repeat(2, 1fr)}.split-2>*:first-child{margin-right:12px}.split-2>*:last-child{margin-left:12px}.split-3{display:grid;grid-template-columns:repeat(3, 1fr)}.split-4{display:grid;grid-template-columns:repeat(4, 1fr)}.split-lr{display:grid;grid-template-columns:1fr 1fr}.split-lr>*:first-child{text-align:left}.split-lr>*:last-child{text-align:right}.split-1-1{display:grid;grid-template-columns:1fr 1fr}.split-1-2{display:grid;grid-template-columns:1fr 2fr}.split-1-3{display:grid;grid-template-columns:1fr 3fr}.split-1-4{display:grid;grid-template-columns:1fr 4fr}.split-2-1{display:grid;grid-template-columns:2fr 1fr}.split-2-2{display:grid;grid-template-columns:2fr 2fr}.split-2-3{display:grid;grid-template-columns:2fr 3fr}.split-2-4{display:grid;grid-template-columns:2fr 4fr}.split-3-1{display:grid;grid-template-columns:3fr 1fr}.split-3-2{display:grid;grid-template-columns:3fr 2fr}.split-3-3{display:grid;grid-template-columns:3fr 3fr}.split-3-4{display:grid;grid-template-columns:3fr 4fr}.split-4-1{display:grid;grid-template-columns:4fr 1fr}.split-4-2{display:grid;grid-template-columns:4fr 2fr}.split-4-3{display:grid;grid-template-columns:4fr 3fr}.split-4-4{display:grid;grid-template-columns:4fr 4fr}pre{box-shadow:0px 2px 6px .5px rgba(0,0,0,.5);font-size:1rem}pre .hljs-ln td{padding-right:8px}pre .hljs-ln-line{max-width:200px !important}.fixed-half-split{display:grid;grid-template-columns:275px 1fr}.tabbed-split{display:grid !important}.tabbed-split.tab-12{grid-template-columns:12px 1fr}.tabbed-split.tab-16{grid-template-columns:16px 1fr}.tabbed-split.tab-24{grid-template-columns:24px 1fr}.tabbed-split.tab-32{grid-template-columns:32px 1fr}.tabbed-split.tab-48{grid-template-columns:48px 1fr}.tabbed-split.tab-64{grid-template-columns:64px 1fr}.tabbed-split.primary>span{background-color:#42a5f5}.tabbed-split.primary-light>span{background-color:#80d6ff}.tabbed-split.primary-dark>span{background-color:#0077c2}.tabbed-split.secondary>span{background-color:gold}.tabbed-split.secondary-light>span{background-color:#ffe766}.tabbed-split.secondary-dark>span{background-color:#998100}.tabbed-split.success>span{background-color:lime}.tabbed-split.error>span{background-color:#d00}.tabbed-split.error-light>span{background-color:#f44}.tabbed-split.error-dark>span{background-color:#700}.box{box-shadow:0px 2px 6px .5px rgba(0,0,0,.5);background-color:#111}.box .highlight:hover{background-color:#333}.w50{width:50%}.w100{width:100%}.pad-1{padding:1px !important}.pad-l-1{padding-left:1px !important}.pad-r-1{padding-right:1px !important}.pad-t-1{padding-top:1px !important}.pad-b-1{padding-bottom:1px !important}.mar-1{margin:1px !important}.mar-l-1{margin-left:1px !important}.mar-r-1{margin-right:1px !important}.mar-t-1{margin-top:1px !important}.mar-b-1{margin-bottom:1px !important}.pad-2{padding:2px !important}.pad-l-2{padding-left:2px !important}.pad-r-2{padding-right:2px !important}.pad-t-2{padding-top:2px !important}.pad-b-2{padding-bottom:2px !important}.mar-2{margin:2px !important}.mar-l-2{margin-left:2px !important}.mar-r-2{margin-right:2px !important}.mar-t-2{margin-top:2px !important}.mar-b-2{margin-bottom:2px !important}.pad-3{padding:3px !important}.pad-l-3{padding-left:3px !important}.pad-r-3{padding-right:3px !important}.pad-t-3{padding-top:3px !important}.pad-b-3{padding-bottom:3px !important}.mar-3{margin:3px !important}.mar-l-3{margin-left:3px !important}.mar-r-3{margin-right:3px !important}.mar-t-3{margin-top:3px !important}.mar-b-3{margin-bottom:3px !important}.pad-4{padding:4px !important}.pad-l-4{padding-left:4px !important}.pad-r-4{padding-right:4px !important}.pad-t-4{padding-top:4px !important}.pad-b-4{padding-bottom:4px !important}.mar-4{margin:4px !important}.mar-l-4{margin-left:4px !important}.mar-r-4{margin-right:4px !important}.mar-t-4{margin-top:4px !important}.mar-b-4{margin-bottom:4px !important}.pad-5{padding:5px !important}.pad-l-5{padding-left:5px !important}.pad-r-5{padding-right:5px !important}.pad-t-5{padding-top:5px !important}.pad-b-5{padding-bottom:5px !important}.mar-5{margin:5px !important}.mar-l-5{margin-left:5px !important}.mar-r-5{margin-right:5px !important}.mar-t-5{margin-top:5px !important}.mar-b-5{margin-bottom:5px !important}.pad-6{padding:6px !important}.pad-l-6{padding-left:6px !important}.pad-r-6{padding-right:6px !important}.pad-t-6{padding-top:6px !important}.pad-b-6{padding-bottom:6px !important}.mar-6{margin:6px !important}.mar-l-6{margin-left:6px !important}.mar-r-6{margin-right:6px !important}.mar-t-6{margin-top:6px !important}.mar-b-6{margin-bottom:6px !important}.pad-7{padding:7px !important}.pad-l-7{padding-left:7px !important}.pad-r-7{padding-right:7px !important}.pad-t-7{padding-top:7px !important}.pad-b-7{padding-bottom:7px !important}.mar-7{margin:7px !important}.mar-l-7{margin-left:7px !important}.mar-r-7{margin-right:7px !important}.mar-t-7{margin-top:7px !important}.mar-b-7{margin-bottom:7px !important}.pad-8{padding:8px !important}.pad-l-8{padding-left:8px !important}.pad-r-8{padding-right:8px !important}.pad-t-8{padding-top:8px !important}.pad-b-8{padding-bottom:8px !important}.mar-8{margin:8px !important}.mar-l-8{margin-left:8px !important}.mar-r-8{margin-right:8px !important}.mar-t-8{margin-top:8px !important}.mar-b-8{margin-bottom:8px !important}.pad-9{padding:9px !important}.pad-l-9{padding-left:9px !important}.pad-r-9{padding-right:9px !important}.pad-t-9{padding-top:9px !important}.pad-b-9{padding-bottom:9px !important}.mar-9{margin:9px !important}.mar-l-9{margin-left:9px !important}.mar-r-9{margin-right:9px !important}.mar-t-9{margin-top:9px !important}.mar-b-9{margin-bottom:9px !important}.pad-10{padding:10px !important}.pad-l-10{padding-left:10px !important}.pad-r-10{padding-right:10px !important}.pad-t-10{padding-top:10px !important}.pad-b-10{padding-bottom:10px !important}.mar-10{margin:10px !important}.mar-l-10{margin-left:10px !important}.mar-r-10{margin-right:10px !important}.mar-t-10{margin-top:10px !important}.mar-b-10{margin-bottom:10px !important}.pad-11{padding:11px !important}.pad-l-11{padding-left:11px !important}.pad-r-11{padding-right:11px !important}.pad-t-11{padding-top:11px !important}.pad-b-11{padding-bottom:11px !important}.mar-11{margin:11px !important}.mar-l-11{margin-left:11px !important}.mar-r-11{margin-right:11px !important}.mar-t-11{margin-top:11px !important}.mar-b-11{margin-bottom:11px !important}.pad-12{padding:12px !important}.pad-l-12{padding-left:12px !important}.pad-r-12{padding-right:12px !important}.pad-t-12{padding-top:12px !important}.pad-b-12{padding-bottom:12px !important}.mar-12{margin:12px !important}.mar-l-12{margin-left:12px !important}.mar-r-12{margin-right:12px !important}.mar-t-12{margin-top:12px !important}.mar-b-12{margin-bottom:12px !important}.pad-13{padding:13px !important}.pad-l-13{padding-left:13px !important}.pad-r-13{padding-right:13px !important}.pad-t-13{padding-top:13px !important}.pad-b-13{padding-bottom:13px !important}.mar-13{margin:13px !important}.mar-l-13{margin-left:13px !important}.mar-r-13{margin-right:13px !important}.mar-t-13{margin-top:13px !important}.mar-b-13{margin-bottom:13px !important}.pad-14{padding:14px !important}.pad-l-14{padding-left:14px !important}.pad-r-14{padding-right:14px !important}.pad-t-14{padding-top:14px !important}.pad-b-14{padding-bottom:14px !important}.mar-14{margin:14px !important}.mar-l-14{margin-left:14px !important}.mar-r-14{margin-right:14px !important}.mar-t-14{margin-top:14px !important}.mar-b-14{margin-bottom:14px !important}.pad-15{padding:15px !important}.pad-l-15{padding-left:15px !important}.pad-r-15{padding-right:15px !important}.pad-t-15{padding-top:15px !important}.pad-b-15{padding-bottom:15px !important}.mar-15{margin:15px !important}.mar-l-15{margin-left:15px !important}.mar-r-15{margin-right:15px !important}.mar-t-15{margin-top:15px !important}.mar-b-15{margin-bottom:15px !important}.pad-16{padding:16px !important}.pad-l-16{padding-left:16px !important}.pad-r-16{padding-right:16px !important}.pad-t-16{padding-top:16px !important}.pad-b-16{padding-bottom:16px !important}.mar-16{margin:16px !important}.mar-l-16{margin-left:16px !important}.mar-r-16{margin-right:16px !important}.mar-t-16{margin-top:16px !important}.mar-b-16{margin-bottom:16px !important}.pad-17{padding:17px !important}.pad-l-17{padding-left:17px !important}.pad-r-17{padding-right:17px !important}.pad-t-17{padding-top:17px !important}.pad-b-17{padding-bottom:17px !important}.mar-17{margin:17px !important}.mar-l-17{margin-left:17px !important}.mar-r-17{margin-right:17px !important}.mar-t-17{margin-top:17px !important}.mar-b-17{margin-bottom:17px !important}.pad-18{padding:18px !important}.pad-l-18{padding-left:18px !important}.pad-r-18{padding-right:18px !important}.pad-t-18{padding-top:18px !important}.pad-b-18{padding-bottom:18px !important}.mar-18{margin:18px !important}.mar-l-18{margin-left:18px !important}.mar-r-18{margin-right:18px !important}.mar-t-18{margin-top:18px !important}.mar-b-18{margin-bottom:18px !important}.pad-19{padding:19px !important}.pad-l-19{padding-left:19px !important}.pad-r-19{padding-right:19px !important}.pad-t-19{padding-top:19px !important}.pad-b-19{padding-bottom:19px !important}.mar-19{margin:19px !important}.mar-l-19{margin-left:19px !important}.mar-r-19{margin-right:19px !important}.mar-t-19{margin-top:19px !important}.mar-b-19{margin-bottom:19px !important}.pad-20{padding:20px !important}.pad-l-20{padding-left:20px !important}.pad-r-20{padding-right:20px !important}.pad-t-20{padding-top:20px !important}.pad-b-20{padding-bottom:20px !important}.mar-20{margin:20px !important}.mar-l-20{margin-left:20px !important}.mar-r-20{margin-right:20px !important}.mar-t-20{margin-top:20px !important}.mar-b-20{margin-bottom:20px !important}.pad-21{padding:21px !important}.pad-l-21{padding-left:21px !important}.pad-r-21{padding-right:21px !important}.pad-t-21{padding-top:21px !important}.pad-b-21{padding-bottom:21px !important}.mar-21{margin:21px !important}.mar-l-21{margin-left:21px !important}.mar-r-21{margin-right:21px !important}.mar-t-21{margin-top:21px !important}.mar-b-21{margin-bottom:21px !important}.pad-22{padding:22px !important}.pad-l-22{padding-left:22px !important}.pad-r-22{padding-right:22px !important}.pad-t-22{padding-top:22px !important}.pad-b-22{padding-bottom:22px !important}.mar-22{margin:22px !important}.mar-l-22{margin-left:22px !important}.mar-r-22{margin-right:22px !important}.mar-t-22{margin-top:22px !important}.mar-b-22{margin-bottom:22px !important}.pad-23{padding:23px !important}.pad-l-23{padding-left:23px !important}.pad-r-23{padding-right:23px !important}.pad-t-23{padding-top:23px !important}.pad-b-23{padding-bottom:23px !important}.mar-23{margin:23px !important}.mar-l-23{margin-left:23px !important}.mar-r-23{margin-right:23px !important}.mar-t-23{margin-top:23px !important}.mar-b-23{margin-bottom:23px !important}.pad-24{padding:24px !important}.pad-l-24{padding-left:24px !important}.pad-r-24{padding-right:24px !important}.pad-t-24{padding-top:24px !important}.pad-b-24{padding-bottom:24px !important}.mar-24{margin:24px !important}.mar-l-24{margin-left:24px !important}.mar-r-24{margin-right:24px !important}.mar-t-24{margin-top:24px !important}.mar-b-24{margin-bottom:24px !important}.pad-25{padding:25px !important}.pad-l-25{padding-left:25px !important}.pad-r-25{padding-right:25px !important}.pad-t-25{padding-top:25px !important}.pad-b-25{padding-bottom:25px !important}.mar-25{margin:25px !important}.mar-l-25{margin-left:25px !important}.mar-r-25{margin-right:25px !important}.mar-t-25{margin-top:25px !important}.mar-b-25{margin-bottom:25px !important}.pad-26{padding:26px !important}.pad-l-26{padding-left:26px !important}.pad-r-26{padding-right:26px !important}.pad-t-26{padding-top:26px !important}.pad-b-26{padding-bottom:26px !important}.mar-26{margin:26px !important}.mar-l-26{margin-left:26px !important}.mar-r-26{margin-right:26px !important}.mar-t-26{margin-top:26px !important}.mar-b-26{margin-bottom:26px !important}.pad-27{padding:27px !important}.pad-l-27{padding-left:27px !important}.pad-r-27{padding-right:27px !important}.pad-t-27{padding-top:27px !important}.pad-b-27{padding-bottom:27px !important}.mar-27{margin:27px !important}.mar-l-27{margin-left:27px !important}.mar-r-27{margin-right:27px !important}.mar-t-27{margin-top:27px !important}.mar-b-27{margin-bottom:27px !important}.pad-28{padding:28px !important}.pad-l-28{padding-left:28px !important}.pad-r-28{padding-right:28px !important}.pad-t-28{padding-top:28px !important}.pad-b-28{padding-bottom:28px !important}.mar-28{margin:28px !important}.mar-l-28{margin-left:28px !important}.mar-r-28{margin-right:28px !important}.mar-t-28{margin-top:28px !important}.mar-b-28{margin-bottom:28px !important}.pad-29{padding:29px !important}.pad-l-29{padding-left:29px !important}.pad-r-29{padding-right:29px !important}.pad-t-29{padding-top:29px !important}.pad-b-29{padding-bottom:29px !important}.mar-29{margin:29px !important}.mar-l-29{margin-left:29px !important}.mar-r-29{margin-right:29px !important}.mar-t-29{margin-top:29px !important}.mar-b-29{margin-bottom:29px !important}.pad-30{padding:30px !important}.pad-l-30{padding-left:30px !important}.pad-r-30{padding-right:30px !important}.pad-t-30{padding-top:30px !important}.pad-b-30{padding-bottom:30px !important}.mar-30{margin:30px !important}.mar-l-30{margin-left:30px !important}.mar-r-30{margin-right:30px !important}.mar-t-30{margin-top:30px !important}.mar-b-30{margin-bottom:30px !important}.pad-31{padding:31px !important}.pad-l-31{padding-left:31px !important}.pad-r-31{padding-right:31px !important}.pad-t-31{padding-top:31px !important}.pad-b-31{padding-bottom:31px !important}.mar-31{margin:31px !important}.mar-l-31{margin-left:31px !important}.mar-r-31{margin-right:31px !important}.mar-t-31{margin-top:31px !important}.mar-b-31{margin-bottom:31px !important}.pad-32{padding:32px !important}.pad-l-32{padding-left:32px !important}.pad-r-32{padding-right:32px !important}.pad-t-32{padding-top:32px !important}.pad-b-32{padding-bottom:32px !important}.mar-32{margin:32px !important}.mar-l-32{margin-left:32px !important}.mar-r-32{margin-right:32px !important}.mar-t-32{margin-top:32px !important}.mar-b-32{margin-bottom:32px !important}.pad-33{padding:33px !important}.pad-l-33{padding-left:33px !important}.pad-r-33{padding-right:33px !important}.pad-t-33{padding-top:33px !important}.pad-b-33{padding-bottom:33px !important}.mar-33{margin:33px !important}.mar-l-33{margin-left:33px !important}.mar-r-33{margin-right:33px !important}.mar-t-33{margin-top:33px !important}.mar-b-33{margin-bottom:33px !important}.pad-34{padding:34px !important}.pad-l-34{padding-left:34px !important}.pad-r-34{padding-right:34px !important}.pad-t-34{padding-top:34px !important}.pad-b-34{padding-bottom:34px !important}.mar-34{margin:34px !important}.mar-l-34{margin-left:34px !important}.mar-r-34{margin-right:34px !important}.mar-t-34{margin-top:34px !important}.mar-b-34{margin-bottom:34px !important}.pad-35{padding:35px !important}.pad-l-35{padding-left:35px !important}.pad-r-35{padding-right:35px !important}.pad-t-35{padding-top:35px !important}.pad-b-35{padding-bottom:35px !important}.mar-35{margin:35px !important}.mar-l-35{margin-left:35px !important}.mar-r-35{margin-right:35px !important}.mar-t-35{margin-top:35px !important}.mar-b-35{margin-bottom:35px !important}.pad-36{padding:36px !important}.pad-l-36{padding-left:36px !important}.pad-r-36{padding-right:36px !important}.pad-t-36{padding-top:36px !important}.pad-b-36{padding-bottom:36px !important}.mar-36{margin:36px !important}.mar-l-36{margin-left:36px !important}.mar-r-36{margin-right:36px !important}.mar-t-36{margin-top:36px !important}.mar-b-36{margin-bottom:36px !important}.pad-37{padding:37px !important}.pad-l-37{padding-left:37px !important}.pad-r-37{padding-right:37px !important}.pad-t-37{padding-top:37px !important}.pad-b-37{padding-bottom:37px !important}.mar-37{margin:37px !important}.mar-l-37{margin-left:37px !important}.mar-r-37{margin-right:37px !important}.mar-t-37{margin-top:37px !important}.mar-b-37{margin-bottom:37px !important}.pad-38{padding:38px !important}.pad-l-38{padding-left:38px !important}.pad-r-38{padding-right:38px !important}.pad-t-38{padding-top:38px !important}.pad-b-38{padding-bottom:38px !important}.mar-38{margin:38px !important}.mar-l-38{margin-left:38px !important}.mar-r-38{margin-right:38px !important}.mar-t-38{margin-top:38px !important}.mar-b-38{margin-bottom:38px !important}.pad-39{padding:39px !important}.pad-l-39{padding-left:39px !important}.pad-r-39{padding-right:39px !important}.pad-t-39{padding-top:39px !important}.pad-b-39{padding-bottom:39px !important}.mar-39{margin:39px !important}.mar-l-39{margin-left:39px !important}.mar-r-39{margin-right:39px !important}.mar-t-39{margin-top:39px !important}.mar-b-39{margin-bottom:39px !important}.pad-40{padding:40px !important}.pad-l-40{padding-left:40px !important}.pad-r-40{padding-right:40px !important}.pad-t-40{padding-top:40px !important}.pad-b-40{padding-bottom:40px !important}.mar-40{margin:40px !important}.mar-l-40{margin-left:40px !important}.mar-r-40{margin-right:40px !important}.mar-t-40{margin-top:40px !important}.mar-b-40{margin-bottom:40px !important}.pad-41{padding:41px !important}.pad-l-41{padding-left:41px !important}.pad-r-41{padding-right:41px !important}.pad-t-41{padding-top:41px !important}.pad-b-41{padding-bottom:41px !important}.mar-41{margin:41px !important}.mar-l-41{margin-left:41px !important}.mar-r-41{margin-right:41px !important}.mar-t-41{margin-top:41px !important}.mar-b-41{margin-bottom:41px !important}.pad-42{padding:42px !important}.pad-l-42{padding-left:42px !important}.pad-r-42{padding-right:42px !important}.pad-t-42{padding-top:42px !important}.pad-b-42{padding-bottom:42px !important}.mar-42{margin:42px !important}.mar-l-42{margin-left:42px !important}.mar-r-42{margin-right:42px !important}.mar-t-42{margin-top:42px !important}.mar-b-42{margin-bottom:42px !important}.pad-43{padding:43px !important}.pad-l-43{padding-left:43px !important}.pad-r-43{padding-right:43px !important}.pad-t-43{padding-top:43px !important}.pad-b-43{padding-bottom:43px !important}.mar-43{margin:43px !important}.mar-l-43{margin-left:43px !important}.mar-r-43{margin-right:43px !important}.mar-t-43{margin-top:43px !important}.mar-b-43{margin-bottom:43px !important}.pad-44{padding:44px !important}.pad-l-44{padding-left:44px !important}.pad-r-44{padding-right:44px !important}.pad-t-44{padding-top:44px !important}.pad-b-44{padding-bottom:44px !important}.mar-44{margin:44px !important}.mar-l-44{margin-left:44px !important}.mar-r-44{margin-right:44px !important}.mar-t-44{margin-top:44px !important}.mar-b-44{margin-bottom:44px !important}.pad-45{padding:45px !important}.pad-l-45{padding-left:45px !important}.pad-r-45{padding-right:45px !important}.pad-t-45{padding-top:45px !important}.pad-b-45{padding-bottom:45px !important}.mar-45{margin:45px !important}.mar-l-45{margin-left:45px !important}.mar-r-45{margin-right:45px !important}.mar-t-45{margin-top:45px !important}.mar-b-45{margin-bottom:45px !important}.pad-46{padding:46px !important}.pad-l-46{padding-left:46px !important}.pad-r-46{padding-right:46px !important}.pad-t-46{padding-top:46px !important}.pad-b-46{padding-bottom:46px !important}.mar-46{margin:46px !important}.mar-l-46{margin-left:46px !important}.mar-r-46{margin-right:46px !important}.mar-t-46{margin-top:46px !important}.mar-b-46{margin-bottom:46px !important}.pad-47{padding:47px !important}.pad-l-47{padding-left:47px !important}.pad-r-47{padding-right:47px !important}.pad-t-47{padding-top:47px !important}.pad-b-47{padding-bottom:47px !important}.mar-47{margin:47px !important}.mar-l-47{margin-left:47px !important}.mar-r-47{margin-right:47px !important}.mar-t-47{margin-top:47px !important}.mar-b-47{margin-bottom:47px !important}.pad-48{padding:48px !important}.pad-l-48{padding-left:48px !important}.pad-r-48{padding-right:48px !important}.pad-t-48{padding-top:48px !important}.pad-b-48{padding-bottom:48px !important}.mar-48{margin:48px !important}.mar-l-48{margin-left:48px !important}.mar-r-48{margin-right:48px !important}.mar-t-48{margin-top:48px !important}.mar-b-48{margin-bottom:48px !important}.pad-49{padding:49px !important}.pad-l-49{padding-left:49px !important}.pad-r-49{padding-right:49px !important}.pad-t-49{padding-top:49px !important}.pad-b-49{padding-bottom:49px !important}.mar-49{margin:49px !important}.mar-l-49{margin-left:49px !important}.mar-r-49{margin-right:49px !important}.mar-t-49{margin-top:49px !important}.mar-b-49{margin-bottom:49px !important}.problem-info{float:right;width:300px}.sidebar-problem-list{z-index:50;box-shadow:0 10px 0 0 transparent,0 10px 0 0 transparent,10px 0 0 0 transparent,0 8px 8px 2px rgba(0,0,0,.5);background:#003252;position:relative;min-height:calc(100vh - 47px)}.sidebar-problem-list .sidebar-problem{width:100%;display:grid;grid-template-columns:32px 1fr;border-left-width:24px;border-left-style:solid;border-left-color:#0077c2;transition:background-color 200ms ease-in-out;transition:width 200ms ease-in-out;background-color:inherit;cursor:pointer}.sidebar-problem-list .sidebar-problem[correct]{border-left-color:lime}.sidebar-problem-list .sidebar-problem[wrong]{border-left-color:red}.sidebar-problem-list .sidebar-problem[selected],.sidebar-problem-list .sidebar-problem:hover{width:calc(100% + 24px)}.sidebar-problem-list .sidebar-problem[selected]{background-color:#42a5f5 !important}.sidebar-problem-list .sidebar-problem:hover{background-color:#128ef2}.sidebar-problem-list .sidebar-problem-letter{text-align:center;background-color:#001929;padding-top:20px;padding-bottom:20px;font-size:1.2rem}.sidebar-problem-list .sidebar-problem-name{text-align:left;font-size:1.2rem;padding-left:5px;padding-top:20px;padding-bottom:20px;margin-left:10px;margin-right:10px}.rect-auto,.c100.p100 .slice,.c100.p99 .slice,.c100.p98 .slice,.c100.p97 .slice,.c100.p96 .slice,.c100.p95 .slice,.c100.p94 .slice,.c100.p93 .slice,.c100.p92 .slice,.c100.p91 .slice,.c100.p90 .slice,.c100.p89 .slice,.c100.p88 .slice,.c100.p87 .slice,.c100.p86 .slice,.c100.p85 .slice,.c100.p84 .slice,.c100.p83 .slice,.c100.p82 .slice,.c100.p81 .slice,.c100.p80 .slice,.c100.p79 .slice,.c100.p78 .slice,.c100.p77 .slice,.c100.p76 .slice,.c100.p75 .slice,.c100.p74 .slice,.c100.p73 .slice,.c100.p72 .slice,.c100.p71 .slice,.c100.p70 .slice,.c100.p69 .slice,.c100.p68 .slice,.c100.p67 .slice,.c100.p66 .slice,.c100.p65 .slice,.c100.p64 .slice,.c100.p63 .slice,.c100.p62 .slice,.c100.p61 .slice,.c100.p60 .slice,.c100.p59 .slice,.c100.p58 .slice,.c100.p57 .slice,.c100.p56 .slice,.c100.p55 .slice,.c100.p54 .slice,.c100.p53 .slice,.c100.p52 .slice,.c100.p51 .slice{clip:rect(auto, auto, auto, auto)}.pie,.c100.p100 .fill,.c100.p99 .fill,.c100.p98 .fill,.c100.p97 .fill,.c100.p96 .fill,.c100.p95 .fill,.c100.p94 .fill,.c100.p93 .fill,.c100.p92 .fill,.c100.p91 .fill,.c100.p90 .fill,.c100.p89 .fill,.c100.p88 .fill,.c100.p87 .fill,.c100.p86 .fill,.c100.p85 .fill,.c100.p84 .fill,.c100.p83 .fill,.c100.p82 .fill,.c100.p81 .fill,.c100.p80 .fill,.c100.p79 .fill,.c100.p78 .fill,.c100.p77 .fill,.c100.p76 .fill,.c100.p75 .fill,.c100.p74 .fill,.c100.p73 .fill,.c100.p72 .fill,.c100.p71 .fill,.c100.p70 .fill,.c100.p69 .fill,.c100.p68 .fill,.c100.p67 .fill,.c100.p66 .fill,.c100.p65 .fill,.c100.p64 .fill,.c100.p63 .fill,.c100.p62 .fill,.c100.p61 .fill,.c100.p60 .fill,.c100.p59 .fill,.c100.p58 .fill,.c100.p57 .fill,.c100.p56 .fill,.c100.p55 .fill,.c100.p54 .fill,.c100.p53 .fill,.c100.p52 .fill,.c100.p51 .fill,.c100 .bar{position:absolute;border:.08em solid #307bbb;width:.84em;height:.84em;clip:rect(0em, 0.5em, 1em, 0em);border-radius:50%;-webkit-transform:rotate(0deg);-moz-transform:rotate(0deg);-ms-transform:rotate(0deg);-o-transform:rotate(0deg);transform:rotate(0deg)}.pie-fill,.c100.p100 .fill,.c100.p100.bar:after,.c100.p99 .fill,.c100.p99.bar:after,.c100.p98 .fill,.c100.p98.bar:after,.c100.p97 .fill,.c100.p97.bar:after,.c100.p96 .fill,.c100.p96.bar:after,.c100.p95 .fill,.c100.p95.bar:after,.c100.p94 .fill,.c100.p94.bar:after,.c100.p93 .fill,.c100.p93.bar:after,.c100.p92 .fill,.c100.p92.bar:after,.c100.p91 .fill,.c100.p91.bar:after,.c100.p90 .fill,.c100.p90.bar:after,.c100.p89 .fill,.c100.p89.bar:after,.c100.p88 .fill,.c100.p88.bar:after,.c100.p87 .fill,.c100.p87.bar:after,.c100.p86 .fill,.c100.p86.bar:after,.c100.p85 .fill,.c100.p85.bar:after,.c100.p84 .fill,.c100.p84.bar:after,.c100.p83 .fill,.c100.p83.bar:after,.c100.p82 .fill,.c100.p82.bar:after,.c100.p81 .fill,.c100.p81.bar:after,.c100.p80 .fill,.c100.p80.bar:after,.c100.p79 .fill,.c100.p79.bar:after,.c100.p78 .fill,.c100.p78.bar:after,.c100.p77 .fill,.c100.p77.bar:after,.c100.p76 .fill,.c100.p76.bar:after,.c100.p75 .fill,.c100.p75.bar:after,.c100.p74 .fill,.c100.p74.bar:after,.c100.p73 .fill,.c100.p73.bar:after,.c100.p72 .fill,.c100.p72.bar:after,.c100.p71 .fill,.c100.p71.bar:after,.c100.p70 .fill,.c100.p70.bar:after,.c100.p69 .fill,.c100.p69.bar:after,.c100.p68 .fill,.c100.p68.bar:after,.c100.p67 .fill,.c100.p67.bar:after,.c100.p66 .fill,.c100.p66.bar:after,.c100.p65 .fill,.c100.p65.bar:after,.c100.p64 .fill,.c100.p64.bar:after,.c100.p63 .fill,.c100.p63.bar:after,.c100.p62 .fill,.c100.p62.bar:after,.c100.p61 .fill,.c100.p61.bar:after,.c100.p60 .fill,.c100.p60.bar:after,.c100.p59 .fill,.c100.p59.bar:after,.c100.p58 .fill,.c100.p58.bar:after,.c100.p57 .fill,.c100.p57.bar:after,.c100.p56 .fill,.c100.p56.bar:after,.c100.p55 .fill,.c100.p55.bar:after,.c100.p54 .fill,.c100.p54.bar:after,.c100.p53 .fill,.c100.p53.bar:after,.c100.p52 .fill,.c100.p52.bar:after,.c100.p51 .fill,.c100.p51.bar:after{-webkit-transform:rotate(180deg);-moz-transform:rotate(180deg);-ms-transform:rotate(180deg);-o-transform:rotate(180deg);transform:rotate(180deg)}.c100{position:relative;font-size:120px;width:1em;height:1em;border-radius:50%;float:left;background-color:#ccc}.c100 *,.c100 *:before,.c100 *:after{-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box}.c100.center{float:none;margin:0 auto}.c100.big{font-size:240px}.c100.small{font-size:80px}.c100>span{position:absolute;width:100%;z-index:1;left:0;top:0;width:5em;line-height:5em;font-size:.2em;color:#ccc;display:block;text-align:center;white-space:nowrap;-webkit-transition-property:all;-moz-transition-property:all;-o-transition-property:all;transition-property:all;-webkit-transition-duration:.2s;-moz-transition-duration:.2s;-o-transition-duration:.2s;transition-duration:.2s;-webkit-transition-timing-function:ease-out;-moz-transition-timing-function:ease-out;-o-transition-timing-function:ease-out;transition-timing-function:ease-out}.c100:after{position:absolute;top:.08em;left:.08em;display:block;content:" ";border-radius:50%;background-color:#f5f5f5;width:.84em;height:.84em;-webkit-transition-property:all;-moz-transition-property:all;-o-transition-property:all;transition-property:all;-webkit-transition-duration:.2s;-moz-transition-duration:.2s;-o-transition-duration:.2s;transition-duration:.2s;-webkit-transition-timing-function:ease-in;-moz-transition-timing-function:ease-in;-o-transition-timing-function:ease-in;transition-timing-function:ease-in}.c100 .slice{position:absolute;width:1em;height:1em;clip:rect(0em, 1em, 1em, 0.5em)}.c100.p1 .bar{-webkit-transform:rotate(3.6deg);-moz-transform:rotate(3.6deg);-ms-transform:rotate(3.6deg);-o-transform:rotate(3.6deg);transform:rotate(3.6deg)}.c100.p2 .bar{-webkit-transform:rotate(7.2deg);-moz-transform:rotate(7.2deg);-ms-transform:rotate(7.2deg);-o-transform:rotate(7.2deg);transform:rotate(7.2deg)}.c100.p3 .bar{-webkit-transform:rotate(10.8deg);-moz-transform:rotate(10.8deg);-ms-transform:rotate(10.8deg);-o-transform:rotate(10.8deg);transform:rotate(10.8deg)}.c100.p4 .bar{-webkit-transform:rotate(14.4deg);-moz-transform:rotate(14.4deg);-ms-transform:rotate(14.4deg);-o-transform:rotate(14.4deg);transform:rotate(14.4deg)}.c100.p5 .bar{-webkit-transform:rotate(18deg);-moz-transform:rotate(18deg);-ms-transform:rotate(18deg);-o-transform:rotate(18deg);transform:rotate(18deg)}.c100.p6 .bar{-webkit-transform:rotate(21.6deg);-moz-transform:rotate(21.6deg);-ms-transform:rotate(21.6deg);-o-transform:rotate(21.6deg);transform:rotate(21.6deg)}.c100.p7 .bar{-webkit-transform:rotate(25.2deg);-moz-transform:rotate(25.2deg);-ms-transform:rotate(25.2deg);-o-transform:rotate(25.2deg);transform:rotate(25.2deg)}.c100.p8 .bar{-webkit-transform:rotate(28.8deg);-moz-transform:rotate(28.8deg);-ms-transform:rotate(28.8deg);-o-transform:rotate(28.8deg);transform:rotate(28.8deg)}.c100.p9 .bar{-webkit-transform:rotate(32.4deg);-moz-transform:rotate(32.4deg);-ms-transform:rotate(32.4deg);-o-transform:rotate(32.4deg);transform:rotate(32.4deg)}.c100.p10 .bar{-webkit-transform:rotate(36deg);-moz-transform:rotate(36deg);-ms-transform:rotate(36deg);-o-transform:rotate(36deg);transform:rotate(36deg)}.c100.p11 .bar{-webkit-transform:rotate(39.6deg);-moz-transform:rotate(39.6deg);-ms-transform:rotate(39.6deg);-o-transform:rotate(39.6deg);transform:rotate(39.6deg)}.c100.p12 .bar{-webkit-transform:rotate(43.2deg);-moz-transform:rotate(43.2deg);-ms-transform:rotate(43.2deg);-o-transform:rotate(43.2deg);transform:rotate(43.2deg)}.c100.p13 .bar{-webkit-transform:rotate(46.8deg);-moz-transform:rotate(46.8deg);-ms-transform:rotate(46.8deg);-o-transform:rotate(46.8deg);transform:rotate(46.8deg)}.c100.p14 .bar{-webkit-transform:rotate(50.4deg);-moz-transform:rotate(50.4deg);-ms-transform:rotate(50.4deg);-o-transform:rotate(50.4deg);transform:rotate(50.4deg)}.c100.p15 .bar{-webkit-transform:rotate(54deg);-moz-transform:rotate(54deg);-ms-transform:rotate(54deg);-o-transform:rotate(54deg);transform:rotate(54deg)}.c100.p16 .bar{-webkit-transform:rotate(57.6deg);-moz-transform:rotate(57.6deg);-ms-transform:rotate(57.6deg);-o-transform:rotate(57.6deg);transform:rotate(57.6deg)}.c100.p17 .bar{-webkit-transform:rotate(61.2deg);-moz-transform:rotate(61.2deg);-ms-transform:rotate(61.2deg);-o-transform:rotate(61.2deg);transform:rotate(61.2deg)}.c100.p18 .bar{-webkit-transform:rotate(64.8deg);-moz-transform:rotate(64.8deg);-ms-transform:rotate(64.8deg);-o-transform:rotate(64.8deg);transform:rotate(64.8deg)}.c100.p19 .bar{-webkit-transform:rotate(68.4deg);-moz-transform:rotate(68.4deg);-ms-transform:rotate(68.4deg);-o-transform:rotate(68.4deg);transform:rotate(68.4deg)}.c100.p20 .bar{-webkit-transform:rotate(72deg);-moz-transform:rotate(72deg);-ms-transform:rotate(72deg);-o-transform:rotate(72deg);transform:rotate(72deg)}.c100.p21 .bar{-webkit-transform:rotate(75.6deg);-moz-transform:rotate(75.6deg);-ms-transform:rotate(75.6deg);-o-transform:rotate(75.6deg);transform:rotate(75.6deg)}.c100.p22 .bar{-webkit-transform:rotate(79.2deg);-moz-transform:rotate(79.2deg);-ms-transform:rotate(79.2deg);-o-transform:rotate(79.2deg);transform:rotate(79.2deg)}.c100.p23 .bar{-webkit-transform:rotate(82.8deg);-moz-transform:rotate(82.8deg);-ms-transform:rotate(82.8deg);-o-transform:rotate(82.8deg);transform:rotate(82.8deg)}.c100.p24 .bar{-webkit-transform:rotate(86.4deg);-moz-transform:rotate(86.4deg);-ms-transform:rotate(86.4deg);-o-transform:rotate(86.4deg);transform:rotate(86.4deg)}.c100.p25 .bar{-webkit-transform:rotate(90deg);-moz-transform:rotate(90deg);-ms-transform:rotate(90deg);-o-transform:rotate(90deg);transform:rotate(90deg)}.c100.p26 .bar{-webkit-transform:rotate(93.6deg);-moz-transform:rotate(93.6deg);-ms-transform:rotate(93.6deg);-o-transform:rotate(93.6deg);transform:rotate(93.6deg)}.c100.p27 .bar{-webkit-transform:rotate(97.2deg);-moz-transform:rotate(97.2deg);-ms-transform:rotate(97.2deg);-o-transform:rotate(97.2deg);transform:rotate(97.2deg)}.c100.p28 .bar{-webkit-transform:rotate(100.8deg);-moz-transform:rotate(100.8deg);-ms-transform:rotate(100.8deg);-o-transform:rotate(100.8deg);transform:rotate(100.8deg)}.c100.p29 .bar{-webkit-transform:rotate(104.4deg);-moz-transform:rotate(104.4deg);-ms-transform:rotate(104.4deg);-o-transform:rotate(104.4deg);transform:rotate(104.4deg)}.c100.p30 .bar{-webkit-transform:rotate(108deg);-moz-transform:rotate(108deg);-ms-transform:rotate(108deg);-o-transform:rotate(108deg);transform:rotate(108deg)}.c100.p31 .bar{-webkit-transform:rotate(111.6deg);-moz-transform:rotate(111.6deg);-ms-transform:rotate(111.6deg);-o-transform:rotate(111.6deg);transform:rotate(111.6deg)}.c100.p32 .bar{-webkit-transform:rotate(115.2deg);-moz-transform:rotate(115.2deg);-ms-transform:rotate(115.2deg);-o-transform:rotate(115.2deg);transform:rotate(115.2deg)}.c100.p33 .bar{-webkit-transform:rotate(118.8deg);-moz-transform:rotate(118.8deg);-ms-transform:rotate(118.8deg);-o-transform:rotate(118.8deg);transform:rotate(118.8deg)}.c100.p34 .bar{-webkit-transform:rotate(122.4deg);-moz-transform:rotate(122.4deg);-ms-transform:rotate(122.4deg);-o-transform:rotate(122.4deg);transform:rotate(122.4deg)}.c100.p35 .bar{-webkit-transform:rotate(126deg);-moz-transform:rotate(126deg);-ms-transform:rotate(126deg);-o-transform:rotate(126deg);transform:rotate(126deg)}.c100.p36 .bar{-webkit-transform:rotate(129.6deg);-moz-transform:rotate(129.6deg);-ms-transform:rotate(129.6deg);-o-transform:rotate(129.6deg);transform:rotate(129.6deg)}.c100.p37 .bar{-webkit-transform:rotate(133.2deg);-moz-transform:rotate(133.2deg);-ms-transform:rotate(133.2deg);-o-transform:rotate(133.2deg);transform:rotate(133.2deg)}.c100.p38 .bar{-webkit-transform:rotate(136.8deg);-moz-transform:rotate(136.8deg);-ms-transform:rotate(136.8deg);-o-transform:rotate(136.8deg);transform:rotate(136.8deg)}.c100.p39 .bar{-webkit-transform:rotate(140.4deg);-moz-transform:rotate(140.4deg);-ms-transform:rotate(140.4deg);-o-transform:rotate(140.4deg);transform:rotate(140.4deg)}.c100.p40 .bar{-webkit-transform:rotate(144deg);-moz-transform:rotate(144deg);-ms-transform:rotate(144deg);-o-transform:rotate(144deg);transform:rotate(144deg)}.c100.p41 .bar{-webkit-transform:rotate(147.6deg);-moz-transform:rotate(147.6deg);-ms-transform:rotate(147.6deg);-o-transform:rotate(147.6deg);transform:rotate(147.6deg)}.c100.p42 .bar{-webkit-transform:rotate(151.2deg);-moz-transform:rotate(151.2deg);-ms-transform:rotate(151.2deg);-o-transform:rotate(151.2deg);transform:rotate(151.2deg)}.c100.p43 .bar{-webkit-transform:rotate(154.8deg);-moz-transform:rotate(154.8deg);-ms-transform:rotate(154.8deg);-o-transform:rotate(154.8deg);transform:rotate(154.8deg)}.c100.p44 .bar{-webkit-transform:rotate(158.4deg);-moz-transform:rotate(158.4deg);-ms-transform:rotate(158.4deg);-o-transform:rotate(158.4deg);transform:rotate(158.4deg)}.c100.p45 .bar{-webkit-transform:rotate(162deg);-moz-transform:rotate(162deg);-ms-transform:rotate(162deg);-o-transform:rotate(162deg);transform:rotate(162deg)}.c100.p46 .bar{-webkit-transform:rotate(165.6deg);-moz-transform:rotate(165.6deg);-ms-transform:rotate(165.6deg);-o-transform:rotate(165.6deg);transform:rotate(165.6deg)}.c100.p47 .bar{-webkit-transform:rotate(169.2deg);-moz-transform:rotate(169.2deg);-ms-transform:rotate(169.2deg);-o-transform:rotate(169.2deg);transform:rotate(169.2deg)}.c100.p48 .bar{-webkit-transform:rotate(172.8deg);-moz-transform:rotate(172.8deg);-ms-transform:rotate(172.8deg);-o-transform:rotate(172.8deg);transform:rotate(172.8deg)}.c100.p49 .bar{-webkit-transform:rotate(176.4deg);-moz-transform:rotate(176.4deg);-ms-transform:rotate(176.4deg);-o-transform:rotate(176.4deg);transform:rotate(176.4deg)}.c100.p50 .bar{-webkit-transform:rotate(180deg);-moz-transform:rotate(180deg);-ms-transform:rotate(180deg);-o-transform:rotate(180deg);transform:rotate(180deg)}.c100.p51 .bar{-webkit-transform:rotate(183.6deg);-moz-transform:rotate(183.6deg);-ms-transform:rotate(183.6deg);-o-transform:rotate(183.6deg);transform:rotate(183.6deg)}.c100.p52 .bar{-webkit-transform:rotate(187.2deg);-moz-transform:rotate(187.2deg);-ms-transform:rotate(187.2deg);-o-transform:rotate(187.2deg);transform:rotate(187.2deg)}.c100.p53 .bar{-webkit-transform:rotate(190.8deg);-moz-transform:rotate(190.8deg);-ms-transform:rotate(190.8deg);-o-transform:rotate(190.8deg);transform:rotate(190.8deg)}.c100.p54 .bar{-webkit-transform:rotate(194.4deg);-moz-transform:rotate(194.4deg);-ms-transform:rotate(194.4deg);-o-transform:rotate(194.4deg);transform:rotate(194.4deg)}.c100.p55 .bar{-webkit-transform:rotate(198deg);-moz-transform:rotate(198deg);-ms-transform:rotate(198deg);-o-transform:rotate(198deg);transform:rotate(198deg)}.c100.p56 .bar{-webkit-transform:rotate(201.6deg);-moz-transform:rotate(201.6deg);-ms-transform:rotate(201.6deg);-o-transform:rotate(201.6deg);transform:rotate(201.6deg)}.c100.p57 .bar{-webkit-transform:rotate(205.2deg);-moz-transform:rotate(205.2deg);-ms-transform:rotate(205.2deg);-o-transform:rotate(205.2deg);transform:rotate(205.2deg)}.c100.p58 .bar{-webkit-transform:rotate(208.8deg);-moz-transform:rotate(208.8deg);-ms-transform:rotate(208.8deg);-o-transform:rotate(208.8deg);transform:rotate(208.8deg)}.c100.p59 .bar{-webkit-transform:rotate(212.4deg);-moz-transform:rotate(212.4deg);-ms-transform:rotate(212.4deg);-o-transform:rotate(212.4deg);transform:rotate(212.4deg)}.c100.p60 .bar{-webkit-transform:rotate(216deg);-moz-transform:rotate(216deg);-ms-transform:rotate(216deg);-o-transform:rotate(216deg);transform:rotate(216deg)}.c100.p61 .bar{-webkit-transform:rotate(219.6deg);-moz-transform:rotate(219.6deg);-ms-transform:rotate(219.6deg);-o-transform:rotate(219.6deg);transform:rotate(219.6deg)}.c100.p62 .bar{-webkit-transform:rotate(223.2deg);-moz-transform:rotate(223.2deg);-ms-transform:rotate(223.2deg);-o-transform:rotate(223.2deg);transform:rotate(223.2deg)}.c100.p63 .bar{-webkit-transform:rotate(226.8deg);-moz-transform:rotate(226.8deg);-ms-transform:rotate(226.8deg);-o-transform:rotate(226.8deg);transform:rotate(226.8deg)}.c100.p64 .bar{-webkit-transform:rotate(230.4deg);-moz-transform:rotate(230.4deg);-ms-transform:rotate(230.4deg);-o-transform:rotate(230.4deg);transform:rotate(230.4deg)}.c100.p65 .bar{-webkit-transform:rotate(234deg);-moz-transform:rotate(234deg);-ms-transform:rotate(234deg);-o-transform:rotate(234deg);transform:rotate(234deg)}.c100.p66 .bar{-webkit-transform:rotate(237.6deg);-moz-transform:rotate(237.6deg);-ms-transform:rotate(237.6deg);-o-transform:rotate(237.6deg);transform:rotate(237.6deg)}.c100.p67 .bar{-webkit-transform:rotate(241.2deg);-moz-transform:rotate(241.2deg);-ms-transform:rotate(241.2deg);-o-transform:rotate(241.2deg);transform:rotate(241.2deg)}.c100.p68 .bar{-webkit-transform:rotate(244.8deg);-moz-transform:rotate(244.8deg);-ms-transform:rotate(244.8deg);-o-transform:rotate(244.8deg);transform:rotate(244.8deg)}.c100.p69 .bar{-webkit-transform:rotate(248.4deg);-moz-transform:rotate(248.4deg);-ms-transform:rotate(248.4deg);-o-transform:rotate(248.4deg);transform:rotate(248.4deg)}.c100.p70 .bar{-webkit-transform:rotate(252deg);-moz-transform:rotate(252deg);-ms-transform:rotate(252deg);-o-transform:rotate(252deg);transform:rotate(252deg)}.c100.p71 .bar{-webkit-transform:rotate(255.6deg);-moz-transform:rotate(255.6deg);-ms-transform:rotate(255.6deg);-o-transform:rotate(255.6deg);transform:rotate(255.6deg)}.c100.p72 .bar{-webkit-transform:rotate(259.2deg);-moz-transform:rotate(259.2deg);-ms-transform:rotate(259.2deg);-o-transform:rotate(259.2deg);transform:rotate(259.2deg)}.c100.p73 .bar{-webkit-transform:rotate(262.8deg);-moz-transform:rotate(262.8deg);-ms-transform:rotate(262.8deg);-o-transform:rotate(262.8deg);transform:rotate(262.8deg)}.c100.p74 .bar{-webkit-transform:rotate(266.4deg);-moz-transform:rotate(266.4deg);-ms-transform:rotate(266.4deg);-o-transform:rotate(266.4deg);transform:rotate(266.4deg)}.c100.p75 .bar{-webkit-transform:rotate(270deg);-moz-transform:rotate(270deg);-ms-transform:rotate(270deg);-o-transform:rotate(270deg);transform:rotate(270deg)}.c100.p76 .bar{-webkit-transform:rotate(273.6deg);-moz-transform:rotate(273.6deg);-ms-transform:rotate(273.6deg);-o-transform:rotate(273.6deg);transform:rotate(273.6deg)}.c100.p77 .bar{-webkit-transform:rotate(277.2deg);-moz-transform:rotate(277.2deg);-ms-transform:rotate(277.2deg);-o-transform:rotate(277.2deg);transform:rotate(277.2deg)}.c100.p78 .bar{-webkit-transform:rotate(280.8deg);-moz-transform:rotate(280.8deg);-ms-transform:rotate(280.8deg);-o-transform:rotate(280.8deg);transform:rotate(280.8deg)}.c100.p79 .bar{-webkit-transform:rotate(284.4deg);-moz-transform:rotate(284.4deg);-ms-transform:rotate(284.4deg);-o-transform:rotate(284.4deg);transform:rotate(284.4deg)}.c100.p80 .bar{-webkit-transform:rotate(288deg);-moz-transform:rotate(288deg);-ms-transform:rotate(288deg);-o-transform:rotate(288deg);transform:rotate(288deg)}.c100.p81 .bar{-webkit-transform:rotate(291.6deg);-moz-transform:rotate(291.6deg);-ms-transform:rotate(291.6deg);-o-transform:rotate(291.6deg);transform:rotate(291.6deg)}.c100.p82 .bar{-webkit-transform:rotate(295.2deg);-moz-transform:rotate(295.2deg);-ms-transform:rotate(295.2deg);-o-transform:rotate(295.2deg);transform:rotate(295.2deg)}.c100.p83 .bar{-webkit-transform:rotate(298.8deg);-moz-transform:rotate(298.8deg);-ms-transform:rotate(298.8deg);-o-transform:rotate(298.8deg);transform:rotate(298.8deg)}.c100.p84 .bar{-webkit-transform:rotate(302.4deg);-moz-transform:rotate(302.4deg);-ms-transform:rotate(302.4deg);-o-transform:rotate(302.4deg);transform:rotate(302.4deg)}.c100.p85 .bar{-webkit-transform:rotate(306deg);-moz-transform:rotate(306deg);-ms-transform:rotate(306deg);-o-transform:rotate(306deg);transform:rotate(306deg)}.c100.p86 .bar{-webkit-transform:rotate(309.6deg);-moz-transform:rotate(309.6deg);-ms-transform:rotate(309.6deg);-o-transform:rotate(309.6deg);transform:rotate(309.6deg)}.c100.p87 .bar{-webkit-transform:rotate(313.2deg);-moz-transform:rotate(313.2deg);-ms-transform:rotate(313.2deg);-o-transform:rotate(313.2deg);transform:rotate(313.2deg)}.c100.p88 .bar{-webkit-transform:rotate(316.8deg);-moz-transform:rotate(316.8deg);-ms-transform:rotate(316.8deg);-o-transform:rotate(316.8deg);transform:rotate(316.8deg)}.c100.p89 .bar{-webkit-transform:rotate(320.4deg);-moz-transform:rotate(320.4deg);-ms-transform:rotate(320.4deg);-o-transform:rotate(320.4deg);transform:rotate(320.4deg)}.c100.p90 .bar{-webkit-transform:rotate(324deg);-moz-transform:rotate(324deg);-ms-transform:rotate(324deg);-o-transform:rotate(324deg);transform:rotate(324deg)}.c100.p91 .bar{-webkit-transform:rotate(327.6deg);-moz-transform:rotate(327.6deg);-ms-transform:rotate(327.6deg);-o-transform:rotate(327.6deg);transform:rotate(327.6deg)}.c100.p92 .bar{-webkit-transform:rotate(331.2deg);-moz-transform:rotate(331.2deg);-ms-transform:rotate(331.2deg);-o-transform:rotate(331.2deg);transform:rotate(331.2deg)}.c100.p93 .bar{-webkit-transform:rotate(334.8deg);-moz-transform:rotate(334.8deg);-ms-transform:rotate(334.8deg);-o-transform:rotate(334.8deg);transform:rotate(334.8deg)}.c100.p94 .bar{-webkit-transform:rotate(338.4deg);-moz-transform:rotate(338.4deg);-ms-transform:rotate(338.4deg);-o-transform:rotate(338.4deg);transform:rotate(338.4deg)}.c100.p95 .bar{-webkit-transform:rotate(342deg);-moz-transform:rotate(342deg);-ms-transform:rotate(342deg);-o-transform:rotate(342deg);transform:rotate(342deg)}.c100.p96 .bar{-webkit-transform:rotate(345.6deg);-moz-transform:rotate(345.6deg);-ms-transform:rotate(345.6deg);-o-transform:rotate(345.6deg);transform:rotate(345.6deg)}.c100.p97 .bar{-webkit-transform:rotate(349.2deg);-moz-transform:rotate(349.2deg);-ms-transform:rotate(349.2deg);-o-transform:rotate(349.2deg);transform:rotate(349.2deg)}.c100.p98 .bar{-webkit-transform:rotate(352.8deg);-moz-transform:rotate(352.8deg);-ms-transform:rotate(352.8deg);-o-transform:rotate(352.8deg);transform:rotate(352.8deg)}.c100.p99 .bar{-webkit-transform:rotate(356.4deg);-moz-transform:rotate(356.4deg);-ms-transform:rotate(356.4deg);-o-transform:rotate(356.4deg);transform:rotate(356.4deg)}.c100.p100 .bar{-webkit-transform:rotate(360deg);-moz-transform:rotate(360deg);-ms-transform:rotate(360deg);-o-transform:rotate(360deg);transform:rotate(360deg)}.c100:hover{cursor:default}.c100:hover>span{width:3.33em;line-height:3.33em;font-size:.3em;color:#307bbb}.c100:hover:after{top:.04em;left:.04em;width:.92em;height:.92em}.c100.dark{background-color:#0077c2}.c100.dark .bar,.c100.dark .fill{border-color:#80d6ff !important}.c100.dark>span{color:#0077c2}.c100.dark:after{background-color:#111}.c100.dark:hover>span{color:#80d6ff}.c100.error{background-color:#700}.c100.error .bar,.c100.error .fill{border-color:#d00 !important}.c100.error:hover>span{color:#d00}.c100.error>span{color:#700}.c100.success{background-color:#000}.c100.success .bar,.c100.success .fill{border-color:lime !important}.c100.success:hover>span{color:lime}.c100.success>span{color:#090}*{margin:0;padding:0;box-sizing:border-box}:root{font-size:16px}h1{width:100%;margin-top:12px;text-align:center}body{font-family:sans-serif;background:url(/static/imgs/grain_background.png);background-color:#111;background-repeat:repeat;color:#fff}button,a.button{box-shadow:0px 2px 6px .5px rgba(0,0,0,.7);border:1px solid #0077c2;background-color:#0077c2;color:#fff;font-size:1rem;padding:.75rem;margin-bottom:12px;display:inline-block;cursor:pointer}button+button,button+a.button,a.button+button,a.button+a.button{margin-left:12px}input,textarea,select{border:none;background-color:#111;color:#fff;font-size:1rem;display:inline-block;padding:.25rem}input::placeholder,textarea::placeholder,select::placeholder{color:#999}input[type=submit]{cursor:pointer;background-color:#0077c2}form input,form textarea,form select{z-index:20;box-shadow:0px 2px 6px .5px rgba(0,0,0,.7);padding:.75rem;width:100%}form input~label,form textarea~label,form select~label{margin-top:24px}form textarea{background-color:#111;height:50vh}form label{z-index:30;box-shadow:0px 2px 6px .5px rgba(0,0,0,.7);background-color:#0077c2;width:100%;line-height:44px;display:inline-block;padding:4px 12px 4px;margin-top:12px}.error-list ul li{box-shadow:0px 2px 6px .5px rgba(0,0,0,.5);list-style:none;background-color:#998100;padding:.5rem;margin-bottom:.5rem}.error-list ul li.success{background-color:#0077c2}.split{display:grid;grid-template-columns:1fr 1fr}.test-case{outline:none;box-shadow:0px 2px 6px .5px rgba(0,0,0,.5);resize:none;border:none;height:200px;padding:8px;background-color:#111;color:#fff}.test-case:first-child{border-right:2px solid #0077c2}.header-line,.option-line{box-shadow:0px 2px 6px .5px rgba(0,0,0,.5);background-color:#0077c2;padding:4px 12px 4px;margin-top:12px;display:inline-block;width:100%}.header-line>*,.option-line>*{line-height:44px;display:inline-block}.option-line{display:grid;grid-template-columns:1fr 1fr}.option-line>*:last-child{text-align:right}.button-list>*{margin:0px 8px 0px;background-color:#42a5f5;box-shadow:none;border:none;color:#fff;font-size:1rem;line-height:1.2rem;padding:4px 12px 4px;display:inline-block;cursor:pointer}.sidebar-page-container{display:grid;grid-template-columns:minmax(250px, 1fr) 5fr}#code-editor{position:relative;width:100%;min-height:24rem}/*# sourceMappingURL=core.css.map */
+.navbar{z-index:10000;width:100%;background:#0077c2;height:47px;position:relative;box-shadow:0px 0px 10px 0px rgba(0,0,0,.7);display:grid;grid-template-columns:1fr 6fr 1fr}.navbar .navbar-logo{padding-left:8px;text-align:center}.navbar .navbar-logo img{max-height:calc(47px - 2px);display:inline}.navbar ul{display:block;text-align:center;font-size:0}.navbar ul a li{margin:0;display:inline-block;cursor:pointer;font-size:24px;list-style:none;line-height:40px;padding-left:30px;padding-right:30px;padding-top:4px;color:#f2f2f2;border-top-color:#0077c2;transition:200ms all}.navbar ul a li.selected,.navbar ul a li:hover{border-bottom:2px solid #ffe766;color:#fff}.navbar .navbar-username{position:relative;max-height:47px;font-size:24px;line-height:40px;text-align:center;padding-top:4px;cursor:pointer;background-color:#00385c;transition:background-color 150ms}.navbar .navbar-username:hover,.navbar .navbar-username.selected{background-color:#00588f}.navbar .navbar-username:hover .navbar-username-dropdown,.navbar .navbar-username.selected .navbar-username-dropdown{display:block}.navbar .navbar-username a{display:block;width:100%}.navbar .navbar-username .navbar-username-dropdown{display:none;position:absolute;top:100%;left:0;width:100%}.navbar .navbar-username .navbar-username-dropdown .navbar-username-dropdown-option{border-bottom:1px solid #00588f;background:#00385c}.navbar .navbar-username .navbar-username-dropdown .navbar-username-dropdown-option:last-child{border-bottom:none}.navbar .navbar-username .navbar-username-dropdown .navbar-username-dropdown-option:hover{background-color:#00588f}.content,.error-list{width:100%;padding:10px 10%}.right{float:right}.left{float:left}.hidden{visibility:hidden}a{text-decoration:none;color:inherit}.split-2{display:grid;grid-template-columns:repeat(2, 1fr)}.split-2>*:first-child{margin-right:12px}.split-2>*:last-child{margin-left:12px}.split-3{display:grid;grid-template-columns:repeat(3, 1fr)}.split-4{display:grid;grid-template-columns:repeat(4, 1fr)}.split-lr{display:grid;grid-template-columns:1fr 1fr}.split-lr>*:first-child{text-align:left}.split-lr>*:last-child{text-align:right}.split-1-1{display:grid;grid-template-columns:1fr 1fr}.split-1-2{display:grid;grid-template-columns:1fr 2fr}.split-1-3{display:grid;grid-template-columns:1fr 3fr}.split-1-4{display:grid;grid-template-columns:1fr 4fr}.split-2-1{display:grid;grid-template-columns:2fr 1fr}.split-2-2{display:grid;grid-template-columns:2fr 2fr}.split-2-3{display:grid;grid-template-columns:2fr 3fr}.split-2-4{display:grid;grid-template-columns:2fr 4fr}.split-3-1{display:grid;grid-template-columns:3fr 1fr}.split-3-2{display:grid;grid-template-columns:3fr 2fr}.split-3-3{display:grid;grid-template-columns:3fr 3fr}.split-3-4{display:grid;grid-template-columns:3fr 4fr}.split-4-1{display:grid;grid-template-columns:4fr 1fr}.split-4-2{display:grid;grid-template-columns:4fr 2fr}.split-4-3{display:grid;grid-template-columns:4fr 3fr}.split-4-4{display:grid;grid-template-columns:4fr 4fr}pre{box-shadow:0px 2px 6px .5px rgba(0,0,0,.5);font-size:1rem}pre .hljs-ln td{padding-right:8px}pre .hljs-ln-line{max-width:200px !important}.fixed-half-split{display:grid;grid-template-columns:275px 1fr}.tabbed-split{display:grid !important}.tabbed-split.tab-12{grid-template-columns:12px 1fr}.tabbed-split.tab-16{grid-template-columns:16px 1fr}.tabbed-split.tab-24{grid-template-columns:24px 1fr}.tabbed-split.tab-32{grid-template-columns:32px 1fr}.tabbed-split.tab-48{grid-template-columns:48px 1fr}.tabbed-split.tab-64{grid-template-columns:64px 1fr}.tabbed-split.primary>span{background-color:#42a5f5}.tabbed-split.primary-light>span{background-color:#80d6ff}.tabbed-split.primary-dark>span{background-color:#0077c2}.tabbed-split.secondary>span{background-color:gold}.tabbed-split.secondary-light>span{background-color:#ffe766}.tabbed-split.secondary-dark>span{background-color:#998100}.tabbed-split.success>span{background-color:lime}.tabbed-split.error>span{background-color:#d00}.tabbed-split.error-light>span{background-color:#f44}.tabbed-split.error-dark>span{background-color:#700}.box{box-shadow:0px 2px 6px .5px rgba(0,0,0,.5);background-color:#111}.box .highlight:hover{background-color:#333}.w50{width:50%}.w100{width:100%}.pad-1{padding:1px !important}.pad-l-1{padding-left:1px !important}.pad-r-1{padding-right:1px !important}.pad-t-1{padding-top:1px !important}.pad-b-1{padding-bottom:1px !important}.mar-1{margin:1px !important}.mar-l-1{margin-left:1px !important}.mar-r-1{margin-right:1px !important}.mar-t-1{margin-top:1px !important}.mar-b-1{margin-bottom:1px !important}.pad-2{padding:2px !important}.pad-l-2{padding-left:2px !important}.pad-r-2{padding-right:2px !important}.pad-t-2{padding-top:2px !important}.pad-b-2{padding-bottom:2px !important}.mar-2{margin:2px !important}.mar-l-2{margin-left:2px !important}.mar-r-2{margin-right:2px !important}.mar-t-2{margin-top:2px !important}.mar-b-2{margin-bottom:2px !important}.pad-3{padding:3px !important}.pad-l-3{padding-left:3px !important}.pad-r-3{padding-right:3px !important}.pad-t-3{padding-top:3px !important}.pad-b-3{padding-bottom:3px !important}.mar-3{margin:3px !important}.mar-l-3{margin-left:3px !important}.mar-r-3{margin-right:3px !important}.mar-t-3{margin-top:3px !important}.mar-b-3{margin-bottom:3px !important}.pad-4{padding:4px !important}.pad-l-4{padding-left:4px !important}.pad-r-4{padding-right:4px !important}.pad-t-4{padding-top:4px !important}.pad-b-4{padding-bottom:4px !important}.mar-4{margin:4px !important}.mar-l-4{margin-left:4px !important}.mar-r-4{margin-right:4px !important}.mar-t-4{margin-top:4px !important}.mar-b-4{margin-bottom:4px !important}.pad-5{padding:5px !important}.pad-l-5{padding-left:5px !important}.pad-r-5{padding-right:5px !important}.pad-t-5{padding-top:5px !important}.pad-b-5{padding-bottom:5px !important}.mar-5{margin:5px !important}.mar-l-5{margin-left:5px !important}.mar-r-5{margin-right:5px !important}.mar-t-5{margin-top:5px !important}.mar-b-5{margin-bottom:5px !important}.pad-6{padding:6px !important}.pad-l-6{padding-left:6px !important}.pad-r-6{padding-right:6px !important}.pad-t-6{padding-top:6px !important}.pad-b-6{padding-bottom:6px !important}.mar-6{margin:6px !important}.mar-l-6{margin-left:6px !important}.mar-r-6{margin-right:6px !important}.mar-t-6{margin-top:6px !important}.mar-b-6{margin-bottom:6px !important}.pad-7{padding:7px !important}.pad-l-7{padding-left:7px !important}.pad-r-7{padding-right:7px !important}.pad-t-7{padding-top:7px !important}.pad-b-7{padding-bottom:7px !important}.mar-7{margin:7px !important}.mar-l-7{margin-left:7px !important}.mar-r-7{margin-right:7px !important}.mar-t-7{margin-top:7px !important}.mar-b-7{margin-bottom:7px !important}.pad-8{padding:8px !important}.pad-l-8{padding-left:8px !important}.pad-r-8{padding-right:8px !important}.pad-t-8{padding-top:8px !important}.pad-b-8{padding-bottom:8px !important}.mar-8{margin:8px !important}.mar-l-8{margin-left:8px !important}.mar-r-8{margin-right:8px !important}.mar-t-8{margin-top:8px !important}.mar-b-8{margin-bottom:8px !important}.pad-9{padding:9px !important}.pad-l-9{padding-left:9px !important}.pad-r-9{padding-right:9px !important}.pad-t-9{padding-top:9px !important}.pad-b-9{padding-bottom:9px !important}.mar-9{margin:9px !important}.mar-l-9{margin-left:9px !important}.mar-r-9{margin-right:9px !important}.mar-t-9{margin-top:9px !important}.mar-b-9{margin-bottom:9px !important}.pad-10{padding:10px !important}.pad-l-10{padding-left:10px !important}.pad-r-10{padding-right:10px !important}.pad-t-10{padding-top:10px !important}.pad-b-10{padding-bottom:10px !important}.mar-10{margin:10px !important}.mar-l-10{margin-left:10px !important}.mar-r-10{margin-right:10px !important}.mar-t-10{margin-top:10px !important}.mar-b-10{margin-bottom:10px !important}.pad-11{padding:11px !important}.pad-l-11{padding-left:11px !important}.pad-r-11{padding-right:11px !important}.pad-t-11{padding-top:11px !important}.pad-b-11{padding-bottom:11px !important}.mar-11{margin:11px !important}.mar-l-11{margin-left:11px !important}.mar-r-11{margin-right:11px !important}.mar-t-11{margin-top:11px !important}.mar-b-11{margin-bottom:11px !important}.pad-12{padding:12px !important}.pad-l-12{padding-left:12px !important}.pad-r-12{padding-right:12px !important}.pad-t-12{padding-top:12px !important}.pad-b-12{padding-bottom:12px !important}.mar-12{margin:12px !important}.mar-l-12{margin-left:12px !important}.mar-r-12{margin-right:12px !important}.mar-t-12{margin-top:12px !important}.mar-b-12{margin-bottom:12px !important}.pad-13{padding:13px !important}.pad-l-13{padding-left:13px !important}.pad-r-13{padding-right:13px !important}.pad-t-13{padding-top:13px !important}.pad-b-13{padding-bottom:13px !important}.mar-13{margin:13px !important}.mar-l-13{margin-left:13px !important}.mar-r-13{margin-right:13px !important}.mar-t-13{margin-top:13px !important}.mar-b-13{margin-bottom:13px !important}.pad-14{padding:14px !important}.pad-l-14{padding-left:14px !important}.pad-r-14{padding-right:14px !important}.pad-t-14{padding-top:14px !important}.pad-b-14{padding-bottom:14px !important}.mar-14{margin:14px !important}.mar-l-14{margin-left:14px !important}.mar-r-14{margin-right:14px !important}.mar-t-14{margin-top:14px !important}.mar-b-14{margin-bottom:14px !important}.pad-15{padding:15px !important}.pad-l-15{padding-left:15px !important}.pad-r-15{padding-right:15px !important}.pad-t-15{padding-top:15px !important}.pad-b-15{padding-bottom:15px !important}.mar-15{margin:15px !important}.mar-l-15{margin-left:15px !important}.mar-r-15{margin-right:15px !important}.mar-t-15{margin-top:15px !important}.mar-b-15{margin-bottom:15px !important}.pad-16{padding:16px !important}.pad-l-16{padding-left:16px !important}.pad-r-16{padding-right:16px !important}.pad-t-16{padding-top:16px !important}.pad-b-16{padding-bottom:16px !important}.mar-16{margin:16px !important}.mar-l-16{margin-left:16px !important}.mar-r-16{margin-right:16px !important}.mar-t-16{margin-top:16px !important}.mar-b-16{margin-bottom:16px !important}.pad-17{padding:17px !important}.pad-l-17{padding-left:17px !important}.pad-r-17{padding-right:17px !important}.pad-t-17{padding-top:17px !important}.pad-b-17{padding-bottom:17px !important}.mar-17{margin:17px !important}.mar-l-17{margin-left:17px !important}.mar-r-17{margin-right:17px !important}.mar-t-17{margin-top:17px !important}.mar-b-17{margin-bottom:17px !important}.pad-18{padding:18px !important}.pad-l-18{padding-left:18px !important}.pad-r-18{padding-right:18px !important}.pad-t-18{padding-top:18px !important}.pad-b-18{padding-bottom:18px !important}.mar-18{margin:18px !important}.mar-l-18{margin-left:18px !important}.mar-r-18{margin-right:18px !important}.mar-t-18{margin-top:18px !important}.mar-b-18{margin-bottom:18px !important}.pad-19{padding:19px !important}.pad-l-19{padding-left:19px !important}.pad-r-19{padding-right:19px !important}.pad-t-19{padding-top:19px !important}.pad-b-19{padding-bottom:19px !important}.mar-19{margin:19px !important}.mar-l-19{margin-left:19px !important}.mar-r-19{margin-right:19px !important}.mar-t-19{margin-top:19px !important}.mar-b-19{margin-bottom:19px !important}.pad-20{padding:20px !important}.pad-l-20{padding-left:20px !important}.pad-r-20{padding-right:20px !important}.pad-t-20{padding-top:20px !important}.pad-b-20{padding-bottom:20px !important}.mar-20{margin:20px !important}.mar-l-20{margin-left:20px !important}.mar-r-20{margin-right:20px !important}.mar-t-20{margin-top:20px !important}.mar-b-20{margin-bottom:20px !important}.pad-21{padding:21px !important}.pad-l-21{padding-left:21px !important}.pad-r-21{padding-right:21px !important}.pad-t-21{padding-top:21px !important}.pad-b-21{padding-bottom:21px !important}.mar-21{margin:21px !important}.mar-l-21{margin-left:21px !important}.mar-r-21{margin-right:21px !important}.mar-t-21{margin-top:21px !important}.mar-b-21{margin-bottom:21px !important}.pad-22{padding:22px !important}.pad-l-22{padding-left:22px !important}.pad-r-22{padding-right:22px !important}.pad-t-22{padding-top:22px !important}.pad-b-22{padding-bottom:22px !important}.mar-22{margin:22px !important}.mar-l-22{margin-left:22px !important}.mar-r-22{margin-right:22px !important}.mar-t-22{margin-top:22px !important}.mar-b-22{margin-bottom:22px !important}.pad-23{padding:23px !important}.pad-l-23{padding-left:23px !important}.pad-r-23{padding-right:23px !important}.pad-t-23{padding-top:23px !important}.pad-b-23{padding-bottom:23px !important}.mar-23{margin:23px !important}.mar-l-23{margin-left:23px !important}.mar-r-23{margin-right:23px !important}.mar-t-23{margin-top:23px !important}.mar-b-23{margin-bottom:23px !important}.pad-24{padding:24px !important}.pad-l-24{padding-left:24px !important}.pad-r-24{padding-right:24px !important}.pad-t-24{padding-top:24px !important}.pad-b-24{padding-bottom:24px !important}.mar-24{margin:24px !important}.mar-l-24{margin-left:24px !important}.mar-r-24{margin-right:24px !important}.mar-t-24{margin-top:24px !important}.mar-b-24{margin-bottom:24px !important}.pad-25{padding:25px !important}.pad-l-25{padding-left:25px !important}.pad-r-25{padding-right:25px !important}.pad-t-25{padding-top:25px !important}.pad-b-25{padding-bottom:25px !important}.mar-25{margin:25px !important}.mar-l-25{margin-left:25px !important}.mar-r-25{margin-right:25px !important}.mar-t-25{margin-top:25px !important}.mar-b-25{margin-bottom:25px !important}.pad-26{padding:26px !important}.pad-l-26{padding-left:26px !important}.pad-r-26{padding-right:26px !important}.pad-t-26{padding-top:26px !important}.pad-b-26{padding-bottom:26px !important}.mar-26{margin:26px !important}.mar-l-26{margin-left:26px !important}.mar-r-26{margin-right:26px !important}.mar-t-26{margin-top:26px !important}.mar-b-26{margin-bottom:26px !important}.pad-27{padding:27px !important}.pad-l-27{padding-left:27px !important}.pad-r-27{padding-right:27px !important}.pad-t-27{padding-top:27px !important}.pad-b-27{padding-bottom:27px !important}.mar-27{margin:27px !important}.mar-l-27{margin-left:27px !important}.mar-r-27{margin-right:27px !important}.mar-t-27{margin-top:27px !important}.mar-b-27{margin-bottom:27px !important}.pad-28{padding:28px !important}.pad-l-28{padding-left:28px !important}.pad-r-28{padding-right:28px !important}.pad-t-28{padding-top:28px !important}.pad-b-28{padding-bottom:28px !important}.mar-28{margin:28px !important}.mar-l-28{margin-left:28px !important}.mar-r-28{margin-right:28px !important}.mar-t-28{margin-top:28px !important}.mar-b-28{margin-bottom:28px !important}.pad-29{padding:29px !important}.pad-l-29{padding-left:29px !important}.pad-r-29{padding-right:29px !important}.pad-t-29{padding-top:29px !important}.pad-b-29{padding-bottom:29px !important}.mar-29{margin:29px !important}.mar-l-29{margin-left:29px !important}.mar-r-29{margin-right:29px !important}.mar-t-29{margin-top:29px !important}.mar-b-29{margin-bottom:29px !important}.pad-30{padding:30px !important}.pad-l-30{padding-left:30px !important}.pad-r-30{padding-right:30px !important}.pad-t-30{padding-top:30px !important}.pad-b-30{padding-bottom:30px !important}.mar-30{margin:30px !important}.mar-l-30{margin-left:30px !important}.mar-r-30{margin-right:30px !important}.mar-t-30{margin-top:30px !important}.mar-b-30{margin-bottom:30px !important}.pad-31{padding:31px !important}.pad-l-31{padding-left:31px !important}.pad-r-31{padding-right:31px !important}.pad-t-31{padding-top:31px !important}.pad-b-31{padding-bottom:31px !important}.mar-31{margin:31px !important}.mar-l-31{margin-left:31px !important}.mar-r-31{margin-right:31px !important}.mar-t-31{margin-top:31px !important}.mar-b-31{margin-bottom:31px !important}.pad-32{padding:32px !important}.pad-l-32{padding-left:32px !important}.pad-r-32{padding-right:32px !important}.pad-t-32{padding-top:32px !important}.pad-b-32{padding-bottom:32px !important}.mar-32{margin:32px !important}.mar-l-32{margin-left:32px !important}.mar-r-32{margin-right:32px !important}.mar-t-32{margin-top:32px !important}.mar-b-32{margin-bottom:32px !important}.pad-33{padding:33px !important}.pad-l-33{padding-left:33px !important}.pad-r-33{padding-right:33px !important}.pad-t-33{padding-top:33px !important}.pad-b-33{padding-bottom:33px !important}.mar-33{margin:33px !important}.mar-l-33{margin-left:33px !important}.mar-r-33{margin-right:33px !important}.mar-t-33{margin-top:33px !important}.mar-b-33{margin-bottom:33px !important}.pad-34{padding:34px !important}.pad-l-34{padding-left:34px !important}.pad-r-34{padding-right:34px !important}.pad-t-34{padding-top:34px !important}.pad-b-34{padding-bottom:34px !important}.mar-34{margin:34px !important}.mar-l-34{margin-left:34px !important}.mar-r-34{margin-right:34px !important}.mar-t-34{margin-top:34px !important}.mar-b-34{margin-bottom:34px !important}.pad-35{padding:35px !important}.pad-l-35{padding-left:35px !important}.pad-r-35{padding-right:35px !important}.pad-t-35{padding-top:35px !important}.pad-b-35{padding-bottom:35px !important}.mar-35{margin:35px !important}.mar-l-35{margin-left:35px !important}.mar-r-35{margin-right:35px !important}.mar-t-35{margin-top:35px !important}.mar-b-35{margin-bottom:35px !important}.pad-36{padding:36px !important}.pad-l-36{padding-left:36px !important}.pad-r-36{padding-right:36px !important}.pad-t-36{padding-top:36px !important}.pad-b-36{padding-bottom:36px !important}.mar-36{margin:36px !important}.mar-l-36{margin-left:36px !important}.mar-r-36{margin-right:36px !important}.mar-t-36{margin-top:36px !important}.mar-b-36{margin-bottom:36px !important}.pad-37{padding:37px !important}.pad-l-37{padding-left:37px !important}.pad-r-37{padding-right:37px !important}.pad-t-37{padding-top:37px !important}.pad-b-37{padding-bottom:37px !important}.mar-37{margin:37px !important}.mar-l-37{margin-left:37px !important}.mar-r-37{margin-right:37px !important}.mar-t-37{margin-top:37px !important}.mar-b-37{margin-bottom:37px !important}.pad-38{padding:38px !important}.pad-l-38{padding-left:38px !important}.pad-r-38{padding-right:38px !important}.pad-t-38{padding-top:38px !important}.pad-b-38{padding-bottom:38px !important}.mar-38{margin:38px !important}.mar-l-38{margin-left:38px !important}.mar-r-38{margin-right:38px !important}.mar-t-38{margin-top:38px !important}.mar-b-38{margin-bottom:38px !important}.pad-39{padding:39px !important}.pad-l-39{padding-left:39px !important}.pad-r-39{padding-right:39px !important}.pad-t-39{padding-top:39px !important}.pad-b-39{padding-bottom:39px !important}.mar-39{margin:39px !important}.mar-l-39{margin-left:39px !important}.mar-r-39{margin-right:39px !important}.mar-t-39{margin-top:39px !important}.mar-b-39{margin-bottom:39px !important}.pad-40{padding:40px !important}.pad-l-40{padding-left:40px !important}.pad-r-40{padding-right:40px !important}.pad-t-40{padding-top:40px !important}.pad-b-40{padding-bottom:40px !important}.mar-40{margin:40px !important}.mar-l-40{margin-left:40px !important}.mar-r-40{margin-right:40px !important}.mar-t-40{margin-top:40px !important}.mar-b-40{margin-bottom:40px !important}.pad-41{padding:41px !important}.pad-l-41{padding-left:41px !important}.pad-r-41{padding-right:41px !important}.pad-t-41{padding-top:41px !important}.pad-b-41{padding-bottom:41px !important}.mar-41{margin:41px !important}.mar-l-41{margin-left:41px !important}.mar-r-41{margin-right:41px !important}.mar-t-41{margin-top:41px !important}.mar-b-41{margin-bottom:41px !important}.pad-42{padding:42px !important}.pad-l-42{padding-left:42px !important}.pad-r-42{padding-right:42px !important}.pad-t-42{padding-top:42px !important}.pad-b-42{padding-bottom:42px !important}.mar-42{margin:42px !important}.mar-l-42{margin-left:42px !important}.mar-r-42{margin-right:42px !important}.mar-t-42{margin-top:42px !important}.mar-b-42{margin-bottom:42px !important}.pad-43{padding:43px !important}.pad-l-43{padding-left:43px !important}.pad-r-43{padding-right:43px !important}.pad-t-43{padding-top:43px !important}.pad-b-43{padding-bottom:43px !important}.mar-43{margin:43px !important}.mar-l-43{margin-left:43px !important}.mar-r-43{margin-right:43px !important}.mar-t-43{margin-top:43px !important}.mar-b-43{margin-bottom:43px !important}.pad-44{padding:44px !important}.pad-l-44{padding-left:44px !important}.pad-r-44{padding-right:44px !important}.pad-t-44{padding-top:44px !important}.pad-b-44{padding-bottom:44px !important}.mar-44{margin:44px !important}.mar-l-44{margin-left:44px !important}.mar-r-44{margin-right:44px !important}.mar-t-44{margin-top:44px !important}.mar-b-44{margin-bottom:44px !important}.pad-45{padding:45px !important}.pad-l-45{padding-left:45px !important}.pad-r-45{padding-right:45px !important}.pad-t-45{padding-top:45px !important}.pad-b-45{padding-bottom:45px !important}.mar-45{margin:45px !important}.mar-l-45{margin-left:45px !important}.mar-r-45{margin-right:45px !important}.mar-t-45{margin-top:45px !important}.mar-b-45{margin-bottom:45px !important}.pad-46{padding:46px !important}.pad-l-46{padding-left:46px !important}.pad-r-46{padding-right:46px !important}.pad-t-46{padding-top:46px !important}.pad-b-46{padding-bottom:46px !important}.mar-46{margin:46px !important}.mar-l-46{margin-left:46px !important}.mar-r-46{margin-right:46px !important}.mar-t-46{margin-top:46px !important}.mar-b-46{margin-bottom:46px !important}.pad-47{padding:47px !important}.pad-l-47{padding-left:47px !important}.pad-r-47{padding-right:47px !important}.pad-t-47{padding-top:47px !important}.pad-b-47{padding-bottom:47px !important}.mar-47{margin:47px !important}.mar-l-47{margin-left:47px !important}.mar-r-47{margin-right:47px !important}.mar-t-47{margin-top:47px !important}.mar-b-47{margin-bottom:47px !important}.pad-48{padding:48px !important}.pad-l-48{padding-left:48px !important}.pad-r-48{padding-right:48px !important}.pad-t-48{padding-top:48px !important}.pad-b-48{padding-bottom:48px !important}.mar-48{margin:48px !important}.mar-l-48{margin-left:48px !important}.mar-r-48{margin-right:48px !important}.mar-t-48{margin-top:48px !important}.mar-b-48{margin-bottom:48px !important}.pad-49{padding:49px !important}.pad-l-49{padding-left:49px !important}.pad-r-49{padding-right:49px !important}.pad-t-49{padding-top:49px !important}.pad-b-49{padding-bottom:49px !important}.mar-49{margin:49px !important}.mar-l-49{margin-left:49px !important}.mar-r-49{margin-right:49px !important}.mar-t-49{margin-top:49px !important}.mar-b-49{margin-bottom:49px !important}.problem-info{float:right;width:300px}.sidebar-problem-list{z-index:50;box-shadow:0 10px 0 0 transparent,0 10px 0 0 transparent,10px 0 0 0 transparent,0 8px 8px 2px rgba(0,0,0,.5);background:#003252;position:relative;min-height:calc(100vh - 47px)}.sidebar-problem-list .sidebar-problem{width:100%;display:grid;grid-template-columns:32px 1fr;border-left-width:24px;border-left-style:solid;border-left-color:#0077c2;transition:background-color 200ms ease-in-out;transition:width 200ms ease-in-out;background-color:inherit;cursor:pointer}.sidebar-problem-list .sidebar-problem[correct]{border-left-color:lime}.sidebar-problem-list .sidebar-problem[wrong]{border-left-color:red}.sidebar-problem-list .sidebar-problem[selected],.sidebar-problem-list .sidebar-problem:hover{width:calc(100% + 24px)}.sidebar-problem-list .sidebar-problem[selected]{background-color:#42a5f5 !important}.sidebar-problem-list .sidebar-problem:hover{background-color:#128ef2}.sidebar-problem-list .sidebar-problem-letter{text-align:center;background-color:#001929;padding-top:20px;padding-bottom:20px;font-size:1.2rem}.sidebar-problem-list .sidebar-problem-name{text-align:left;font-size:1.2rem;padding-left:5px;padding-top:20px;padding-bottom:20px;margin-left:10px;margin-right:10px}.rect-auto,.c100.p100 .slice,.c100.p99 .slice,.c100.p98 .slice,.c100.p97 .slice,.c100.p96 .slice,.c100.p95 .slice,.c100.p94 .slice,.c100.p93 .slice,.c100.p92 .slice,.c100.p91 .slice,.c100.p90 .slice,.c100.p89 .slice,.c100.p88 .slice,.c100.p87 .slice,.c100.p86 .slice,.c100.p85 .slice,.c100.p84 .slice,.c100.p83 .slice,.c100.p82 .slice,.c100.p81 .slice,.c100.p80 .slice,.c100.p79 .slice,.c100.p78 .slice,.c100.p77 .slice,.c100.p76 .slice,.c100.p75 .slice,.c100.p74 .slice,.c100.p73 .slice,.c100.p72 .slice,.c100.p71 .slice,.c100.p70 .slice,.c100.p69 .slice,.c100.p68 .slice,.c100.p67 .slice,.c100.p66 .slice,.c100.p65 .slice,.c100.p64 .slice,.c100.p63 .slice,.c100.p62 .slice,.c100.p61 .slice,.c100.p60 .slice,.c100.p59 .slice,.c100.p58 .slice,.c100.p57 .slice,.c100.p56 .slice,.c100.p55 .slice,.c100.p54 .slice,.c100.p53 .slice,.c100.p52 .slice,.c100.p51 .slice{clip:rect(auto, auto, auto, auto)}.pie,.c100.p100 .fill,.c100.p99 .fill,.c100.p98 .fill,.c100.p97 .fill,.c100.p96 .fill,.c100.p95 .fill,.c100.p94 .fill,.c100.p93 .fill,.c100.p92 .fill,.c100.p91 .fill,.c100.p90 .fill,.c100.p89 .fill,.c100.p88 .fill,.c100.p87 .fill,.c100.p86 .fill,.c100.p85 .fill,.c100.p84 .fill,.c100.p83 .fill,.c100.p82 .fill,.c100.p81 .fill,.c100.p80 .fill,.c100.p79 .fill,.c100.p78 .fill,.c100.p77 .fill,.c100.p76 .fill,.c100.p75 .fill,.c100.p74 .fill,.c100.p73 .fill,.c100.p72 .fill,.c100.p71 .fill,.c100.p70 .fill,.c100.p69 .fill,.c100.p68 .fill,.c100.p67 .fill,.c100.p66 .fill,.c100.p65 .fill,.c100.p64 .fill,.c100.p63 .fill,.c100.p62 .fill,.c100.p61 .fill,.c100.p60 .fill,.c100.p59 .fill,.c100.p58 .fill,.c100.p57 .fill,.c100.p56 .fill,.c100.p55 .fill,.c100.p54 .fill,.c100.p53 .fill,.c100.p52 .fill,.c100.p51 .fill,.c100 .bar{position:absolute;border:.08em solid #307bbb;width:.84em;height:.84em;clip:rect(0em, 0.5em, 1em, 0em);border-radius:50%;-webkit-transform:rotate(0deg);-moz-transform:rotate(0deg);-ms-transform:rotate(0deg);-o-transform:rotate(0deg);transform:rotate(0deg)}.pie-fill,.c100.p100 .fill,.c100.p100.bar:after,.c100.p99 .fill,.c100.p99.bar:after,.c100.p98 .fill,.c100.p98.bar:after,.c100.p97 .fill,.c100.p97.bar:after,.c100.p96 .fill,.c100.p96.bar:after,.c100.p95 .fill,.c100.p95.bar:after,.c100.p94 .fill,.c100.p94.bar:after,.c100.p93 .fill,.c100.p93.bar:after,.c100.p92 .fill,.c100.p92.bar:after,.c100.p91 .fill,.c100.p91.bar:after,.c100.p90 .fill,.c100.p90.bar:after,.c100.p89 .fill,.c100.p89.bar:after,.c100.p88 .fill,.c100.p88.bar:after,.c100.p87 .fill,.c100.p87.bar:after,.c100.p86 .fill,.c100.p86.bar:after,.c100.p85 .fill,.c100.p85.bar:after,.c100.p84 .fill,.c100.p84.bar:after,.c100.p83 .fill,.c100.p83.bar:after,.c100.p82 .fill,.c100.p82.bar:after,.c100.p81 .fill,.c100.p81.bar:after,.c100.p80 .fill,.c100.p80.bar:after,.c100.p79 .fill,.c100.p79.bar:after,.c100.p78 .fill,.c100.p78.bar:after,.c100.p77 .fill,.c100.p77.bar:after,.c100.p76 .fill,.c100.p76.bar:after,.c100.p75 .fill,.c100.p75.bar:after,.c100.p74 .fill,.c100.p74.bar:after,.c100.p73 .fill,.c100.p73.bar:after,.c100.p72 .fill,.c100.p72.bar:after,.c100.p71 .fill,.c100.p71.bar:after,.c100.p70 .fill,.c100.p70.bar:after,.c100.p69 .fill,.c100.p69.bar:after,.c100.p68 .fill,.c100.p68.bar:after,.c100.p67 .fill,.c100.p67.bar:after,.c100.p66 .fill,.c100.p66.bar:after,.c100.p65 .fill,.c100.p65.bar:after,.c100.p64 .fill,.c100.p64.bar:after,.c100.p63 .fill,.c100.p63.bar:after,.c100.p62 .fill,.c100.p62.bar:after,.c100.p61 .fill,.c100.p61.bar:after,.c100.p60 .fill,.c100.p60.bar:after,.c100.p59 .fill,.c100.p59.bar:after,.c100.p58 .fill,.c100.p58.bar:after,.c100.p57 .fill,.c100.p57.bar:after,.c100.p56 .fill,.c100.p56.bar:after,.c100.p55 .fill,.c100.p55.bar:after,.c100.p54 .fill,.c100.p54.bar:after,.c100.p53 .fill,.c100.p53.bar:after,.c100.p52 .fill,.c100.p52.bar:after,.c100.p51 .fill,.c100.p51.bar:after{-webkit-transform:rotate(180deg);-moz-transform:rotate(180deg);-ms-transform:rotate(180deg);-o-transform:rotate(180deg);transform:rotate(180deg)}.c100{position:relative;font-size:120px;width:1em;height:1em;border-radius:50%;float:left;background-color:#ccc}.c100 *,.c100 *:before,.c100 *:after{-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box}.c100.center{float:none;margin:0 auto}.c100.big{font-size:240px}.c100.small{font-size:80px}.c100>span{position:absolute;width:100%;z-index:1;left:0;top:0;width:5em;line-height:5em;font-size:.2em;color:#ccc;display:block;text-align:center;white-space:nowrap;-webkit-transition-property:all;-moz-transition-property:all;-o-transition-property:all;transition-property:all;-webkit-transition-duration:.2s;-moz-transition-duration:.2s;-o-transition-duration:.2s;transition-duration:.2s;-webkit-transition-timing-function:ease-out;-moz-transition-timing-function:ease-out;-o-transition-timing-function:ease-out;transition-timing-function:ease-out}.c100:after{position:absolute;top:.08em;left:.08em;display:block;content:" ";border-radius:50%;background-color:#f5f5f5;width:.84em;height:.84em;-webkit-transition-property:all;-moz-transition-property:all;-o-transition-property:all;transition-property:all;-webkit-transition-duration:.2s;-moz-transition-duration:.2s;-o-transition-duration:.2s;transition-duration:.2s;-webkit-transition-timing-function:ease-in;-moz-transition-timing-function:ease-in;-o-transition-timing-function:ease-in;transition-timing-function:ease-in}.c100 .slice{position:absolute;width:1em;height:1em;clip:rect(0em, 1em, 1em, 0.5em)}.c100.p1 .bar{-webkit-transform:rotate(3.6deg);-moz-transform:rotate(3.6deg);-ms-transform:rotate(3.6deg);-o-transform:rotate(3.6deg);transform:rotate(3.6deg)}.c100.p2 .bar{-webkit-transform:rotate(7.2deg);-moz-transform:rotate(7.2deg);-ms-transform:rotate(7.2deg);-o-transform:rotate(7.2deg);transform:rotate(7.2deg)}.c100.p3 .bar{-webkit-transform:rotate(10.8deg);-moz-transform:rotate(10.8deg);-ms-transform:rotate(10.8deg);-o-transform:rotate(10.8deg);transform:rotate(10.8deg)}.c100.p4 .bar{-webkit-transform:rotate(14.4deg);-moz-transform:rotate(14.4deg);-ms-transform:rotate(14.4deg);-o-transform:rotate(14.4deg);transform:rotate(14.4deg)}.c100.p5 .bar{-webkit-transform:rotate(18deg);-moz-transform:rotate(18deg);-ms-transform:rotate(18deg);-o-transform:rotate(18deg);transform:rotate(18deg)}.c100.p6 .bar{-webkit-transform:rotate(21.6deg);-moz-transform:rotate(21.6deg);-ms-transform:rotate(21.6deg);-o-transform:rotate(21.6deg);transform:rotate(21.6deg)}.c100.p7 .bar{-webkit-transform:rotate(25.2deg);-moz-transform:rotate(25.2deg);-ms-transform:rotate(25.2deg);-o-transform:rotate(25.2deg);transform:rotate(25.2deg)}.c100.p8 .bar{-webkit-transform:rotate(28.8deg);-moz-transform:rotate(28.8deg);-ms-transform:rotate(28.8deg);-o-transform:rotate(28.8deg);transform:rotate(28.8deg)}.c100.p9 .bar{-webkit-transform:rotate(32.4deg);-moz-transform:rotate(32.4deg);-ms-transform:rotate(32.4deg);-o-transform:rotate(32.4deg);transform:rotate(32.4deg)}.c100.p10 .bar{-webkit-transform:rotate(36deg);-moz-transform:rotate(36deg);-ms-transform:rotate(36deg);-o-transform:rotate(36deg);transform:rotate(36deg)}.c100.p11 .bar{-webkit-transform:rotate(39.6deg);-moz-transform:rotate(39.6deg);-ms-transform:rotate(39.6deg);-o-transform:rotate(39.6deg);transform:rotate(39.6deg)}.c100.p12 .bar{-webkit-transform:rotate(43.2deg);-moz-transform:rotate(43.2deg);-ms-transform:rotate(43.2deg);-o-transform:rotate(43.2deg);transform:rotate(43.2deg)}.c100.p13 .bar{-webkit-transform:rotate(46.8deg);-moz-transform:rotate(46.8deg);-ms-transform:rotate(46.8deg);-o-transform:rotate(46.8deg);transform:rotate(46.8deg)}.c100.p14 .bar{-webkit-transform:rotate(50.4deg);-moz-transform:rotate(50.4deg);-ms-transform:rotate(50.4deg);-o-transform:rotate(50.4deg);transform:rotate(50.4deg)}.c100.p15 .bar{-webkit-transform:rotate(54deg);-moz-transform:rotate(54deg);-ms-transform:rotate(54deg);-o-transform:rotate(54deg);transform:rotate(54deg)}.c100.p16 .bar{-webkit-transform:rotate(57.6deg);-moz-transform:rotate(57.6deg);-ms-transform:rotate(57.6deg);-o-transform:rotate(57.6deg);transform:rotate(57.6deg)}.c100.p17 .bar{-webkit-transform:rotate(61.2deg);-moz-transform:rotate(61.2deg);-ms-transform:rotate(61.2deg);-o-transform:rotate(61.2deg);transform:rotate(61.2deg)}.c100.p18 .bar{-webkit-transform:rotate(64.8deg);-moz-transform:rotate(64.8deg);-ms-transform:rotate(64.8deg);-o-transform:rotate(64.8deg);transform:rotate(64.8deg)}.c100.p19 .bar{-webkit-transform:rotate(68.4deg);-moz-transform:rotate(68.4deg);-ms-transform:rotate(68.4deg);-o-transform:rotate(68.4deg);transform:rotate(68.4deg)}.c100.p20 .bar{-webkit-transform:rotate(72deg);-moz-transform:rotate(72deg);-ms-transform:rotate(72deg);-o-transform:rotate(72deg);transform:rotate(72deg)}.c100.p21 .bar{-webkit-transform:rotate(75.6deg);-moz-transform:rotate(75.6deg);-ms-transform:rotate(75.6deg);-o-transform:rotate(75.6deg);transform:rotate(75.6deg)}.c100.p22 .bar{-webkit-transform:rotate(79.2deg);-moz-transform:rotate(79.2deg);-ms-transform:rotate(79.2deg);-o-transform:rotate(79.2deg);transform:rotate(79.2deg)}.c100.p23 .bar{-webkit-transform:rotate(82.8deg);-moz-transform:rotate(82.8deg);-ms-transform:rotate(82.8deg);-o-transform:rotate(82.8deg);transform:rotate(82.8deg)}.c100.p24 .bar{-webkit-transform:rotate(86.4deg);-moz-transform:rotate(86.4deg);-ms-transform:rotate(86.4deg);-o-transform:rotate(86.4deg);transform:rotate(86.4deg)}.c100.p25 .bar{-webkit-transform:rotate(90deg);-moz-transform:rotate(90deg);-ms-transform:rotate(90deg);-o-transform:rotate(90deg);transform:rotate(90deg)}.c100.p26 .bar{-webkit-transform:rotate(93.6deg);-moz-transform:rotate(93.6deg);-ms-transform:rotate(93.6deg);-o-transform:rotate(93.6deg);transform:rotate(93.6deg)}.c100.p27 .bar{-webkit-transform:rotate(97.2deg);-moz-transform:rotate(97.2deg);-ms-transform:rotate(97.2deg);-o-transform:rotate(97.2deg);transform:rotate(97.2deg)}.c100.p28 .bar{-webkit-transform:rotate(100.8deg);-moz-transform:rotate(100.8deg);-ms-transform:rotate(100.8deg);-o-transform:rotate(100.8deg);transform:rotate(100.8deg)}.c100.p29 .bar{-webkit-transform:rotate(104.4deg);-moz-transform:rotate(104.4deg);-ms-transform:rotate(104.4deg);-o-transform:rotate(104.4deg);transform:rotate(104.4deg)}.c100.p30 .bar{-webkit-transform:rotate(108deg);-moz-transform:rotate(108deg);-ms-transform:rotate(108deg);-o-transform:rotate(108deg);transform:rotate(108deg)}.c100.p31 .bar{-webkit-transform:rotate(111.6deg);-moz-transform:rotate(111.6deg);-ms-transform:rotate(111.6deg);-o-transform:rotate(111.6deg);transform:rotate(111.6deg)}.c100.p32 .bar{-webkit-transform:rotate(115.2deg);-moz-transform:rotate(115.2deg);-ms-transform:rotate(115.2deg);-o-transform:rotate(115.2deg);transform:rotate(115.2deg)}.c100.p33 .bar{-webkit-transform:rotate(118.8deg);-moz-transform:rotate(118.8deg);-ms-transform:rotate(118.8deg);-o-transform:rotate(118.8deg);transform:rotate(118.8deg)}.c100.p34 .bar{-webkit-transform:rotate(122.4deg);-moz-transform:rotate(122.4deg);-ms-transform:rotate(122.4deg);-o-transform:rotate(122.4deg);transform:rotate(122.4deg)}.c100.p35 .bar{-webkit-transform:rotate(126deg);-moz-transform:rotate(126deg);-ms-transform:rotate(126deg);-o-transform:rotate(126deg);transform:rotate(126deg)}.c100.p36 .bar{-webkit-transform:rotate(129.6deg);-moz-transform:rotate(129.6deg);-ms-transform:rotate(129.6deg);-o-transform:rotate(129.6deg);transform:rotate(129.6deg)}.c100.p37 .bar{-webkit-transform:rotate(133.2deg);-moz-transform:rotate(133.2deg);-ms-transform:rotate(133.2deg);-o-transform:rotate(133.2deg);transform:rotate(133.2deg)}.c100.p38 .bar{-webkit-transform:rotate(136.8deg);-moz-transform:rotate(136.8deg);-ms-transform:rotate(136.8deg);-o-transform:rotate(136.8deg);transform:rotate(136.8deg)}.c100.p39 .bar{-webkit-transform:rotate(140.4deg);-moz-transform:rotate(140.4deg);-ms-transform:rotate(140.4deg);-o-transform:rotate(140.4deg);transform:rotate(140.4deg)}.c100.p40 .bar{-webkit-transform:rotate(144deg);-moz-transform:rotate(144deg);-ms-transform:rotate(144deg);-o-transform:rotate(144deg);transform:rotate(144deg)}.c100.p41 .bar{-webkit-transform:rotate(147.6deg);-moz-transform:rotate(147.6deg);-ms-transform:rotate(147.6deg);-o-transform:rotate(147.6deg);transform:rotate(147.6deg)}.c100.p42 .bar{-webkit-transform:rotate(151.2deg);-moz-transform:rotate(151.2deg);-ms-transform:rotate(151.2deg);-o-transform:rotate(151.2deg);transform:rotate(151.2deg)}.c100.p43 .bar{-webkit-transform:rotate(154.8deg);-moz-transform:rotate(154.8deg);-ms-transform:rotate(154.8deg);-o-transform:rotate(154.8deg);transform:rotate(154.8deg)}.c100.p44 .bar{-webkit-transform:rotate(158.4deg);-moz-transform:rotate(158.4deg);-ms-transform:rotate(158.4deg);-o-transform:rotate(158.4deg);transform:rotate(158.4deg)}.c100.p45 .bar{-webkit-transform:rotate(162deg);-moz-transform:rotate(162deg);-ms-transform:rotate(162deg);-o-transform:rotate(162deg);transform:rotate(162deg)}.c100.p46 .bar{-webkit-transform:rotate(165.6deg);-moz-transform:rotate(165.6deg);-ms-transform:rotate(165.6deg);-o-transform:rotate(165.6deg);transform:rotate(165.6deg)}.c100.p47 .bar{-webkit-transform:rotate(169.2deg);-moz-transform:rotate(169.2deg);-ms-transform:rotate(169.2deg);-o-transform:rotate(169.2deg);transform:rotate(169.2deg)}.c100.p48 .bar{-webkit-transform:rotate(172.8deg);-moz-transform:rotate(172.8deg);-ms-transform:rotate(172.8deg);-o-transform:rotate(172.8deg);transform:rotate(172.8deg)}.c100.p49 .bar{-webkit-transform:rotate(176.4deg);-moz-transform:rotate(176.4deg);-ms-transform:rotate(176.4deg);-o-transform:rotate(176.4deg);transform:rotate(176.4deg)}.c100.p50 .bar{-webkit-transform:rotate(180deg);-moz-transform:rotate(180deg);-ms-transform:rotate(180deg);-o-transform:rotate(180deg);transform:rotate(180deg)}.c100.p51 .bar{-webkit-transform:rotate(183.6deg);-moz-transform:rotate(183.6deg);-ms-transform:rotate(183.6deg);-o-transform:rotate(183.6deg);transform:rotate(183.6deg)}.c100.p52 .bar{-webkit-transform:rotate(187.2deg);-moz-transform:rotate(187.2deg);-ms-transform:rotate(187.2deg);-o-transform:rotate(187.2deg);transform:rotate(187.2deg)}.c100.p53 .bar{-webkit-transform:rotate(190.8deg);-moz-transform:rotate(190.8deg);-ms-transform:rotate(190.8deg);-o-transform:rotate(190.8deg);transform:rotate(190.8deg)}.c100.p54 .bar{-webkit-transform:rotate(194.4deg);-moz-transform:rotate(194.4deg);-ms-transform:rotate(194.4deg);-o-transform:rotate(194.4deg);transform:rotate(194.4deg)}.c100.p55 .bar{-webkit-transform:rotate(198deg);-moz-transform:rotate(198deg);-ms-transform:rotate(198deg);-o-transform:rotate(198deg);transform:rotate(198deg)}.c100.p56 .bar{-webkit-transform:rotate(201.6deg);-moz-transform:rotate(201.6deg);-ms-transform:rotate(201.6deg);-o-transform:rotate(201.6deg);transform:rotate(201.6deg)}.c100.p57 .bar{-webkit-transform:rotate(205.2deg);-moz-transform:rotate(205.2deg);-ms-transform:rotate(205.2deg);-o-transform:rotate(205.2deg);transform:rotate(205.2deg)}.c100.p58 .bar{-webkit-transform:rotate(208.8deg);-moz-transform:rotate(208.8deg);-ms-transform:rotate(208.8deg);-o-transform:rotate(208.8deg);transform:rotate(208.8deg)}.c100.p59 .bar{-webkit-transform:rotate(212.4deg);-moz-transform:rotate(212.4deg);-ms-transform:rotate(212.4deg);-o-transform:rotate(212.4deg);transform:rotate(212.4deg)}.c100.p60 .bar{-webkit-transform:rotate(216deg);-moz-transform:rotate(216deg);-ms-transform:rotate(216deg);-o-transform:rotate(216deg);transform:rotate(216deg)}.c100.p61 .bar{-webkit-transform:rotate(219.6deg);-moz-transform:rotate(219.6deg);-ms-transform:rotate(219.6deg);-o-transform:rotate(219.6deg);transform:rotate(219.6deg)}.c100.p62 .bar{-webkit-transform:rotate(223.2deg);-moz-transform:rotate(223.2deg);-ms-transform:rotate(223.2deg);-o-transform:rotate(223.2deg);transform:rotate(223.2deg)}.c100.p63 .bar{-webkit-transform:rotate(226.8deg);-moz-transform:rotate(226.8deg);-ms-transform:rotate(226.8deg);-o-transform:rotate(226.8deg);transform:rotate(226.8deg)}.c100.p64 .bar{-webkit-transform:rotate(230.4deg);-moz-transform:rotate(230.4deg);-ms-transform:rotate(230.4deg);-o-transform:rotate(230.4deg);transform:rotate(230.4deg)}.c100.p65 .bar{-webkit-transform:rotate(234deg);-moz-transform:rotate(234deg);-ms-transform:rotate(234deg);-o-transform:rotate(234deg);transform:rotate(234deg)}.c100.p66 .bar{-webkit-transform:rotate(237.6deg);-moz-transform:rotate(237.6deg);-ms-transform:rotate(237.6deg);-o-transform:rotate(237.6deg);transform:rotate(237.6deg)}.c100.p67 .bar{-webkit-transform:rotate(241.2deg);-moz-transform:rotate(241.2deg);-ms-transform:rotate(241.2deg);-o-transform:rotate(241.2deg);transform:rotate(241.2deg)}.c100.p68 .bar{-webkit-transform:rotate(244.8deg);-moz-transform:rotate(244.8deg);-ms-transform:rotate(244.8deg);-o-transform:rotate(244.8deg);transform:rotate(244.8deg)}.c100.p69 .bar{-webkit-transform:rotate(248.4deg);-moz-transform:rotate(248.4deg);-ms-transform:rotate(248.4deg);-o-transform:rotate(248.4deg);transform:rotate(248.4deg)}.c100.p70 .bar{-webkit-transform:rotate(252deg);-moz-transform:rotate(252deg);-ms-transform:rotate(252deg);-o-transform:rotate(252deg);transform:rotate(252deg)}.c100.p71 .bar{-webkit-transform:rotate(255.6deg);-moz-transform:rotate(255.6deg);-ms-transform:rotate(255.6deg);-o-transform:rotate(255.6deg);transform:rotate(255.6deg)}.c100.p72 .bar{-webkit-transform:rotate(259.2deg);-moz-transform:rotate(259.2deg);-ms-transform:rotate(259.2deg);-o-transform:rotate(259.2deg);transform:rotate(259.2deg)}.c100.p73 .bar{-webkit-transform:rotate(262.8deg);-moz-transform:rotate(262.8deg);-ms-transform:rotate(262.8deg);-o-transform:rotate(262.8deg);transform:rotate(262.8deg)}.c100.p74 .bar{-webkit-transform:rotate(266.4deg);-moz-transform:rotate(266.4deg);-ms-transform:rotate(266.4deg);-o-transform:rotate(266.4deg);transform:rotate(266.4deg)}.c100.p75 .bar{-webkit-transform:rotate(270deg);-moz-transform:rotate(270deg);-ms-transform:rotate(270deg);-o-transform:rotate(270deg);transform:rotate(270deg)}.c100.p76 .bar{-webkit-transform:rotate(273.6deg);-moz-transform:rotate(273.6deg);-ms-transform:rotate(273.6deg);-o-transform:rotate(273.6deg);transform:rotate(273.6deg)}.c100.p77 .bar{-webkit-transform:rotate(277.2deg);-moz-transform:rotate(277.2deg);-ms-transform:rotate(277.2deg);-o-transform:rotate(277.2deg);transform:rotate(277.2deg)}.c100.p78 .bar{-webkit-transform:rotate(280.8deg);-moz-transform:rotate(280.8deg);-ms-transform:rotate(280.8deg);-o-transform:rotate(280.8deg);transform:rotate(280.8deg)}.c100.p79 .bar{-webkit-transform:rotate(284.4deg);-moz-transform:rotate(284.4deg);-ms-transform:rotate(284.4deg);-o-transform:rotate(284.4deg);transform:rotate(284.4deg)}.c100.p80 .bar{-webkit-transform:rotate(288deg);-moz-transform:rotate(288deg);-ms-transform:rotate(288deg);-o-transform:rotate(288deg);transform:rotate(288deg)}.c100.p81 .bar{-webkit-transform:rotate(291.6deg);-moz-transform:rotate(291.6deg);-ms-transform:rotate(291.6deg);-o-transform:rotate(291.6deg);transform:rotate(291.6deg)}.c100.p82 .bar{-webkit-transform:rotate(295.2deg);-moz-transform:rotate(295.2deg);-ms-transform:rotate(295.2deg);-o-transform:rotate(295.2deg);transform:rotate(295.2deg)}.c100.p83 .bar{-webkit-transform:rotate(298.8deg);-moz-transform:rotate(298.8deg);-ms-transform:rotate(298.8deg);-o-transform:rotate(298.8deg);transform:rotate(298.8deg)}.c100.p84 .bar{-webkit-transform:rotate(302.4deg);-moz-transform:rotate(302.4deg);-ms-transform:rotate(302.4deg);-o-transform:rotate(302.4deg);transform:rotate(302.4deg)}.c100.p85 .bar{-webkit-transform:rotate(306deg);-moz-transform:rotate(306deg);-ms-transform:rotate(306deg);-o-transform:rotate(306deg);transform:rotate(306deg)}.c100.p86 .bar{-webkit-transform:rotate(309.6deg);-moz-transform:rotate(309.6deg);-ms-transform:rotate(309.6deg);-o-transform:rotate(309.6deg);transform:rotate(309.6deg)}.c100.p87 .bar{-webkit-transform:rotate(313.2deg);-moz-transform:rotate(313.2deg);-ms-transform:rotate(313.2deg);-o-transform:rotate(313.2deg);transform:rotate(313.2deg)}.c100.p88 .bar{-webkit-transform:rotate(316.8deg);-moz-transform:rotate(316.8deg);-ms-transform:rotate(316.8deg);-o-transform:rotate(316.8deg);transform:rotate(316.8deg)}.c100.p89 .bar{-webkit-transform:rotate(320.4deg);-moz-transform:rotate(320.4deg);-ms-transform:rotate(320.4deg);-o-transform:rotate(320.4deg);transform:rotate(320.4deg)}.c100.p90 .bar{-webkit-transform:rotate(324deg);-moz-transform:rotate(324deg);-ms-transform:rotate(324deg);-o-transform:rotate(324deg);transform:rotate(324deg)}.c100.p91 .bar{-webkit-transform:rotate(327.6deg);-moz-transform:rotate(327.6deg);-ms-transform:rotate(327.6deg);-o-transform:rotate(327.6deg);transform:rotate(327.6deg)}.c100.p92 .bar{-webkit-transform:rotate(331.2deg);-moz-transform:rotate(331.2deg);-ms-transform:rotate(331.2deg);-o-transform:rotate(331.2deg);transform:rotate(331.2deg)}.c100.p93 .bar{-webkit-transform:rotate(334.8deg);-moz-transform:rotate(334.8deg);-ms-transform:rotate(334.8deg);-o-transform:rotate(334.8deg);transform:rotate(334.8deg)}.c100.p94 .bar{-webkit-transform:rotate(338.4deg);-moz-transform:rotate(338.4deg);-ms-transform:rotate(338.4deg);-o-transform:rotate(338.4deg);transform:rotate(338.4deg)}.c100.p95 .bar{-webkit-transform:rotate(342deg);-moz-transform:rotate(342deg);-ms-transform:rotate(342deg);-o-transform:rotate(342deg);transform:rotate(342deg)}.c100.p96 .bar{-webkit-transform:rotate(345.6deg);-moz-transform:rotate(345.6deg);-ms-transform:rotate(345.6deg);-o-transform:rotate(345.6deg);transform:rotate(345.6deg)}.c100.p97 .bar{-webkit-transform:rotate(349.2deg);-moz-transform:rotate(349.2deg);-ms-transform:rotate(349.2deg);-o-transform:rotate(349.2deg);transform:rotate(349.2deg)}.c100.p98 .bar{-webkit-transform:rotate(352.8deg);-moz-transform:rotate(352.8deg);-ms-transform:rotate(352.8deg);-o-transform:rotate(352.8deg);transform:rotate(352.8deg)}.c100.p99 .bar{-webkit-transform:rotate(356.4deg);-moz-transform:rotate(356.4deg);-ms-transform:rotate(356.4deg);-o-transform:rotate(356.4deg);transform:rotate(356.4deg)}.c100.p100 .bar{-webkit-transform:rotate(360deg);-moz-transform:rotate(360deg);-ms-transform:rotate(360deg);-o-transform:rotate(360deg);transform:rotate(360deg)}.c100:hover{cursor:default}.c100:hover>span{width:3.33em;line-height:3.33em;font-size:.3em;color:#307bbb}.c100:hover:after{top:.04em;left:.04em;width:.92em;height:.92em}.c100.dark{background-color:#0077c2}.c100.dark .bar,.c100.dark .fill{border-color:#80d6ff !important}.c100.dark>span{color:#0077c2}.c100.dark:after{background-color:#111}.c100.dark:hover>span{color:#80d6ff}.c100.error{background-color:#700}.c100.error .bar,.c100.error .fill{border-color:#d00 !important}.c100.error:hover>span{color:#d00}.c100.error>span{color:#700}.c100.success{background-color:#000}.c100.success .bar,.c100.success .fill{border-color:lime !important}.c100.success:hover>span{color:lime}.c100.success>span{color:#090}*{margin:0;padding:0;box-sizing:border-box}:root{font-size:16px}h1{width:100%;margin-top:12px;text-align:center}body{font-family:sans-serif;background:url(/static/imgs/grain_background.png);background-color:#111;background-repeat:repeat;color:#fff}button,a.button{box-shadow:0px 2px 6px .5px rgba(0,0,0,.7);border:1px solid #0077c2;background-color:#0077c2;color:#fff;font-size:1rem;padding:.75rem;margin-bottom:12px;display:inline-block;cursor:pointer}button+button,button+a.button,a.button+button,a.button+a.button{margin-left:12px}input,textarea,select{border:none;background-color:#111;color:#fff;font-size:1rem;display:inline-block;padding:.25rem}input::placeholder,textarea::placeholder,select::placeholder{color:#999}input[type=submit]{cursor:pointer;background-color:#0077c2}form input,form textarea,form select{z-index:20;box-shadow:0px 2px 6px .5px rgba(0,0,0,.7);padding:.75rem;width:100%}form input~label,form textarea~label,form select~label{margin-top:24px}form textarea{background-color:#111;height:50vh}form label{z-index:30;box-shadow:0px 2px 6px .5px rgba(0,0,0,.7);background-color:#0077c2;width:100%;line-height:44px;display:inline-block;padding:4px 12px 4px;margin-top:12px}.error-list ul li{box-shadow:0px 2px 6px .5px rgba(0,0,0,.5);list-style:none;background-color:#998100;padding:.5rem;margin-bottom:.5rem}.error-list ul li.success{background-color:#0077c2}.split{display:grid;grid-template-columns:1fr 1fr}.test-case{outline:none;box-shadow:0px 2px 6px .5px rgba(0,0,0,.5);resize:none;border:none;height:200px;padding:8px;background-color:#111;color:#fff}.test-case:first-child{border-right:2px solid #0077c2}.header-line,.option-line{box-shadow:0px 2px 6px .5px rgba(0,0,0,.5);background-color:#0077c2;padding:4px 12px 4px;margin-top:12px;display:inline-block;width:100%}.header-line>*,.option-line>*{line-height:44px;display:inline-block}.option-line{display:grid;grid-template-columns:1fr 1fr}.option-line>*:last-child{text-align:right}.button-list>*{margin:0px 8px 0px;background-color:#42a5f5;box-shadow:none;border:none;color:#fff;font-size:1rem;line-height:1.2rem;padding:4px 12px 4px;display:inline-block;cursor:pointer}.sidebar-page-container{display:grid;grid-template-columns:minmax(250px, 1fr) 5fr}#code-editor{position:relative;width:100%;min-height:24rem}.problem-description{font-size:1.2rem}/*# sourceMappingURL=core.css.map */
index a9d89fc90a36140b9d5cf97db6a7dda5ddda7d0b..b78a14b3c5f6addec56dc502174d650ba80b9b23 100644 (file)
@@ -1 +1 @@
-{"version":3,"sourceRoot":"","sources":["../scss/_navbar.scss","../scss/_vars.scss","../scss/_utils.scss","../scss/_elevate.scss","../scss/problem/_info.scss","../scss/problem/_sidebar.scss","../scss/vendor/circle.scss","../scss/vendor/_mixins.scss","../scss/vendor/_variables.scss","../scss/core.scss"],"names":[],"mappings":"AAAA,QACC,cACA,WACA,WCIc,QDHd,OCoBe,KDnBf,kBAEA,2CAEA,aACA,kCAEA,qBACC,iBACA,kBAEA,yBACC,4BACA,eAIF,WACC,cACA,kBACA,YAEA,gBACC,SACA,qBACA,eAEA,eAEA,gBACA,iBACA,kBACA,mBACA,gBAEA,cACA,iBClCY,QDoCZ,qBAEA,+CACC,gCACA,WAKH,yBACO,kBACA,WC9BQ,KDgCR,eACA,iBAEA,kBACA,gBAEA,eAEA,yBACN,kCAEM,iEACI,yBAEA,qHACR,cAII,2BACI,cACA,WAGJ,mDACL,aAES,kBACA,SACA,OACT,WAES,oFACI,gCAKA,mBAJA,+FACI,mBAIJ,0FACI,yBEhGpB,qBACC,WACA,iBAGD,OACC,YAGD,MACC,WAGD,QACC,kBAGD,EACC,qBACA,cAIA,SACC,aACA,qCAGC,uBACC,kBAGD,sBACC,iBAVH,SACC,aACA,qCAFD,SACC,aACA,qCAcF,UACC,aACA,8BAGC,wBACC,gBAGD,uBACC,iBAOD,WACC,aACA,8BAFD,WACC,aACA,8BAFD,WACC,aACA,8BAFD,WACC,aACA,8BAFD,WACC,aACA,8BAFD,WACC,aACA,8BAFD,WACC,aACA,8BAFD,WACC,aACA,8BAFD,WACC,aACA,8BAFD,WACC,aACA,8BAFD,WACC,aACA,8BAFD,WACC,aACA,8BAFD,WACC,aACA,8BAFD,WACC,aACA,8BAFD,WACC,aACA,8BAFD,WACC,aACA,8BAKH,IC9DI,2CDgEH,eAGC,gBAEC,kBAIF,kBAGC,2BAIF,kBACC,aACA,gCAGD,cACC,wBAEA,oDACA,oDACA,oDACA,oDACA,oDACA,oDAEY,4CD3FH,QC4FS,kDD3FH,QC4FE,iDD3FH,QC6FA,8CD3FH,KC4FS,oDD3FH,QC4FE,mDD3FH,QC6FJ,iDAEF,0CD7FH,KC8FS,gDD7FH,KC8FE,+CD7FH,KCgGb,KC9GI,2CDgHH,sBAEA,sBACC,sBAIF,KACC,UAGD,MACC,WAIA,8BACA,qCACA,sCACA,oCACA,uCAEA,6BACA,oCACA,qCACA,mCACA,sCAVA,8BACA,qCACA,sCACA,oCACA,uCAEA,6BACA,oCACA,qCACA,mCACA,sCAVA,8BACA,qCACA,sCACA,oCACA,uCAEA,6BACA,oCACA,qCACA,mCACA,sCAVA,8BACA,qCACA,sCACA,oCACA,uCAEA,6BACA,oCACA,qCACA,mCACA,sCAVA,8BACA,qCACA,sCACA,oCACA,uCAEA,6BACA,oCACA,qCACA,mCACA,sCAVA,8BACA,qCACA,sCACA,oCACA,uCAEA,6BACA,oCACA,qCACA,mCACA,sCAVA,8BACA,qCACA,sCACA,oCACA,uCAEA,6BACA,oCACA,qCACA,mCACA,sCAVA,8BACA,qCACA,sCACA,oCACA,uCAEA,6BACA,oCACA,qCACA,mCACA,sCAVA,8BACA,qCACA,sCACA,oCACA,uCAEA,6BACA,oCACA,qCACA,mCACA,sCAVA,gCACA,uCACA,wCACA,sCACA,yCAEA,+BACA,sCACA,uCACA,qCACA,wCAVA,gCACA,uCACA,wCACA,sCACA,yCAEA,+BACA,sCACA,uCACA,qCACA,wCAVA,gCACA,uCACA,wCACA,sCACA,yCAEA,+BACA,sCACA,uCACA,qCACA,wCAVA,gCACA,uCACA,wCACA,sCACA,yCAEA,+BACA,sCACA,uCACA,qCACA,wCAVA,gCACA,uCACA,wCACA,sCACA,yCAEA,+BACA,sCACA,uCACA,qCACA,wCAVA,gCACA,uCACA,wCACA,sCACA,yCAEA,+BACA,sCACA,uCACA,qCACA,wCAVA,gCACA,uCACA,wCACA,sCACA,yCAEA,+BACA,sCACA,uCACA,qCACA,wCAVA,gCACA,uCACA,wCACA,sCACA,yCAEA,+BACA,sCACA,uCACA,qCACA,wCAVA,gCACA,uCACA,wCACA,sCACA,yCAEA,+BACA,sCACA,uCACA,qCACA,wCAVA,gCACA,uCACA,wCACA,sCACA,yCAEA,+BACA,sCACA,uCACA,qCACA,wCAVA,gCACA,uCACA,wCACA,sCACA,yCAEA,+BACA,sCACA,uCACA,qCACA,wCAVA,gCACA,uCACA,wCACA,sCACA,yCAEA,+BACA,sCACA,uCACA,qCACA,wCAVA,gCACA,uCACA,wCACA,sCACA,yCAEA,+BACA,sCACA,uCACA,qCACA,wCAVA,gCACA,uCACA,wCACA,sCACA,yCAEA,+BACA,sCACA,uCACA,qCACA,wCAVA,gCACA,uCACA,wCACA,sCACA,yCAEA,+BACA,sCACA,uCACA,qCACA,wCAVA,gCACA,uCACA,wCACA,sCACA,yCAEA,+BACA,sCACA,uCACA,qCACA,wCAVA,gCACA,uCACA,wCACA,sCACA,yCAEA,+BACA,sCACA,uCACA,qCACA,wCAVA,gCACA,uCACA,wCACA,sCACA,yCAEA,+BACA,sCACA,uCACA,qCACA,wCAVA,gCACA,uCACA,wCACA,sCACA,yCAEA,+BACA,sCACA,uCACA,qCACA,wCAVA,gCACA,uCACA,wCACA,sCACA,yCAEA,+BACA,sCACA,uCACA,qCACA,wCAVA,gCACA,uCACA,wCACA,sCACA,yCAEA,+BACA,sCACA,uCACA,qCACA,wCAVA,gCACA,uCACA,wCACA,sCACA,yCAEA,+BACA,sCACA,uCACA,qCACA,wCAVA,gCACA,uCACA,wCACA,sCACA,yCAEA,+BACA,sCACA,uCACA,qCACA,wCAVA,gCACA,uCACA,wCACA,sCACA,yCAEA,+BACA,sCACA,uCACA,qCACA,wCAVA,gCACA,uCACA,wCACA,sCACA,yCAEA,+BACA,sCACA,uCACA,qCACA,wCAVA,gCACA,uCACA,wCACA,sCACA,yCAEA,+BACA,sCACA,uCACA,qCACA,wCAVA,gCACA,uCACA,wCACA,sCACA,yCAEA,+BACA,sCACA,uCACA,qCACA,wCAVA,gCACA,uCACA,wCACA,sCACA,yCAEA,+BACA,sCACA,uCACA,qCACA,wCAVA,gCACA,uCACA,wCACA,sCACA,yCAEA,+BACA,sCACA,uCACA,qCACA,wCAVA,gCACA,uCACA,wCACA,sCACA,yCAEA,+BACA,sCACA,uCACA,qCACA,wCAVA,gCACA,uCACA,wCACA,sCACA,yCAEA,+BACA,sCACA,uCACA,qCACA,wCAVA,gCACA,uCACA,wCACA,sCACA,yCAEA,+BACA,sCACA,uCACA,qCACA,wCAVA,gCACA,uCACA,wCACA,sCACA,yCAEA,+BACA,sCACA,uCACA,qCACA,wCAVA,gCACA,uCACA,wCACA,sCACA,yCAEA,+BACA,sCACA,uCACA,qCACA,wCAVA,gCACA,uCACA,wCACA,sCACA,yCAEA,+BACA,sCACA,uCACA,qCACA,wCAVA,gCACA,uCACA,wCACA,sCACA,yCAEA,+BACA,sCACA,uCACA,qCACA,wCAVA,gCACA,uCACA,wCACA,sCACA,yCAEA,+BACA,sCACA,uCACA,qCACA,wCAVA,gCACA,uCACA,wCACA,sCACA,yCAEA,+BACA,sCACA,uCACA,qCACA,wCAVA,gCACA,uCACA,wCACA,sCACA,yCAEA,+BACA,sCACA,uCACA,qCACA,wCAVA,gCACA,uCACA,wCACA,sCACA,yCAEA,+BACA,sCACA,uCACA,qCACA,wCE3ID,cACI,YACA,YCFJ,sBACC,WACA,6GACA,mBACA,kBACA,8BAEA,uCACC,WAEA,aACA,+BAEA,uBACA,wBACA,kBJRa,QIUb,8CACA,mCACA,yBAEA,eAEA,gDACC,uBAGD,8CACC,sBAGD,8FACC,wBAGD,iDACC,oCAGD,6CACC,yBAIF,8CACC,kBACA,yBACA,iBACA,oBACA,iBAGD,4CACC,gBACA,iBAEA,iBACA,iBACA,oBAEA,iBACA,kBCvDF,81BACI,kCAGJ,izBACI,kBACA,2BACA,YACA,aACA,gCACA,kBCNA,+BACA,4BACA,2BACA,0BACA,uBDMJ,oxDCVI,iCACA,8BACA,6BACA,4BACA,yBDWJ,MAMI,kBACA,gBACA,UACA,WACA,kBACA,WACA,iBEjCc,KFsBd,qCCRA,mBDWwB,YCVxB,gBDUwB,YCTxB,WDSwB,YAUxB,aACI,WACA,cAGJ,UACI,gBAGJ,YACI,eAGJ,WACI,kBACA,WACA,UACA,OACA,MACA,UACA,gBACA,eACA,MEzDU,KF0DV,cACA,kBACA,mBCzCJ,4BD0CiC,ICzCjC,yBDyCiC,ICxCjC,uBDwCiC,ICvCjC,oBDuCiC,ICnCjC,4BDoCiC,ICnCjC,yBDmCiC,IClCjC,uBDkCiC,ICjCjC,oBDiCiC,IC7BjC,mCD8BwC,SC7BxC,gCD6BwC,SC5BxC,8BD4BwC,SC3BxC,2BD2BwC,SAGxC,YACI,kBACA,IExEO,MFyEP,KEzEO,MF0EP,cACA,YACA,kBACA,iBExEG,QFyEH,YACA,aCxDJ,4BDyDiC,ICxDjC,yBDwDiC,ICvDjC,uBDuDiC,ICtDjC,oBDsDiC,IClDjC,4BDmDiC,IClDjC,yBDkDiC,ICjDjC,uBDiDiC,IChDjC,oBDgDiC,IC5CjC,mCD6CwC,QC5CxC,gCD4CwC,QC3CxC,8BD2CwC,QC1CxC,2BD0CwC,QAGxC,aACI,kBACA,UACA,WACA,gCAuBA,cCtGJ,iCACA,8BACA,6BACA,4BACA,yBDkGI,cCtGJ,iCACA,8BACA,6BACA,4BACA,yBDkGI,cCtGJ,kCACA,+BACA,8BACA,6BACA,0BDkGI,cCtGJ,kCACA,+BACA,8BACA,6BACA,0BDkGI,cCtGJ,gCACA,6BACA,4BACA,2BACA,wBDkGI,cCtGJ,kCACA,+BACA,8BACA,6BACA,0BDkGI,cCtGJ,kCACA,+BACA,8BACA,6BACA,0BDkGI,cCtGJ,kCACA,+BACA,8BACA,6BACA,0BDkGI,cCtGJ,kCACA,+BACA,8BACA,6BACA,0BDkGI,eCtGJ,gCACA,6BACA,4BACA,2BACA,wBDkGI,eCtGJ,kCACA,+BACA,8BACA,6BACA,0BDkGI,eCtGJ,kCACA,+BACA,8BACA,6BACA,0BDkGI,eCtGJ,kCACA,+BACA,8BACA,6BACA,0BDkGI,eCtGJ,kCACA,+BACA,8BACA,6BACA,0BDkGI,eCtGJ,gCACA,6BACA,4BACA,2BACA,wBDkGI,eCtGJ,kCACA,+BACA,8BACA,6BACA,0BDkGI,eCtGJ,kCACA,+BACA,8BACA,6BACA,0BDkGI,eCtGJ,kCACA,+BACA,8BACA,6BACA,0BDkGI,eCtGJ,kCACA,+BACA,8BACA,6BACA,0BDkGI,eCtGJ,gCACA,6BACA,4BACA,2BACA,wBDkGI,eCtGJ,kCACA,+BACA,8BACA,6BACA,0BDkGI,eCtGJ,kCACA,+BACA,8BACA,6BACA,0BDkGI,eCtGJ,kCACA,+BACA,8BACA,6BACA,0BDkGI,eCtGJ,kCACA,+BACA,8BACA,6BACA,0BDkGI,eCtGJ,gCACA,6BACA,4BACA,2BACA,wBDkGI,eCtGJ,kCACA,+BACA,8BACA,6BACA,0BDkGI,eCtGJ,kCACA,+BACA,8BACA,6BACA,0BDkGI,eCtGJ,mCACA,gCACA,+BACA,8BACA,2BDkGI,eCtGJ,mCACA,gCACA,+BACA,8BACA,2BDkGI,eCtGJ,iCACA,8BACA,6BACA,4BACA,yBDkGI,eCtGJ,mCACA,gCACA,+BACA,8BACA,2BDkGI,eCtGJ,mCACA,gCACA,+BACA,8BACA,2BDkGI,eCtGJ,mCACA,gCACA,+BACA,8BACA,2BDkGI,eCtGJ,mCACA,gCACA,+BACA,8BACA,2BDkGI,eCtGJ,iCACA,8BACA,6BACA,4BACA,yBDkGI,eCtGJ,mCACA,gCACA,+BACA,8BACA,2BDkGI,eCtGJ,mCACA,gCACA,+BACA,8BACA,2BDkGI,eCtGJ,mCACA,gCACA,+BACA,8BACA,2BDkGI,eCtGJ,mCACA,gCACA,+BACA,8BACA,2BDkGI,eCtGJ,iCACA,8BACA,6BACA,4BACA,yBDkGI,eCtGJ,mCACA,gCACA,+BACA,8BACA,2BDkGI,eCtGJ,mCACA,gCACA,+BACA,8BACA,2BDkGI,eCtGJ,mCACA,gCACA,+BACA,8BACA,2BDkGI,eCtGJ,mCACA,gCACA,+BACA,8BACA,2BDkGI,eCtGJ,iCACA,8BACA,6BACA,4BACA,yBDkGI,eCtGJ,mCACA,gCACA,+BACA,8BACA,2BDkGI,eCtGJ,mCACA,gCACA,+BACA,8BACA,2BDkGI,eCtGJ,mCACA,gCACA,+BACA,8BACA,2BDkGI,eCtGJ,mCACA,gCACA,+BACA,8BACA,2BDkGI,eCtGJ,iCACA,8BACA,6BACA,4BACA,yBDkGI,eCtGJ,mCACA,gCACA,+BACA,8BACA,2BDkGI,eCtGJ,mCACA,gCACA,+BACA,8BACA,2BDkGI,eCtGJ,mCACA,gCACA,+BACA,8BACA,2BDkGI,eCtGJ,mCACA,gCACA,+BACA,8BACA,2BDkGI,eCtGJ,iCACA,8BACA,6BACA,4BACA,yBDkGI,eCtGJ,mCACA,gCACA,+BACA,8BACA,2BDkGI,eCtGJ,mCACA,gCACA,+BACA,8BACA,2BDkGI,eCtGJ,mCACA,gCACA,+BACA,8BACA,2BDkGI,eCtGJ,mCACA,gCACA,+BACA,8BACA,2BDkGI,eCtGJ,iCACA,8BACA,6BACA,4BACA,yBDkGI,eCtGJ,mCACA,gCACA,+BACA,8BACA,2BDkGI,eCtGJ,mCACA,gCACA,+BACA,8BACA,2BDkGI,eCtGJ,mCACA,gCACA,+BACA,8BACA,2BDkGI,eCtGJ,mCACA,gCACA,+BACA,8BACA,2BDkGI,eCtGJ,iCACA,8BACA,6BACA,4BACA,yBDkGI,eCtGJ,mCACA,gCACA,+BACA,8BACA,2BDkGI,eCtGJ,mCACA,gCACA,+BACA,8BACA,2BDkGI,eCtGJ,mCACA,gCACA,+BACA,8BACA,2BDkGI,eCtGJ,mCACA,gCACA,+BACA,8BACA,2BDkGI,eCtGJ,iCACA,8BACA,6BACA,4BACA,yBDkGI,eCtGJ,mCACA,gCACA,+BACA,8BACA,2BDkGI,eCtGJ,mCACA,gCACA,+BACA,8BACA,2BDkGI,eCtGJ,mCACA,gCACA,+BACA,8BACA,2BDkGI,eCtGJ,mCACA,gCACA,+BACA,8BACA,2BDkGI,eCtGJ,iCACA,8BACA,6BACA,4BACA,yBDkGI,eCtGJ,mCACA,gCACA,+BACA,8BACA,2BDkGI,eCtGJ,mCACA,gCACA,+BACA,8BACA,2BDkGI,eCtGJ,mCACA,gCACA,+BACA,8BACA,2BDkGI,eCtGJ,mCACA,gCACA,+BACA,8BACA,2BDkGI,eCtGJ,iCACA,8BACA,6BACA,4BACA,yBDkGI,eCtGJ,mCACA,gCACA,+BACA,8BACA,2BDkGI,eCtGJ,mCACA,gCACA,+BACA,8BACA,2BDkGI,eCtGJ,mCACA,gCACA,+BACA,8BACA,2BDkGI,eCtGJ,mCACA,gCACA,+BACA,8BACA,2BDkGI,eCtGJ,iCACA,8BACA,6BACA,4BACA,yBDkGI,eCtGJ,mCACA,gCACA,+BACA,8BACA,2BDkGI,eCtGJ,mCACA,gCACA,+BACA,8BACA,2BDkGI,eCtGJ,mCACA,gCACA,+BACA,8BACA,2BDkGI,eCtGJ,mCACA,gCACA,+BACA,8BACA,2BDkGI,eCtGJ,iCACA,8BACA,6BACA,4BACA,yBDkGI,eCtGJ,mCACA,gCACA,+BACA,8BACA,2BDkGI,eCtGJ,mCACA,gCACA,+BACA,8BACA,2BDkGI,eCtGJ,mCACA,gCACA,+BACA,8BACA,2BDkGI,eCtGJ,mCACA,gCACA,+BACA,8BACA,2BDkGI,eCtGJ,iCACA,8BACA,6BACA,4BACA,yBDkGI,eCtGJ,mCACA,gCACA,+BACA,8BACA,2BDkGI,eCtGJ,mCACA,gCACA,+BACA,8BACA,2BDkGI,eCtGJ,mCACA,gCACA,+BACA,8BACA,2BDkGI,eCtGJ,mCACA,gCACA,+BACA,8BACA,2BDkGI,gBCtGJ,iCACA,8BACA,6BACA,4BACA,yBDwGA,YACI,eACA,iBACI,aACA,mBACA,eACA,MEzHI,QF2HR,kBACI,IE9HS,MF+HT,KE/HS,MFgIT,YACA,aAIR,WACI,iBLhIO,QKiIP,iCAEI,gCAEJ,gBACI,MLtIG,QKwIP,iBACI,iBErII,KFwIJ,sBACI,ML9IA,QKkJZ,YACF,iBL1IW,KK2IL,mCAEI,6BAGA,uBACI,MLnJR,KKsJN,iBACC,MLrJU,KKwJT,cACI,sBACA,uCAEI,6BAGA,yBACI,WAGR,mBACI,WG3KZ,EACC,SACA,UACA,sBAGD,MACC,eAGD,GACC,WACA,gBACA,kBAGD,KACC,uBAEA,kDACA,sBACA,yBACA,WAGD,gBNhCI,2CMkCH,yBACA,iBR7Bc,QQ8Bd,WAEA,eACA,eACA,mBACA,qBAEA,eAEA,gEACC,iBAIF,sBACC,YACA,sBACA,WAEA,eACA,qBACA,eAEA,6DACC,WAIF,mBACC,eACA,iBR5Dc,QQgEd,qCACC,WNvEE,2CM0EF,eACA,WAEA,uDACC,gBAIF,cACC,sBACA,YAGD,WACC,WNxFE,2CM0FF,iBRpFa,QQqFb,WACA,iBAEA,qBACA,qBACA,gBAOD,kBNvGG,2CM0GF,gBACA,iBRjGe,QQkGf,cACA,oBAEA,0BACC,iBR1GY,QQ+Gf,OACC,aACA,8BAGD,WAKC,aN/HG,2CMkIH,YACA,YAEA,aACA,YACA,sBACA,MRzIO,KQ4HP,uBACC,+BAeF,0BN3II,2CM8IH,iBRxIc,QQyId,qBACA,gBACA,qBACA,WAEA,8BACC,iBACA,qBAIF,aAGC,aACA,8BAEA,0BACC,iBAKD,eACC,mBACA,iBRpKQ,QQqKR,gBACA,YACA,WAEA,eACA,mBACA,qBACA,qBAEA,eAIF,wBACC,aACA,6CAGD,aACC,kBACA,WACA","file":"core.css"}
\ No newline at end of file
+{"version":3,"sourceRoot":"","sources":["../scss/_navbar.scss","../scss/_vars.scss","../scss/_utils.scss","../scss/_elevate.scss","../scss/problem/_info.scss","../scss/problem/_sidebar.scss","../scss/vendor/circle.scss","../scss/vendor/_mixins.scss","../scss/vendor/_variables.scss","../scss/core.scss"],"names":[],"mappings":"AAAA,QACC,cACA,WACA,WCIc,QDHd,OCoBe,KDnBf,kBAEA,2CAEA,aACA,kCAEA,qBACC,iBACA,kBAEA,yBACC,4BACA,eAIF,WACC,cACA,kBACA,YAEA,gBACC,SACA,qBACA,eAEA,eAEA,gBACA,iBACA,kBACA,mBACA,gBAEA,cACA,iBClCY,QDoCZ,qBAEA,+CACC,gCACA,WAKH,yBACO,kBACA,WC9BQ,KDgCR,eACA,iBAEA,kBACA,gBAEA,eAEA,yBACN,kCAEM,iEACI,yBAEA,qHACR,cAII,2BACI,cACA,WAGJ,mDACL,aAES,kBACA,SACA,OACT,WAES,oFACI,gCAKA,mBAJA,+FACI,mBAIJ,0FACI,yBEhGpB,qBACC,WACA,iBAGD,OACC,YAGD,MACC,WAGD,QACC,kBAGD,EACC,qBACA,cAIA,SACC,aACA,qCAGC,uBACC,kBAGD,sBACC,iBAVH,SACC,aACA,qCAFD,SACC,aACA,qCAcF,UACC,aACA,8BAGC,wBACC,gBAGD,uBACC,iBAOD,WACC,aACA,8BAFD,WACC,aACA,8BAFD,WACC,aACA,8BAFD,WACC,aACA,8BAFD,WACC,aACA,8BAFD,WACC,aACA,8BAFD,WACC,aACA,8BAFD,WACC,aACA,8BAFD,WACC,aACA,8BAFD,WACC,aACA,8BAFD,WACC,aACA,8BAFD,WACC,aACA,8BAFD,WACC,aACA,8BAFD,WACC,aACA,8BAFD,WACC,aACA,8BAFD,WACC,aACA,8BAKH,IC9DI,2CDgEH,eAGC,gBAEC,kBAIF,kBAGC,2BAIF,kBACC,aACA,gCAGD,cACC,wBAEA,oDACA,oDACA,oDACA,oDACA,oDACA,oDAEY,4CD3FH,QC4FS,kDD3FH,QC4FE,iDD3FH,QC6FA,8CD3FH,KC4FS,oDD3FH,QC4FE,mDD3FH,QC6FJ,iDAEF,0CD7FH,KC8FS,gDD7FH,KC8FE,+CD7FH,KCgGb,KC9GI,2CDgHH,sBAEA,sBACC,sBAIF,KACC,UAGD,MACC,WAIA,8BACA,qCACA,sCACA,oCACA,uCAEA,6BACA,oCACA,qCACA,mCACA,sCAVA,8BACA,qCACA,sCACA,oCACA,uCAEA,6BACA,oCACA,qCACA,mCACA,sCAVA,8BACA,qCACA,sCACA,oCACA,uCAEA,6BACA,oCACA,qCACA,mCACA,sCAVA,8BACA,qCACA,sCACA,oCACA,uCAEA,6BACA,oCACA,qCACA,mCACA,sCAVA,8BACA,qCACA,sCACA,oCACA,uCAEA,6BACA,oCACA,qCACA,mCACA,sCAVA,8BACA,qCACA,sCACA,oCACA,uCAEA,6BACA,oCACA,qCACA,mCACA,sCAVA,8BACA,qCACA,sCACA,oCACA,uCAEA,6BACA,oCACA,qCACA,mCACA,sCAVA,8BACA,qCACA,sCACA,oCACA,uCAEA,6BACA,oCACA,qCACA,mCACA,sCAVA,8BACA,qCACA,sCACA,oCACA,uCAEA,6BACA,oCACA,qCACA,mCACA,sCAVA,gCACA,uCACA,wCACA,sCACA,yCAEA,+BACA,sCACA,uCACA,qCACA,wCAVA,gCACA,uCACA,wCACA,sCACA,yCAEA,+BACA,sCACA,uCACA,qCACA,wCAVA,gCACA,uCACA,wCACA,sCACA,yCAEA,+BACA,sCACA,uCACA,qCACA,wCAVA,gCACA,uCACA,wCACA,sCACA,yCAEA,+BACA,sCACA,uCACA,qCACA,wCAVA,gCACA,uCACA,wCACA,sCACA,yCAEA,+BACA,sCACA,uCACA,qCACA,wCAVA,gCACA,uCACA,wCACA,sCACA,yCAEA,+BACA,sCACA,uCACA,qCACA,wCAVA,gCACA,uCACA,wCACA,sCACA,yCAEA,+BACA,sCACA,uCACA,qCACA,wCAVA,gCACA,uCACA,wCACA,sCACA,yCAEA,+BACA,sCACA,uCACA,qCACA,wCAVA,gCACA,uCACA,wCACA,sCACA,yCAEA,+BACA,sCACA,uCACA,qCACA,wCAVA,gCACA,uCACA,wCACA,sCACA,yCAEA,+BACA,sCACA,uCACA,qCACA,wCAVA,gCACA,uCACA,wCACA,sCACA,yCAEA,+BACA,sCACA,uCACA,qCACA,wCAVA,gCACA,uCACA,wCACA,sCACA,yCAEA,+BACA,sCACA,uCACA,qCACA,wCAVA,gCACA,uCACA,wCACA,sCACA,yCAEA,+BACA,sCACA,uCACA,qCACA,wCAVA,gCACA,uCACA,wCACA,sCACA,yCAEA,+BACA,sCACA,uCACA,qCACA,wCAVA,gCACA,uCACA,wCACA,sCACA,yCAEA,+BACA,sCACA,uCACA,qCACA,wCAVA,gCACA,uCACA,wCACA,sCACA,yCAEA,+BACA,sCACA,uCACA,qCACA,wCAVA,gCACA,uCACA,wCACA,sCACA,yCAEA,+BACA,sCACA,uCACA,qCACA,wCAVA,gCACA,uCACA,wCACA,sCACA,yCAEA,+BACA,sCACA,uCACA,qCACA,wCAVA,gCACA,uCACA,wCACA,sCACA,yCAEA,+BACA,sCACA,uCACA,qCACA,wCAVA,gCACA,uCACA,wCACA,sCACA,yCAEA,+BACA,sCACA,uCACA,qCACA,wCAVA,gCACA,uCACA,wCACA,sCACA,yCAEA,+BACA,sCACA,uCACA,qCACA,wCAVA,gCACA,uCACA,wCACA,sCACA,yCAEA,+BACA,sCACA,uCACA,qCACA,wCAVA,gCACA,uCACA,wCACA,sCACA,yCAEA,+BACA,sCACA,uCACA,qCACA,wCAVA,gCACA,uCACA,wCACA,sCACA,yCAEA,+BACA,sCACA,uCACA,qCACA,wCAVA,gCACA,uCACA,wCACA,sCACA,yCAEA,+BACA,sCACA,uCACA,qCACA,wCAVA,gCACA,uCACA,wCACA,sCACA,yCAEA,+BACA,sCACA,uCACA,qCACA,wCAVA,gCACA,uCACA,wCACA,sCACA,yCAEA,+BACA,sCACA,uCACA,qCACA,wCAVA,gCACA,uCACA,wCACA,sCACA,yCAEA,+BACA,sCACA,uCACA,qCACA,wCAVA,gCACA,uCACA,wCACA,sCACA,yCAEA,+BACA,sCACA,uCACA,qCACA,wCAVA,gCACA,uCACA,wCACA,sCACA,yCAEA,+BACA,sCACA,uCACA,qCACA,wCAVA,gCACA,uCACA,wCACA,sCACA,yCAEA,+BACA,sCACA,uCACA,qCACA,wCAVA,gCACA,uCACA,wCACA,sCACA,yCAEA,+BACA,sCACA,uCACA,qCACA,wCAVA,gCACA,uCACA,wCACA,sCACA,yCAEA,+BACA,sCACA,uCACA,qCACA,wCAVA,gCACA,uCACA,wCACA,sCACA,yCAEA,+BACA,sCACA,uCACA,qCACA,wCAVA,gCACA,uCACA,wCACA,sCACA,yCAEA,+BACA,sCACA,uCACA,qCACA,wCAVA,gCACA,uCACA,wCACA,sCACA,yCAEA,+BACA,sCACA,uCACA,qCACA,wCAVA,gCACA,uCACA,wCACA,sCACA,yCAEA,+BACA,sCACA,uCACA,qCACA,wCAVA,gCACA,uCACA,wCACA,sCACA,yCAEA,+BACA,sCACA,uCACA,qCACA,wCAVA,gCACA,uCACA,wCACA,sCACA,yCAEA,+BACA,sCACA,uCACA,qCACA,wCAVA,gCACA,uCACA,wCACA,sCACA,yCAEA,+BACA,sCACA,uCACA,qCACA,wCE3ID,cACI,YACA,YCFJ,sBACC,WACA,6GACA,mBACA,kBACA,8BAEA,uCACC,WAEA,aACA,+BAEA,uBACA,wBACA,kBJRa,QIUb,8CACA,mCACA,yBAEA,eAEA,gDACC,uBAGD,8CACC,sBAGD,8FACC,wBAGD,iDACC,oCAGD,6CACC,yBAIF,8CACC,kBACA,yBACA,iBACA,oBACA,iBAGD,4CACC,gBACA,iBAEA,iBACA,iBACA,oBAEA,iBACA,kBCvDF,81BACI,kCAGJ,izBACI,kBACA,2BACA,YACA,aACA,gCACA,kBCNA,+BACA,4BACA,2BACA,0BACA,uBDMJ,oxDCVI,iCACA,8BACA,6BACA,4BACA,yBDWJ,MAMI,kBACA,gBACA,UACA,WACA,kBACA,WACA,iBEjCc,KFsBd,qCCRA,mBDWwB,YCVxB,gBDUwB,YCTxB,WDSwB,YAUxB,aACI,WACA,cAGJ,UACI,gBAGJ,YACI,eAGJ,WACI,kBACA,WACA,UACA,OACA,MACA,UACA,gBACA,eACA,MEzDU,KF0DV,cACA,kBACA,mBCzCJ,4BD0CiC,ICzCjC,yBDyCiC,ICxCjC,uBDwCiC,ICvCjC,oBDuCiC,ICnCjC,4BDoCiC,ICnCjC,yBDmCiC,IClCjC,uBDkCiC,ICjCjC,oBDiCiC,IC7BjC,mCD8BwC,SC7BxC,gCD6BwC,SC5BxC,8BD4BwC,SC3BxC,2BD2BwC,SAGxC,YACI,kBACA,IExEO,MFyEP,KEzEO,MF0EP,cACA,YACA,kBACA,iBExEG,QFyEH,YACA,aCxDJ,4BDyDiC,ICxDjC,yBDwDiC,ICvDjC,uBDuDiC,ICtDjC,oBDsDiC,IClDjC,4BDmDiC,IClDjC,yBDkDiC,ICjDjC,uBDiDiC,IChDjC,oBDgDiC,IC5CjC,mCD6CwC,QC5CxC,gCD4CwC,QC3CxC,8BD2CwC,QC1CxC,2BD0CwC,QAGxC,aACI,kBACA,UACA,WACA,gCAuBA,cCtGJ,iCACA,8BACA,6BACA,4BACA,yBDkGI,cCtGJ,iCACA,8BACA,6BACA,4BACA,yBDkGI,cCtGJ,kCACA,+BACA,8BACA,6BACA,0BDkGI,cCtGJ,kCACA,+BACA,8BACA,6BACA,0BDkGI,cCtGJ,gCACA,6BACA,4BACA,2BACA,wBDkGI,cCtGJ,kCACA,+BACA,8BACA,6BACA,0BDkGI,cCtGJ,kCACA,+BACA,8BACA,6BACA,0BDkGI,cCtGJ,kCACA,+BACA,8BACA,6BACA,0BDkGI,cCtGJ,kCACA,+BACA,8BACA,6BACA,0BDkGI,eCtGJ,gCACA,6BACA,4BACA,2BACA,wBDkGI,eCtGJ,kCACA,+BACA,8BACA,6BACA,0BDkGI,eCtGJ,kCACA,+BACA,8BACA,6BACA,0BDkGI,eCtGJ,kCACA,+BACA,8BACA,6BACA,0BDkGI,eCtGJ,kCACA,+BACA,8BACA,6BACA,0BDkGI,eCtGJ,gCACA,6BACA,4BACA,2BACA,wBDkGI,eCtGJ,kCACA,+BACA,8BACA,6BACA,0BDkGI,eCtGJ,kCACA,+BACA,8BACA,6BACA,0BDkGI,eCtGJ,kCACA,+BACA,8BACA,6BACA,0BDkGI,eCtGJ,kCACA,+BACA,8BACA,6BACA,0BDkGI,eCtGJ,gCACA,6BACA,4BACA,2BACA,wBDkGI,eCtGJ,kCACA,+BACA,8BACA,6BACA,0BDkGI,eCtGJ,kCACA,+BACA,8BACA,6BACA,0BDkGI,eCtGJ,kCACA,+BACA,8BACA,6BACA,0BDkGI,eCtGJ,kCACA,+BACA,8BACA,6BACA,0BDkGI,eCtGJ,gCACA,6BACA,4BACA,2BACA,wBDkGI,eCtGJ,kCACA,+BACA,8BACA,6BACA,0BDkGI,eCtGJ,kCACA,+BACA,8BACA,6BACA,0BDkGI,eCtGJ,mCACA,gCACA,+BACA,8BACA,2BDkGI,eCtGJ,mCACA,gCACA,+BACA,8BACA,2BDkGI,eCtGJ,iCACA,8BACA,6BACA,4BACA,yBDkGI,eCtGJ,mCACA,gCACA,+BACA,8BACA,2BDkGI,eCtGJ,mCACA,gCACA,+BACA,8BACA,2BDkGI,eCtGJ,mCACA,gCACA,+BACA,8BACA,2BDkGI,eCtGJ,mCACA,gCACA,+BACA,8BACA,2BDkGI,eCtGJ,iCACA,8BACA,6BACA,4BACA,yBDkGI,eCtGJ,mCACA,gCACA,+BACA,8BACA,2BDkGI,eCtGJ,mCACA,gCACA,+BACA,8BACA,2BDkGI,eCtGJ,mCACA,gCACA,+BACA,8BACA,2BDkGI,eCtGJ,mCACA,gCACA,+BACA,8BACA,2BDkGI,eCtGJ,iCACA,8BACA,6BACA,4BACA,yBDkGI,eCtGJ,mCACA,gCACA,+BACA,8BACA,2BDkGI,eCtGJ,mCACA,gCACA,+BACA,8BACA,2BDkGI,eCtGJ,mCACA,gCACA,+BACA,8BACA,2BDkGI,eCtGJ,mCACA,gCACA,+BACA,8BACA,2BDkGI,eCtGJ,iCACA,8BACA,6BACA,4BACA,yBDkGI,eCtGJ,mCACA,gCACA,+BACA,8BACA,2BDkGI,eCtGJ,mCACA,gCACA,+BACA,8BACA,2BDkGI,eCtGJ,mCACA,gCACA,+BACA,8BACA,2BDkGI,eCtGJ,mCACA,gCACA,+BACA,8BACA,2BDkGI,eCtGJ,iCACA,8BACA,6BACA,4BACA,yBDkGI,eCtGJ,mCACA,gCACA,+BACA,8BACA,2BDkGI,eCtGJ,mCACA,gCACA,+BACA,8BACA,2BDkGI,eCtGJ,mCACA,gCACA,+BACA,8BACA,2BDkGI,eCtGJ,mCACA,gCACA,+BACA,8BACA,2BDkGI,eCtGJ,iCACA,8BACA,6BACA,4BACA,yBDkGI,eCtGJ,mCACA,gCACA,+BACA,8BACA,2BDkGI,eCtGJ,mCACA,gCACA,+BACA,8BACA,2BDkGI,eCtGJ,mCACA,gCACA,+BACA,8BACA,2BDkGI,eCtGJ,mCACA,gCACA,+BACA,8BACA,2BDkGI,eCtGJ,iCACA,8BACA,6BACA,4BACA,yBDkGI,eCtGJ,mCACA,gCACA,+BACA,8BACA,2BDkGI,eCtGJ,mCACA,gCACA,+BACA,8BACA,2BDkGI,eCtGJ,mCACA,gCACA,+BACA,8BACA,2BDkGI,eCtGJ,mCACA,gCACA,+BACA,8BACA,2BDkGI,eCtGJ,iCACA,8BACA,6BACA,4BACA,yBDkGI,eCtGJ,mCACA,gCACA,+BACA,8BACA,2BDkGI,eCtGJ,mCACA,gCACA,+BACA,8BACA,2BDkGI,eCtGJ,mCACA,gCACA,+BACA,8BACA,2BDkGI,eCtGJ,mCACA,gCACA,+BACA,8BACA,2BDkGI,eCtGJ,iCACA,8BACA,6BACA,4BACA,yBDkGI,eCtGJ,mCACA,gCACA,+BACA,8BACA,2BDkGI,eCtGJ,mCACA,gCACA,+BACA,8BACA,2BDkGI,eCtGJ,mCACA,gCACA,+BACA,8BACA,2BDkGI,eCtGJ,mCACA,gCACA,+BACA,8BACA,2BDkGI,eCtGJ,iCACA,8BACA,6BACA,4BACA,yBDkGI,eCtGJ,mCACA,gCACA,+BACA,8BACA,2BDkGI,eCtGJ,mCACA,gCACA,+BACA,8BACA,2BDkGI,eCtGJ,mCACA,gCACA,+BACA,8BACA,2BDkGI,eCtGJ,mCACA,gCACA,+BACA,8BACA,2BDkGI,eCtGJ,iCACA,8BACA,6BACA,4BACA,yBDkGI,eCtGJ,mCACA,gCACA,+BACA,8BACA,2BDkGI,eCtGJ,mCACA,gCACA,+BACA,8BACA,2BDkGI,eCtGJ,mCACA,gCACA,+BACA,8BACA,2BDkGI,eCtGJ,mCACA,gCACA,+BACA,8BACA,2BDkGI,eCtGJ,iCACA,8BACA,6BACA,4BACA,yBDkGI,eCtGJ,mCACA,gCACA,+BACA,8BACA,2BDkGI,eCtGJ,mCACA,gCACA,+BACA,8BACA,2BDkGI,eCtGJ,mCACA,gCACA,+BACA,8BACA,2BDkGI,eCtGJ,mCACA,gCACA,+BACA,8BACA,2BDkGI,eCtGJ,iCACA,8BACA,6BACA,4BACA,yBDkGI,eCtGJ,mCACA,gCACA,+BACA,8BACA,2BDkGI,eCtGJ,mCACA,gCACA,+BACA,8BACA,2BDkGI,eCtGJ,mCACA,gCACA,+BACA,8BACA,2BDkGI,eCtGJ,mCACA,gCACA,+BACA,8BACA,2BDkGI,eCtGJ,iCACA,8BACA,6BACA,4BACA,yBDkGI,eCtGJ,mCACA,gCACA,+BACA,8BACA,2BDkGI,eCtGJ,mCACA,gCACA,+BACA,8BACA,2BDkGI,eCtGJ,mCACA,gCACA,+BACA,8BACA,2BDkGI,eCtGJ,mCACA,gCACA,+BACA,8BACA,2BDkGI,gBCtGJ,iCACA,8BACA,6BACA,4BACA,yBDwGA,YACI,eACA,iBACI,aACA,mBACA,eACA,MEzHI,QF2HR,kBACI,IE9HS,MF+HT,KE/HS,MFgIT,YACA,aAIR,WACI,iBLhIO,QKiIP,iCAEI,gCAEJ,gBACI,MLtIG,QKwIP,iBACI,iBErII,KFwIJ,sBACI,ML9IA,QKkJZ,YACF,iBL1IW,KK2IL,mCAEI,6BAGA,uBACI,MLnJR,KKsJN,iBACC,MLrJU,KKwJT,cACI,sBACA,uCAEI,6BAGA,yBACI,WAGR,mBACI,WG3KZ,EACC,SACA,UACA,sBAGD,MACC,eAGD,GACC,WACA,gBACA,kBAGD,KACC,uBAEA,kDACA,sBACA,yBACA,WAGD,gBNhCI,2CMkCH,yBACA,iBR7Bc,QQ8Bd,WAEA,eACA,eACA,mBACA,qBAEA,eAEA,gEACC,iBAIF,sBACC,YACA,sBACA,WAEA,eACA,qBACA,eAEA,6DACC,WAIF,mBACC,eACA,iBR5Dc,QQgEd,qCACC,WNvEE,2CM0EF,eACA,WAEA,uDACC,gBAIF,cACC,sBACA,YAGD,WACC,WNxFE,2CM0FF,iBRpFa,QQqFb,WACA,iBAEA,qBACA,qBACA,gBAOD,kBNvGG,2CM0GF,gBACA,iBRjGe,QQkGf,cACA,oBAEA,0BACC,iBR1GY,QQ+Gf,OACC,aACA,8BAGD,WAKC,aN/HG,2CMkIH,YACA,YAEA,aACA,YACA,sBACA,MRzIO,KQ4HP,uBACC,+BAeF,0BN3II,2CM8IH,iBRxIc,QQyId,qBACA,gBACA,qBACA,WAEA,8BACC,iBACA,qBAIF,aAGC,aACA,8BAEA,0BACC,iBAKD,eACC,mBACA,iBRpKQ,QQqKR,gBACA,YACA,WAEA,eACA,mBACA,qBACA,qBAEA,eAIF,wBACC,aACA,6CAGD,aACC,kBACA,WACA,iBAGD,qBACC","file":"core.css"}
\ No newline at end of file
index 44d5bf277d3ef7ca77d23ccdee0ce778689ce59c..c25185c9cda8245925c7500f3f076bc3da6efbc4 100644 (file)
@@ -56,7 +56,7 @@
         return $('.test-cases').after(data.html);
       });
     });
-    return $('[data-problem-delete]').click(function(e) {
+    $('[data-problem-delete]').click(function(e) {
       var problem_name;
       if (!confirm('Are you sure you want to delete this problem?')) {
         return;
         return window.location.reload();
       });
     });
+    return $('input[type=submit]').click(function(e) {
+      var edit, f, fields, i, len, ref;
+      e.preventDefault();
+      fields = {};
+      ref = $('form').serializeArray();
+      for (i = 0, len = ref.length; i < len; i++) {
+        f = ref[i];
+        fields[f.name] = f.value;
+      }
+      edit = ace.edit('code-editor');
+      fields.description = edit.getValue();
+      return $.post(window.location.pathname, fields, function() {
+        alert('Updated problem info');
+        return window.location.reload();
+      });
+    });
   };
 
   $(document).ready(function() {
index 6a9ee2c689f876e042a515e26caca9c926596011..ef976d995984213b1580c04541d5589dc02461a7 100644 (file)
@@ -6,8 +6,8 @@
     "coffee/admin_problem.coffee"
   ],
   "names": [],
-  "mappings": ";AAAA;AAAA,MAAA,aAAA,EAAA;;EAAA,aAAA,GAAgB,QAAA,CAAC,YAAD,CAAA;AACf,QAAA,KAAA,EAAA,KAAA,EAAA;IAAA,KAAA,GAAQ,CAAA,CAAE,CAAA,mBAAA,CAAA,CAAuB,YAAvB,CAAoC,EAApC,CAAF,CAA2C,CAAC,GAA5C,CAAA;IACR,MAAA,GAAS,CAAA,CAAE,CAAA,oBAAA,CAAA,CAAwB,YAAxB,CAAqC,EAArC,CAAF,CAA4C,CAAC,GAA7C,CAAA;IACT,KAAA,GAAQ,CAAA,CAAE,CAAA,mBAAA,CAAA,CAAuB,YAAvB,CAAoC,EAApC,CAAF,CAA2C,CAAC,GAA5C,CAAA;WAER,CAAC,CAAC,IAAF,CAAO,uBAAP,EAAgC;MAC/B,cAAA,EAAgB,YADe;MAE/B,OAAA,EAAS,KAAA,IAAS,EAFa;MAG/B,QAAA,EAAU,MAAA,IAAU,EAHW;MAI/B,OAAA,EAAS;IAJsB,CAAhC,EAKG,QAAA,CAAC,IAAD,CAAA;aACF,OAAO,CAAC,GAAR,CAAY,IAAZ;IADE,CALH;EALe;;EAahB,cAAA,GAAiB,QAAA,CAAA,CAAA;IAChB,CAAA,CAAE,oBAAF,CAAuB,CAAC,KAAxB,CAA8B,QAAA,CAAA,CAAA;AAC7B,UAAA;MAAA,QAAA,GAAW,CAAA,CAAE,gBAAF;MACX,QAAQ,CAAC,IAAT,CAAc,QAAA,CAAC,CAAD,EAAI,CAAJ,CAAA;AACb,YAAA;QAAA,YAAA,GAAe,CAAA,CAAE,CAAF,CAAI,CAAC,IAAL,CAAU,cAAV;eACf,aAAA,CAAc,YAAd;MAFa,CAAd;MAIA,KAAA,CAAM,sBAAN;aACA,MAAM,CAAC,QAAQ,CAAC,MAAhB,CAAA;IAP6B,CAA9B;IASA,CAAA,CAAE,gBAAF,CAAmB,CAAC,KAApB,CAA0B,QAAA,CAAC,CAAD,CAAA;AACzB,UAAA;MAAA,YAAA,GAAe,CAAA,CAAE,CAAC,CAAC,MAAJ,CAAW,CAAC,IAAZ,CAAiB,cAAjB;MACf,aAAA,CAAc,YAAd;MACA,KAAA,CAAM,iBAAN;aACA,MAAM,CAAC,QAAQ,CAAC,MAAhB,CAAA;IAJyB,CAA1B;IAMA,CAAA,CAAE,kBAAF,CAAqB,CAAC,KAAtB,CAA4B,QAAA,CAAC,CAAD,CAAA;AAC3B,UAAA;MAAA,YAAA,GAAe,CAAA,CAAE,CAAC,CAAC,MAAJ,CAAW,CAAC,IAAZ,CAAiB,gBAAjB;aACf,CAAC,CAAC,IAAF,CAAO,yBAAP,EAAkC;QAAE,cAAA,EAAgB;MAAlB,CAAlC,EAAoE,QAAA,CAAC,IAAD,CAAA;QACnE,CAAA,CAAE,CAAA,gBAAA,CAAA,CAAoB,YAApB,CAAiC,EAAjC,CAAF,CAAwC,CAAC,MAAzC,CAAA;eACA,OAAO,CAAC,GAAR,CAAY,IAAZ;MAFmE,CAApE;IAF2B,CAA5B;IAMA,CAAA,CAAE,eAAF,CAAkB,CAAC,KAAnB,CAAyB,QAAA,CAAC,CAAD,CAAA;AACxB,UAAA;MAAA,YAAA,GAAe,CAAA,CAAE,CAAC,CAAC,MAAJ,CAAW,CAAC,IAAZ,CAAiB,aAAjB;aACf,CAAC,CAAC,IAAF,CAAO,sBAAP,EAA+B;QAAE,UAAA,EAAY;MAAd,CAA/B,EAA6D,QAAA,CAAC,IAAD,CAAA;QAC5D,OAAO,CAAC,GAAR,CAAY,IAAZ;eACA,CAAA,CAAE,aAAF,CAAgB,CAAC,KAAjB,CAAuB,IAAI,CAAC,IAA5B;MAF4D,CAA7D;IAFwB,CAAzB;WAMA,CAAA,CAAE,uBAAF,CAA0B,CAAC,KAA3B,CAAiC,QAAA,CAAC,CAAD,CAAA;AAChC,UAAA;MAAA,IAAG,CAAI,OAAA,CAAQ,+CAAR,CAAP;AACC,eADD;;MAEA,YAAA,GAAe,CAAA,CAAE,CAAC,CAAC,MAAJ,CAAW,CAAC,IAAZ,CAAiB,qBAAjB;aAEf,CAAC,CAAC,IAAF,CAAO,wBAAP,EAAiC;QAAE,UAAA,EAAY;MAAd,CAAjC,EAA+D,QAAA,CAAC,IAAD,CAAA;QAC9D,KAAA,CAAM,CAAA,QAAA,CAAA,CAAW,YAAX,CAAwB,CAAxB,CAAN;eACA,MAAM,CAAC,QAAQ,CAAC,MAAhB,CAAA;MAF8D,CAA/D;IALgC,CAAjC;EA5BgB;;EAqCjB,CAAA,CAAE,QAAF,CAAW,CAAC,KAAZ,CAAkB,QAAA,CAAA,CAAA;WACjB,cAAA,CAAA;EADiB,CAAlB;AAlDA",
+  "mappings": ";AAAA;AAAA,MAAA,aAAA,EAAA;;EAAA,aAAA,GAAgB,QAAA,CAAC,YAAD,CAAA;AACf,QAAA,KAAA,EAAA,KAAA,EAAA;IAAA,KAAA,GAAQ,CAAA,CAAE,CAAA,mBAAA,CAAA,CAAuB,YAAvB,CAAoC,EAApC,CAAF,CAA2C,CAAC,GAA5C,CAAA;IACR,MAAA,GAAS,CAAA,CAAE,CAAA,oBAAA,CAAA,CAAwB,YAAxB,CAAqC,EAArC,CAAF,CAA4C,CAAC,GAA7C,CAAA;IACT,KAAA,GAAQ,CAAA,CAAE,CAAA,mBAAA,CAAA,CAAuB,YAAvB,CAAoC,EAApC,CAAF,CAA2C,CAAC,GAA5C,CAAA;WAER,CAAC,CAAC,IAAF,CAAO,uBAAP,EAAgC;MAC/B,cAAA,EAAgB,YADe;MAE/B,OAAA,EAAS,KAAA,IAAS,EAFa;MAG/B,QAAA,EAAU,MAAA,IAAU,EAHW;MAI/B,OAAA,EAAS;IAJsB,CAAhC,EAKG,QAAA,CAAC,IAAD,CAAA;aACF,OAAO,CAAC,GAAR,CAAY,IAAZ;IADE,CALH;EALe;;EAahB,cAAA,GAAiB,QAAA,CAAA,CAAA;IAChB,CAAA,CAAE,oBAAF,CAAuB,CAAC,KAAxB,CAA8B,QAAA,CAAA,CAAA;AAC7B,UAAA;MAAA,QAAA,GAAW,CAAA,CAAE,gBAAF;MACX,QAAQ,CAAC,IAAT,CAAc,QAAA,CAAC,CAAD,EAAI,CAAJ,CAAA;AACb,YAAA;QAAA,YAAA,GAAe,CAAA,CAAE,CAAF,CAAI,CAAC,IAAL,CAAU,cAAV;eACf,aAAA,CAAc,YAAd;MAFa,CAAd;MAIA,KAAA,CAAM,sBAAN;aACA,MAAM,CAAC,QAAQ,CAAC,MAAhB,CAAA;IAP6B,CAA9B;IASA,CAAA,CAAE,gBAAF,CAAmB,CAAC,KAApB,CAA0B,QAAA,CAAC,CAAD,CAAA;AACzB,UAAA;MAAA,YAAA,GAAe,CAAA,CAAE,CAAC,CAAC,MAAJ,CAAW,CAAC,IAAZ,CAAiB,cAAjB;MACf,aAAA,CAAc,YAAd;MACA,KAAA,CAAM,iBAAN;aACA,MAAM,CAAC,QAAQ,CAAC,MAAhB,CAAA;IAJyB,CAA1B;IAMA,CAAA,CAAE,kBAAF,CAAqB,CAAC,KAAtB,CAA4B,QAAA,CAAC,CAAD,CAAA;AAC3B,UAAA;MAAA,YAAA,GAAe,CAAA,CAAE,CAAC,CAAC,MAAJ,CAAW,CAAC,IAAZ,CAAiB,gBAAjB;aACf,CAAC,CAAC,IAAF,CAAO,yBAAP,EAAkC;QAAE,cAAA,EAAgB;MAAlB,CAAlC,EAAoE,QAAA,CAAC,IAAD,CAAA;QACnE,CAAA,CAAE,CAAA,gBAAA,CAAA,CAAoB,YAApB,CAAiC,EAAjC,CAAF,CAAwC,CAAC,MAAzC,CAAA;eACA,OAAO,CAAC,GAAR,CAAY,IAAZ;MAFmE,CAApE;IAF2B,CAA5B;IAMA,CAAA,CAAE,eAAF,CAAkB,CAAC,KAAnB,CAAyB,QAAA,CAAC,CAAD,CAAA;AACxB,UAAA;MAAA,YAAA,GAAe,CAAA,CAAE,CAAC,CAAC,MAAJ,CAAW,CAAC,IAAZ,CAAiB,aAAjB;aACf,CAAC,CAAC,IAAF,CAAO,sBAAP,EAA+B;QAAE,UAAA,EAAY;MAAd,CAA/B,EAA6D,QAAA,CAAC,IAAD,CAAA;QAC5D,OAAO,CAAC,GAAR,CAAY,IAAZ;eACA,CAAA,CAAE,aAAF,CAAgB,CAAC,KAAjB,CAAuB,IAAI,CAAC,IAA5B;MAF4D,CAA7D;IAFwB,CAAzB;IAMA,CAAA,CAAE,uBAAF,CAA0B,CAAC,KAA3B,CAAiC,QAAA,CAAC,CAAD,CAAA;AAChC,UAAA;MAAA,IAAG,CAAI,OAAA,CAAQ,+CAAR,CAAP;AACC,eADD;;MAEA,YAAA,GAAe,CAAA,CAAE,CAAC,CAAC,MAAJ,CAAW,CAAC,IAAZ,CAAiB,qBAAjB;aAEf,CAAC,CAAC,IAAF,CAAO,wBAAP,EAAiC;QAAE,UAAA,EAAY;MAAd,CAAjC,EAA+D,QAAA,CAAC,IAAD,CAAA;QAC9D,KAAA,CAAM,CAAA,QAAA,CAAA,CAAW,YAAX,CAAwB,CAAxB,CAAN;eACA,MAAM,CAAC,QAAQ,CAAC,MAAhB,CAAA;MAF8D,CAA/D;IALgC,CAAjC;WASA,CAAA,CAAE,oBAAF,CAAuB,CAAC,KAAxB,CAA8B,QAAA,CAAC,CAAD,CAAA;AAC7B,UAAA,IAAA,EAAA,CAAA,EAAA,MAAA,EAAA,CAAA,EAAA,GAAA,EAAA;MAAA,CAAC,CAAC,cAAF,CAAA;MACA,MAAA,GAAS,CAAA;AACT;MAAA,KAAA,qCAAA;;QACC,MAAO,CAAA,CAAC,CAAC,IAAF,CAAP,GAAiB,CAAC,CAAC;MADpB;MAGA,IAAA,GAAO,GAAG,CAAC,IAAJ,CAAS,aAAT;MACP,MAAM,CAAC,WAAP,GAAqB,IAAI,CAAC,QAAL,CAAA;aAErB,CAAC,CAAC,IAAF,CAAO,MAAM,CAAC,QAAQ,CAAC,QAAvB,EAAiC,MAAjC,EAAyC,QAAA,CAAA,CAAA;QACxC,KAAA,CAAM,sBAAN;eACA,MAAM,CAAC,QAAQ,CAAC,MAAhB,CAAA;MAFwC,CAAzC;IAT6B,CAA9B;EArCgB;;EAmDjB,CAAA,CAAE,QAAF,CAAW,CAAC,KAAZ,CAAkB,QAAA,CAAA,CAAA;WACjB,cAAA,CAAA;EADiB,CAAlB;AAhEA",
   "sourcesContent": [
-    "save_testcase = (test_case_id) ->\n\tinput = $(\"[data-tc-input-id=\\\"#{test_case_id}\\\"]\").val()\n\toutput = $(\"[data-tc-output-id=\\\"#{test_case_id}\\\"]\").val()\n\torder = $(\"[data-tc-order-id=\\\"#{test_case_id}\\\"]\").val()\n\n\t$.post '/admin/testcases/edit', {\n\t\t\"test_case_id\": test_case_id,\n\t\t\"input\": input || \"\",\n\t\t\"output\": output || \"\",\n\t\t\"order\": order,\n\t}, (data) ->\n\t\tconsole.log data\n\nsetup_handlers = ->\n\t$('[data-tc-save-all]').click ->\n\t\telements = $('[data-tc-save]')\n\t\telements.each (k, e) ->\n\t\t\ttest_case_id = $(e).attr 'data-tc-save'\n\t\t\tsave_testcase test_case_id\n\n\t\talert 'Saved all test cases'\n\t\twindow.location.reload()\n\n\t$('[data-tc-save]').click (e) ->\n\t\ttest_case_id = $(e.target).attr 'data-tc-save'\n\t\tsave_testcase test_case_id\n\t\talert 'Saved test case'\n\t\twindow.location.reload()\n\n\t$('[data-tc-delete]').click (e) ->\n\t\ttest_case_id = $(e.target).attr 'data-tc-delete'\n\t\t$.post '/admin/testcases/delete', { \"test_case_id\": test_case_id }, (data) ->\n\t\t\t$(\"[data-testcase=\\\"#{test_case_id}\\\"]\").remove()\n\t\t\tconsole.log data\n\n\t$('[data-new-tc]').click (e) ->\n\t\tproblem_name = $(e.target).attr 'data-new-tc'\n\t\t$.post '/admin/testcases/new', { short_name: problem_name }, (data) ->\n\t\t\tconsole.log data\n\t\t\t$('.test-cases').after data.html\n\n\t$('[data-problem-delete]').click (e) ->\n\t\tif not confirm 'Are you sure you want to delete this problem?'\n\t\t\treturn\n\t\tproblem_name = $(e.target).attr 'data-problem-delete'\n\n\t\t$.post '/admin/problems/delete', { short_name: problem_name }, (data) ->\n\t\t\talert \"Deleted #{problem_name}.\"\n\t\t\twindow.location.reload()\n\n$(document).ready ->\n\tsetup_handlers()\n\n"
+    "save_testcase = (test_case_id) ->\n\tinput = $(\"[data-tc-input-id=\\\"#{test_case_id}\\\"]\").val()\n\toutput = $(\"[data-tc-output-id=\\\"#{test_case_id}\\\"]\").val()\n\torder = $(\"[data-tc-order-id=\\\"#{test_case_id}\\\"]\").val()\n\n\t$.post '/admin/testcases/edit', {\n\t\t\"test_case_id\": test_case_id,\n\t\t\"input\": input || \"\",\n\t\t\"output\": output || \"\",\n\t\t\"order\": order,\n\t}, (data) ->\n\t\tconsole.log data\n\nsetup_handlers = ->\n\t$('[data-tc-save-all]').click ->\n\t\telements = $('[data-tc-save]')\n\t\telements.each (k, e) ->\n\t\t\ttest_case_id = $(e).attr 'data-tc-save'\n\t\t\tsave_testcase test_case_id\n\n\t\talert 'Saved all test cases'\n\t\twindow.location.reload()\n\n\t$('[data-tc-save]').click (e) ->\n\t\ttest_case_id = $(e.target).attr 'data-tc-save'\n\t\tsave_testcase test_case_id\n\t\talert 'Saved test case'\n\t\twindow.location.reload()\n\n\t$('[data-tc-delete]').click (e) ->\n\t\ttest_case_id = $(e.target).attr 'data-tc-delete'\n\t\t$.post '/admin/testcases/delete', { \"test_case_id\": test_case_id }, (data) ->\n\t\t\t$(\"[data-testcase=\\\"#{test_case_id}\\\"]\").remove()\n\t\t\tconsole.log data\n\n\t$('[data-new-tc]').click (e) ->\n\t\tproblem_name = $(e.target).attr 'data-new-tc'\n\t\t$.post '/admin/testcases/new', { short_name: problem_name }, (data) ->\n\t\t\tconsole.log data\n\t\t\t$('.test-cases').after data.html\n\n\t$('[data-problem-delete]').click (e) ->\n\t\tif not confirm 'Are you sure you want to delete this problem?'\n\t\t\treturn\n\t\tproblem_name = $(e.target).attr 'data-problem-delete'\n\n\t\t$.post '/admin/problems/delete', { short_name: problem_name }, (data) ->\n\t\t\talert \"Deleted #{problem_name}.\"\n\t\t\twindow.location.reload()\n\n\t$('input[type=submit]').click (e) ->\n\t\te.preventDefault()\n\t\tfields = {}\n\t\tfor f in $('form').serializeArray()\n\t\t\tfields[f.name] = f.value\n\n\t\tedit = ace.edit 'code-editor'\n\t\tfields.description = edit.getValue()\n\n\t\t$.post window.location.pathname, fields, ->\n\t\t\talert 'Updated problem info'\n\t\t\twindow.location.reload()\n\n\n$(document).ready ->\n\tsetup_handlers()\n\n"
   ]
 }
\ No newline at end of file
diff --git a/codebox/static/js/vendor/ace/mode-markdown.js b/codebox/static/js/vendor/ace/mode-markdown.js
new file mode 100644 (file)
index 0000000..ce54c42
--- /dev/null
@@ -0,0 +1,3189 @@
+ace.define("ace/mode/doc_comment_highlight_rules",["require","exports","module","ace/lib/oop","ace/mode/text_highlight_rules"], function(require, exports, module) {
+"use strict";
+
+var oop = require("../lib/oop");
+var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules;
+
+var DocCommentHighlightRules = function() {
+    this.$rules = {
+        "start" : [ {
+            token : "comment.doc.tag",
+            regex : "@[\\w\\d_]+" // TODO: fix email addresses
+        }, 
+        DocCommentHighlightRules.getTagRule(),
+        {
+            defaultToken : "comment.doc",
+            caseInsensitive: true
+        }]
+    };
+};
+
+oop.inherits(DocCommentHighlightRules, TextHighlightRules);
+
+DocCommentHighlightRules.getTagRule = function(start) {
+    return {
+        token : "comment.doc.tag.storage.type",
+        regex : "\\b(?:TODO|FIXME|XXX|HACK)\\b"
+    };
+};
+
+DocCommentHighlightRules.getStartRule = function(start) {
+    return {
+        token : "comment.doc", // doc comment
+        regex : "\\/\\*(?=\\*)",
+        next  : start
+    };
+};
+
+DocCommentHighlightRules.getEndRule = function (start) {
+    return {
+        token : "comment.doc", // closing comment
+        regex : "\\*\\/",
+        next  : start
+    };
+};
+
+
+exports.DocCommentHighlightRules = DocCommentHighlightRules;
+
+});
+
+ace.define("ace/mode/javascript_highlight_rules",["require","exports","module","ace/lib/oop","ace/mode/doc_comment_highlight_rules","ace/mode/text_highlight_rules"], function(require, exports, module) {
+"use strict";
+
+var oop = require("../lib/oop");
+var DocCommentHighlightRules = require("./doc_comment_highlight_rules").DocCommentHighlightRules;
+var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules;
+var identifierRe = "[a-zA-Z\\$_\u00a1-\uffff][a-zA-Z\\d\\$_\u00a1-\uffff]*";
+
+var JavaScriptHighlightRules = function(options) {
+    var keywordMapper = this.createKeywordMapper({
+        "variable.language":
+            "Array|Boolean|Date|Function|Iterator|Number|Object|RegExp|String|Proxy|"  + // Constructors
+            "Namespace|QName|XML|XMLList|"                                             + // E4X
+            "ArrayBuffer|Float32Array|Float64Array|Int16Array|Int32Array|Int8Array|"   +
+            "Uint16Array|Uint32Array|Uint8Array|Uint8ClampedArray|"                    +
+            "Error|EvalError|InternalError|RangeError|ReferenceError|StopIteration|"   + // Errors
+            "SyntaxError|TypeError|URIError|"                                          +
+            "decodeURI|decodeURIComponent|encodeURI|encodeURIComponent|eval|isFinite|" + // Non-constructor functions
+            "isNaN|parseFloat|parseInt|"                                               +
+            "JSON|Math|"                                                               + // Other
+            "this|arguments|prototype|window|document"                                 , // Pseudo
+        "keyword":
+            "const|yield|import|get|set|async|await|" +
+            "break|case|catch|continue|default|delete|do|else|finally|for|function|" +
+            "if|in|of|instanceof|new|return|switch|throw|try|typeof|let|var|while|with|debugger|" +
+            "__parent__|__count__|escape|unescape|with|__proto__|" +
+            "class|enum|extends|super|export|implements|private|public|interface|package|protected|static",
+        "storage.type":
+            "const|let|var|function",
+        "constant.language":
+            "null|Infinity|NaN|undefined",
+        "support.function":
+            "alert",
+        "constant.language.boolean": "true|false"
+    }, "identifier");
+    var kwBeforeRe = "case|do|else|finally|in|instanceof|return|throw|try|typeof|yield|void";
+
+    var escapedRe = "\\\\(?:x[0-9a-fA-F]{2}|" + // hex
+        "u[0-9a-fA-F]{4}|" + // unicode
+        "u{[0-9a-fA-F]{1,6}}|" + // es6 unicode
+        "[0-2][0-7]{0,2}|" + // oct
+        "3[0-7][0-7]?|" + // oct
+        "[4-7][0-7]?|" + //oct
+        ".)";
+
+    this.$rules = {
+        "no_regex" : [
+            DocCommentHighlightRules.getStartRule("doc-start"),
+            comments("no_regex"),
+            {
+                token : "string",
+                regex : "'(?=.)",
+                next  : "qstring"
+            }, {
+                token : "string",
+                regex : '"(?=.)',
+                next  : "qqstring"
+            }, {
+                token : "constant.numeric", // hexadecimal, octal and binary
+                regex : /0(?:[xX][0-9a-fA-F]+|[oO][0-7]+|[bB][01]+)\b/
+            }, {
+                token : "constant.numeric", // decimal integers and floats
+                regex : /(?:\d\d*(?:\.\d*)?|\.\d+)(?:[eE][+-]?\d+\b)?/
+            }, {
+                token : [
+                    "storage.type", "punctuation.operator", "support.function",
+                    "punctuation.operator", "entity.name.function", "text","keyword.operator"
+                ],
+                regex : "(" + identifierRe + ")(\\.)(prototype)(\\.)(" + identifierRe +")(\\s*)(=)",
+                next: "function_arguments"
+            }, {
+                token : [
+                    "storage.type", "punctuation.operator", "entity.name.function", "text",
+                    "keyword.operator", "text", "storage.type", "text", "paren.lparen"
+                ],
+                regex : "(" + identifierRe + ")(\\.)(" + identifierRe +")(\\s*)(=)(\\s*)(function)(\\s*)(\\()",
+                next: "function_arguments"
+            }, {
+                token : [
+                    "entity.name.function", "text", "keyword.operator", "text", "storage.type",
+                    "text", "paren.lparen"
+                ],
+                regex : "(" + identifierRe +")(\\s*)(=)(\\s*)(function)(\\s*)(\\()",
+                next: "function_arguments"
+            }, {
+                token : [
+                    "storage.type", "punctuation.operator", "entity.name.function", "text",
+                    "keyword.operator", "text",
+                    "storage.type", "text", "entity.name.function", "text", "paren.lparen"
+                ],
+                regex : "(" + identifierRe + ")(\\.)(" + identifierRe +")(\\s*)(=)(\\s*)(function)(\\s+)(\\w+)(\\s*)(\\()",
+                next: "function_arguments"
+            }, {
+                token : [
+                    "storage.type", "text", "entity.name.function", "text", "paren.lparen"
+                ],
+                regex : "(function)(\\s+)(" + identifierRe + ")(\\s*)(\\()",
+                next: "function_arguments"
+            }, {
+                token : [
+                    "entity.name.function", "text", "punctuation.operator",
+                    "text", "storage.type", "text", "paren.lparen"
+                ],
+                regex : "(" + identifierRe + ")(\\s*)(:)(\\s*)(function)(\\s*)(\\()",
+                next: "function_arguments"
+            }, {
+                token : [
+                    "text", "text", "storage.type", "text", "paren.lparen"
+                ],
+                regex : "(:)(\\s*)(function)(\\s*)(\\()",
+                next: "function_arguments"
+            }, {
+                token : "keyword",
+                regex : "from(?=\\s*('|\"))"
+            }, {
+                token : "keyword",
+                regex : "(?:" + kwBeforeRe + ")\\b",
+                next : "start"
+            }, {
+                token : ["support.constant"],
+                regex : /that\b/
+            }, {
+                token : ["storage.type", "punctuation.operator", "support.function.firebug"],
+                regex : /(console)(\.)(warn|info|log|error|time|trace|timeEnd|assert)\b/
+            }, {
+                token : keywordMapper,
+                regex : identifierRe
+            }, {
+                token : "punctuation.operator",
+                regex : /[.](?![.])/,
+                next  : "property"
+            }, {
+                token : "storage.type",
+                regex : /=>/,
+                next  : "start"
+            }, {
+                token : "keyword.operator",
+                regex : /--|\+\+|\.{3}|===|==|=|!=|!==|<+=?|>+=?|!|&&|\|\||\?:|[!$%&*+\-~\/^]=?/,
+                next  : "start"
+            }, {
+                token : "punctuation.operator",
+                regex : /[?:,;.]/,
+                next  : "start"
+            }, {
+                token : "paren.lparen",
+                regex : /[\[({]/,
+                next  : "start"
+            }, {
+                token : "paren.rparen",
+                regex : /[\])}]/
+            }, {
+                token: "comment",
+                regex: /^#!.*$/
+            }
+        ],
+        property: [{
+                token : "text",
+                regex : "\\s+"
+            }, {
+                token : [
+                    "storage.type", "punctuation.operator", "entity.name.function", "text",
+                    "keyword.operator", "text",
+                    "storage.type", "text", "entity.name.function", "text", "paren.lparen"
+                ],
+                regex : "(" + identifierRe + ")(\\.)(" + identifierRe +")(\\s*)(=)(\\s*)(function)(?:(\\s+)(\\w+))?(\\s*)(\\()",
+                next: "function_arguments"
+            }, {
+                token : "punctuation.operator",
+                regex : /[.](?![.])/
+            }, {
+                token : "support.function",
+                regex : /(s(?:h(?:ift|ow(?:Mod(?:elessDialog|alDialog)|Help))|croll(?:X|By(?:Pages|Lines)?|Y|To)?|t(?:op|rike)|i(?:n|zeToContent|debar|gnText)|ort|u(?:p|b(?:str(?:ing)?)?)|pli(?:ce|t)|e(?:nd|t(?:Re(?:sizable|questHeader)|M(?:i(?:nutes|lliseconds)|onth)|Seconds|Ho(?:tKeys|urs)|Year|Cursor|Time(?:out)?|Interval|ZOptions|Date|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Date|FullYear)|FullYear|Active)|arch)|qrt|lice|avePreferences|mall)|h(?:ome|andleEvent)|navigate|c(?:har(?:CodeAt|At)|o(?:s|n(?:cat|textual|firm)|mpile)|eil|lear(?:Timeout|Interval)?|a(?:ptureEvents|ll)|reate(?:StyleSheet|Popup|EventObject))|t(?:o(?:GMTString|S(?:tring|ource)|U(?:TCString|pperCase)|Lo(?:caleString|werCase))|est|a(?:n|int(?:Enabled)?))|i(?:s(?:NaN|Finite)|ndexOf|talics)|d(?:isableExternalCapture|ump|etachEvent)|u(?:n(?:shift|taint|escape|watch)|pdateCommands)|j(?:oin|avaEnabled)|p(?:o(?:p|w)|ush|lugins.refresh|a(?:ddings|rse(?:Int|Float)?)|r(?:int|ompt|eference))|e(?:scape|nableExternalCapture|val|lementFromPoint|x(?:p|ec(?:Script|Command)?))|valueOf|UTC|queryCommand(?:State|Indeterm|Enabled|Value)|f(?:i(?:nd|le(?:ModifiedDate|Size|CreatedDate|UpdatedDate)|xed)|o(?:nt(?:size|color)|rward)|loor|romCharCode)|watch|l(?:ink|o(?:ad|g)|astIndexOf)|a(?:sin|nchor|cos|t(?:tachEvent|ob|an(?:2)?)|pply|lert|b(?:s|ort))|r(?:ou(?:nd|teEvents)|e(?:size(?:By|To)|calc|turnValue|place|verse|l(?:oad|ease(?:Capture|Events)))|andom)|g(?:o|et(?:ResponseHeader|M(?:i(?:nutes|lliseconds)|onth)|Se(?:conds|lection)|Hours|Year|Time(?:zoneOffset)?|Da(?:y|te)|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Da(?:y|te)|FullYear)|FullYear|A(?:ttention|llResponseHeaders)))|m(?:in|ove(?:B(?:y|elow)|To(?:Absolute)?|Above)|ergeAttributes|a(?:tch|rgins|x))|b(?:toa|ig|o(?:ld|rderWidths)|link|ack))\b(?=\()/
+            }, {
+                token : "support.function.dom",
+                regex : /(s(?:ub(?:stringData|mit)|plitText|e(?:t(?:NamedItem|Attribute(?:Node)?)|lect))|has(?:ChildNodes|Feature)|namedItem|c(?:l(?:ick|o(?:se|neNode))|reate(?:C(?:omment|DATASection|aption)|T(?:Head|extNode|Foot)|DocumentFragment|ProcessingInstruction|E(?:ntityReference|lement)|Attribute))|tabIndex|i(?:nsert(?:Row|Before|Cell|Data)|tem)|open|delete(?:Row|C(?:ell|aption)|T(?:Head|Foot)|Data)|focus|write(?:ln)?|a(?:dd|ppend(?:Child|Data))|re(?:set|place(?:Child|Data)|move(?:NamedItem|Child|Attribute(?:Node)?)?)|get(?:NamedItem|Element(?:sBy(?:Name|TagName|ClassName)|ById)|Attribute(?:Node)?)|blur)\b(?=\()/
+            }, {
+                token :  "support.constant",
+                regex : /(s(?:ystemLanguage|cr(?:ipts|ollbars|een(?:X|Y|Top|Left))|t(?:yle(?:Sheets)?|atus(?:Text|bar)?)|ibling(?:Below|Above)|ource|uffixes|e(?:curity(?:Policy)?|l(?:ection|f)))|h(?:istory|ost(?:name)?|as(?:h|Focus))|y|X(?:MLDocument|SLDocument)|n(?:ext|ame(?:space(?:s|URI)|Prop))|M(?:IN_VALUE|AX_VALUE)|c(?:haracterSet|o(?:n(?:structor|trollers)|okieEnabled|lorDepth|mp(?:onents|lete))|urrent|puClass|l(?:i(?:p(?:boardData)?|entInformation)|osed|asses)|alle(?:e|r)|rypto)|t(?:o(?:olbar|p)|ext(?:Transform|Indent|Decoration|Align)|ags)|SQRT(?:1_2|2)|i(?:n(?:ner(?:Height|Width)|put)|ds|gnoreCase)|zIndex|o(?:scpu|n(?:readystatechange|Line)|uter(?:Height|Width)|p(?:sProfile|ener)|ffscreenBuffering)|NEGATIVE_INFINITY|d(?:i(?:splay|alog(?:Height|Top|Width|Left|Arguments)|rectories)|e(?:scription|fault(?:Status|Ch(?:ecked|arset)|View)))|u(?:ser(?:Profile|Language|Agent)|n(?:iqueID|defined)|pdateInterval)|_content|p(?:ixelDepth|ort|ersonalbar|kcs11|l(?:ugins|atform)|a(?:thname|dding(?:Right|Bottom|Top|Left)|rent(?:Window|Layer)?|ge(?:X(?:Offset)?|Y(?:Offset)?))|r(?:o(?:to(?:col|type)|duct(?:Sub)?|mpter)|e(?:vious|fix)))|e(?:n(?:coding|abledPlugin)|x(?:ternal|pando)|mbeds)|v(?:isibility|endor(?:Sub)?|Linkcolor)|URLUnencoded|P(?:I|OSITIVE_INFINITY)|f(?:ilename|o(?:nt(?:Size|Family|Weight)|rmName)|rame(?:s|Element)|gColor)|E|whiteSpace|l(?:i(?:stStyleType|n(?:eHeight|kColor))|o(?:ca(?:tion(?:bar)?|lName)|wsrc)|e(?:ngth|ft(?:Context)?)|a(?:st(?:M(?:odified|atch)|Index|Paren)|yer(?:s|X)|nguage))|a(?:pp(?:MinorVersion|Name|Co(?:deName|re)|Version)|vail(?:Height|Top|Width|Left)|ll|r(?:ity|guments)|Linkcolor|bove)|r(?:ight(?:Context)?|e(?:sponse(?:XML|Text)|adyState))|global|x|m(?:imeTypes|ultiline|enubar|argin(?:Right|Bottom|Top|Left))|L(?:N(?:10|2)|OG(?:10E|2E))|b(?:o(?:ttom|rder(?:Width|RightWidth|BottomWidth|Style|Color|TopWidth|LeftWidth))|ufferDepth|elow|ackground(?:Color|Image)))\b/
+            }, {
+                token : "identifier",
+                regex : identifierRe
+            }, {
+                regex: "",
+                token: "empty",
+                next: "no_regex"
+            }
+        ],
+        "start": [
+            DocCommentHighlightRules.getStartRule("doc-start"),
+            comments("start"),
+            {
+                token: "string.regexp",
+                regex: "\\/",
+                next: "regex"
+            }, {
+                token : "text",
+                regex : "\\s+|^$",
+                next : "start"
+            }, {
+                token: "empty",
+                regex: "",
+                next: "no_regex"
+            }
+        ],
+        "regex": [
+            {
+                token: "regexp.keyword.operator",
+                regex: "\\\\(?:u[\\da-fA-F]{4}|x[\\da-fA-F]{2}|.)"
+            }, {
+                token: "string.regexp",
+                regex: "/[sxngimy]*",
+                next: "no_regex"
+            }, {
+                token : "invalid",
+                regex: /\{\d+\b,?\d*\}[+*]|[+*$^?][+*]|[$^][?]|\?{3,}/
+            }, {
+                token : "constant.language.escape",
+                regex: /\(\?[:=!]|\)|\{\d+\b,?\d*\}|[+*]\?|[()$^+*?.]/
+            }, {
+                token : "constant.language.delimiter",
+                regex: /\|/
+            }, {
+                token: "constant.language.escape",
+                regex: /\[\^?/,
+                next: "regex_character_class"
+            }, {
+                token: "empty",
+                regex: "$",
+                next: "no_regex"
+            }, {
+                defaultToken: "string.regexp"
+            }
+        ],
+        "regex_character_class": [
+            {
+                token: "regexp.charclass.keyword.operator",
+                regex: "\\\\(?:u[\\da-fA-F]{4}|x[\\da-fA-F]{2}|.)"
+            }, {
+                token: "constant.language.escape",
+                regex: "]",
+                next: "regex"
+            }, {
+                token: "constant.language.escape",
+                regex: "-"
+            }, {
+                token: "empty",
+                regex: "$",
+                next: "no_regex"
+            }, {
+                defaultToken: "string.regexp.charachterclass"
+            }
+        ],
+        "function_arguments": [
+            {
+                token: "variable.parameter",
+                regex: identifierRe
+            }, {
+                token: "punctuation.operator",
+                regex: "[, ]+"
+            }, {
+                token: "punctuation.operator",
+                regex: "$"
+            }, {
+                token: "empty",
+                regex: "",
+                next: "no_regex"
+            }
+        ],
+        "qqstring" : [
+            {
+                token : "constant.language.escape",
+                regex : escapedRe
+            }, {
+                token : "string",
+                regex : "\\\\$",
+                consumeLineEnd  : true
+            }, {
+                token : "string",
+                regex : '"|$',
+                next  : "no_regex"
+            }, {
+                defaultToken: "string"
+            }
+        ],
+        "qstring" : [
+            {
+                token : "constant.language.escape",
+                regex : escapedRe
+            }, {
+                token : "string",
+                regex : "\\\\$",
+                consumeLineEnd  : true
+            }, {
+                token : "string",
+                regex : "'|$",
+                next  : "no_regex"
+            }, {
+                defaultToken: "string"
+            }
+        ]
+    };
+
+
+    if (!options || !options.noES6) {
+        this.$rules.no_regex.unshift({
+            regex: "[{}]", onMatch: function(val, state, stack) {
+                this.next = val == "{" ? this.nextState : "";
+                if (val == "{" && stack.length) {
+                    stack.unshift("start", state);
+                }
+                else if (val == "}" && stack.length) {
+                    stack.shift();
+                    this.next = stack.shift();
+                    if (this.next.indexOf("string") != -1 || this.next.indexOf("jsx") != -1)
+                        return "paren.quasi.end";
+                }
+                return val == "{" ? "paren.lparen" : "paren.rparen";
+            },
+            nextState: "start"
+        }, {
+            token : "string.quasi.start",
+            regex : /`/,
+            push  : [{
+                token : "constant.language.escape",
+                regex : escapedRe
+            }, {
+                token : "paren.quasi.start",
+                regex : /\${/,
+                push  : "start"
+            }, {
+                token : "string.quasi.end",
+                regex : /`/,
+                next  : "pop"
+            }, {
+                defaultToken: "string.quasi"
+            }]
+        });
+
+        if (!options || options.jsx != false)
+            JSX.call(this);
+    }
+
+    this.embedRules(DocCommentHighlightRules, "doc-",
+        [ DocCommentHighlightRules.getEndRule("no_regex") ]);
+
+    this.normalizeRules();
+};
+
+oop.inherits(JavaScriptHighlightRules, TextHighlightRules);
+
+function JSX() {
+    var tagRegex = identifierRe.replace("\\d", "\\d\\-");
+    var jsxTag = {
+        onMatch : function(val, state, stack) {
+            var offset = val.charAt(1) == "/" ? 2 : 1;
+            if (offset == 1) {
+                if (state != this.nextState)
+                    stack.unshift(this.next, this.nextState, 0);
+                else
+                    stack.unshift(this.next);
+                stack[2]++;
+            } else if (offset == 2) {
+                if (state == this.nextState) {
+                    stack[1]--;
+                    if (!stack[1] || stack[1] < 0) {
+                        stack.shift();
+                        stack.shift();
+                    }
+                }
+            }
+            return [{
+                type: "meta.tag.punctuation." + (offset == 1 ? "" : "end-") + "tag-open.xml",
+                value: val.slice(0, offset)
+            }, {
+                type: "meta.tag.tag-name.xml",
+                value: val.substr(offset)
+            }];
+        },
+        regex : "</?" + tagRegex + "",
+        next: "jsxAttributes",
+        nextState: "jsx"
+    };
+    this.$rules.start.unshift(jsxTag);
+    var jsxJsRule = {
+        regex: "{",
+        token: "paren.quasi.start",
+        push: "start"
+    };
+    this.$rules.jsx = [
+        jsxJsRule,
+        jsxTag,
+        {include : "reference"},
+        {defaultToken: "string"}
+    ];
+    this.$rules.jsxAttributes = [{
+        token : "meta.tag.punctuation.tag-close.xml",
+        regex : "/?>",
+        onMatch : function(value, currentState, stack) {
+            if (currentState == stack[0])
+                stack.shift();
+            if (value.length == 2) {
+                if (stack[0] == this.nextState)
+                    stack[1]--;
+                if (!stack[1] || stack[1] < 0) {
+                    stack.splice(0, 2);
+                }
+            }
+            this.next = stack[0] || "start";
+            return [{type: this.token, value: value}];
+        },
+        nextState: "jsx"
+    },
+    jsxJsRule,
+    comments("jsxAttributes"),
+    {
+        token : "entity.other.attribute-name.xml",
+        regex : tagRegex
+    }, {
+        token : "keyword.operator.attribute-equals.xml",
+        regex : "="
+    }, {
+        token : "text.tag-whitespace.xml",
+        regex : "\\s+"
+    }, {
+        token : "string.attribute-value.xml",
+        regex : "'",
+        stateName : "jsx_attr_q",
+        push : [
+            {token : "string.attribute-value.xml", regex: "'", next: "pop"},
+            {include : "reference"},
+            {defaultToken : "string.attribute-value.xml"}
+        ]
+    }, {
+        token : "string.attribute-value.xml",
+        regex : '"',
+        stateName : "jsx_attr_qq",
+        push : [
+            {token : "string.attribute-value.xml", regex: '"', next: "pop"},
+            {include : "reference"},
+            {defaultToken : "string.attribute-value.xml"}
+        ]
+    },
+    jsxTag
+    ];
+    this.$rules.reference = [{
+        token : "constant.language.escape.reference.xml",
+        regex : "(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\.-]+;)"
+    }];
+}
+
+function comments(next) {
+    return [
+        {
+            token : "comment", // multi line comment
+            regex : /\/\*/,
+            next: [
+                DocCommentHighlightRules.getTagRule(),
+                {token : "comment", regex : "\\*\\/", next : next || "pop"},
+                {defaultToken : "comment", caseInsensitive: true}
+            ]
+        }, {
+            token : "comment",
+            regex : "\\/\\/",
+            next: [
+                DocCommentHighlightRules.getTagRule(),
+                {token : "comment", regex : "$|^", next : next || "pop"},
+                {defaultToken : "comment", caseInsensitive: true}
+            ]
+        }
+    ];
+}
+exports.JavaScriptHighlightRules = JavaScriptHighlightRules;
+});
+
+ace.define("ace/mode/matching_brace_outdent",["require","exports","module","ace/range"], function(require, exports, module) {
+"use strict";
+
+var Range = require("../range").Range;
+
+var MatchingBraceOutdent = function() {};
+
+(function() {
+
+    this.checkOutdent = function(line, input) {
+        if (! /^\s+$/.test(line))
+            return false;
+
+        return /^\s*\}/.test(input);
+    };
+
+    this.autoOutdent = function(doc, row) {
+        var line = doc.getLine(row);
+        var match = line.match(/^(\s*\})/);
+
+        if (!match) return 0;
+
+        var column = match[1].length;
+        var openBracePos = doc.findMatchingBracket({row: row, column: column});
+
+        if (!openBracePos || openBracePos.row == row) return 0;
+
+        var indent = this.$getIndent(doc.getLine(openBracePos.row));
+        doc.replace(new Range(row, 0, row, column-1), indent);
+    };
+
+    this.$getIndent = function(line) {
+        return line.match(/^\s*/)[0];
+    };
+
+}).call(MatchingBraceOutdent.prototype);
+
+exports.MatchingBraceOutdent = MatchingBraceOutdent;
+});
+
+ace.define("ace/mode/folding/cstyle",["require","exports","module","ace/lib/oop","ace/range","ace/mode/folding/fold_mode"], function(require, exports, module) {
+"use strict";
+
+var oop = require("../../lib/oop");
+var Range = require("../../range").Range;
+var BaseFoldMode = require("./fold_mode").FoldMode;
+
+var FoldMode = exports.FoldMode = function(commentRegex) {
+    if (commentRegex) {
+        this.foldingStartMarker = new RegExp(
+            this.foldingStartMarker.source.replace(/\|[^|]*?$/, "|" + commentRegex.start)
+        );
+        this.foldingStopMarker = new RegExp(
+            this.foldingStopMarker.source.replace(/\|[^|]*?$/, "|" + commentRegex.end)
+        );
+    }
+};
+oop.inherits(FoldMode, BaseFoldMode);
+
+(function() {
+    
+    this.foldingStartMarker = /([\{\[\(])[^\}\]\)]*$|^\s*(\/\*)/;
+    this.foldingStopMarker = /^[^\[\{\(]*([\}\]\)])|^[\s\*]*(\*\/)/;
+    this.singleLineBlockCommentRe= /^\s*(\/\*).*\*\/\s*$/;
+    this.tripleStarBlockCommentRe = /^\s*(\/\*\*\*).*\*\/\s*$/;
+    this.startRegionRe = /^\s*(\/\*|\/\/)#?region\b/;
+    this._getFoldWidgetBase = this.getFoldWidget;
+    this.getFoldWidget = function(session, foldStyle, row) {
+        var line = session.getLine(row);
+    
+        if (this.singleLineBlockCommentRe.test(line)) {
+            if (!this.startRegionRe.test(line) && !this.tripleStarBlockCommentRe.test(line))
+                return "";
+        }
+    
+        var fw = this._getFoldWidgetBase(session, foldStyle, row);
+    
+        if (!fw && this.startRegionRe.test(line))
+            return "start"; // lineCommentRegionStart
+    
+        return fw;
+    };
+
+    this.getFoldWidgetRange = function(session, foldStyle, row, forceMultiline) {
+        var line = session.getLine(row);
+        
+        if (this.startRegionRe.test(line))
+            return this.getCommentRegionBlock(session, line, row);
+        
+        var match = line.match(this.foldingStartMarker);
+        if (match) {
+            var i = match.index;
+
+            if (match[1])
+                return this.openingBracketBlock(session, match[1], row, i);
+                
+            var range = session.getCommentFoldRange(row, i + match[0].length, 1);
+            
+            if (range && !range.isMultiLine()) {
+                if (forceMultiline) {
+                    range = this.getSectionRange(session, row);
+                } else if (foldStyle != "all")
+                    range = null;
+            }
+            
+            return range;
+        }
+
+        if (foldStyle === "markbegin")
+            return;
+
+        var match = line.match(this.foldingStopMarker);
+        if (match) {
+            var i = match.index + match[0].length;
+
+            if (match[1])
+                return this.closingBracketBlock(session, match[1], row, i);
+
+            return session.getCommentFoldRange(row, i, -1);
+        }
+    };
+    
+    this.getSectionRange = function(session, row) {
+        var line = session.getLine(row);
+        var startIndent = line.search(/\S/);
+        var startRow = row;
+        var startColumn = line.length;
+        row = row + 1;
+        var endRow = row;
+        var maxRow = session.getLength();
+        while (++row < maxRow) {
+            line = session.getLine(row);
+            var indent = line.search(/\S/);
+            if (indent === -1)
+                continue;
+            if  (startIndent > indent)
+                break;
+            var subRange = this.getFoldWidgetRange(session, "all", row);
+            
+            if (subRange) {
+                if (subRange.start.row <= startRow) {
+                    break;
+                } else if (subRange.isMultiLine()) {
+                    row = subRange.end.row;
+                } else if (startIndent == indent) {
+                    break;
+                }
+            }
+            endRow = row;
+        }
+        
+        return new Range(startRow, startColumn, endRow, session.getLine(endRow).length);
+    };
+    this.getCommentRegionBlock = function(session, line, row) {
+        var startColumn = line.search(/\s*$/);
+        var maxRow = session.getLength();
+        var startRow = row;
+        
+        var re = /^\s*(?:\/\*|\/\/|--)#?(end)?region\b/;
+        var depth = 1;
+        while (++row < maxRow) {
+            line = session.getLine(row);
+            var m = re.exec(line);
+            if (!m) continue;
+            if (m[1]) depth--;
+            else depth++;
+
+            if (!depth) break;
+        }
+
+        var endRow = row;
+        if (endRow > startRow) {
+            return new Range(startRow, startColumn, endRow, line.length);
+        }
+    };
+
+}).call(FoldMode.prototype);
+
+});
+
+ace.define("ace/mode/javascript",["require","exports","module","ace/lib/oop","ace/mode/text","ace/mode/javascript_highlight_rules","ace/mode/matching_brace_outdent","ace/worker/worker_client","ace/mode/behaviour/cstyle","ace/mode/folding/cstyle"], function(require, exports, module) {
+"use strict";
+
+var oop = require("../lib/oop");
+var TextMode = require("./text").Mode;
+var JavaScriptHighlightRules = require("./javascript_highlight_rules").JavaScriptHighlightRules;
+var MatchingBraceOutdent = require("./matching_brace_outdent").MatchingBraceOutdent;
+var WorkerClient = require("../worker/worker_client").WorkerClient;
+var CstyleBehaviour = require("./behaviour/cstyle").CstyleBehaviour;
+var CStyleFoldMode = require("./folding/cstyle").FoldMode;
+
+var Mode = function() {
+    this.HighlightRules = JavaScriptHighlightRules;
+    
+    this.$outdent = new MatchingBraceOutdent();
+    this.$behaviour = new CstyleBehaviour();
+    this.foldingRules = new CStyleFoldMode();
+};
+oop.inherits(Mode, TextMode);
+
+(function() {
+
+    this.lineCommentStart = "//";
+    this.blockComment = {start: "/*", end: "*/"};
+    this.$quotes = {'"': '"', "'": "'", "`": "`"};
+
+    this.getNextLineIndent = function(state, line, tab) {
+        var indent = this.$getIndent(line);
+
+        var tokenizedLine = this.getTokenizer().getLineTokens(line, state);
+        var tokens = tokenizedLine.tokens;
+        var endState = tokenizedLine.state;
+
+        if (tokens.length && tokens[tokens.length-1].type == "comment") {
+            return indent;
+        }
+
+        if (state == "start" || state == "no_regex") {
+            var match = line.match(/^.*(?:\bcase\b.*:|[\{\(\[])\s*$/);
+            if (match) {
+                indent += tab;
+            }
+        } else if (state == "doc-start") {
+            if (endState == "start" || endState == "no_regex") {
+                return "";
+            }
+            var match = line.match(/^\s*(\/?)\*/);
+            if (match) {
+                if (match[1]) {
+                    indent += " ";
+                }
+                indent += "* ";
+            }
+        }
+
+        return indent;
+    };
+
+    this.checkOutdent = function(state, line, input) {
+        return this.$outdent.checkOutdent(line, input);
+    };
+
+    this.autoOutdent = function(state, doc, row) {
+        this.$outdent.autoOutdent(doc, row);
+    };
+
+    this.createWorker = function(session) {
+        var worker = new WorkerClient(["ace"], "ace/mode/javascript_worker", "JavaScriptWorker");
+        worker.attachToDocument(session.getDocument());
+
+        worker.on("annotate", function(results) {
+            session.setAnnotations(results.data);
+        });
+
+        worker.on("terminate", function() {
+            session.clearAnnotations();
+        });
+
+        return worker;
+    };
+
+    this.$id = "ace/mode/javascript";
+}).call(Mode.prototype);
+
+exports.Mode = Mode;
+});
+
+ace.define("ace/mode/xml_highlight_rules",["require","exports","module","ace/lib/oop","ace/mode/text_highlight_rules"], function(require, exports, module) {
+"use strict";
+
+var oop = require("../lib/oop");
+var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules;
+
+var XmlHighlightRules = function(normalize) {
+    var tagRegex = "[_:a-zA-Z\xc0-\uffff][-_:.a-zA-Z0-9\xc0-\uffff]*";
+
+    this.$rules = {
+        start : [
+            {token : "string.cdata.xml", regex : "<\\!\\[CDATA\\[", next : "cdata"},
+            {
+                token : ["punctuation.instruction.xml", "keyword.instruction.xml"],
+                regex : "(<\\?)(" + tagRegex + ")", next : "processing_instruction"
+            },
+            {token : "comment.start.xml", regex : "<\\!--", next : "comment"},
+            {
+                token : ["xml-pe.doctype.xml", "xml-pe.doctype.xml"],
+                regex : "(<\\!)(DOCTYPE)(?=[\\s])", next : "doctype", caseInsensitive: true
+            },
+            {include : "tag"},
+            {token : "text.end-tag-open.xml", regex: "</"},
+            {token : "text.tag-open.xml", regex: "<"},
+            {include : "reference"},
+            {defaultToken : "text.xml"}
+        ],
+
+        processing_instruction : [{
+            token : "entity.other.attribute-name.decl-attribute-name.xml",
+            regex : tagRegex
+        }, {
+            token : "keyword.operator.decl-attribute-equals.xml",
+            regex : "="
+        }, {
+            include: "whitespace"
+        }, {
+            include: "string"
+        }, {
+            token : "punctuation.xml-decl.xml",
+            regex : "\\?>",
+            next : "start"
+        }],
+
+        doctype : [
+            {include : "whitespace"},
+            {include : "string"},
+            {token : "xml-pe.doctype.xml", regex : ">", next : "start"},
+            {token : "xml-pe.xml", regex : "[-_a-zA-Z0-9:]+"},
+            {token : "punctuation.int-subset", regex : "\\[", push : "int_subset"}
+        ],
+
+        int_subset : [{
+            token : "text.xml",
+            regex : "\\s+"
+        }, {
+            token: "punctuation.int-subset.xml",
+            regex: "]",
+            next: "pop"
+        }, {
+            token : ["punctuation.markup-decl.xml", "keyword.markup-decl.xml"],
+            regex : "(<\\!)(" + tagRegex + ")",
+            push : [{
+                token : "text",
+                regex : "\\s+"
+            },
+            {
+                token : "punctuation.markup-decl.xml",
+                regex : ">",
+                next : "pop"
+            },
+            {include : "string"}]
+        }],
+
+        cdata : [
+            {token : "string.cdata.xml", regex : "\\]\\]>", next : "start"},
+            {token : "text.xml", regex : "\\s+"},
+            {token : "text.xml", regex : "(?:[^\\]]|\\](?!\\]>))+"}
+        ],
+
+        comment : [
+            {token : "comment.end.xml", regex : "-->", next : "start"},
+            {defaultToken : "comment.xml"}
+        ],
+
+        reference : [{
+            token : "constant.language.escape.reference.xml",
+            regex : "(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\.-]+;)"
+        }],
+
+        attr_reference : [{
+            token : "constant.language.escape.reference.attribute-value.xml",
+            regex : "(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\.-]+;)"
+        }],
+
+        tag : [{
+            token : ["meta.tag.punctuation.tag-open.xml", "meta.tag.punctuation.end-tag-open.xml", "meta.tag.tag-name.xml"],
+            regex : "(?:(<)|(</))((?:" + tagRegex + ":)?" + tagRegex + ")",
+            next: [
+                {include : "attributes"},
+                {token : "meta.tag.punctuation.tag-close.xml", regex : "/?>", next : "start"}
+            ]
+        }],
+
+        tag_whitespace : [
+            {token : "text.tag-whitespace.xml", regex : "\\s+"}
+        ],
+        whitespace : [
+            {token : "text.whitespace.xml", regex : "\\s+"}
+        ],
+        string: [{
+            token : "string.xml",
+            regex : "'",
+            push : [
+                {token : "string.xml", regex: "'", next: "pop"},
+                {defaultToken : "string.xml"}
+            ]
+        }, {
+            token : "string.xml",
+            regex : '"',
+            push : [
+                {token : "string.xml", regex: '"', next: "pop"},
+                {defaultToken : "string.xml"}
+            ]
+        }],
+
+        attributes: [{
+            token : "entity.other.attribute-name.xml",
+            regex : tagRegex
+        }, {
+            token : "keyword.operator.attribute-equals.xml",
+            regex : "="
+        }, {
+            include: "tag_whitespace"
+        }, {
+            include: "attribute_value"
+        }],
+
+        attribute_value: [{
+            token : "string.attribute-value.xml",
+            regex : "'",
+            push : [
+                {token : "string.attribute-value.xml", regex: "'", next: "pop"},
+                {include : "attr_reference"},
+                {defaultToken : "string.attribute-value.xml"}
+            ]
+        }, {
+            token : "string.attribute-value.xml",
+            regex : '"',
+            push : [
+                {token : "string.attribute-value.xml", regex: '"', next: "pop"},
+                {include : "attr_reference"},
+                {defaultToken : "string.attribute-value.xml"}
+            ]
+        }]
+    };
+
+    if (this.constructor === XmlHighlightRules)
+        this.normalizeRules();
+};
+
+
+(function() {
+
+    this.embedTagRules = function(HighlightRules, prefix, tag){
+        this.$rules.tag.unshift({
+            token : ["meta.tag.punctuation.tag-open.xml", "meta.tag." + tag + ".tag-name.xml"],
+            regex : "(<)(" + tag + "(?=\\s|>|$))",
+            next: [
+                {include : "attributes"},
+                {token : "meta.tag.punctuation.tag-close.xml", regex : "/?>", next : prefix + "start"}
+            ]
+        });
+
+        this.$rules[tag + "-end"] = [
+            {include : "attributes"},
+            {token : "meta.tag.punctuation.tag-close.xml", regex : "/?>",  next: "start",
+                onMatch : function(value, currentState, stack) {
+                    stack.splice(0);
+                    return this.token;
+            }}
+        ];
+
+        this.embedRules(HighlightRules, prefix, [{
+            token: ["meta.tag.punctuation.end-tag-open.xml", "meta.tag." + tag + ".tag-name.xml"],
+            regex : "(</)(" + tag + "(?=\\s|>|$))",
+            next: tag + "-end"
+        }, {
+            token: "string.cdata.xml",
+            regex : "<\\!\\[CDATA\\["
+        }, {
+            token: "string.cdata.xml",
+            regex : "\\]\\]>"
+        }]);
+    };
+
+}).call(TextHighlightRules.prototype);
+
+oop.inherits(XmlHighlightRules, TextHighlightRules);
+
+exports.XmlHighlightRules = XmlHighlightRules;
+});
+
+ace.define("ace/mode/behaviour/xml",["require","exports","module","ace/lib/oop","ace/mode/behaviour","ace/token_iterator","ace/lib/lang"], function(require, exports, module) {
+"use strict";
+
+var oop = require("../../lib/oop");
+var Behaviour = require("../behaviour").Behaviour;
+var TokenIterator = require("../../token_iterator").TokenIterator;
+var lang = require("../../lib/lang");
+
+function is(token, type) {
+    return token && token.type.lastIndexOf(type + ".xml") > -1;
+}
+
+var XmlBehaviour = function () {
+
+    this.add("string_dquotes", "insertion", function (state, action, editor, session, text) {
+        if (text == '"' || text == "'") {
+            var quote = text;
+            var selected = session.doc.getTextRange(editor.getSelectionRange());
+            if (selected !== "" && selected !== "'" && selected != '"' && editor.getWrapBehavioursEnabled()) {
+                return {
+                    text: quote + selected + quote,
+                    selection: false
+                };
+            }
+
+            var cursor = editor.getCursorPosition();
+            var line = session.doc.getLine(cursor.row);
+            var rightChar = line.substring(cursor.column, cursor.column + 1);
+            var iterator = new TokenIterator(session, cursor.row, cursor.column);
+            var token = iterator.getCurrentToken();
+
+            if (rightChar == quote && (is(token, "attribute-value") || is(token, "string"))) {
+                return {
+                    text: "",
+                    selection: [1, 1]
+                };
+            }
+
+            if (!token)
+                token = iterator.stepBackward();
+
+            if (!token)
+                return;
+
+            while (is(token, "tag-whitespace") || is(token, "whitespace")) {
+                token = iterator.stepBackward();
+            }
+            var rightSpace = !rightChar || rightChar.match(/\s/);
+            if (is(token, "attribute-equals") && (rightSpace || rightChar == '>') || (is(token, "decl-attribute-equals") && (rightSpace || rightChar == '?'))) {
+                return {
+                    text: quote + quote,
+                    selection: [1, 1]
+                };
+            }
+        }
+    });
+
+    this.add("string_dquotes", "deletion", function(state, action, editor, session, range) {
+        var selected = session.doc.getTextRange(range);
+        if (!range.isMultiLine() && (selected == '"' || selected == "'")) {
+            var line = session.doc.getLine(range.start.row);
+            var rightChar = line.substring(range.start.column + 1, range.start.column + 2);
+            if (rightChar == selected) {
+                range.end.column++;
+                return range;
+            }
+        }
+    });
+
+    this.add("autoclosing", "insertion", function (state, action, editor, session, text) {
+        if (text == '>') {
+            var position = editor.getSelectionRange().start;
+            var iterator = new TokenIterator(session, position.row, position.column);
+            var token = iterator.getCurrentToken() || iterator.stepBackward();
+            if (!token || !(is(token, "tag-name") || is(token, "tag-whitespace") || is(token, "attribute-name") || is(token, "attribute-equals") || is(token, "attribute-value")))
+                return;
+            if (is(token, "reference.attribute-value"))
+                return;
+            if (is(token, "attribute-value")) {
+                var tokenEndColumn = iterator.getCurrentTokenColumn() + token.value.length;
+                if (position.column < tokenEndColumn)
+                    return;
+                if (position.column == tokenEndColumn) {
+                    var nextToken = iterator.stepForward();
+                    if (nextToken && is(nextToken, "attribute-value"))
+                        return;
+                    iterator.stepBackward();
+                }
+            }
+            
+            if (/^\s*>/.test(session.getLine(position.row).slice(position.column)))
+                return;
+            while (!is(token, "tag-name")) {
+                token = iterator.stepBackward();
+                if (token.value == "<") {
+                    token = iterator.stepForward();
+                    break;
+                }
+            }
+
+            var tokenRow = iterator.getCurrentTokenRow();
+            var tokenColumn = iterator.getCurrentTokenColumn();
+            if (is(iterator.stepBackward(), "end-tag-open"))
+                return;
+
+            var element = token.value;
+            if (tokenRow == position.row)
+                element = element.substring(0, position.column - tokenColumn);
+
+            if (this.voidElements.hasOwnProperty(element.toLowerCase()))
+                 return;
+
+            return {
+               text: ">" + "</" + element + ">",
+               selection: [1, 1]
+            };
+        }
+    });
+
+    this.add("autoindent", "insertion", function (state, action, editor, session, text) {
+        if (text == "\n") {
+            var cursor = editor.getCursorPosition();
+            var line = session.getLine(cursor.row);
+            var iterator = new TokenIterator(session, cursor.row, cursor.column);
+            var token = iterator.getCurrentToken();
+
+            if (token && token.type.indexOf("tag-close") !== -1) {
+                if (token.value == "/>")
+                    return;
+                while (token && token.type.indexOf("tag-name") === -1) {
+                    token = iterator.stepBackward();
+                }
+
+                if (!token) {
+                    return;
+                }
+
+                var tag = token.value;
+                var row = iterator.getCurrentTokenRow();
+                token = iterator.stepBackward();
+                if (!token || token.type.indexOf("end-tag") !== -1) {
+                    return;
+                }
+
+                if (this.voidElements && !this.voidElements[tag]) {
+                    var nextToken = session.getTokenAt(cursor.row, cursor.column+1);
+                    var line = session.getLine(row);
+                    var nextIndent = this.$getIndent(line);
+                    var indent = nextIndent + session.getTabString();
+
+                    if (nextToken && nextToken.value === "</") {
+                        return {
+                            text: "\n" + indent + "\n" + nextIndent,
+                            selection: [1, indent.length, 1, indent.length]
+                        };
+                    } else {
+                        return {
+                            text: "\n" + indent
+                        };
+                    }
+                }
+            }
+        }
+    });
+
+};
+
+oop.inherits(XmlBehaviour, Behaviour);
+
+exports.XmlBehaviour = XmlBehaviour;
+});
+
+ace.define("ace/mode/folding/xml",["require","exports","module","ace/lib/oop","ace/lib/lang","ace/range","ace/mode/folding/fold_mode","ace/token_iterator"], function(require, exports, module) {
+"use strict";
+
+var oop = require("../../lib/oop");
+var lang = require("../../lib/lang");
+var Range = require("../../range").Range;
+var BaseFoldMode = require("./fold_mode").FoldMode;
+var TokenIterator = require("../../token_iterator").TokenIterator;
+
+var FoldMode = exports.FoldMode = function(voidElements, optionalEndTags) {
+    BaseFoldMode.call(this);
+    this.voidElements = voidElements || {};
+    this.optionalEndTags = oop.mixin({}, this.voidElements);
+    if (optionalEndTags)
+        oop.mixin(this.optionalEndTags, optionalEndTags);
+    
+};
+oop.inherits(FoldMode, BaseFoldMode);
+
+var Tag = function() {
+    this.tagName = "";
+    this.closing = false;
+    this.selfClosing = false;
+    this.start = {row: 0, column: 0};
+    this.end = {row: 0, column: 0};
+};
+
+function is(token, type) {
+    return token.type.lastIndexOf(type + ".xml") > -1;
+}
+
+(function() {
+
+    this.getFoldWidget = function(session, foldStyle, row) {
+        var tag = this._getFirstTagInLine(session, row);
+
+        if (!tag)
+            return this.getCommentFoldWidget(session, row);
+
+        if (tag.closing || (!tag.tagName && tag.selfClosing))
+            return foldStyle == "markbeginend" ? "end" : "";
+
+        if (!tag.tagName || tag.selfClosing || this.voidElements.hasOwnProperty(tag.tagName.toLowerCase()))
+            return "";
+
+        if (this._findEndTagInLine(session, row, tag.tagName, tag.end.column))
+            return "";
+
+        return "start";
+    };
+    
+    this.getCommentFoldWidget = function(session, row) {
+        if (/comment/.test(session.getState(row)) && /<!-/.test(session.getLine(row)))
+            return "start";
+        return "";
+    };
+    this._getFirstTagInLine = function(session, row) {
+        var tokens = session.getTokens(row);
+        var tag = new Tag();
+
+        for (var i = 0; i < tokens.length; i++) {
+            var token = tokens[i];
+            if (is(token, "tag-open")) {
+                tag.end.column = tag.start.column + token.value.length;
+                tag.closing = is(token, "end-tag-open");
+                token = tokens[++i];
+                if (!token)
+                    return null;
+                tag.tagName = token.value;
+                tag.end.column += token.value.length;
+                for (i++; i < tokens.length; i++) {
+                    token = tokens[i];
+                    tag.end.column += token.value.length;
+                    if (is(token, "tag-close")) {
+                        tag.selfClosing = token.value == '/>';
+                        break;
+                    }
+                }
+                return tag;
+            } else if (is(token, "tag-close")) {
+                tag.selfClosing = token.value == '/>';
+                return tag;
+            }
+            tag.start.column += token.value.length;
+        }
+
+        return null;
+    };
+
+    this._findEndTagInLine = function(session, row, tagName, startColumn) {
+        var tokens = session.getTokens(row);
+        var column = 0;
+        for (var i = 0; i < tokens.length; i++) {
+            var token = tokens[i];
+            column += token.value.length;
+            if (column < startColumn)
+                continue;
+            if (is(token, "end-tag-open")) {
+                token = tokens[i + 1];
+                if (token && token.value == tagName)
+                    return true;
+            }
+        }
+        return false;
+    };
+    this._readTagForward = function(iterator) {
+        var token = iterator.getCurrentToken();
+        if (!token)
+            return null;
+
+        var tag = new Tag();
+        do {
+            if (is(token, "tag-open")) {
+                tag.closing = is(token, "end-tag-open");
+                tag.start.row = iterator.getCurrentTokenRow();
+                tag.start.column = iterator.getCurrentTokenColumn();
+            } else if (is(token, "tag-name")) {
+                tag.tagName = token.value;
+            } else if (is(token, "tag-close")) {
+                tag.selfClosing = token.value == "/>";
+                tag.end.row = iterator.getCurrentTokenRow();
+                tag.end.column = iterator.getCurrentTokenColumn() + token.value.length;
+                iterator.stepForward();
+                return tag;
+            }
+        } while(token = iterator.stepForward());
+
+        return null;
+    };
+    
+    this._readTagBackward = function(iterator) {
+        var token = iterator.getCurrentToken();
+        if (!token)
+            return null;
+
+        var tag = new Tag();
+        do {
+            if (is(token, "tag-open")) {
+                tag.closing = is(token, "end-tag-open");
+                tag.start.row = iterator.getCurrentTokenRow();
+                tag.start.column = iterator.getCurrentTokenColumn();
+                iterator.stepBackward();
+                return tag;
+            } else if (is(token, "tag-name")) {
+                tag.tagName = token.value;
+            } else if (is(token, "tag-close")) {
+                tag.selfClosing = token.value == "/>";
+                tag.end.row = iterator.getCurrentTokenRow();
+                tag.end.column = iterator.getCurrentTokenColumn() + token.value.length;
+            }
+        } while(token = iterator.stepBackward());
+
+        return null;
+    };
+    
+    this._pop = function(stack, tag) {
+        while (stack.length) {
+            
+            var top = stack[stack.length-1];
+            if (!tag || top.tagName == tag.tagName) {
+                return stack.pop();
+            }
+            else if (this.optionalEndTags.hasOwnProperty(top.tagName)) {
+                stack.pop();
+                continue;
+            } else {
+                return null;
+            }
+        }
+    };
+    
+    this.getFoldWidgetRange = function(session, foldStyle, row) {
+        var firstTag = this._getFirstTagInLine(session, row);
+        
+        if (!firstTag) {
+            return this.getCommentFoldWidget(session, row)
+                && session.getCommentFoldRange(row, session.getLine(row).length);
+        }
+        
+        var isBackward = firstTag.closing || firstTag.selfClosing;
+        var stack = [];
+        var tag;
+        
+        if (!isBackward) {
+            var iterator = new TokenIterator(session, row, firstTag.start.column);
+            var start = {
+                row: row,
+                column: firstTag.start.column + firstTag.tagName.length + 2
+            };
+            if (firstTag.start.row == firstTag.end.row)
+                start.column = firstTag.end.column;
+            while (tag = this._readTagForward(iterator)) {
+                if (tag.selfClosing) {
+                    if (!stack.length) {
+                        tag.start.column += tag.tagName.length + 2;
+                        tag.end.column -= 2;
+                        return Range.fromPoints(tag.start, tag.end);
+                    } else
+                        continue;
+                }
+                
+                if (tag.closing) {
+                    this._pop(stack, tag);
+                    if (stack.length == 0)
+                        return Range.fromPoints(start, tag.start);
+                }
+                else {
+                    stack.push(tag);
+                }
+            }
+        }
+        else {
+            var iterator = new TokenIterator(session, row, firstTag.end.column);
+            var end = {
+                row: row,
+                column: firstTag.start.column
+            };
+            
+            while (tag = this._readTagBackward(iterator)) {
+                if (tag.selfClosing) {
+                    if (!stack.length) {
+                        tag.start.column += tag.tagName.length + 2;
+                        tag.end.column -= 2;
+                        return Range.fromPoints(tag.start, tag.end);
+                    } else
+                        continue;
+                }
+                
+                if (!tag.closing) {
+                    this._pop(stack, tag);
+                    if (stack.length == 0) {
+                        tag.start.column += tag.tagName.length + 2;
+                        if (tag.start.row == tag.end.row && tag.start.column < tag.end.column)
+                            tag.start.column = tag.end.column;
+                        return Range.fromPoints(tag.start, end);
+                    }
+                }
+                else {
+                    stack.push(tag);
+                }
+            }
+        }
+        
+    };
+
+}).call(FoldMode.prototype);
+
+});
+
+ace.define("ace/mode/xml",["require","exports","module","ace/lib/oop","ace/lib/lang","ace/mode/text","ace/mode/xml_highlight_rules","ace/mode/behaviour/xml","ace/mode/folding/xml","ace/worker/worker_client"], function(require, exports, module) {
+"use strict";
+
+var oop = require("../lib/oop");
+var lang = require("../lib/lang");
+var TextMode = require("./text").Mode;
+var XmlHighlightRules = require("./xml_highlight_rules").XmlHighlightRules;
+var XmlBehaviour = require("./behaviour/xml").XmlBehaviour;
+var XmlFoldMode = require("./folding/xml").FoldMode;
+var WorkerClient = require("../worker/worker_client").WorkerClient;
+
+var Mode = function() {
+   this.HighlightRules = XmlHighlightRules;
+   this.$behaviour = new XmlBehaviour();
+   this.foldingRules = new XmlFoldMode();
+};
+
+oop.inherits(Mode, TextMode);
+
+(function() {
+
+    this.voidElements = lang.arrayToMap([]);
+
+    this.blockComment = {start: "<!--", end: "-->"};
+
+    this.createWorker = function(session) {
+        var worker = new WorkerClient(["ace"], "ace/mode/xml_worker", "Worker");
+        worker.attachToDocument(session.getDocument());
+
+        worker.on("error", function(e) {
+            session.setAnnotations(e.data);
+        });
+
+        worker.on("terminate", function() {
+            session.clearAnnotations();
+        });
+
+        return worker;
+    };
+    
+    this.$id = "ace/mode/xml";
+}).call(Mode.prototype);
+
+exports.Mode = Mode;
+});
+
+ace.define("ace/mode/css_highlight_rules",["require","exports","module","ace/lib/oop","ace/lib/lang","ace/mode/text_highlight_rules"], function(require, exports, module) {
+"use strict";
+
+var oop = require("../lib/oop");
+var lang = require("../lib/lang");
+var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules;
+var supportType = exports.supportType = "align-content|align-items|align-self|all|animation|animation-delay|animation-direction|animation-duration|animation-fill-mode|animation-iteration-count|animation-name|animation-play-state|animation-timing-function|backface-visibility|background|background-attachment|background-blend-mode|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-shadow|box-sizing|caption-side|clear|clip|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-size|font-size-adjust|font-stretch|font-style|font-variant|font-weight|hanging-punctuation|height|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|max-height|max-width|max-zoom|min-height|min-width|min-zoom|nav-down|nav-index|nav-left|nav-right|nav-up|opacity|order|outline|outline-color|outline-offset|outline-style|outline-width|overflow|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|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-justify|text-overflow|text-shadow|text-transform|top|transform|transform-origin|transform-style|transition|transition-delay|transition-duration|transition-property|transition-timing-function|unicode-bidi|user-select|user-zoom|vertical-align|visibility|white-space|width|word-break|word-spacing|word-wrap|z-index";
+var supportFunction = exports.supportFunction = "rgb|rgba|url|attr|counter|counters";
+var supportConstant = exports.supportConstant = "absolute|after-edge|after|all-scroll|all|alphabetic|always|antialiased|armenian|auto|avoid-column|avoid-page|avoid|balance|baseline|before-edge|before|below|bidi-override|block-line-height|block|bold|bolder|border-box|both|bottom|box|break-all|break-word|capitalize|caps-height|caption|center|central|char|circle|cjk-ideographic|clone|close-quote|col-resize|collapse|column|consider-shifts|contain|content-box|cover|crosshair|cubic-bezier|dashed|decimal-leading-zero|decimal|default|disabled|disc|disregard-shifts|distribute-all-lines|distribute-letter|distribute-space|distribute|dotted|double|e-resize|ease-in|ease-in-out|ease-out|ease|ellipsis|end|exclude-ruby|fill|fixed|georgian|glyphs|grid-height|groove|hand|hanging|hebrew|help|hidden|hiragana-iroha|hiragana|horizontal|icon|ideograph-alpha|ideograph-numeric|ideograph-parenthesis|ideograph-space|ideographic|inactive|include-ruby|inherit|initial|inline-block|inline-box|inline-line-height|inline-table|inline|inset|inside|inter-ideograph|inter-word|invert|italic|justify|katakana-iroha|katakana|keep-all|last|left|lighter|line-edge|line-through|line|linear|list-item|local|loose|lower-alpha|lower-greek|lower-latin|lower-roman|lowercase|lr-tb|ltr|mathematical|max-height|max-size|medium|menu|message-box|middle|move|n-resize|ne-resize|newspaper|no-change|no-close-quote|no-drop|no-open-quote|no-repeat|none|normal|not-allowed|nowrap|nw-resize|oblique|open-quote|outset|outside|overline|padding-box|page|pointer|pre-line|pre-wrap|pre|preserve-3d|progress|relative|repeat-x|repeat-y|repeat|replaced|reset-size|ridge|right|round|row-resize|rtl|s-resize|scroll|se-resize|separate|slice|small-caps|small-caption|solid|space|square|start|static|status-bar|step-end|step-start|steps|stretch|strict|sub|super|sw-resize|table-caption|table-cell|table-column-group|table-column|table-footer-group|table-header-group|table-row-group|table-row|table|tb-rl|text-after-edge|text-before-edge|text-bottom|text-size|text-top|text|thick|thin|transparent|underline|upper-alpha|upper-latin|upper-roman|uppercase|use-script|vertical-ideographic|vertical-text|visible|w-resize|wait|whitespace|z-index|zero|zoom";
+var supportConstantColor = exports.supportConstantColor = "aliceblue|antiquewhite|aqua|aquamarine|azure|beige|bisque|black|blanchedalmond|blue|blueviolet|brown|burlywood|cadetblue|chartreuse|chocolate|coral|cornflowerblue|cornsilk|crimson|cyan|darkblue|darkcyan|darkgoldenrod|darkgray|darkgreen|darkgrey|darkkhaki|darkmagenta|darkolivegreen|darkorange|darkorchid|darkred|darksalmon|darkseagreen|darkslateblue|darkslategray|darkslategrey|darkturquoise|darkviolet|deeppink|deepskyblue|dimgray|dimgrey|dodgerblue|firebrick|floralwhite|forestgreen|fuchsia|gainsboro|ghostwhite|gold|goldenrod|gray|green|greenyellow|grey|honeydew|hotpink|indianred|indigo|ivory|khaki|lavender|lavenderblush|lawngreen|lemonchiffon|lightblue|lightcoral|lightcyan|lightgoldenrodyellow|lightgray|lightgreen|lightgrey|lightpink|lightsalmon|lightseagreen|lightskyblue|lightslategray|lightslategrey|lightsteelblue|lightyellow|lime|limegreen|linen|magenta|maroon|mediumaquamarine|mediumblue|mediumorchid|mediumpurple|mediumseagreen|mediumslateblue|mediumspringgreen|mediumturquoise|mediumvioletred|midnightblue|mintcream|mistyrose|moccasin|navajowhite|navy|oldlace|olive|olivedrab|orange|orangered|orchid|palegoldenrod|palegreen|paleturquoise|palevioletred|papayawhip|peachpuff|peru|pink|plum|powderblue|purple|rebeccapurple|red|rosybrown|royalblue|saddlebrown|salmon|sandybrown|seagreen|seashell|sienna|silver|skyblue|slateblue|slategray|slategrey|snow|springgreen|steelblue|tan|teal|thistle|tomato|turquoise|violet|wheat|white|whitesmoke|yellow|yellowgreen";
+var supportConstantFonts = exports.supportConstantFonts = "arial|century|comic|courier|cursive|fantasy|garamond|georgia|helvetica|impact|lucida|symbol|system|tahoma|times|trebuchet|utopia|verdana|webdings|sans-serif|serif|monospace";
+
+var numRe = exports.numRe = "\\-?(?:(?:[0-9]+(?:\\.[0-9]+)?)|(?:\\.[0-9]+))";
+var pseudoElements = exports.pseudoElements = "(\\:+)\\b(after|before|first-letter|first-line|moz-selection|selection)\\b";
+var pseudoClasses  = exports.pseudoClasses =  "(:)\\b(active|checked|disabled|empty|enabled|first-child|first-of-type|focus|hover|indeterminate|invalid|last-child|last-of-type|link|not|nth-child|nth-last-child|nth-last-of-type|nth-of-type|only-child|only-of-type|required|root|target|valid|visited)\\b";
+
+var CssHighlightRules = function() {
+
+    var keywordMapper = this.createKeywordMapper({
+        "support.function": supportFunction,
+        "support.constant": supportConstant,
+        "support.type": supportType,
+        "support.constant.color": supportConstantColor,
+        "support.constant.fonts": supportConstantFonts
+    }, "text", true);
+
+    this.$rules = {
+        "start" : [{
+            include : ["strings", "url", "comments"]
+        }, {
+            token: "paren.lparen",
+            regex: "\\{",
+            next:  "ruleset"
+        }, {
+            token: "paren.rparen",
+            regex: "\\}"
+        }, {
+            token: "string",
+            regex: "@(?!viewport)",
+            next:  "media"
+        }, {
+            token: "keyword",
+            regex: "#[a-z0-9-_]+"
+        }, {
+            token: "keyword",
+            regex: "%"
+        }, {
+            token: "variable",
+            regex: "\\.[a-z0-9-_]+"
+        }, {
+            token: "string",
+            regex: ":[a-z0-9-_]+"
+        }, {
+            token : "constant.numeric",
+            regex : numRe
+        }, {
+            token: "constant",
+            regex: "[a-z0-9-_]+"
+        }, {
+            caseInsensitive: true
+        }],
+
+        "media": [{
+            include : ["strings", "url", "comments"]
+        }, {
+            token: "paren.lparen",
+            regex: "\\{",
+            next:  "start"
+        }, {
+            token: "paren.rparen",
+            regex: "\\}",
+            next:  "start"
+        }, {
+            token: "string",
+            regex: ";",
+            next:  "start"
+        }, {
+            token: "keyword",
+            regex: "(?:media|supports|document|charset|import|namespace|media|supports|document"
+                + "|page|font|keyframes|viewport|counter-style|font-feature-values"
+                + "|swash|ornaments|annotation|stylistic|styleset|character-variant)"
+        }],
+
+        "comments" : [{
+            token: "comment", // multi line comment
+            regex: "\\/\\*",
+            push: [{
+                token : "comment",
+                regex : "\\*\\/",
+                next : "pop"
+            }, {
+                defaultToken : "comment"
+            }]
+        }],
+
+        "ruleset" : [{
+            regex : "-(webkit|ms|moz|o)-",
+            token : "text"
+        }, {
+            token : "punctuation.operator",
+            regex : "[:;]"
+        }, {
+            token : "paren.rparen",
+            regex : "\\}",
+            next : "start"
+        }, {
+            include : ["strings", "url", "comments"]
+        }, {
+            token : ["constant.numeric", "keyword"],
+            regex : "(" + numRe + ")(ch|cm|deg|em|ex|fr|gd|grad|Hz|in|kHz|mm|ms|pc|pt|px|rad|rem|s|turn|vh|vmax|vmin|vm|vw|%)"
+        }, {
+            token : "constant.numeric",
+            regex : numRe
+        }, {
+            token : "constant.numeric",  // hex6 color
+            regex : "#[a-f0-9]{6}"
+        }, {
+            token : "constant.numeric", // hex3 color
+            regex : "#[a-f0-9]{3}"
+        }, {
+            token : ["punctuation", "entity.other.attribute-name.pseudo-element.css"],
+            regex : pseudoElements
+        }, {
+            token : ["punctuation", "entity.other.attribute-name.pseudo-class.css"],
+            regex : pseudoClasses
+        }, {
+            include: "url"
+        }, {
+            token : keywordMapper,
+            regex : "\\-?[a-zA-Z_][a-zA-Z0-9_\\-]*"
+        }, {
+            caseInsensitive: true
+        }],
+
+        url: [{
+            token : "support.function",
+            regex : "(?:url(:?-prefix)?|domain|regexp)\\(",
+            push: [{
+                token : "support.function",
+                regex : "\\)",
+                next : "pop"
+            }, {
+                defaultToken: "string"
+            }]
+        }],
+
+        strings: [{
+            token : "string.start",
+            regex : "'",
+            push : [{
+                token : "string.end",
+                regex : "'|$",
+                next: "pop"
+            }, {
+                include : "escapes"
+            }, {
+                token : "constant.language.escape",
+                regex : /\\$/,
+                consumeLineEnd: true
+            }, {
+                defaultToken: "string"
+            }]
+        }, {
+            token : "string.start",
+            regex : '"',
+            push : [{
+                token : "string.end",
+                regex : '"|$',
+                next: "pop"
+            }, {
+                include : "escapes"
+            }, {
+                token : "constant.language.escape",
+                regex : /\\$/,
+                consumeLineEnd: true
+            }, {
+                defaultToken: "string"
+            }]
+        }],
+        escapes: [{
+            token : "constant.language.escape",
+            regex : /\\([a-fA-F\d]{1,6}|[^a-fA-F\d])/
+        }]
+
+    };
+
+    this.normalizeRules();
+};
+
+oop.inherits(CssHighlightRules, TextHighlightRules);
+
+exports.CssHighlightRules = CssHighlightRules;
+
+});
+
+ace.define("ace/mode/css_completions",["require","exports","module"], function(require, exports, module) {
+"use strict";
+
+var propertyMap = {
+    "background": {"#$0": 1},
+    "background-color": {"#$0": 1, "transparent": 1, "fixed": 1},
+    "background-image": {"url('/$0')": 1},
+    "background-repeat": {"repeat": 1, "repeat-x": 1, "repeat-y": 1, "no-repeat": 1, "inherit": 1},
+    "background-position": {"bottom":2, "center":2, "left":2, "right":2, "top":2, "inherit":2},
+    "background-attachment": {"scroll": 1, "fixed": 1},
+    "background-size": {"cover": 1, "contain": 1},
+    "background-clip": {"border-box": 1, "padding-box": 1, "content-box": 1},
+    "background-origin": {"border-box": 1, "padding-box": 1, "content-box": 1},
+    "border": {"solid $0": 1, "dashed $0": 1, "dotted $0": 1, "#$0": 1},
+    "border-color": {"#$0": 1},
+    "border-style": {"solid":2, "dashed":2, "dotted":2, "double":2, "groove":2, "hidden":2, "inherit":2, "inset":2, "none":2, "outset":2, "ridged":2},
+    "border-collapse": {"collapse": 1, "separate": 1},
+    "bottom": {"px": 1, "em": 1, "%": 1},
+    "clear": {"left": 1, "right": 1, "both": 1, "none": 1},
+    "color": {"#$0": 1, "rgb(#$00,0,0)": 1},
+    "cursor": {"default": 1, "pointer": 1, "move": 1, "text": 1, "wait": 1, "help": 1, "progress": 1, "n-resize": 1, "ne-resize": 1, "e-resize": 1, "se-resize": 1, "s-resize": 1, "sw-resize": 1, "w-resize": 1, "nw-resize": 1},
+    "display": {"none": 1, "block": 1, "inline": 1, "inline-block": 1, "table-cell": 1},
+    "empty-cells": {"show": 1, "hide": 1},
+    "float": {"left": 1, "right": 1, "none": 1},
+    "font-family": {"Arial":2,"Comic Sans MS":2,"Consolas":2,"Courier New":2,"Courier":2,"Georgia":2,"Monospace":2,"Sans-Serif":2, "Segoe UI":2,"Tahoma":2,"Times New Roman":2,"Trebuchet MS":2,"Verdana": 1},
+    "font-size": {"px": 1, "em": 1, "%": 1},
+    "font-weight": {"bold": 1, "normal": 1},
+    "font-style": {"italic": 1, "normal": 1},
+    "font-variant": {"normal": 1, "small-caps": 1},
+    "height": {"px": 1, "em": 1, "%": 1},
+    "left": {"px": 1, "em": 1, "%": 1},
+    "letter-spacing": {"normal": 1},
+    "line-height": {"normal": 1},
+    "list-style-type": {"none": 1, "disc": 1, "circle": 1, "square": 1, "decimal": 1, "decimal-leading-zero": 1, "lower-roman": 1, "upper-roman": 1, "lower-greek": 1, "lower-latin": 1, "upper-latin": 1, "georgian": 1, "lower-alpha": 1, "upper-alpha": 1},
+    "margin": {"px": 1, "em": 1, "%": 1},
+    "margin-right": {"px": 1, "em": 1, "%": 1},
+    "margin-left": {"px": 1, "em": 1, "%": 1},
+    "margin-top": {"px": 1, "em": 1, "%": 1},
+    "margin-bottom": {"px": 1, "em": 1, "%": 1},
+    "max-height": {"px": 1, "em": 1, "%": 1},
+    "max-width": {"px": 1, "em": 1, "%": 1},
+    "min-height": {"px": 1, "em": 1, "%": 1},
+    "min-width": {"px": 1, "em": 1, "%": 1},
+    "overflow": {"hidden": 1, "visible": 1, "auto": 1, "scroll": 1},
+    "overflow-x": {"hidden": 1, "visible": 1, "auto": 1, "scroll": 1},
+    "overflow-y": {"hidden": 1, "visible": 1, "auto": 1, "scroll": 1},
+    "padding": {"px": 1, "em": 1, "%": 1},
+    "padding-top": {"px": 1, "em": 1, "%": 1},
+    "padding-right": {"px": 1, "em": 1, "%": 1},
+    "padding-bottom": {"px": 1, "em": 1, "%": 1},
+    "padding-left": {"px": 1, "em": 1, "%": 1},
+    "page-break-after": {"auto": 1, "always": 1, "avoid": 1, "left": 1, "right": 1},
+    "page-break-before": {"auto": 1, "always": 1, "avoid": 1, "left": 1, "right": 1},
+    "position": {"absolute": 1, "relative": 1, "fixed": 1, "static": 1},
+    "right": {"px": 1, "em": 1, "%": 1},
+    "table-layout": {"fixed": 1, "auto": 1},
+    "text-decoration": {"none": 1, "underline": 1, "line-through": 1, "blink": 1},
+    "text-align": {"left": 1, "right": 1, "center": 1, "justify": 1},
+    "text-transform": {"capitalize": 1, "uppercase": 1, "lowercase": 1, "none": 1},
+    "top": {"px": 1, "em": 1, "%": 1},
+    "vertical-align": {"top": 1, "bottom": 1},
+    "visibility": {"hidden": 1, "visible": 1},
+    "white-space": {"nowrap": 1, "normal": 1, "pre": 1, "pre-line": 1, "pre-wrap": 1},
+    "width": {"px": 1, "em": 1, "%": 1},
+    "word-spacing": {"normal": 1},
+    "filter": {"alpha(opacity=$0100)": 1},
+
+    "text-shadow": {"$02px 2px 2px #777": 1},
+    "text-overflow": {"ellipsis-word": 1, "clip": 1, "ellipsis": 1},
+    "-moz-border-radius": 1,
+    "-moz-border-radius-topright": 1,
+    "-moz-border-radius-bottomright": 1,
+    "-moz-border-radius-topleft": 1,
+    "-moz-border-radius-bottomleft": 1,
+    "-webkit-border-radius": 1,
+    "-webkit-border-top-right-radius": 1,
+    "-webkit-border-top-left-radius": 1,
+    "-webkit-border-bottom-right-radius": 1,
+    "-webkit-border-bottom-left-radius": 1,
+    "-moz-box-shadow": 1,
+    "-webkit-box-shadow": 1,
+    "transform": {"rotate($00deg)": 1, "skew($00deg)": 1},
+    "-moz-transform": {"rotate($00deg)": 1, "skew($00deg)": 1},
+    "-webkit-transform": {"rotate($00deg)": 1, "skew($00deg)": 1 }
+};
+
+var CssCompletions = function() {
+
+};
+
+(function() {
+
+    this.completionsDefined = false;
+
+    this.defineCompletions = function() {
+        if (document) {
+            var style = document.createElement('c').style;
+
+            for (var i in style) {
+                if (typeof style[i] !== 'string')
+                    continue;
+
+                var name = i.replace(/[A-Z]/g, function(x) {
+                    return '-' + x.toLowerCase();
+                });
+
+                if (!propertyMap.hasOwnProperty(name))
+                    propertyMap[name] = 1;
+            }
+        }
+
+        this.completionsDefined = true;
+    };
+
+    this.getCompletions = function(state, session, pos, prefix) {
+        if (!this.completionsDefined) {
+            this.defineCompletions();
+        }
+
+        if (state==='ruleset' || session.$mode.$id == "ace/mode/scss") {
+            var line = session.getLine(pos.row).substr(0, pos.column);
+            if (/:[^;]+$/.test(line)) {
+                /([\w\-]+):[^:]*$/.test(line);
+
+                return this.getPropertyValueCompletions(state, session, pos, prefix);
+            } else {
+                return this.getPropertyCompletions(state, session, pos, prefix);
+            }
+        }
+
+        return [];
+    };
+
+    this.getPropertyCompletions = function(state, session, pos, prefix) {
+        var properties = Object.keys(propertyMap);
+        return properties.map(function(property){
+            return {
+                caption: property,
+                snippet: property + ': $0;',
+                meta: "property",
+                score: 1000000
+            };
+        });
+    };
+
+    this.getPropertyValueCompletions = function(state, session, pos, prefix) {
+        var line = session.getLine(pos.row).substr(0, pos.column);
+        var property = (/([\w\-]+):[^:]*$/.exec(line) || {})[1];
+
+        if (!property)
+            return [];
+        var values = [];
+        if (property in propertyMap && typeof propertyMap[property] === "object") {
+            values = Object.keys(propertyMap[property]);
+        }
+        return values.map(function(value){
+            return {
+                caption: value,
+                snippet: value,
+                meta: "property value",
+                score: 1000000
+            };
+        });
+    };
+
+}).call(CssCompletions.prototype);
+
+exports.CssCompletions = CssCompletions;
+});
+
+ace.define("ace/mode/behaviour/css",["require","exports","module","ace/lib/oop","ace/mode/behaviour","ace/mode/behaviour/cstyle","ace/token_iterator"], function(require, exports, module) {
+"use strict";
+
+var oop = require("../../lib/oop");
+var Behaviour = require("../behaviour").Behaviour;
+var CstyleBehaviour = require("./cstyle").CstyleBehaviour;
+var TokenIterator = require("../../token_iterator").TokenIterator;
+
+var CssBehaviour = function () {
+
+    this.inherit(CstyleBehaviour);
+
+    this.add("colon", "insertion", function (state, action, editor, session, text) {
+        if (text === ':' && editor.selection.isEmpty()) {
+            var cursor = editor.getCursorPosition();
+            var iterator = new TokenIterator(session, cursor.row, cursor.column);
+            var token = iterator.getCurrentToken();
+            if (token && token.value.match(/\s+/)) {
+                token = iterator.stepBackward();
+            }
+            if (token && token.type === 'support.type') {
+                var line = session.doc.getLine(cursor.row);
+                var rightChar = line.substring(cursor.column, cursor.column + 1);
+                if (rightChar === ':') {
+                    return {
+                       text: '',
+                       selection: [1, 1]
+                    };
+                }
+                if (/^(\s+[^;]|\s*$)/.test(line.substring(cursor.column))) {
+                    return {
+                       text: ':;',
+                       selection: [1, 1]
+                    };
+                }
+            }
+        }
+    });
+
+    this.add("colon", "deletion", function (state, action, editor, session, range) {
+        var selected = session.doc.getTextRange(range);
+        if (!range.isMultiLine() && selected === ':') {
+            var cursor = editor.getCursorPosition();
+            var iterator = new TokenIterator(session, cursor.row, cursor.column);
+            var token = iterator.getCurrentToken();
+            if (token && token.value.match(/\s+/)) {
+                token = iterator.stepBackward();
+            }
+            if (token && token.type === 'support.type') {
+                var line = session.doc.getLine(range.start.row);
+                var rightChar = line.substring(range.end.column, range.end.column + 1);
+                if (rightChar === ';') {
+                    range.end.column ++;
+                    return range;
+                }
+            }
+        }
+    });
+
+    this.add("semicolon", "insertion", function (state, action, editor, session, text) {
+        if (text === ';' && editor.selection.isEmpty()) {
+            var cursor = editor.getCursorPosition();
+            var line = session.doc.getLine(cursor.row);
+            var rightChar = line.substring(cursor.column, cursor.column + 1);
+            if (rightChar === ';') {
+                return {
+                   text: '',
+                   selection: [1, 1]
+                };
+            }
+        }
+    });
+
+    this.add("!important", "insertion", function (state, action, editor, session, text) {
+        if (text === '!' && editor.selection.isEmpty()) {
+            var cursor = editor.getCursorPosition();
+            var line = session.doc.getLine(cursor.row);
+
+            if (/^\s*(;|}|$)/.test(line.substring(cursor.column))) {
+                return {
+                    text: '!important',
+                    selection: [10, 10]
+                };
+            }
+        }
+    });
+
+};
+oop.inherits(CssBehaviour, CstyleBehaviour);
+
+exports.CssBehaviour = CssBehaviour;
+});
+
+ace.define("ace/mode/css",["require","exports","module","ace/lib/oop","ace/mode/text","ace/mode/css_highlight_rules","ace/mode/matching_brace_outdent","ace/worker/worker_client","ace/mode/css_completions","ace/mode/behaviour/css","ace/mode/folding/cstyle"], function(require, exports, module) {
+"use strict";
+
+var oop = require("../lib/oop");
+var TextMode = require("./text").Mode;
+var CssHighlightRules = require("./css_highlight_rules").CssHighlightRules;
+var MatchingBraceOutdent = require("./matching_brace_outdent").MatchingBraceOutdent;
+var WorkerClient = require("../worker/worker_client").WorkerClient;
+var CssCompletions = require("./css_completions").CssCompletions;
+var CssBehaviour = require("./behaviour/css").CssBehaviour;
+var CStyleFoldMode = require("./folding/cstyle").FoldMode;
+
+var Mode = function() {
+    this.HighlightRules = CssHighlightRules;
+    this.$outdent = new MatchingBraceOutdent();
+    this.$behaviour = new CssBehaviour();
+    this.$completer = new CssCompletions();
+    this.foldingRules = new CStyleFoldMode();
+};
+oop.inherits(Mode, TextMode);
+
+(function() {
+
+    this.foldingRules = "cStyle";
+    this.blockComment = {start: "/*", end: "*/"};
+
+    this.getNextLineIndent = function(state, line, tab) {
+        var indent = this.$getIndent(line);
+        var tokens = this.getTokenizer().getLineTokens(line, state).tokens;
+        if (tokens.length && tokens[tokens.length-1].type == "comment") {
+            return indent;
+        }
+
+        var match = line.match(/^.*\{\s*$/);
+        if (match) {
+            indent += tab;
+        }
+
+        return indent;
+    };
+
+    this.checkOutdent = function(state, line, input) {
+        return this.$outdent.checkOutdent(line, input);
+    };
+
+    this.autoOutdent = function(state, doc, row) {
+        this.$outdent.autoOutdent(doc, row);
+    };
+
+    this.getCompletions = function(state, session, pos, prefix) {
+        return this.$completer.getCompletions(state, session, pos, prefix);
+    };
+
+    this.createWorker = function(session) {
+        var worker = new WorkerClient(["ace"], "ace/mode/css_worker", "Worker");
+        worker.attachToDocument(session.getDocument());
+
+        worker.on("annotate", function(e) {
+            session.setAnnotations(e.data);
+        });
+
+        worker.on("terminate", function() {
+            session.clearAnnotations();
+        });
+
+        return worker;
+    };
+
+    this.$id = "ace/mode/css";
+}).call(Mode.prototype);
+
+exports.Mode = Mode;
+
+});
+
+ace.define("ace/mode/html_highlight_rules",["require","exports","module","ace/lib/oop","ace/lib/lang","ace/mode/css_highlight_rules","ace/mode/javascript_highlight_rules","ace/mode/xml_highlight_rules"], function(require, exports, module) {
+"use strict";
+
+var oop = require("../lib/oop");
+var lang = require("../lib/lang");
+var CssHighlightRules = require("./css_highlight_rules").CssHighlightRules;
+var JavaScriptHighlightRules = require("./javascript_highlight_rules").JavaScriptHighlightRules;
+var XmlHighlightRules = require("./xml_highlight_rules").XmlHighlightRules;
+
+var tagMap = lang.createMap({
+    a           : 'anchor',
+    button         : 'form',
+    form        : 'form',
+    img         : 'image',
+    input       : 'form',
+    label       : 'form',
+    option      : 'form',
+    script      : 'script',
+    select      : 'form',
+    textarea    : 'form',
+    style       : 'style',
+    table       : 'table',
+    tbody       : 'table',
+    td          : 'table',
+    tfoot       : 'table',
+    th          : 'table',
+    tr          : 'table'
+});
+
+var HtmlHighlightRules = function() {
+    XmlHighlightRules.call(this);
+
+    this.addRules({
+        attributes: [{
+            include : "tag_whitespace"
+        }, {
+            token : "entity.other.attribute-name.xml",
+            regex : "[-_a-zA-Z0-9:.]+"
+        }, {
+            token : "keyword.operator.attribute-equals.xml",
+            regex : "=",
+            push : [{
+                include: "tag_whitespace"
+            }, {
+                token : "string.unquoted.attribute-value.html",
+                regex : "[^<>='\"`\\s]+",
+                next : "pop"
+            }, {
+                token : "empty",
+                regex : "",
+                next : "pop"
+            }]
+        }, {
+            include : "attribute_value"
+        }],
+        tag: [{
+            token : function(start, tag) {
+                var group = tagMap[tag];
+                return ["meta.tag.punctuation." + (start == "<" ? "" : "end-") + "tag-open.xml",
+                    "meta.tag" + (group ? "." + group : "") + ".tag-name.xml"];
+            },
+            regex : "(</?)([-_a-zA-Z0-9:.]+)",
+            next: "tag_stuff"
+        }],
+        tag_stuff: [
+            {include : "attributes"},
+            {token : "meta.tag.punctuation.tag-close.xml", regex : "/?>", next : "start"}
+        ]
+    });
+
+    this.embedTagRules(CssHighlightRules, "css-", "style");
+    this.embedTagRules(new JavaScriptHighlightRules({jsx: false}).getRules(), "js-", "script");
+
+    if (this.constructor === HtmlHighlightRules)
+        this.normalizeRules();
+};
+
+oop.inherits(HtmlHighlightRules, XmlHighlightRules);
+
+exports.HtmlHighlightRules = HtmlHighlightRules;
+});
+
+ace.define("ace/mode/folding/mixed",["require","exports","module","ace/lib/oop","ace/mode/folding/fold_mode"], function(require, exports, module) {
+"use strict";
+
+var oop = require("../../lib/oop");
+var BaseFoldMode = require("./fold_mode").FoldMode;
+
+var FoldMode = exports.FoldMode = function(defaultMode, subModes) {
+    this.defaultMode = defaultMode;
+    this.subModes = subModes;
+};
+oop.inherits(FoldMode, BaseFoldMode);
+
+(function() {
+
+
+    this.$getMode = function(state) {
+        if (typeof state != "string") 
+            state = state[0];
+        for (var key in this.subModes) {
+            if (state.indexOf(key) === 0)
+                return this.subModes[key];
+        }
+        return null;
+    };
+    
+    this.$tryMode = function(state, session, foldStyle, row) {
+        var mode = this.$getMode(state);
+        return (mode ? mode.getFoldWidget(session, foldStyle, row) : "");
+    };
+
+    this.getFoldWidget = function(session, foldStyle, row) {
+        return (
+            this.$tryMode(session.getState(row-1), session, foldStyle, row) ||
+            this.$tryMode(session.getState(row), session, foldStyle, row) ||
+            this.defaultMode.getFoldWidget(session, foldStyle, row)
+        );
+    };
+
+    this.getFoldWidgetRange = function(session, foldStyle, row) {
+        var mode = this.$getMode(session.getState(row-1));
+        
+        if (!mode || !mode.getFoldWidget(session, foldStyle, row))
+            mode = this.$getMode(session.getState(row));
+        
+        if (!mode || !mode.getFoldWidget(session, foldStyle, row))
+            mode = this.defaultMode;
+        
+        return mode.getFoldWidgetRange(session, foldStyle, row);
+    };
+
+}).call(FoldMode.prototype);
+
+});
+
+ace.define("ace/mode/folding/html",["require","exports","module","ace/lib/oop","ace/mode/folding/mixed","ace/mode/folding/xml","ace/mode/folding/cstyle"], function(require, exports, module) {
+"use strict";
+
+var oop = require("../../lib/oop");
+var MixedFoldMode = require("./mixed").FoldMode;
+var XmlFoldMode = require("./xml").FoldMode;
+var CStyleFoldMode = require("./cstyle").FoldMode;
+
+var FoldMode = exports.FoldMode = function(voidElements, optionalTags) {
+    MixedFoldMode.call(this, new XmlFoldMode(voidElements, optionalTags), {
+        "js-": new CStyleFoldMode(),
+        "css-": new CStyleFoldMode()
+    });
+};
+
+oop.inherits(FoldMode, MixedFoldMode);
+
+});
+
+ace.define("ace/mode/html_completions",["require","exports","module","ace/token_iterator"], function(require, exports, module) {
+"use strict";
+
+var TokenIterator = require("../token_iterator").TokenIterator;
+
+var commonAttributes = [
+    "accesskey",
+    "class",
+    "contenteditable",
+    "contextmenu",
+    "dir",
+    "draggable",
+    "dropzone",
+    "hidden",
+    "id",
+    "inert",
+    "itemid",
+    "itemprop",
+    "itemref",
+    "itemscope",
+    "itemtype",
+    "lang",
+    "spellcheck",
+    "style",
+    "tabindex",
+    "title",
+    "translate"
+];
+
+var eventAttributes = [
+    "onabort",
+    "onblur",
+    "oncancel",
+    "oncanplay",
+    "oncanplaythrough",
+    "onchange",
+    "onclick",
+    "onclose",
+    "oncontextmenu",
+    "oncuechange",
+    "ondblclick",
+    "ondrag",
+    "ondragend",
+    "ondragenter",
+    "ondragleave",
+    "ondragover",
+    "ondragstart",
+    "ondrop",
+    "ondurationchange",
+    "onemptied",
+    "onended",
+    "onerror",
+    "onfocus",
+    "oninput",
+    "oninvalid",
+    "onkeydown",
+    "onkeypress",
+    "onkeyup",
+    "onload",
+    "onloadeddata",
+    "onloadedmetadata",
+    "onloadstart",
+    "onmousedown",
+    "onmousemove",
+    "onmouseout",
+    "onmouseover",
+    "onmouseup",
+    "onmousewheel",
+    "onpause",
+    "onplay",
+    "onplaying",
+    "onprogress",
+    "onratechange",
+    "onreset",
+    "onscroll",
+    "onseeked",
+    "onseeking",
+    "onselect",
+    "onshow",
+    "onstalled",
+    "onsubmit",
+    "onsuspend",
+    "ontimeupdate",
+    "onvolumechange",
+    "onwaiting"
+];
+
+var globalAttributes = commonAttributes.concat(eventAttributes);
+
+var attributeMap = {
+    "a": {"href": 1, "target": {"_blank": 1, "top": 1}, "ping": 1, "rel": {"nofollow": 1, "alternate": 1, "author": 1, "bookmark": 1, "help": 1, "license": 1, "next": 1, "noreferrer": 1, "prefetch": 1, "prev": 1, "search": 1, "tag": 1}, "media": 1, "hreflang": 1, "type": 1},
+    "abbr": {},
+    "address": {},
+    "area": {"shape": 1, "coords": 1, "href": 1, "hreflang": 1, "alt": 1, "target": 1, "media": 1, "rel": 1, "ping": 1, "type": 1},
+    "article": {"pubdate": 1},
+    "aside": {},
+    "audio": {"src": 1, "autobuffer": 1, "autoplay": {"autoplay": 1}, "loop": {"loop": 1}, "controls": {"controls": 1}, "muted": {"muted": 1}, "preload": {"auto": 1, "metadata": 1, "none": 1 }},
+    "b": {},
+    "base": {"href": 1, "target": 1},
+    "bdi": {},
+    "bdo": {},
+    "blockquote": {"cite": 1},
+    "body": {"onafterprint": 1, "onbeforeprint": 1, "onbeforeunload": 1, "onhashchange": 1, "onmessage": 1, "onoffline": 1, "onpopstate": 1, "onredo": 1, "onresize": 1, "onstorage": 1, "onundo": 1, "onunload": 1},
+    "br": {},
+    "button": {"autofocus": 1, "disabled": {"disabled": 1}, "form": 1, "formaction": 1, "formenctype": 1, "formmethod": 1, "formnovalidate": 1, "formtarget": 1, "name": 1, "value": 1, "type": {"button": 1, "submit": 1}},
+    "canvas": {"width": 1, "height": 1},
+    "caption": {},
+    "cite": {},
+    "code": {},
+    "col": {"span": 1},
+    "colgroup": {"span": 1},
+    "command": {"type": 1, "label": 1, "icon": 1, "disabled": 1, "checked": 1, "radiogroup": 1, "command": 1},
+    "data": {},
+    "datalist": {},
+    "dd": {},
+    "del": {"cite": 1, "datetime": 1},
+    "details": {"open": 1},
+    "dfn": {},
+    "dialog": {"open": 1},
+    "div": {},
+    "dl": {},
+    "dt": {},
+    "em": {},
+    "embed": {"src": 1, "height": 1, "width": 1, "type": 1},
+    "fieldset": {"disabled": 1, "form": 1, "name": 1},
+    "figcaption": {},
+    "figure": {},
+    "footer": {},
+    "form": {"accept-charset": 1, "action": 1, "autocomplete": 1, "enctype": {"multipart/form-data": 1, "application/x-www-form-urlencoded": 1}, "method": {"get": 1, "post": 1}, "name": 1, "novalidate": 1, "target": {"_blank": 1, "top": 1}},
+    "h1": {},
+    "h2": {},
+    "h3": {},
+    "h4": {},
+    "h5": {},
+    "h6": {},
+    "head": {},
+    "header": {},
+    "hr": {},
+    "html": {"manifest": 1},
+    "i": {},
+    "iframe": {"name": 1, "src": 1, "height": 1, "width": 1, "sandbox": {"allow-same-origin": 1, "allow-top-navigation": 1, "allow-forms": 1, "allow-scripts": 1}, "seamless": {"seamless": 1}},
+    "img": {"alt": 1, "src": 1, "height": 1, "width": 1, "usemap": 1, "ismap": 1},
+    "input": {
+        "type": {"text": 1, "password": 1, "hidden": 1, "checkbox": 1, "submit": 1, "radio": 1, "file": 1, "button": 1, "reset": 1, "image": 31, "color": 1, "date": 1, "datetime": 1, "datetime-local": 1, "email": 1, "month": 1, "number": 1, "range": 1, "search": 1, "tel": 1, "time": 1, "url": 1, "week": 1},
+        "accept": 1, "alt": 1, "autocomplete": {"on": 1, "off": 1}, "autofocus": {"autofocus": 1}, "checked": {"checked": 1}, "disabled": {"disabled": 1}, "form": 1, "formaction": 1, "formenctype": {"application/x-www-form-urlencoded": 1, "multipart/form-data": 1, "text/plain": 1}, "formmethod": {"get": 1, "post": 1}, "formnovalidate": {"formnovalidate": 1}, "formtarget": {"_blank": 1, "_self": 1, "_parent": 1, "_top": 1}, "height": 1, "list": 1, "max": 1, "maxlength": 1, "min": 1, "multiple": {"multiple": 1}, "name": 1, "pattern": 1, "placeholder": 1, "readonly": {"readonly": 1}, "required": {"required": 1}, "size": 1, "src": 1, "step": 1, "width": 1, "files": 1, "value": 1},
+    "ins": {"cite": 1, "datetime": 1},
+    "kbd": {},
+    "keygen": {"autofocus": 1, "challenge": {"challenge": 1}, "disabled": {"disabled": 1}, "form": 1, "keytype": {"rsa": 1, "dsa": 1, "ec": 1}, "name": 1},
+    "label": {"form": 1, "for": 1},
+    "legend": {},
+    "li": {"value": 1},
+    "link": {"href": 1, "hreflang": 1, "rel": {"stylesheet": 1, "icon": 1}, "media": {"all": 1, "screen": 1, "print": 1}, "type": {"text/css": 1, "image/png": 1, "image/jpeg": 1, "image/gif": 1}, "sizes": 1},
+    "main": {},
+    "map": {"name": 1},
+    "mark": {},
+    "math": {},
+    "menu": {"type": 1, "label": 1},
+    "meta": {"http-equiv": {"content-type": 1}, "name": {"description": 1, "keywords": 1}, "content": {"text/html; charset=UTF-8": 1}, "charset": 1},
+    "meter": {"value": 1, "min": 1, "max": 1, "low": 1, "high": 1, "optimum": 1},
+    "nav": {},
+    "noscript": {"href": 1},
+    "object": {"param": 1, "data": 1, "type": 1, "height" : 1, "width": 1, "usemap": 1, "name": 1, "form": 1, "classid": 1},
+    "ol": {"start": 1, "reversed": 1},
+    "optgroup": {"disabled": 1, "label": 1},
+    "option": {"disabled": 1, "selected": 1, "label": 1, "value": 1},
+    "output": {"for": 1, "form": 1, "name": 1},
+    "p": {},
+    "param": {"name": 1, "value": 1},
+    "pre": {},
+    "progress": {"value": 1, "max": 1},
+    "q": {"cite": 1},
+    "rp": {},
+    "rt": {},
+    "ruby": {},
+    "s": {},
+    "samp": {},
+    "script": {"charset": 1, "type": {"text/javascript": 1}, "src": 1, "defer": 1, "async": 1},
+    "select": {"autofocus": 1, "disabled": 1, "form": 1, "multiple": {"multiple": 1}, "name": 1, "size": 1, "readonly":{"readonly": 1}},
+    "small": {},
+    "source": {"src": 1, "type": 1, "media": 1},
+    "span": {},
+    "strong": {},
+    "style": {"type": 1, "media": {"all": 1, "screen": 1, "print": 1}, "scoped": 1},
+    "sub": {},
+    "sup": {},
+    "svg": {},
+    "table": {"summary": 1},
+    "tbody": {},
+    "td": {"headers": 1, "rowspan": 1, "colspan": 1},
+    "textarea": {"autofocus": {"autofocus": 1}, "disabled": {"disabled": 1}, "form": 1, "maxlength": 1, "name": 1, "placeholder": 1, "readonly": {"readonly": 1}, "required": {"required": 1}, "rows": 1, "cols": 1, "wrap": {"on": 1, "off": 1, "hard": 1, "soft": 1}},
+    "tfoot": {},
+    "th": {"headers": 1, "rowspan": 1, "colspan": 1, "scope": 1},
+    "thead": {},
+    "time": {"datetime": 1},
+    "title": {},
+    "tr": {},
+    "track": {"kind": 1, "src": 1, "srclang": 1, "label": 1, "default": 1},
+    "section": {},
+    "summary": {},
+    "u": {},
+    "ul": {},
+    "var": {},
+    "video": {"src": 1, "autobuffer": 1, "autoplay": {"autoplay": 1}, "loop": {"loop": 1}, "controls": {"controls": 1}, "width": 1, "height": 1, "poster": 1, "muted": {"muted": 1}, "preload": {"auto": 1, "metadata": 1, "none": 1}},
+    "wbr": {}
+};
+
+var elements = Object.keys(attributeMap);
+
+function is(token, type) {
+    return token.type.lastIndexOf(type + ".xml") > -1;
+}
+
+function findTagName(session, pos) {
+    var iterator = new TokenIterator(session, pos.row, pos.column);
+    var token = iterator.getCurrentToken();
+    while (token && !is(token, "tag-name")){
+        token = iterator.stepBackward();
+    }
+    if (token)
+        return token.value;
+}
+
+function findAttributeName(session, pos) {
+    var iterator = new TokenIterator(session, pos.row, pos.column);
+    var token = iterator.getCurrentToken();
+    while (token && !is(token, "attribute-name")){
+        token = iterator.stepBackward();
+    }
+    if (token)
+        return token.value;
+}
+
+var HtmlCompletions = function() {
+
+};
+
+(function() {
+
+    this.getCompletions = function(state, session, pos, prefix) {
+        var token = session.getTokenAt(pos.row, pos.column);
+
+        if (!token)
+            return [];
+        if (is(token, "tag-name") || is(token, "tag-open") || is(token, "end-tag-open"))
+            return this.getTagCompletions(state, session, pos, prefix);
+        if (is(token, "tag-whitespace") || is(token, "attribute-name"))
+            return this.getAttributeCompletions(state, session, pos, prefix);
+        if (is(token, "attribute-value"))
+            return this.getAttributeValueCompletions(state, session, pos, prefix);
+        var line = session.getLine(pos.row).substr(0, pos.column);
+        if (/&[a-z]*$/i.test(line))
+            return this.getHTMLEntityCompletions(state, session, pos, prefix);
+
+        return [];
+    };
+
+    this.getTagCompletions = function(state, session, pos, prefix) {
+        return elements.map(function(element){
+            return {
+                value: element,
+                meta: "tag",
+                score: 1000000
+            };
+        });
+    };
+
+    this.getAttributeCompletions = function(state, session, pos, prefix) {
+        var tagName = findTagName(session, pos);
+        if (!tagName)
+            return [];
+        var attributes = globalAttributes;
+        if (tagName in attributeMap) {
+            attributes = attributes.concat(Object.keys(attributeMap[tagName]));
+        }
+        return attributes.map(function(attribute){
+            return {
+                caption: attribute,
+                snippet: attribute + '="$0"',
+                meta: "attribute",
+                score: 1000000
+            };
+        });
+    };
+
+    this.getAttributeValueCompletions = function(state, session, pos, prefix) {
+        var tagName = findTagName(session, pos);
+        var attributeName = findAttributeName(session, pos);
+        
+        if (!tagName)
+            return [];
+        var values = [];
+        if (tagName in attributeMap && attributeName in attributeMap[tagName] && typeof attributeMap[tagName][attributeName] === "object") {
+            values = Object.keys(attributeMap[tagName][attributeName]);
+        }
+        return values.map(function(value){
+            return {
+                caption: value,
+                snippet: value,
+                meta: "attribute value",
+                score: 1000000
+            };
+        });
+    };
+
+    this.getHTMLEntityCompletions = function(state, session, pos, prefix) {
+        var values = ['Aacute;', 'aacute;', 'Acirc;', 'acirc;', 'acute;', 'AElig;', 'aelig;', 'Agrave;', 'agrave;', 'alefsym;', 'Alpha;', 'alpha;', 'amp;', 'and;', 'ang;', 'Aring;', 'aring;', 'asymp;', 'Atilde;', 'atilde;', 'Auml;', 'auml;', 'bdquo;', 'Beta;', 'beta;', 'brvbar;', 'bull;', 'cap;', 'Ccedil;', 'ccedil;', 'cedil;', 'cent;', 'Chi;', 'chi;', 'circ;', 'clubs;', 'cong;', 'copy;', 'crarr;', 'cup;', 'curren;', 'Dagger;', 'dagger;', 'dArr;', 'darr;', 'deg;', 'Delta;', 'delta;', 'diams;', 'divide;', 'Eacute;', 'eacute;', 'Ecirc;', 'ecirc;', 'Egrave;', 'egrave;', 'empty;', 'emsp;', 'ensp;', 'Epsilon;', 'epsilon;', 'equiv;', 'Eta;', 'eta;', 'ETH;', 'eth;', 'Euml;', 'euml;', 'euro;', 'exist;', 'fnof;', 'forall;', 'frac12;', 'frac14;', 'frac34;', 'frasl;', 'Gamma;', 'gamma;', 'ge;', 'gt;', 'hArr;', 'harr;', 'hearts;', 'hellip;', 'Iacute;', 'iacute;', 'Icirc;', 'icirc;', 'iexcl;', 'Igrave;', 'igrave;', 'image;', 'infin;', 'int;', 'Iota;', 'iota;', 'iquest;', 'isin;', 'Iuml;', 'iuml;', 'Kappa;', 'kappa;', 'Lambda;', 'lambda;', 'lang;', 'laquo;', 'lArr;', 'larr;', 'lceil;', 'ldquo;', 'le;', 'lfloor;', 'lowast;', 'loz;', 'lrm;', 'lsaquo;', 'lsquo;', 'lt;', 'macr;', 'mdash;', 'micro;', 'middot;', 'minus;', 'Mu;', 'mu;', 'nabla;', 'nbsp;', 'ndash;', 'ne;', 'ni;', 'not;', 'notin;', 'nsub;', 'Ntilde;', 'ntilde;', 'Nu;', 'nu;', 'Oacute;', 'oacute;', 'Ocirc;', 'ocirc;', 'OElig;', 'oelig;', 'Ograve;', 'ograve;', 'oline;', 'Omega;', 'omega;', 'Omicron;', 'omicron;', 'oplus;', 'or;', 'ordf;', 'ordm;', 'Oslash;', 'oslash;', 'Otilde;', 'otilde;', 'otimes;', 'Ouml;', 'ouml;', 'para;', 'part;', 'permil;', 'perp;', 'Phi;', 'phi;', 'Pi;', 'pi;', 'piv;', 'plusmn;', 'pound;', 'Prime;', 'prime;', 'prod;', 'prop;', 'Psi;', 'psi;', 'quot;', 'radic;', 'rang;', 'raquo;', 'rArr;', 'rarr;', 'rceil;', 'rdquo;', 'real;', 'reg;', 'rfloor;', 'Rho;', 'rho;', 'rlm;', 'rsaquo;', 'rsquo;', 'sbquo;', 'Scaron;', 'scaron;', 'sdot;', 'sect;', 'shy;', 'Sigma;', 'sigma;', 'sigmaf;', 'sim;', 'spades;', 'sub;', 'sube;', 'sum;', 'sup;', 'sup1;', 'sup2;', 'sup3;', 'supe;', 'szlig;', 'Tau;', 'tau;', 'there4;', 'Theta;', 'theta;', 'thetasym;', 'thinsp;', 'THORN;', 'thorn;', 'tilde;', 'times;', 'trade;', 'Uacute;', 'uacute;', 'uArr;', 'uarr;', 'Ucirc;', 'ucirc;', 'Ugrave;', 'ugrave;', 'uml;', 'upsih;', 'Upsilon;', 'upsilon;', 'Uuml;', 'uuml;', 'weierp;', 'Xi;', 'xi;', 'Yacute;', 'yacute;', 'yen;', 'Yuml;', 'yuml;', 'Zeta;', 'zeta;', 'zwj;', 'zwnj;'];
+
+        return values.map(function(value){
+            return {
+                caption: value,
+                snippet: value,
+                meta: "html entity",
+                score: 1000000
+            };
+        });
+    };
+
+}).call(HtmlCompletions.prototype);
+
+exports.HtmlCompletions = HtmlCompletions;
+});
+
+ace.define("ace/mode/html",["require","exports","module","ace/lib/oop","ace/lib/lang","ace/mode/text","ace/mode/javascript","ace/mode/css","ace/mode/html_highlight_rules","ace/mode/behaviour/xml","ace/mode/folding/html","ace/mode/html_completions","ace/worker/worker_client"], function(require, exports, module) {
+"use strict";
+
+var oop = require("../lib/oop");
+var lang = require("../lib/lang");
+var TextMode = require("./text").Mode;
+var JavaScriptMode = require("./javascript").Mode;
+var CssMode = require("./css").Mode;
+var HtmlHighlightRules = require("./html_highlight_rules").HtmlHighlightRules;
+var XmlBehaviour = require("./behaviour/xml").XmlBehaviour;
+var HtmlFoldMode = require("./folding/html").FoldMode;
+var HtmlCompletions = require("./html_completions").HtmlCompletions;
+var WorkerClient = require("../worker/worker_client").WorkerClient;
+var voidElements = ["area", "base", "br", "col", "embed", "hr", "img", "input", "keygen", "link", "meta", "menuitem", "param", "source", "track", "wbr"];
+var optionalEndTags = ["li", "dt", "dd", "p", "rt", "rp", "optgroup", "option", "colgroup", "td", "th"];
+
+var Mode = function(options) {
+    this.fragmentContext = options && options.fragmentContext;
+    this.HighlightRules = HtmlHighlightRules;
+    this.$behaviour = new XmlBehaviour();
+    this.$completer = new HtmlCompletions();
+    
+    this.createModeDelegates({
+        "js-": JavaScriptMode,
+        "css-": CssMode
+    });
+    
+    this.foldingRules = new HtmlFoldMode(this.voidElements, lang.arrayToMap(optionalEndTags));
+};
+oop.inherits(Mode, TextMode);
+
+(function() {
+
+    this.blockComment = {start: "<!--", end: "-->"};
+
+    this.voidElements = lang.arrayToMap(voidElements);
+
+    this.getNextLineIndent = function(state, line, tab) {
+        return this.$getIndent(line);
+    };
+
+    this.checkOutdent = function(state, line, input) {
+        return false;
+    };
+
+    this.getCompletions = function(state, session, pos, prefix) {
+        return this.$completer.getCompletions(state, session, pos, prefix);
+    };
+
+    this.createWorker = function(session) {
+        if (this.constructor != Mode)
+            return;
+        var worker = new WorkerClient(["ace"], "ace/mode/html_worker", "Worker");
+        worker.attachToDocument(session.getDocument());
+
+        if (this.fragmentContext)
+            worker.call("setOptions", [{context: this.fragmentContext}]);
+
+        worker.on("error", function(e) {
+            session.setAnnotations(e.data);
+        });
+
+        worker.on("terminate", function() {
+            session.clearAnnotations();
+        });
+
+        return worker;
+    };
+
+    this.$id = "ace/mode/html";
+}).call(Mode.prototype);
+
+exports.Mode = Mode;
+});
+
+ace.define("ace/mode/markdown_highlight_rules",["require","exports","module","ace/config","ace/lib/oop","ace/lib/lang","ace/mode/text_highlight_rules","ace/mode/html_highlight_rules"], function(require, exports, module) {
+"use strict";
+
+var modes = require("../config").$modes;
+
+var oop = require("../lib/oop");
+var lang = require("../lib/lang");
+var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules;
+var HtmlHighlightRules = require("./html_highlight_rules").HtmlHighlightRules;
+
+var escaped = function(ch) {
+    return "(?:[^" + lang.escapeRegExp(ch) + "\\\\]|\\\\.)*";
+};
+
+var MarkdownHighlightRules = function() {
+    HtmlHighlightRules.call(this);
+    var codeBlockStartRule = {
+        token : "support.function",
+        regex : /^\s*(```+[^`]*|~~~+[^~]*)$/,
+        onMatch: function(value, state, stack, line) {
+            var m = value.match(/^(\s*)([`~]+)(.*)/);
+            var language = /[\w-]+|$/.exec(m[3])[0];
+            if (!modes[language])
+                language = "";
+            stack.unshift("githubblock", [], [m[1], m[2], language], state);
+            return this.token;
+        },
+        next  : "githubblock"
+    };
+    var codeBlockRules = [{
+        token : "support.function",
+        regex : ".*",
+        onMatch: function(value, state, stack, line) {
+            var embedState = stack[1];
+            var indent = stack[2][0];
+            var endMarker = stack[2][1];
+            var language = stack[2][2];
+            
+            var m = /^(\s*)(`+|~+)\s*$/.exec(value);
+            if (
+                m && m[1].length < indent.length + 3
+                && m[2].length >= endMarker.length && m[2][0] == endMarker[0]
+            ) {
+                stack.splice(0, 3);
+                this.next = stack.shift();
+                return this.token;
+            }
+            this.next = "";
+            if (language && modes[language]) {
+                var data = modes[language].getTokenizer().getLineTokens(value, embedState.slice(0));
+                stack[1] = data.state;
+                return data.tokens;
+            }
+            return this.token;
+        }
+    }];
+
+    this.$rules["start"].unshift({
+        token : "empty_line",
+        regex : '^$',
+        next: "allowBlock"
+    }, { // h1
+        token: "markup.heading.1",
+        regex: "^=+(?=\\s*$)"
+    }, { // h2
+        token: "markup.heading.2",
+        regex: "^\\-+(?=\\s*$)"
+    }, {
+        token : function(value) {
+            return "markup.heading." + value.length;
+        },
+        regex : /^#{1,6}(?=\s|$)/,
+        next : "header"
+    },
+    codeBlockStartRule,
+    { // block quote
+        token : "string.blockquote",
+        regex : "^\\s*>\\s*(?:[*+-]|\\d+\\.)?\\s+",
+        next  : "blockquote"
+    }, { // HR * - _
+        token : "constant",
+        regex : "^ {0,2}(?:(?: ?\\* ?){3,}|(?: ?\\- ?){3,}|(?: ?\\_ ?){3,})\\s*$",
+        next: "allowBlock"
+    }, { // list
+        token : "markup.list",
+        regex : "^\\s{0,3}(?:[*+-]|\\d+\\.)\\s+",
+        next  : "listblock-start"
+    }, {
+        include : "basic"
+    });
+
+    this.addRules({
+        "basic" : [{
+            token : "constant.language.escape",
+            regex : /\\[\\`*_{}\[\]()#+\-.!]/
+        }, { // code span `
+            token : "support.function",
+            regex : "(`+)(.*?[^`])(\\1)"
+        }, { // reference
+            token : ["text", "constant", "text", "url", "string", "text"],
+            regex : "^([ ]{0,3}\\[)([^\\]]+)(\\]:\\s*)([^ ]+)(\\s*(?:[\"][^\"]+[\"])?(\\s*))$"
+        }, { // link by reference
+            token : ["text", "string", "text", "constant", "text"],
+            regex : "(\\[)(" + escaped("]") + ")(\\]\\s*\\[)("+ escaped("]") + ")(\\])"
+        }, { // link by url
+            token : ["text", "string", "text", "markup.underline", "string", "text"],
+            regex : "(\\!?\\[)(" +                                        // [
+                    escaped("]") +                                    // link text or alt text
+                    ")(\\]\\()"+                                      // ](
+                    '((?:[^\\)\\s\\\\]|\\\\.|\\s(?=[^"]))*)' +        // href or image
+                    '(\\s*"' +  escaped('"') + '"\\s*)?' +            // "title"
+                    "(\\))"                                           // )
+        }, { // strong ** __
+            token : "string.strong",
+            regex : "([*]{2}|[_]{2}(?=\\S))(.*?\\S[*_]*)(\\1)"
+        }, { // emphasis * _
+            token : "string.emphasis",
+            regex : "([*]|[_](?=\\S))(.*?\\S[*_]*)(\\1)"
+        }, { //
+            token : ["text", "url", "text"],
+            regex : "(<)("+
+                      "(?:https?|ftp|dict):[^'\">\\s]+"+
+                      "|"+
+                      "(?:mailto:)?[-.\\w]+\\@[-a-z0-9]+(?:\\.[-a-z0-9]+)*\\.[a-z]+"+
+                    ")(>)"
+        }],
+        "allowBlock": [
+            {token : "support.function", regex : "^ {4}.+", next : "allowBlock"},
+            {token : "empty_line", regex : '^$', next: "allowBlock"},
+            {token : "empty", regex : "", next : "start"}
+        ],
+
+        "header" : [{
+            regex: "$",
+            next : "start"
+        }, {
+            include: "basic"
+        }, {
+            defaultToken : "heading"
+        } ],
+
+        "listblock-start" : [{
+            token : "support.variable",
+            regex : /(?:\[[ x]\])?/,
+            next  : "listblock"
+        }],
+
+        "listblock" : [ { // Lists only escape on completely blank lines.
+            token : "empty_line",
+            regex : "^$",
+            next  : "start"
+        }, { // list
+            token : "markup.list",
+            regex : "^\\s{0,3}(?:[*+-]|\\d+\\.)\\s+",
+            next  : "listblock-start"
+        }, {
+            include : "basic", noEscape: true
+        },
+        codeBlockStartRule,
+        {
+            defaultToken : "list" //do not use markup.list to allow stling leading `*` differntly
+        } ],
+
+        "blockquote" : [ { // Blockquotes only escape on blank lines.
+            token : "empty_line",
+            regex : "^\\s*$",
+            next  : "start"
+        }, { // block quote
+            token : "string.blockquote",
+            regex : "^\\s*>\\s*(?:[*+-]|\\d+\\.)?\\s+",
+            next  : "blockquote"
+        }, {
+            include : "basic", noEscape: true
+        }, {
+            defaultToken : "string.blockquote"
+        } ],
+
+        "githubblock" : codeBlockRules
+    });
+
+    this.normalizeRules();
+};
+oop.inherits(MarkdownHighlightRules, TextHighlightRules);
+
+exports.MarkdownHighlightRules = MarkdownHighlightRules;
+});
+
+ace.define("ace/mode/folding/markdown",["require","exports","module","ace/lib/oop","ace/mode/folding/fold_mode","ace/range"], function(require, exports, module) {
+"use strict";
+
+var oop = require("../../lib/oop");
+var BaseFoldMode = require("./fold_mode").FoldMode;
+var Range = require("../../range").Range;
+
+var FoldMode = exports.FoldMode = function() {};
+oop.inherits(FoldMode, BaseFoldMode);
+
+(function() {
+    this.foldingStartMarker = /^(?:[=-]+\s*$|#{1,6} |`{3})/;
+
+    this.getFoldWidget = function(session, foldStyle, row) {
+        var line = session.getLine(row);
+        if (!this.foldingStartMarker.test(line))
+            return "";
+
+        if (line[0] == "`") {
+            if (session.bgTokenizer.getState(row) == "start")
+                return "end";
+            return "start";
+        }
+
+        return "start";
+    };
+
+    this.getFoldWidgetRange = function(session, foldStyle, row) {
+        var line = session.getLine(row);
+        var startColumn = line.length;
+        var maxRow = session.getLength();
+        var startRow = row;
+        var endRow = row;
+        if (!line.match(this.foldingStartMarker))
+            return;
+
+        if (line[0] == "`") {
+            if (session.bgTokenizer.getState(row) !== "start") {
+                while (++row < maxRow) {
+                    line = session.getLine(row);
+                    if (line[0] == "`" & line.substring(0, 3) == "```")
+                        break;
+                }
+                return new Range(startRow, startColumn, row, 0);
+            } else {
+                while (row -- > 0) {
+                    line = session.getLine(row);
+                    if (line[0] == "`" & line.substring(0, 3) == "```")
+                        break;
+                }
+                return new Range(row, line.length, startRow, 0);
+            }
+        }
+
+        var token;
+        function isHeading(row) {
+            token = session.getTokens(row)[0];
+            return token && token.type.lastIndexOf(heading, 0) === 0;
+        }
+
+        var heading = "markup.heading";
+        function getLevel() {
+            var ch = token.value[0];
+            if (ch == "=") return 6;
+            if (ch == "-") return 5;
+            return 7 - token.value.search(/[^#]|$/);
+        }
+
+        if (isHeading(row)) {
+            var startHeadingLevel = getLevel();
+            while (++row < maxRow) {
+                if (!isHeading(row))
+                    continue;
+                var level = getLevel();
+                if (level >= startHeadingLevel)
+                    break;
+            }
+
+            endRow = row - (!token || ["=", "-"].indexOf(token.value[0]) == -1 ? 1 : 2);
+
+            if (endRow > startRow) {
+                while (endRow > startRow && /^\s*$/.test(session.getLine(endRow)))
+                    endRow--;
+            }
+
+            if (endRow > startRow) {
+                var endColumn = session.getLine(endRow).length;
+                return new Range(startRow, startColumn, endRow, endColumn);
+            }
+        }
+    };
+
+}).call(FoldMode.prototype);
+
+});
+
+ace.define("ace/mode/sh_highlight_rules",["require","exports","module","ace/lib/oop","ace/mode/text_highlight_rules"], function(require, exports, module) {
+"use strict";
+
+var oop = require("../lib/oop");
+var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules;
+
+var reservedKeywords = exports.reservedKeywords = (
+        '!|{|}|case|do|done|elif|else|'+
+        'esac|fi|for|if|in|then|until|while|'+
+        '&|;|export|local|read|typeset|unset|'+
+        'elif|select|set|function|declare|readonly'
+    );
+
+var languageConstructs = exports.languageConstructs = (
+    '[|]|alias|bg|bind|break|builtin|'+
+     'cd|command|compgen|complete|continue|'+
+     'dirs|disown|echo|enable|eval|exec|'+
+     'exit|fc|fg|getopts|hash|help|history|'+
+     'jobs|kill|let|logout|popd|printf|pushd|'+
+     'pwd|return|set|shift|shopt|source|'+
+     'suspend|test|times|trap|type|ulimit|'+
+     'umask|unalias|wait'
+);
+
+var ShHighlightRules = function() {
+    var keywordMapper = this.createKeywordMapper({
+        "keyword": reservedKeywords,
+        "support.function.builtin": languageConstructs,
+        "invalid.deprecated": "debugger"
+    }, "identifier");
+
+    var integer = "(?:(?:[1-9]\\d*)|(?:0))";
+
+    var fraction = "(?:\\.\\d+)";
+    var intPart = "(?:\\d+)";
+    var pointFloat = "(?:(?:" + intPart + "?" + fraction + ")|(?:" + intPart + "\\.))";
+    var exponentFloat = "(?:(?:" + pointFloat + "|" +  intPart + ")" + ")";
+    var floatNumber = "(?:" + exponentFloat + "|" + pointFloat + ")";
+    var fileDescriptor = "(?:&" + intPart + ")";
+
+    var variableName = "[a-zA-Z_][a-zA-Z0-9_]*";
+    var variable = "(?:" + variableName + "(?==))";
+
+    var builtinVariable = "(?:\\$(?:SHLVL|\\$|\\!|\\?))";
+
+    var func = "(?:" + variableName + "\\s*\\(\\))";
+
+    this.$rules = {
+        "start" : [{
+            token : "constant",
+            regex : /\\./
+        }, {
+            token : ["text", "comment"],
+            regex : /(^|\s)(#.*)$/
+        }, {
+            token : "string.start",
+            regex : '"',
+            push : [{
+                token : "constant.language.escape",
+                regex : /\\(?:[$`"\\]|$)/
+            }, {
+                include : "variables"
+            }, {
+                token : "keyword.operator",
+                regex : /`/ // TODO highlight `
+            }, {
+                token : "string.end",
+                regex : '"',
+                next: "pop"
+            }, {
+                defaultToken: "string"
+            }]
+        }, {
+            token : "string",
+            regex : "\\$'",
+            push : [{
+                token : "constant.language.escape",
+                regex : /\\(?:[abeEfnrtv\\'"]|x[a-fA-F\d]{1,2}|u[a-fA-F\d]{4}([a-fA-F\d]{4})?|c.|\d{1,3})/
+            }, {
+                token : "string",
+                regex : "'",
+                next: "pop"
+            }, {
+                defaultToken: "string"
+            }]
+        }, {
+            regex : "<<<",
+            token : "keyword.operator"
+        }, {
+            stateName: "heredoc",
+            regex : "(<<-?)(\\s*)(['\"`]?)([\\w\\-]+)(['\"`]?)",
+            onMatch : function(value, currentState, stack) {
+                var next = value[2] == '-' ? "indentedHeredoc" : "heredoc";
+                var tokens = value.split(this.splitRegex);
+                stack.push(next, tokens[4]);
+                return [
+                    {type:"constant", value: tokens[1]},
+                    {type:"text", value: tokens[2]},
+                    {type:"string", value: tokens[3]},
+                    {type:"support.class", value: tokens[4]},
+                    {type:"string", value: tokens[5]}
+                ];
+            },
+            rules: {
+                heredoc: [{
+                    onMatch:  function(value, currentState, stack) {
+                        if (value === stack[1]) {
+                            stack.shift();
+                            stack.shift();
+                            this.next = stack[0] || "start";
+                            return "support.class";
+                        }
+                        this.next = "";
+                        return "string";
+                    },
+                    regex: ".*$",
+                    next: "start"
+                }],
+                indentedHeredoc: [{
+                    token: "string",
+                    regex: "^\t+"
+                }, {
+                    onMatch:  function(value, currentState, stack) {
+                        if (value === stack[1]) {
+                            stack.shift();
+                            stack.shift();
+                            this.next = stack[0] || "start";
+                            return "support.class";
+                        }
+                        this.next = "";
+                        return "string";
+                    },
+                    regex: ".*$",
+                    next: "start"
+                }]
+            }
+        }, {
+            regex : "$",
+            token : "empty",
+            next : function(currentState, stack) {
+                if (stack[0] === "heredoc" || stack[0] === "indentedHeredoc")
+                    return stack[0];
+                return currentState;
+            }
+        }, {
+            token : ["keyword", "text", "text", "text", "variable"],
+            regex : /(declare|local|readonly)(\s+)(?:(-[fixar]+)(\s+))?([a-zA-Z_][a-zA-Z0-9_]*\b)/
+        }, {
+            token : "variable.language",
+            regex : builtinVariable
+        }, {
+            token : "variable",
+            regex : variable
+        }, {
+            include : "variables"
+        }, {
+            token : "support.function",
+            regex : func
+        }, {
+            token : "support.function",
+            regex : fileDescriptor
+        }, {
+            token : "string",           // ' string
+            start : "'", end : "'"
+        }, {
+            token : "constant.numeric", // float
+            regex : floatNumber
+        }, {
+            token : "constant.numeric", // integer
+            regex : integer + "\\b"
+        }, {
+            token : keywordMapper,
+            regex : "[a-zA-Z_][a-zA-Z0-9_]*\\b"
+        }, {
+            token : "keyword.operator",
+            regex : "\\+|\\-|\\*|\\*\\*|\\/|\\/\\/|~|<|>|<=|=>|=|!=|[%&|`]"
+        }, {
+            token : "punctuation.operator",
+            regex : ";"
+        }, {
+            token : "paren.lparen",
+            regex : "[\\[\\(\\{]"
+        }, {
+            token : "paren.rparen",
+            regex : "[\\]]"
+        }, {
+            token : "paren.rparen",
+            regex : "[\\)\\}]",
+            next : "pop"
+        }],
+        variables: [{
+            token : "variable",
+            regex : /(\$)(\w+)/
+        }, {
+            token : ["variable", "paren.lparen"],
+            regex : /(\$)(\()/,
+            push : "start"
+        }, {
+            token : ["variable", "paren.lparen", "keyword.operator", "variable", "keyword.operator"],
+            regex : /(\$)(\{)([#!]?)(\w+|[*@#?\-$!0_])(:[?+\-=]?|##?|%%?|,,?\/|\^\^?)?/,
+            push : "start"
+        }, {
+            token : "variable",
+            regex : /\$[*@#?\-$!0_]/
+        }, {
+            token : ["variable", "paren.lparen"],
+            regex : /(\$)(\{)/,
+            push : "start"
+        }]
+    };
+    
+    this.normalizeRules();
+};
+
+oop.inherits(ShHighlightRules, TextHighlightRules);
+
+exports.ShHighlightRules = ShHighlightRules;
+});
+
+ace.define("ace/mode/sh",["require","exports","module","ace/lib/oop","ace/mode/text","ace/mode/sh_highlight_rules","ace/range","ace/mode/folding/cstyle","ace/mode/behaviour/cstyle"], function(require, exports, module) {
+"use strict";
+
+var oop = require("../lib/oop");
+var TextMode = require("./text").Mode;
+var ShHighlightRules = require("./sh_highlight_rules").ShHighlightRules;
+var Range = require("../range").Range;
+var CStyleFoldMode = require("./folding/cstyle").FoldMode;
+var CstyleBehaviour = require("./behaviour/cstyle").CstyleBehaviour;
+
+var Mode = function() {
+    this.HighlightRules = ShHighlightRules;
+    this.foldingRules = new CStyleFoldMode();
+    this.$behaviour = new CstyleBehaviour();
+};
+oop.inherits(Mode, TextMode);
+
+(function() {
+
+   
+    this.lineCommentStart = "#";
+
+    this.getNextLineIndent = function(state, line, tab) {
+        var indent = this.$getIndent(line);
+
+        var tokenizedLine = this.getTokenizer().getLineTokens(line, state);
+        var tokens = tokenizedLine.tokens;
+
+        if (tokens.length && tokens[tokens.length-1].type == "comment") {
+            return indent;
+        }
+
+        if (state == "start") {
+            var match = line.match(/^.*[\{\(\[:]\s*$/);
+            if (match) {
+                indent += tab;
+            }
+        }
+
+        return indent;
+    };
+
+    var outdents = {
+        "pass": 1,
+        "return": 1,
+        "raise": 1,
+        "break": 1,
+        "continue": 1
+    };
+
+    this.checkOutdent = function(state, line, input) {
+        if (input !== "\r\n" && input !== "\r" && input !== "\n")
+            return false;
+
+        var tokens = this.getTokenizer().getLineTokens(line.trim(), state).tokens;
+
+        if (!tokens)
+            return false;
+        do {
+            var last = tokens.pop();
+        } while (last && (last.type == "comment" || (last.type == "text" && last.value.match(/^\s+$/))));
+
+        if (!last)
+            return false;
+
+        return (last.type == "keyword" && outdents[last.value]);
+    };
+
+    this.autoOutdent = function(state, doc, row) {
+
+        row += 1;
+        var indent = this.$getIndent(doc.getLine(row));
+        var tab = doc.getTabString();
+        if (indent.slice(-tab.length) == tab)
+            doc.remove(new Range(row, indent.length-tab.length, row, indent.length));
+    };
+
+    this.$id = "ace/mode/sh";
+}).call(Mode.prototype);
+
+exports.Mode = Mode;
+});
+
+ace.define("ace/mode/markdown",["require","exports","module","ace/lib/oop","ace/mode/text","ace/mode/javascript","ace/mode/xml","ace/mode/html","ace/mode/markdown_highlight_rules","ace/mode/folding/markdown","ace/mode/javascript","ace/mode/html","ace/mode/sh","ace/mode/sh","ace/mode/xml","ace/mode/css"], function(require, exports, module) {
+"use strict";
+
+var oop = require("../lib/oop");
+var TextMode = require("./text").Mode;
+var JavaScriptMode = require("./javascript").Mode;
+var XmlMode = require("./xml").Mode;
+var HtmlMode = require("./html").Mode;
+var MarkdownHighlightRules = require("./markdown_highlight_rules").MarkdownHighlightRules;
+var MarkdownFoldMode = require("./folding/markdown").FoldMode;
+
+var Mode = function() {
+    this.HighlightRules = MarkdownHighlightRules;
+
+    this.createModeDelegates({
+        javascript: require("./javascript").Mode,
+        html: require("./html").Mode,
+        bash: require("./sh").Mode,
+        sh: require("./sh").Mode,
+        xml: require("./xml").Mode,
+        css: require("./css").Mode
+    });
+
+    this.foldingRules = new MarkdownFoldMode();
+    this.$behaviour = this.$defaultBehaviour;
+};
+oop.inherits(Mode, TextMode);
+
+(function() {
+    this.type = "text";
+    this.blockComment = {start: "<!--", end: "-->"};
+    this.$quotes = {'"': '"', "`": "`"};
+
+    this.getNextLineIndent = function(state, line, tab) {
+        if (state == "listblock") {
+            var match = /^(\s*)(?:([-+*])|(\d+)\.)(\s+)/.exec(line);
+            if (!match)
+                return "";
+            var marker = match[2];
+            if (!marker)
+                marker = parseInt(match[3], 10) + 1 + ".";
+            return match[1] + marker + match[4];
+        } else {
+            return this.$getIndent(line);
+        }
+    };
+    this.$id = "ace/mode/markdown";
+}).call(Mode.prototype);
+
+exports.Mode = Mode;
+});                (function() {
+                    ace.require(["ace/mode/markdown"], function(m) {
+                        if (typeof module == "object" && typeof exports == "object" && module) {
+                            module.exports = m;
+                        }
+                    });
+                })();
+            
\ No newline at end of file
index 60ad87bc0f98f45056b8c233b5e8db6449fd4ff2..7759121a120fb960c907a0eaecb8c718f0b4a907 100644 (file)
@@ -190,4 +190,8 @@ form {
        position: relative;
        width: 100%;
        min-height: 24rem;
+}
+
+.problem-description {
+       font-size: 1.2rem;
 }
\ No newline at end of file
index 611713c281e466fa54357e0486fcb2d5df602f36..794090841b4e3ef13b42e2a864b7f024bd035273 100644 (file)
@@ -6,34 +6,36 @@ class AdminProblemEdit extends html.Widget
                h1 "Editing '#{@problem.name}'"
 
                div class: 'content', ->
-                       div class: 'split-2', ->
-                               div ->
-                                       h2 class: 'pad-l-12', 'Problem info'
-                                       form method: 'POST', ->
-                                               input type: 'hidden', name: 'csrf_token', value: @csrf_token
-                                               input type: 'hidden', name: 'problem_id', value: @problem.id
+                       div ->
+                               h2 class: 'pad-l-12', 'Problem info'
+                               form method: 'POST', ->
+                                       input type: 'hidden', name: 'csrf_token', value: @csrf_token
+                                       input type: 'hidden', name: 'problem_id', value: @problem.id
 
-                                               label for: 'name', 'Problem name'
-                                               input type: 'text', name: 'name', placeholder: 'Problem name', value: @problem.name, ""
+                                       label for: 'name', 'Problem name'
+                                       input type: 'text', name: 'name', placeholder: 'Problem name', value: @problem.name, ""
 
-                                               label for: 'name', 'Short name'
-                                               input type: 'text', name: 'short_name', placeholder: 'Short URL name', value: @problem.short_name, ""
+                                       div class: 'split-2', ->
+                                               div ->
+                                                       label for: 'name', 'Short name'
+                                                       input type: 'text', name: 'short_name', placeholder: 'Short URL name', value: @problem.short_name, ""
 
-                                               label for: 'name', 'Problem description'
-                                               textarea name: 'description', placeholder: 'Problem description', @problem.description
+                                               div ->
+                                                       label for: 'name', 'Time limit'
+                                                       input type: 'number', value: 500, name: 'time_limit', value: @problem.time_limit, ""
 
-                                               label for: 'name', 'Time limit'
-                                               input type: 'number', value: 500, name: 'time_limit', value: @problem.time_limit, ""
+                                       div class: 'header-line', -> div 'Problem description'
+                                       pre { style: 'height: 32rem;', id: 'code-editor', 'data-lang': 'markdown' }, @problem.description
 
-                                               input type: 'submit', value: 'Update problem info'
+                                       input class: 'mar-t-24', type: 'submit', value: 'Update problem info'
 
-                               div ->
-                                       h2 class: 'pad-l-12', 'Test cases' 
+                       div class: 'mar-t-24', ->
+                               h2 class: 'pad-l-12', 'Test cases' 
 
-                                       div class: 'test-cases', ->
-                                               for test_case in *@test_cases
-                                                       widget (TestCase test_case.testcase_order, test_case.uuid, test_case.input, test_case.output)
+                               div class: 'test-cases', ->
+                                       for test_case in *@test_cases
+                                               widget (TestCase test_case.testcase_order, test_case.uuid, test_case.input, test_case.output)
 
-                                       button { 'data-new-tc': @problem.short_name }, 'New test case'
-                                       button { 'data-tc-save-all': true }, 'Save all'
+                               button { 'data-new-tc': @problem.short_name }, 'New test case'
+                               button { 'data-tc-save-all': true }, 'Save all'
        
\ No newline at end of file
index 2f710ab1388d5aa6ec3846836ff7b1091625c0b8..78d7a247a4fcb9334a18f5e52a077f9b66b4439b 100644 (file)
@@ -3,6 +3,9 @@ markdown = require "markdown"
 
 class Problems extends html.Widget
        content: =>
+               raw '<script src="https://polyfill.io/v3/polyfill.min.js?features=es6"></script>
+                       <script id="MathJax-script" async src="https://cdn.jsdelivr.net/npm/mathjax@3/es5/tex-mml-chtml.js"></script>'
+
                div class: 'sidebar-page-container', ->
                        div class: 'sidebar-problem-list', ->
                                widget (require 'views.partials.problem_sidebar')
@@ -56,4 +59,5 @@ class Problems extends html.Widget
                                                                p style: "color: #777777", -> text "Other error"
                                                                p "#{error}"
 
-                                       raw (markdown @problem.description)
+                                       div class: 'problem-description', ->
+                                               raw (markdown @problem.description)