{"version":3,"sources":["webpack:///(webpack)/buildin/module.js","webpack:///./node_modules/css-loader/dist/runtime/getUrl.js","webpack:///./node_modules/@babel/runtime/regenerator/index.js","webpack:///(webpack)/buildin/global.js","webpack:///(webpack)/buildin/amd-define.js","webpack:///./node_modules/@rails/actioncable/app/assets/javascripts/action_cable.js","webpack:///./node_modules/regenerator-runtime/runtime.js","webpack:///./node_modules/ace-builds/src-noconflict/ace.js","webpack:///./node_modules/ace-builds/src-noconflict/mode-javascript.js","webpack:///./node_modules/ace-builds/src-noconflict/mode-css.js","webpack:///./node_modules/ace-builds/src-noconflict/mode-json.js","webpack:///./node_modules/ace-builds/src-noconflict/mode-html.js","webpack:///./node_modules/ace-builds/src-noconflict/theme-monokai.js","webpack:///./node_modules/ace-builds/src-noconflict/theme-iplastic.js","webpack:///./node_modules/ace-builds/webpack-resolver.js","webpack:///./node_modules/ace-builds/src-noconflict/ext-beautify.js","webpack:///./node_modules/ace-builds/src-noconflict/ext-code_lens.js","webpack:///./node_modules/ace-builds/src-noconflict/ext-elastic_tabstops_lite.js","webpack:///./node_modules/ace-builds/src-noconflict/ext-emmet.js","webpack:///./node_modules/ace-builds/src-noconflict/ext-error_marker.js","webpack:///./node_modules/ace-builds/src-noconflict/ext-keybinding_menu.js","webpack:///./node_modules/ace-builds/src-noconflict/ext-language_tools.js?e37c","webpack:///./node_modules/ace-builds/src-noconflict/ext-linking.js","webpack:///./node_modules/ace-builds/src-noconflict/ext-modelist.js","webpack:///./node_modules/ace-builds/src-noconflict/ext-options.js","webpack:///./node_modules/ace-builds/src-noconflict/ext-prompt.js","webpack:///./node_modules/ace-builds/src-noconflict/ext-rtl.js","webpack:///./node_modules/ace-builds/src-noconflict/ext-searchbox.js","webpack:///./node_modules/ace-builds/src-noconflict/ext-settings_menu.js","webpack:///./node_modules/ace-builds/src-noconflict/ext-spellcheck.js","webpack:///./node_modules/ace-builds/src-noconflict/ext-split.js","webpack:///./node_modules/ace-builds/src-noconflict/ext-static_highlight.js","webpack:///./node_modules/ace-builds/src-noconflict/ext-statusbar.js","webpack:///./node_modules/ace-builds/src-noconflict/ext-textarea.js","webpack:///./node_modules/ace-builds/src-noconflict/ext-themelist.js","webpack:///./node_modules/ace-builds/src-noconflict/ext-whitespace.js","webpack:///./node_modules/ace-builds/src-noconflict/keybinding-emacs.js","webpack:///./node_modules/ace-builds/src-noconflict/keybinding-sublime.js","webpack:///./node_modules/ace-builds/src-noconflict/keybinding-vim.js","webpack:///./node_modules/ace-builds/src-noconflict/keybinding-vscode.js","webpack:///./node_modules/ace-builds/src-noconflict/mode-abap.js","webpack:///./node_modules/ace-builds/src-noconflict/mode-abc.js","webpack:///./node_modules/ace-builds/src-noconflict/mode-actionscript.js","webpack:///./node_modules/ace-builds/src-noconflict/mode-ada.js","webpack:///./node_modules/ace-builds/src-noconflict/mode-alda.js","webpack:///./node_modules/ace-builds/src-noconflict/mode-apache_conf.js","webpack:///./node_modules/ace-builds/src-noconflict/mode-apex.js","webpack:///./node_modules/ace-builds/src-noconflict/mode-applescript.js","webpack:///./node_modules/ace-builds/src-noconflict/mode-aql.js","webpack:///./node_modules/ace-builds/src-noconflict/mode-asciidoc.js","webpack:///./node_modules/ace-builds/src-noconflict/mode-asl.js","webpack:///./node_modules/ace-builds/src-noconflict/mode-assembly_x86.js","webpack:///./node_modules/ace-builds/src-noconflict/mode-autohotkey.js","webpack:///./node_modules/ace-builds/src-noconflict/mode-batchfile.js","webpack:///./node_modules/ace-builds/src-noconflict/mode-c9search.js","webpack:///./node_modules/ace-builds/src-noconflict/mode-cirru.js","webpack:///./node_modules/ace-builds/src-noconflict/mode-clojure.js","webpack:///./node_modules/ace-builds/src-noconflict/mode-cobol.js","webpack:///./node_modules/ace-builds/src-noconflict/mode-coffee.js","webpack:///./node_modules/ace-builds/src-noconflict/mode-coldfusion.js","webpack:///./node_modules/ace-builds/src-noconflict/mode-crystal.js","webpack:///./node_modules/ace-builds/src-noconflict/mode-csharp.js","webpack:///./node_modules/ace-builds/src-noconflict/mode-csound_document.js","webpack:///./node_modules/ace-builds/src-noconflict/mode-csound_orchestra.js","webpack:///./node_modules/ace-builds/src-noconflict/mode-csound_score.js","webpack:///./node_modules/ace-builds/src-noconflict/mode-csp.js","webpack:///./node_modules/ace-builds/src-noconflict/mode-css.js?f107","webpack:///./node_modules/ace-builds/src-noconflict/mode-curly.js","webpack:///./node_modules/ace-builds/src-noconflict/mode-c_cpp.js","webpack:///./node_modules/ace-builds/src-noconflict/mode-d.js","webpack:///./node_modules/ace-builds/src-noconflict/mode-dart.js","webpack:///./node_modules/ace-builds/src-noconflict/mode-diff.js","webpack:///./node_modules/ace-builds/src-noconflict/mode-django.js","webpack:///./node_modules/ace-builds/src-noconflict/mode-dockerfile.js","webpack:///./node_modules/ace-builds/src-noconflict/mode-dot.js","webpack:///./node_modules/ace-builds/src-noconflict/mode-drools.js","webpack:///./node_modules/ace-builds/src-noconflict/mode-edifact.js","webpack:///./node_modules/ace-builds/src-noconflict/mode-eiffel.js","webpack:///./node_modules/ace-builds/src-noconflict/mode-ejs.js","webpack:///./node_modules/ace-builds/src-noconflict/mode-elixir.js","webpack:///./node_modules/ace-builds/src-noconflict/mode-elm.js","webpack:///./node_modules/ace-builds/src-noconflict/mode-erlang.js","webpack:///./node_modules/ace-builds/src-noconflict/mode-forth.js","webpack:///./node_modules/ace-builds/src-noconflict/mode-fortran.js","webpack:///./node_modules/ace-builds/src-noconflict/mode-fsharp.js","webpack:///./node_modules/ace-builds/src-noconflict/mode-fsl.js","webpack:///./node_modules/ace-builds/src-noconflict/mode-ftl.js","webpack:///./node_modules/ace-builds/src-noconflict/mode-gcode.js","webpack:///./node_modules/ace-builds/src-noconflict/mode-gherkin.js","webpack:///./node_modules/ace-builds/src-noconflict/mode-gitignore.js","webpack:///./node_modules/ace-builds/src-noconflict/mode-glsl.js","webpack:///./node_modules/ace-builds/src-noconflict/mode-gobstones.js","webpack:///./node_modules/ace-builds/src-noconflict/mode-golang.js","webpack:///./node_modules/ace-builds/src-noconflict/mode-graphqlschema.js","webpack:///./node_modules/ace-builds/src-noconflict/mode-groovy.js","webpack:///./node_modules/ace-builds/src-noconflict/mode-haml.js","webpack:///./node_modules/ace-builds/src-noconflict/mode-handlebars.js","webpack:///./node_modules/ace-builds/src-noconflict/mode-haskell.js","webpack:///./node_modules/ace-builds/src-noconflict/mode-haskell_cabal.js","webpack:///./node_modules/ace-builds/src-noconflict/mode-haxe.js","webpack:///./node_modules/ace-builds/src-noconflict/mode-hjson.js","webpack:///./node_modules/ace-builds/src-noconflict/mode-html.js?8f65","webpack:///./node_modules/ace-builds/src-noconflict/mode-html_elixir.js","webpack:///./node_modules/ace-builds/src-noconflict/mode-html_ruby.js","webpack:///./node_modules/ace-builds/src-noconflict/mode-ini.js","webpack:///./node_modules/ace-builds/src-noconflict/mode-io.js","webpack:///./node_modules/ace-builds/src-noconflict/mode-jack.js","webpack:///./node_modules/ace-builds/src-noconflict/mode-jade.js","webpack:///./node_modules/ace-builds/src-noconflict/mode-java.js","webpack:///./node_modules/ace-builds/src-noconflict/mode-javascript.js?948e","webpack:///./node_modules/ace-builds/src-noconflict/mode-json.js?7534","webpack:///./node_modules/ace-builds/src-noconflict/mode-json5.js","webpack:///./node_modules/ace-builds/src-noconflict/mode-jsoniq.js","webpack:///./node_modules/ace-builds/src-noconflict/mode-jsp.js","webpack:///./node_modules/ace-builds/src-noconflict/mode-jssm.js","webpack:///./node_modules/ace-builds/src-noconflict/mode-jsx.js","webpack:///./node_modules/ace-builds/src-noconflict/mode-julia.js","webpack:///./node_modules/ace-builds/src-noconflict/mode-kotlin.js","webpack:///./node_modules/ace-builds/src-noconflict/mode-latex.js","webpack:///./node_modules/ace-builds/src-noconflict/mode-less.js","webpack:///./node_modules/ace-builds/src-noconflict/mode-liquid.js","webpack:///./node_modules/ace-builds/src-noconflict/mode-lisp.js","webpack:///./node_modules/ace-builds/src-noconflict/mode-livescript.js","webpack:///./node_modules/ace-builds/src-noconflict/mode-logiql.js","webpack:///./node_modules/ace-builds/src-noconflict/mode-logtalk.js","webpack:///./node_modules/ace-builds/src-noconflict/mode-lsl.js","webpack:///./node_modules/ace-builds/src-noconflict/mode-lua.js","webpack:///./node_modules/ace-builds/src-noconflict/mode-luapage.js","webpack:///./node_modules/ace-builds/src-noconflict/mode-lucene.js","webpack:///./node_modules/ace-builds/src-noconflict/mode-makefile.js","webpack:///./node_modules/ace-builds/src-noconflict/mode-markdown.js","webpack:///./node_modules/ace-builds/src-noconflict/mode-mask.js","webpack:///./node_modules/ace-builds/src-noconflict/mode-matlab.js","webpack:///./node_modules/ace-builds/src-noconflict/mode-maze.js","webpack:///./node_modules/ace-builds/src-noconflict/mode-mediawiki.js","webpack:///./node_modules/ace-builds/src-noconflict/mode-mel.js","webpack:///./node_modules/ace-builds/src-noconflict/mode-mixal.js","webpack:///./node_modules/ace-builds/src-noconflict/mode-mushcode.js","webpack:///./node_modules/ace-builds/src-noconflict/mode-mysql.js","webpack:///./node_modules/ace-builds/src-noconflict/mode-nginx.js","webpack:///./node_modules/ace-builds/src-noconflict/mode-nim.js","webpack:///./node_modules/ace-builds/src-noconflict/mode-nix.js","webpack:///./node_modules/ace-builds/src-noconflict/mode-nsis.js","webpack:///./node_modules/ace-builds/src-noconflict/mode-nunjucks.js","webpack:///./node_modules/ace-builds/src-noconflict/mode-objectivec.js","webpack:///./node_modules/ace-builds/src-noconflict/mode-ocaml.js","webpack:///./node_modules/ace-builds/src-noconflict/mode-pascal.js","webpack:///./node_modules/ace-builds/src-noconflict/mode-perl.js","webpack:///./node_modules/ace-builds/src-noconflict/mode-pgsql.js","webpack:///./node_modules/ace-builds/src-noconflict/mode-php.js","webpack:///./node_modules/ace-builds/src-noconflict/mode-php_laravel_blade.js","webpack:///./node_modules/ace-builds/src-noconflict/mode-pig.js","webpack:///./node_modules/ace-builds/src-noconflict/mode-plain_text.js","webpack:///./node_modules/ace-builds/src-noconflict/mode-powershell.js","webpack:///./node_modules/ace-builds/src-noconflict/mode-praat.js","webpack:///./node_modules/ace-builds/src-noconflict/mode-prisma.js","webpack:///./node_modules/ace-builds/src-noconflict/mode-prolog.js","webpack:///./node_modules/ace-builds/src-noconflict/mode-properties.js","webpack:///./node_modules/ace-builds/src-noconflict/mode-protobuf.js","webpack:///./node_modules/ace-builds/src-noconflict/mode-puppet.js","webpack:///./node_modules/ace-builds/src-noconflict/mode-python.js","webpack:///./node_modules/ace-builds/src-noconflict/mode-qml.js","webpack:///./node_modules/ace-builds/src-noconflict/mode-r.js","webpack:///./node_modules/ace-builds/src-noconflict/mode-razor.js","webpack:///./node_modules/ace-builds/src-noconflict/mode-rdoc.js","webpack:///./node_modules/ace-builds/src-noconflict/mode-red.js","webpack:///./node_modules/ace-builds/src-noconflict/mode-redshift.js","webpack:///./node_modules/ace-builds/src-noconflict/mode-rhtml.js","webpack:///./node_modules/ace-builds/src-noconflict/mode-rst.js","webpack:///./node_modules/ace-builds/src-noconflict/mode-ruby.js","webpack:///./node_modules/ace-builds/src-noconflict/mode-rust.js","webpack:///./node_modules/ace-builds/src-noconflict/mode-sass.js","webpack:///./node_modules/ace-builds/src-noconflict/mode-scad.js","webpack:///./node_modules/ace-builds/src-noconflict/mode-scala.js","webpack:///./node_modules/ace-builds/src-noconflict/mode-scheme.js","webpack:///./node_modules/ace-builds/src-noconflict/mode-scss.js","webpack:///./node_modules/ace-builds/src-noconflict/mode-sh.js","webpack:///./node_modules/ace-builds/src-noconflict/mode-sjs.js","webpack:///./node_modules/ace-builds/src-noconflict/mode-slim.js","webpack:///./node_modules/ace-builds/src-noconflict/mode-smarty.js","webpack:///./node_modules/ace-builds/src-noconflict/mode-snippets.js","webpack:///./node_modules/ace-builds/src-noconflict/mode-soy_template.js","webpack:///./node_modules/ace-builds/src-noconflict/mode-space.js","webpack:///./node_modules/ace-builds/src-noconflict/mode-sparql.js","webpack:///./node_modules/ace-builds/src-noconflict/mode-sql.js","webpack:///./node_modules/ace-builds/src-noconflict/mode-sqlserver.js","webpack:///./node_modules/ace-builds/src-noconflict/mode-stylus.js","webpack:///./node_modules/ace-builds/src-noconflict/mode-svg.js","webpack:///./node_modules/ace-builds/src-noconflict/mode-swift.js","webpack:///./node_modules/ace-builds/src-noconflict/mode-tcl.js","webpack:///./node_modules/ace-builds/src-noconflict/mode-terraform.js","webpack:///./node_modules/ace-builds/src-noconflict/mode-tex.js","webpack:///./node_modules/ace-builds/src-noconflict/mode-text.js","webpack:///./node_modules/ace-builds/src-noconflict/mode-textile.js","webpack:///./node_modules/ace-builds/src-noconflict/mode-toml.js","webpack:///./node_modules/ace-builds/src-noconflict/mode-tsx.js","webpack:///./node_modules/ace-builds/src-noconflict/mode-turtle.js","webpack:///./node_modules/ace-builds/src-noconflict/mode-twig.js","webpack:///./node_modules/ace-builds/src-noconflict/mode-typescript.js","webpack:///./node_modules/ace-builds/src-noconflict/mode-vala.js","webpack:///./node_modules/ace-builds/src-noconflict/mode-vbscript.js","webpack:///./node_modules/ace-builds/src-noconflict/mode-velocity.js","webpack:///./node_modules/ace-builds/src-noconflict/mode-verilog.js","webpack:///./node_modules/ace-builds/src-noconflict/mode-vhdl.js","webpack:///./node_modules/ace-builds/src-noconflict/mode-visualforce.js","webpack:///./node_modules/ace-builds/src-noconflict/mode-wollok.js","webpack:///./node_modules/ace-builds/src-noconflict/mode-xml.js","webpack:///./node_modules/ace-builds/src-noconflict/mode-xquery.js","webpack:///./node_modules/ace-builds/src-noconflict/mode-yaml.js","webpack:///./node_modules/ace-builds/src-noconflict/mode-zeek.js","webpack:///./node_modules/ace-builds/src-noconflict/theme-ambiance.js","webpack:///./node_modules/ace-builds/src-noconflict/theme-chaos.js","webpack:///./node_modules/ace-builds/src-noconflict/theme-chrome.js","webpack:///./node_modules/ace-builds/src-noconflict/theme-clouds.js","webpack:///./node_modules/ace-builds/src-noconflict/theme-clouds_midnight.js","webpack:///./node_modules/ace-builds/src-noconflict/theme-cobalt.js","webpack:///./node_modules/ace-builds/src-noconflict/theme-crimson_editor.js","webpack:///./node_modules/ace-builds/src-noconflict/theme-dawn.js","webpack:///./node_modules/ace-builds/src-noconflict/theme-dracula.js","webpack:///./node_modules/ace-builds/src-noconflict/theme-dreamweaver.js","webpack:///./node_modules/ace-builds/src-noconflict/theme-eclipse.js","webpack:///./node_modules/ace-builds/src-noconflict/theme-github.js","webpack:///./node_modules/ace-builds/src-noconflict/theme-gob.js","webpack:///./node_modules/ace-builds/src-noconflict/theme-gruvbox.js","webpack:///./node_modules/ace-builds/src-noconflict/theme-idle_fingers.js","webpack:///./node_modules/ace-builds/src-noconflict/theme-iplastic.js?a082","webpack:///./node_modules/ace-builds/src-noconflict/theme-katzenmilch.js","webpack:///./node_modules/ace-builds/src-noconflict/theme-kr_theme.js","webpack:///./node_modules/ace-builds/src-noconflict/theme-kuroir.js","webpack:///./node_modules/ace-builds/src-noconflict/theme-merbivore.js","webpack:///./node_modules/ace-builds/src-noconflict/theme-merbivore_soft.js","webpack:///./node_modules/ace-builds/src-noconflict/theme-monokai.js?8f8a","webpack:///./node_modules/ace-builds/src-noconflict/theme-mono_industrial.js","webpack:///./node_modules/ace-builds/src-noconflict/theme-nord_dark.js","webpack:///./node_modules/ace-builds/src-noconflict/theme-pastel_on_dark.js","webpack:///./node_modules/ace-builds/src-noconflict/theme-solarized_dark.js","webpack:///./node_modules/ace-builds/src-noconflict/theme-solarized_light.js","webpack:///./node_modules/ace-builds/src-noconflict/theme-sqlserver.js","webpack:///./node_modules/ace-builds/src-noconflict/theme-terminal.js","webpack:///./node_modules/ace-builds/src-noconflict/theme-textmate.js","webpack:///./node_modules/ace-builds/src-noconflict/theme-tomorrow.js","webpack:///./node_modules/ace-builds/src-noconflict/theme-tomorrow_night.js","webpack:///./node_modules/ace-builds/src-noconflict/theme-tomorrow_night_blue.js","webpack:///./node_modules/ace-builds/src-noconflict/theme-tomorrow_night_bright.js","webpack:///./node_modules/ace-builds/src-noconflict/theme-tomorrow_night_eighties.js","webpack:///./node_modules/ace-builds/src-noconflict/theme-twilight.js","webpack:///./node_modules/ace-builds/src-noconflict/theme-vibrant_ink.js","webpack:///./node_modules/ace-builds/src-noconflict/theme-xcode.js","webpack:///./node_modules/ace-builds/src-noconflict/worker-base.js","webpack:///./node_modules/ace-builds/src-noconflict/worker-coffee.js","webpack:///./node_modules/ace-builds/src-noconflict/worker-css.js","webpack:///./node_modules/ace-builds/src-noconflict/worker-html.js","webpack:///./node_modules/ace-builds/src-noconflict/worker-javascript.js","webpack:///./node_modules/ace-builds/src-noconflict/worker-json.js","webpack:///./node_modules/ace-builds/src-noconflict/worker-lua.js","webpack:///./node_modules/ace-builds/src-noconflict/worker-php.js","webpack:///./node_modules/ace-builds/src-noconflict/worker-xml.js","webpack:///./node_modules/ace-builds/src-noconflict/worker-xquery.js","webpack:///./node_modules/ace-builds/src-noconflict/snippets/abap.js","webpack:///./node_modules/ace-builds/src-noconflict/snippets/abc.js","webpack:///./node_modules/ace-builds/src-noconflict/snippets/actionscript.js","webpack:///./node_modules/ace-builds/src-noconflict/snippets/ada.js","webpack:///./node_modules/ace-builds/src-noconflict/snippets/alda.js","webpack:///./node_modules/ace-builds/src-noconflict/snippets/apache_conf.js","webpack:///./node_modules/ace-builds/src-noconflict/snippets/apex.js","webpack:///./node_modules/ace-builds/src-noconflict/snippets/applescript.js","webpack:///./node_modules/ace-builds/src-noconflict/snippets/aql.js","webpack:///./node_modules/ace-builds/src-noconflict/snippets/asciidoc.js","webpack:///./node_modules/ace-builds/src-noconflict/snippets/asl.js","webpack:///./node_modules/ace-builds/src-noconflict/snippets/assembly_x86.js","webpack:///./node_modules/ace-builds/src-noconflict/snippets/autohotkey.js","webpack:///./node_modules/ace-builds/src-noconflict/snippets/batchfile.js","webpack:///./node_modules/ace-builds/src-noconflict/snippets/c9search.js","webpack:///./node_modules/ace-builds/src-noconflict/snippets/cirru.js","webpack:///./node_modules/ace-builds/src-noconflict/snippets/clojure.js","webpack:///./node_modules/ace-builds/src-noconflict/snippets/cobol.js","webpack:///./node_modules/ace-builds/src-noconflict/snippets/coffee.js","webpack:///./node_modules/ace-builds/src-noconflict/snippets/coldfusion.js","webpack:///./node_modules/ace-builds/src-noconflict/snippets/crystal.js","webpack:///./node_modules/ace-builds/src-noconflict/snippets/csharp.js","webpack:///./node_modules/ace-builds/src-noconflict/snippets/csound_document.js","webpack:///./node_modules/ace-builds/src-noconflict/snippets/csound_orchestra.js","webpack:///./node_modules/ace-builds/src-noconflict/snippets/csound_score.js","webpack:///./node_modules/ace-builds/src-noconflict/snippets/csp.js","webpack:///./node_modules/ace-builds/src-noconflict/snippets/css.js","webpack:///./node_modules/ace-builds/src-noconflict/snippets/curly.js","webpack:///./node_modules/ace-builds/src-noconflict/snippets/c_cpp.js","webpack:///./node_modules/ace-builds/src-noconflict/snippets/d.js","webpack:///./node_modules/ace-builds/src-noconflict/snippets/dart.js","webpack:///./node_modules/ace-builds/src-noconflict/snippets/diff.js","webpack:///./node_modules/ace-builds/src-noconflict/snippets/django.js","webpack:///./node_modules/ace-builds/src-noconflict/snippets/dockerfile.js","webpack:///./node_modules/ace-builds/src-noconflict/snippets/dot.js","webpack:///./node_modules/ace-builds/src-noconflict/snippets/drools.js","webpack:///./node_modules/ace-builds/src-noconflict/snippets/edifact.js","webpack:///./node_modules/ace-builds/src-noconflict/snippets/eiffel.js","webpack:///./node_modules/ace-builds/src-noconflict/snippets/ejs.js","webpack:///./node_modules/ace-builds/src-noconflict/snippets/elixir.js","webpack:///./node_modules/ace-builds/src-noconflict/snippets/elm.js","webpack:///./node_modules/ace-builds/src-noconflict/snippets/erlang.js","webpack:///./node_modules/ace-builds/src-noconflict/snippets/forth.js","webpack:///./node_modules/ace-builds/src-noconflict/snippets/fortran.js","webpack:///./node_modules/ace-builds/src-noconflict/snippets/fsharp.js","webpack:///./node_modules/ace-builds/src-noconflict/snippets/fsl.js","webpack:///./node_modules/ace-builds/src-noconflict/snippets/ftl.js","webpack:///./node_modules/ace-builds/src-noconflict/snippets/gcode.js","webpack:///./node_modules/ace-builds/src-noconflict/snippets/gherkin.js","webpack:///./node_modules/ace-builds/src-noconflict/snippets/gitignore.js","webpack:///./node_modules/ace-builds/src-noconflict/snippets/glsl.js","webpack:///./node_modules/ace-builds/src-noconflict/snippets/gobstones.js","webpack:///./node_modules/ace-builds/src-noconflict/snippets/golang.js","webpack:///./node_modules/ace-builds/src-noconflict/snippets/graphqlschema.js","webpack:///./node_modules/ace-builds/src-noconflict/snippets/groovy.js","webpack:///./node_modules/ace-builds/src-noconflict/snippets/haml.js","webpack:///./node_modules/ace-builds/src-noconflict/snippets/handlebars.js","webpack:///./node_modules/ace-builds/src-noconflict/snippets/haskell.js","webpack:///./node_modules/ace-builds/src-noconflict/snippets/haskell_cabal.js","webpack:///./node_modules/ace-builds/src-noconflict/snippets/haxe.js","webpack:///./node_modules/ace-builds/src-noconflict/snippets/hjson.js","webpack:///./node_modules/ace-builds/src-noconflict/snippets/html.js","webpack:///./node_modules/ace-builds/src-noconflict/snippets/html_elixir.js","webpack:///./node_modules/ace-builds/src-noconflict/snippets/html_ruby.js","webpack:///./node_modules/ace-builds/src-noconflict/snippets/ini.js","webpack:///./node_modules/ace-builds/src-noconflict/snippets/io.js","webpack:///./node_modules/ace-builds/src-noconflict/snippets/jack.js","webpack:///./node_modules/ace-builds/src-noconflict/snippets/jade.js","webpack:///./node_modules/ace-builds/src-noconflict/snippets/java.js","webpack:///./node_modules/ace-builds/src-noconflict/snippets/javascript.js","webpack:///./node_modules/ace-builds/src-noconflict/snippets/json.js","webpack:///./node_modules/ace-builds/src-noconflict/snippets/json5.js","webpack:///./node_modules/ace-builds/src-noconflict/snippets/jsoniq.js","webpack:///./node_modules/ace-builds/src-noconflict/snippets/jsp.js","webpack:///./node_modules/ace-builds/src-noconflict/snippets/jssm.js","webpack:///./node_modules/ace-builds/src-noconflict/snippets/jsx.js","webpack:///./node_modules/ace-builds/src-noconflict/snippets/julia.js","webpack:///./node_modules/ace-builds/src-noconflict/snippets/kotlin.js","webpack:///./node_modules/ace-builds/src-noconflict/snippets/latex.js","webpack:///./node_modules/ace-builds/src-noconflict/snippets/less.js","webpack:///./node_modules/ace-builds/src-noconflict/snippets/liquid.js","webpack:///./node_modules/ace-builds/src-noconflict/snippets/lisp.js","webpack:///./node_modules/ace-builds/src-noconflict/snippets/livescript.js","webpack:///./node_modules/ace-builds/src-noconflict/snippets/logiql.js","webpack:///./node_modules/ace-builds/src-noconflict/snippets/logtalk.js","webpack:///./node_modules/ace-builds/src-noconflict/snippets/lsl.js","webpack:///./node_modules/ace-builds/src-noconflict/snippets/lua.js","webpack:///./node_modules/ace-builds/src-noconflict/snippets/luapage.js","webpack:///./node_modules/ace-builds/src-noconflict/snippets/lucene.js","webpack:///./node_modules/ace-builds/src-noconflict/snippets/makefile.js","webpack:///./node_modules/ace-builds/src-noconflict/snippets/markdown.js","webpack:///./node_modules/ace-builds/src-noconflict/snippets/mask.js","webpack:///./node_modules/ace-builds/src-noconflict/snippets/matlab.js","webpack:///./node_modules/ace-builds/src-noconflict/snippets/maze.js","webpack:///./node_modules/ace-builds/src-noconflict/snippets/mediawiki.js","webpack:///./node_modules/ace-builds/src-noconflict/snippets/mel.js","webpack:///./node_modules/ace-builds/src-noconflict/snippets/mixal.js","webpack:///./node_modules/ace-builds/src-noconflict/snippets/mushcode.js","webpack:///./node_modules/ace-builds/src-noconflict/snippets/mysql.js","webpack:///./node_modules/ace-builds/src-noconflict/snippets/nginx.js","webpack:///./node_modules/ace-builds/src-noconflict/snippets/nim.js","webpack:///./node_modules/ace-builds/src-noconflict/snippets/nix.js","webpack:///./node_modules/ace-builds/src-noconflict/snippets/nsis.js","webpack:///./node_modules/ace-builds/src-noconflict/snippets/nunjucks.js","webpack:///./node_modules/ace-builds/src-noconflict/snippets/objectivec.js","webpack:///./node_modules/ace-builds/src-noconflict/snippets/ocaml.js","webpack:///./node_modules/ace-builds/src-noconflict/snippets/pascal.js","webpack:///./node_modules/ace-builds/src-noconflict/snippets/perl.js","webpack:///./node_modules/ace-builds/src-noconflict/snippets/pgsql.js","webpack:///./node_modules/ace-builds/src-noconflict/snippets/php.js","webpack:///./node_modules/ace-builds/src-noconflict/snippets/php_laravel_blade.js","webpack:///./node_modules/ace-builds/src-noconflict/snippets/pig.js","webpack:///./node_modules/ace-builds/src-noconflict/snippets/plain_text.js","webpack:///./node_modules/ace-builds/src-noconflict/snippets/powershell.js","webpack:///./node_modules/ace-builds/src-noconflict/snippets/praat.js","webpack:///./node_modules/ace-builds/src-noconflict/snippets/prisma.js","webpack:///./node_modules/ace-builds/src-noconflict/snippets/prolog.js","webpack:///./node_modules/ace-builds/src-noconflict/snippets/properties.js","webpack:///./node_modules/ace-builds/src-noconflict/snippets/protobuf.js","webpack:///./node_modules/ace-builds/src-noconflict/snippets/puppet.js","webpack:///./node_modules/ace-builds/src-noconflict/snippets/python.js","webpack:///./node_modules/ace-builds/src-noconflict/snippets/qml.js","webpack:///./node_modules/ace-builds/src-noconflict/snippets/r.js","webpack:///./node_modules/ace-builds/src-noconflict/snippets/razor.js","webpack:///./node_modules/ace-builds/src-noconflict/snippets/rdoc.js","webpack:///./node_modules/ace-builds/src-noconflict/snippets/red.js","webpack:///./node_modules/ace-builds/src-noconflict/snippets/redshift.js","webpack:///./node_modules/ace-builds/src-noconflict/snippets/rhtml.js","webpack:///./node_modules/ace-builds/src-noconflict/snippets/rst.js","webpack:///./node_modules/ace-builds/src-noconflict/snippets/ruby.js","webpack:///./node_modules/ace-builds/src-noconflict/snippets/rust.js","webpack:///./node_modules/ace-builds/src-noconflict/snippets/sass.js","webpack:///./node_modules/ace-builds/src-noconflict/snippets/scad.js","webpack:///./node_modules/ace-builds/src-noconflict/snippets/scala.js","webpack:///./node_modules/ace-builds/src-noconflict/snippets/scheme.js","webpack:///./node_modules/ace-builds/src-noconflict/snippets/scss.js","webpack:///./node_modules/ace-builds/src-noconflict/snippets/sh.js","webpack:///./node_modules/ace-builds/src-noconflict/snippets/sjs.js","webpack:///./node_modules/ace-builds/src-noconflict/snippets/slim.js","webpack:///./node_modules/ace-builds/src-noconflict/snippets/smarty.js","webpack:///./node_modules/ace-builds/src-noconflict/snippets/snippets.js","webpack:///./node_modules/ace-builds/src-noconflict/snippets/soy_template.js","webpack:///./node_modules/ace-builds/src-noconflict/snippets/space.js","webpack:///./node_modules/ace-builds/src-noconflict/snippets/sparql.js","webpack:///./node_modules/ace-builds/src-noconflict/snippets/sql.js","webpack:///./node_modules/ace-builds/src-noconflict/snippets/sqlserver.js","webpack:///./node_modules/ace-builds/src-noconflict/snippets/stylus.js","webpack:///./node_modules/ace-builds/src-noconflict/snippets/svg.js","webpack:///./node_modules/ace-builds/src-noconflict/snippets/swift.js","webpack:///./node_modules/ace-builds/src-noconflict/snippets/tcl.js","webpack:///./node_modules/ace-builds/src-noconflict/snippets/terraform.js","webpack:///./node_modules/ace-builds/src-noconflict/snippets/tex.js","webpack:///./node_modules/ace-builds/src-noconflict/snippets/text.js","webpack:///./node_modules/ace-builds/src-noconflict/snippets/textile.js","webpack:///./node_modules/ace-builds/src-noconflict/snippets/toml.js","webpack:///./node_modules/ace-builds/src-noconflict/snippets/tsx.js","webpack:///./node_modules/ace-builds/src-noconflict/snippets/turtle.js","webpack:///./node_modules/ace-builds/src-noconflict/snippets/twig.js","webpack:///./node_modules/ace-builds/src-noconflict/snippets/typescript.js","webpack:///./node_modules/ace-builds/src-noconflict/snippets/vala.js","webpack:///./node_modules/ace-builds/src-noconflict/snippets/vbscript.js","webpack:///./node_modules/ace-builds/src-noconflict/snippets/velocity.js","webpack:///./node_modules/ace-builds/src-noconflict/snippets/verilog.js","webpack:///./node_modules/ace-builds/src-noconflict/snippets/vhdl.js","webpack:///./node_modules/ace-builds/src-noconflict/snippets/visualforce.js","webpack:///./node_modules/ace-builds/src-noconflict/snippets/wollok.js","webpack:///./node_modules/ace-builds/src-noconflict/snippets/xml.js","webpack:///./node_modules/ace-builds/src-noconflict/snippets/xquery.js","webpack:///./node_modules/ace-builds/src-noconflict/snippets/yaml.js","webpack:///./node_modules/ace-builds/src-noconflict/snippets/zeek.js","webpack:///./node_modules/ace-builds/src-noconflict/ext-language_tools.js","webpack:///./node_modules/jszip/dist/jszip.min.js","webpack:///./node_modules/buffer/index.js","webpack:///./node_modules/base64-js/index.js","webpack:///./node_modules/ieee754/index.js","webpack:///./node_modules/isarray/index.js","webpack:///./node_modules/timers-browserify/main.js","webpack:///./node_modules/setimmediate/setImmediate.js","webpack:///./node_modules/process/browser.js"],"names":["module","exports","webpackPolyfill","deprecate","paths","children","Object","defineProperty","enumerable","get","l","i","url","options","__esModule","default","test","slice","hash","needQuotes","concat","replace","_typeof","obj","Symbol","iterator","constructor","prototype","g","this","Function","e","window","Error","factory","_typeof2","adapters","logger","self","console","WebSocket","log","enabled","_adapters$logger","_len","arguments","length","messages","Array","_key","push","Date","now","apply","classCallCheck","instance","Constructor","TypeError","createClass","defineProperties","target","props","descriptor","configurable","writable","key","protoProps","staticProps","getTime","secondsSince","time","ConnectionMonitor","connection","visibilityDidChange","bind","reconnectAttempts","start","isRunning","startedAt","stoppedAt","startPolling","addEventListener","getPollInterval","stop","stopPolling","removeEventListener","recordPing","pingedAt","recordConnect","disconnectedAt","recordDisconnect","poll","clearTimeout","pollTimeout","_this","setTimeout","reconnectIfStale","_constructor$pollInte","pollInterval","min","max","interval","multiplier","Math","round","number","clamp","connectionIsStale","staleThreshold","disconnectedRecently","reopen","_this2","document","visibilityState","isOpen","INTERNAL","message_types","welcome","disconnect","ping","confirmation","rejection","disconnect_reasons","unauthorized","invalid_request","server_restart","default_mount_path","protocols","supportedProtocols","indexOf","Connection","consumer","open","subscriptions","monitor","disconnected","send","data","webSocket","JSON","stringify","isActive","getState","uninstallEventHandlers","installEventHandlers","close","_ref","undefined","allowReconnect","error","reopenDelay","getProtocol","protocol","isState","isProtocolSupported","call","states","state","readyState","toLowerCase","eventName","events","handler","message","event","_JSON$parse","parse","identifier","reason","reconnect","type","reload","notify","reject","notifyAll","willAttemptReconnect","extend","object","properties","value","Subscription","params","mixin","perform","action","command","unsubscribe","remove","Subscriptions","create","channelName","channel","subscription","add","ensureActiveConnection","sendCommand","forget","findAll","map","filter","s","callbackName","_this3","args","_len2","_key2","Consumer","_url","connect","createWebSocketURL","a","createElement","href","getConfig","name","element","head","querySelector","getAttribute","createConsumer","runtime","Op","hasOwn","hasOwnProperty","$Symbol","iteratorSymbol","asyncIteratorSymbol","asyncIterator","toStringTagSymbol","toStringTag","define","err","wrap","innerFn","outerFn","tryLocsList","protoGenerator","Generator","generator","context","Context","_invoke","method","arg","doneResult","delegate","delegateResult","maybeInvokeDelegate","ContinueSentinel","sent","_sent","dispatchException","abrupt","record","tryCatch","done","makeInvokeMethod","fn","GeneratorFunction","GeneratorFunctionPrototype","IteratorPrototype","getProto","getPrototypeOf","NativeIteratorPrototype","values","Gp","defineIteratorMethods","forEach","AsyncIterator","PromiseImpl","previousPromise","callInvokeWithMethodAndArg","resolve","invoke","result","__await","then","unwrapped","info","resultName","next","nextLoc","pushTryEntry","locs","entry","tryLoc","catchLoc","finallyLoc","afterLoc","tryEntries","resetTryEntry","completion","reset","iterable","iteratorMethod","isNaN","displayName","isGeneratorFunction","genFun","ctor","mark","setPrototypeOf","__proto__","awrap","async","Promise","iter","keys","reverse","pop","skipTempReset","prev","charAt","rootRecord","rval","exception","handle","loc","caught","hasCatch","hasFinally","finallyEntry","complete","finish","thrown","delegateYield","regeneratorRuntime","accidentalStrictMode","globalThis","global","deps","payload","modules","payloads","original","trace","ns","root","_require","parentId","callback","lookup","toString","dep","require","packagedModule","moduleName","normalizeModule","chunks","split","join","previous","mod","id","uri","packaged","ace","Element","parentNode","removeChild","OS","LINUX","MAC","WINDOWS","getOS","isMac","isLinux","_navigator","navigator","os","exec","platform","ua","userAgent","appName","isWin","isIE","parseFloat","match","isOldIE","isGecko","isMozilla","isOpera","opera","isWebKit","isChrome","isEdge","isAIR","isAndroid","isChromeOS","isIOS","MSStream","isMobile","strictCSP","useragent","buildDom","arr","parent","refs","txt","createTextNode","appendChild","isArray","els","ch","el","childIndex","n","val","className","style","cssText","setAttribute","getDocumentHead","doc","getElementsByTagName","documentElement","tag","createElementNS","removeChildren","innerHTML","textContent","ownerDocument","createFragment","createDocumentFragment","hasCssClass","addCssClass","removeCssClass","classes","index","splice","toggleCssClass","setCssClass","node","include","hasCssString","sheets","querySelectorAll","cssCache","insertPendingStyles","cache","item","importCssString","container","getRootNode","insertBefore","firstChild","useStrictCSP","importCssStylsheet","rel","scrollbarWidth","inner","width","minWidth","height","display","outer","position","left","overflow","body","noScrollbar","offsetWidth","withScrollbar","clientWidth","computedStyle","getComputedStyle","setStyle","styles","property","HAS_CSS_ANIMATION","HAS_CSS_TRANSFORMS","HI_DPI","devicePixelRatio","div","transform","animationName","translate","tx","ty","top","inherits","superCtor","super_","implement","proto","oop","Keys","ret","MODIFIER_KEYS","16","17","18","224","91","92","93","KEY_MODS","FUNCTION_KEYS","8","9","13","19","27","32","33","34","35","36","37","38","39","40","44","45","46","96","97","98","99","100","101","102","103","104","105","112","113","114","115","116","117","118","119","120","121","122","123","144","145","PRINTABLE_KEYS","48","49","50","51","52","53","54","55","56","57","59","61","65","66","67","68","69","70","71","72","73","74","75","76","77","78","79","80","81","82","83","84","85","86","87","88","89","90","107","109","110","186","187","188","189","190","191","192","219","220","221","222","111","106","parseInt","enter","escape","esc","del","mods","pow","x","keyCodeToString","keyCode","keyString","String","fromCharCode","activeListenerOptions","pressedKeys","ts","getListenerOptions","createComment","passive","detectListenerOptionsSupport","EventListener","elem","destroy","removeListener","addListener","destroyer","$toDestroy","stopEvent","stopPropagation","preventDefault","getButton","ctrlKey","altKey","shiftKey","button","capture","eventHandler","releaseCaptureHandler","onMouseUp","addMouseWheelListener","wheelDeltaX","wheelX","wheelY","wheelDeltaY","wheelDelta","deltaMode","DOM_DELTA_PIXEL","deltaX","deltaY","DOM_DELTA_LINE","DOM_DELTA_PAGE","axis","HORIZONTAL_AXIS","detail","addMultiMouseDownListener","elements","timeouts","startX","startY","timer","clicks","eventNames","2","3","4","onMousedown","isNewClick","abs","clientX","clientY","_clicks","getModifierHash","metaKey","normalizeCommandKeys","hashId","getModifierState","altGr","location","keyLocation","timeStamp","defaultPrevented","resetPressedKeys","getModifierString","addCommandKeyListener","isOldGecko","lastKeyDownKeyCode","lastDefaultPrevented","postMessage","postMessageId","nextTick","win","messageName","listener","$idleBlocked","onIdle","cb","timeout","$idleBlockId","blockIdle","delay","nextFrame","requestAnimationFrame","mozRequestAnimationFrame","webkitRequestAnimationFrame","msRequestAnimationFrame","oRequestAnimationFrame","Range","startRow","startColumn","endRow","endColumn","row","column","end","isEqual","range","contains","compare","compareRange","cmp","comparePoint","p","containsRange","intersects","isEnd","isStart","setStart","setEnd","inside","insideStart","insideEnd","isMultiLine","compareStart","compareEnd","compareInside","clipRows","firstRow","lastRow","fromPoints","isEmpty","clone","collapseRows","toScreenRange","session","screenPosStart","documentToScreenPosition","screenPosEnd","moveBy","comparePoints","p1","p2","last","stringReverse","string","stringRepeat","count","trimBeginRegexp","trimEndRegexp","stringTrimLeft","stringTrimRight","copyObject","copy","copyArray","array","deepCopy","arrayToMap","createMap","arrayRemove","escapeRegExp","str","escapeHTML","getMatchOffsets","regExp","matches","offset","deferredCall","fcn","deferred","cancel","schedule","isPending","delayedCall","defaultTimeout","_self","$cancelT","lineMode","pasteCancelled","dom","lang","clipboard","BROKEN_SETDATA","USE_IE_MIME_TYPE","HAS_FOCUS_ARGS","KEYS","MODS","valueResetRegex","TextInput","host","text","opacity","copied","pasted","inComposition","sendingText","tempStyle","fontSize","commandMode","ignoreFocusEvents","lastValue","lastSelectionStart","lastSelectionEnd","lastRestoreEnd","isFocused","activeElement","onBlur","hasFocus","onFocus","resetSelection","$focusScroll","focus","preventScroll","isTransformed","getBoundingClientRect","ancestors","t","parentElement","nodeType","removeAttribute","blur","on","curOp","commandName","isUserAction","docChanged","selectionChanged","onCompositionEnd","newValue","selectionEnd","selection","setSelectionRange","afterContextMenu","selectionStart","line","getRange","cursor","getLine","prevLine","nextLine","inputHandler","setInputHandler","getInputHandler","sendText","fromInput","onPaste","extendLeft","extendRight","inserted","restoreStart","restoreEnd","endIndex","shouldReset","onTextInput","onInput","onCompositionUpdate","inputType","execCommand","MAX_LINE_LENGTH","handleClipboardData","forceIEMime","clipboardData","mime","setData","getData","doCopy","isCut","getCopyText","onCut","onCopy","select","onCommandKey","isAllSelected","selectAll","$readOnly","cancelComposition","useTextareaForIME","markerRange","compositionStartOffset","off","closeTimeout","syncComposition","onContextMenuClose","renderer","$isMousePressed","$keepTextAreaAtCursor","$moveTextAreaToCursor","onCompositionStart","_signal","getSelectionRange","msGetInputContext","getInputContext","getElement","setCommandMode","readOnly","setReadOnly","setCopyWithEmptySelection","onContextMenu","_emit","domEvent","moveToMouse","bringToFront","characterWidth","rect","borderTopWidth","borderLeftWidth","maxTop","bottom","clientHeight","move","textInput","scroller","typingResetTimeout","typing","detectArrowKeys","$mouseHandler","isMousePressed","modifier","up","home","option","down","right","shift","commands","findKeyCommand","addIosSelectionHandler","$setUserAgentForTests","_isMobile","_isIOS","DefaultHandlers","mouseHandler","$clickSelection","editor","setDefaultHandler","onMouseDown","onDoubleClick","onTripleClick","onQuadClick","onMouseWheel","selectByLines","extendSelectionBy","selectByWords","calcRangeOrientation","anchor","ev","inSelection","pos","getDocumentPosition","mousedownEvent","moveToPosition","$focusTimeout","inMultiSelectMode","captureMouse","startSelect","setState","waitForClickSelection","screenToTextCoordinates","y","getShiftKey","selectToPosition","setCapture","orientedRange","setSelectionAnchor","scrollCursorIntoView","unitName","cmpStart","cmpEnd","selectEnd","selectAllEnd","selectByWordsEnd","selectByLinesEnd","unsetStyle","releaseCapture","focusWait","ax","ay","bx","by","distance","sqrt","getBracketRange","getWordRange","getLineRange","getAccelKey","$lastScroll","vx","vy","allowed","prevScroll","dt","direction","canScroll","isScrollableBy","speed","scrollBy","Tooltip","$element","$parentNode","$init","setText","setHtml","html","setPosition","setClassName","show","hide","getHeight","offsetHeight","getWidth","GutterTooltip","windowWidth","innerWidth","windowHeight","innerHeight","GutterHandler","tooltipTimeout","mouseEvent","tooltipAnnotation","gutter","$gutterLayer","tooltip","hideTooltip","moveTooltip","getRegion","selectTo","srcElement","$tooltipFollowsMouse","annotation","$annotations","getLength","screenRow","pixelToScreenCoordinates","$pos","documentToScreenRow","showTooltip","$gutter","MouseEvent","$inSelection","propagationStopped","selectionRange","DragdropHandler","dragImage","dragSelectionMarker","timerId","dragCursor","dragOperation","isInternal","autoScrollStartTime","cursorMovedTime","cursorPointOnCaretMoved","mouseTarget","counter","onDragInterval","prevCursor","vMovement","hMovement","moveCursorToPosition","calcDistance","lineHeight","layerConfig","editorRect","offsets","nearestXOffset","nearestYOffset","scrollCursor","vScroll","hScroll","autoScroll","addDragMarker","toOrientedRange","addMarker","getSelectionStyle","clearSelection","$cursorLayer","setBlinking","clearInterval","setInterval","onMouseMove","clearDragMarker","removeMarker","fromOrientedRange","$resetCursorStyle","onDragStart","cancelDrag","draggable","dataTransfer","effectAllowed","getReadOnly","setDragImage","clearData","getTextRange","onDragEnd","dropEffect","setCursorStyle","onDragEnter","canAccept","getDropEffect","onDragOver","onMouseMoveTimer","onDragLeave","onDrop","moveText","dropData","insert","types","some","copyAllowed","copyModifierState","dragWait","getDragDelay","startDrag","dragWaitEnd","dragReadyEnd","cursorStyle","onMouseDrag","dragDrop","$dragEnabled","eventTarget","unselectable","addTouchListeners","touchStartT","lastT","longTouchTimer","animationTimer","pressed","contextMenu","mode","animationSteps","clickCount","vX","vY","createContextMenu","handleClick","selected","hasUndo","getUndoManager","replaceChild","class","readText","writeText","ontouchstart","ontouchend","onclick","showContextMenu","pagePos","textToScreenCoordinates","leftOffset","pageX","scrollLeft","pageY","hideContextMenu","handleLongTap","selectWord","touches","h","w","touchObj","setRange","switchToSelectionMode","cursorPos","getPixelPosition","anchorPos","offsetTop","offsetLeft","weightedDistance","diff1","diff2","oldScrollTop","getScrollTop","xhr","XMLHttpRequest","onreadystatechange","responseText","loadScript","path","src","onload","_","isAbort","qualifyURL","EventEmitter","_dispatchEvent","_eventRegistry","_defaultHandlers","listeners","defaultHandler","once","newCallback","handlers","_disabled_","old","disabled","removeDefaultHandler","capturing","removeAllListeners","optionsProvider","setOptions","optList","setOption","getOptions","optionNames","$options","hidden","getOption","opt","warn","forwardTo","handlesSet","set","reportError","msg","AppConfig","$defaultOptions","defineOptions","initialValue","resetOptions","setDefaultValue","opts","setDefaultValues","optionHash","net","workerPath","modePath","themePath","basePath","suffix","$moduleUrls","loadWorkerFromBlob","sharedPopups","all","$modes","moduleUrl","component","parts","sep","base","re","RegExp","setModuleUrl","subst","$loading","loadModule","onLoad","moduleType","afterLoad","_reportErrorIfPathIsNotConfigured","init","scriptOptions","scriptUrl","currentScript","_currentScript","scripts","script","attributes","j","attr","m","m1","toUpperCase","version","DefaultGutterHandler","config","MouseHandler","focusEditor","getMouseEventTarget","onMouseEvent","scrollBarV","scrollBarH","Boolean","gutterEl","$dragDelay","character","mousemove","$scrollSpeed","mouseMoveHandler","which","releaseMouse","$mouseMoved","onCaptureEnd","onOperationEnd","onCaptureInterval","$onCaptureMouseMove","endOperation","startOperation","cancelContextMenu","scrollSpeed","dragDelay","dragEnabled","focusTimeout","tooltipFollowsMouse","FoldHandler","fold","getFoldAt","removeFold","expandFold","getUseWrapMode","foldWidgets","onFoldWidgetClick","getParentFoldRangeData","firstRange","addFold","keyUtil","KeyBinding","$editor","$data","$handlers","kb","removeKeyboardHandler","$defaultHandler","addKeyboardHandler","setKeyboardHandler","handleKeyboard","attach","detach","getKeyboardHandler","getStatusText","$callKeyboardHandlers","toExecute","success","passEvent","dir","hiLevel","lastArabic","hasUBAT_B","hasUBAT_S","impTab_LTR","impTab_RTL","UnicodeTBL00","UnicodeTBL20","_invertLevel","lev","levels","_array","lo","hi","tmp","len","_getCharClass","chars","ix","wType","nType","cType","c","rtlCandidate","_getCharacterType","uc","charCodeAt","L","R","EN","ON_R","AN","R_H","B","RLE","DOT","doBidiReorder","textCharTypes","isRtl","logicalFromVisual","bidiLevels","charTypes","impTab","prevState","newClass","newLevel","newState","condPos","_computeLevels","hasBidiCharacters","getVisualFromLogicalIdx","logIdx","rowMap","bidiUtil","bidiRE","BidiHandler","bidiMap","currentRow","charWidths","EOL","showInvisibles","isRtlDir","$isRtl","wrapIndent","EOF","contentWidth","fontMetrics","rtlLineOffset","wrapOffset","isMoveLeftOperation","seenBidi","getValue","isBidiRow","docRow","splitIndex","updateRowLine","updateBidiMap","onChange","delta","lines","getDocumentRow","rowCache","$screenRowCache","$getRowCacheIndex","$docRowCache","getSplitIndex","currentIndex","prevIndex","endOfLine","$useWrapMode","splits","$wrapData","indent","substring","size","isFullWidth","getScreenTabSize","$main","substr","markAsDirty","updateCharacterWidths","$characterSize","bidiCharWidth","$measureCharWidth","setShowInvisibles","setEolChar","eolChar","setContentWidth","isRtlLine","setRtlDirection","getCursorPosition","getSelectionAnchor","$bidiHandler","removeInLine","getPosLeft","col","leftBoundary","logicalIdx","getOverwrite","visualIdx","getSelections","startCol","endCol","level","selections","selColMin","selColMax","isSelected","isSelectedPrev","visIdx","offsetToCol","posX","charWidth","Selection","getDocument","lead","createAnchor","$silent","$cursorChanged","$isEmpty","$keepDesiredColumnOnChange","$desiredColumn","$anchorChanged","getCursor","getPosition","getAnchor","getSelectionLead","isBackwards","$setSelection","Number","MAX_VALUE","anchorRow","anchorColumn","cursorRow","cursorColumn","wasEmpty","wasMultiselect","$moveSelection","mover","moveCursorTo","moveTo","selectUp","moveCursorUp","selectDown","moveCursorDown","selectRight","moveCursorRight","selectLeft","moveCursorLeft","selectLineStart","moveCursorLineStart","selectLineEnd","moveCursorLineEnd","selectFileEnd","moveCursorFileEnd","selectFileStart","moveCursorFileStart","selectWordRight","moveCursorWordRight","selectWordLeft","moveCursorWordLeft","selectAWord","getAWordRange","excludeLastChar","rowEnd","rowStart","foldLine","getFoldLine","selectLine","moveCursorBy","wouldMoveIntoSoftTab","tabSize","isTabStop","getTabSize","getNavigateWithinSoftTabs","firstColumnPosition","screenToDocumentPosition","leadingSpace","getDisplayLine","$useEmacsStyleLineStart","lineEnd","getDocumentLastRowColumnPosition","textEnd","search","moveCursorLongWordRight","rightOfCursor","nonTokenRe","lastIndex","tokenRe","moveCursorLongWordLeft","getFoldStringAt","leftOfCursor","$shortWordEndIndex","whitespaceRe","moveCursorShortWordRight","moveCursorShortWordLeft","$selectLongWords","rows","offsetX","screenPos","lineWidgets","widget","rowsAbove","rowCount","docPos","keepDesiredColumn","moveCursorToScreen","desiredColumn","r","getRangeOfMovements","func","toJSON","rangeCount","ranges","r1","fromJSON","rangeList","toSingleRange","addRange","MAX_TOKEN_COUNT","Tokenizer","rules","regExps","matchMappings","ruleRegExps","matchTotal","mapping","defaultToken","flag","splitterRurles","rule","caseInsensitive","regex","adjustedregex","matchcount","token","groupCount","tokenArray","onMatch","$arrayTokens","$applyToken","digit","removeCapturingGroups","splitRegex","createSplitterRegexp","$setMaxTokenCount","tokens","stack","inChClass","lastCapture","parenOpen","parenClose","square","getLineTokens","startState","currentState","matchAttempts","skipped","consumeLineEnd","merge","unshift","TextHighlightRules","$rules","addRules","prefix","nextState","getRules","embedRules","HighlightRules","escapeRules","append","$embeds","getEmbeds","pushState","popState","normalizeRules","processState","processed","toInsert","stateName","includeName","noEscape","keywordMap","createKeywordMapper","ignoreCase","splitChar","keywords","$keywordList","list","word","getKeywords","$keywords","Behaviour","$behaviours","addBehaviours","behaviours","inherit","getBehaviours","TokenIterator","initialRow","initialColumn","$session","$row","$rowTokens","getTokens","getTokenAt","$tokenIndex","stepBackward","stepForward","getCurrentToken","getCurrentTokenRow","getCurrentTokenColumn","rowTokens","tokenIndex","getCurrentTokenPosition","getCurrentTokenRange","SAFE_INSERT_IN_TOKENS","SAFE_INSERT_BEFORE_TOKENS","contextCache","defaultQuotes","initContext","multiSelect","autoInsertedBrackets","autoInsertedRow","autoInsertedLineEnd","maybeInsertedBrackets","maybeInsertedRow","maybeInsertedLineStart","maybeInsertedLineEnd","getWrapped","opening","closing","rowDiff","CstyleBehaviour","getWrapBehavioursEnabled","isSaneInsertion","braces","recordAutoInsert","recordMaybeInsert","$findOpeningBracket","isAutoInsertedClosing","popAutoInsertedClosing","isMaybeInsertedClosing","clearMaybeInsertedClosing","openBracePos","findMatchingBracket","next_indent","$getIndent","getTabString","quotes","$mode","$quotes","lineCommentStart","quote","leftChar","rightChar","rightToken","pair","stringBefore","stringAfter","wordRe","isWordBefore","isWordAfter","charBefore","$matchTokenType","iterator2","bracket","wordChars","code","unicode","Mode","$defaultBehaviour","getTokenizer","$tokenizer","$highlightRules","$highlightRuleConfig","blockComment","toggleCommentLines","ignoreBlankLines","shouldRemove","minIndent","Infinity","insertAtTabStop","regexpStart","getUseSoftTabs","uncomment","shouldInsertSpace","commentWithSpace","comment","insertInLine","testRemove","before","after","spaces","lineCommentEnd","regexpEnd","fun","minEmptyLength","floor","toggleBlockComment","colDiff","initialRange","startRange","endRange","getNextLineIndent","tab","checkOutdent","input","autoOutdent","createWorker","createModeDelegates","$id","delegations","scope","functionName","$delegator","language","transformAction","param","$behaviour","completionKeywords","ruleItr","aLength","$createKeywordList","getCompletions","score","meta","applyDelta","docLines","doNotValidate","Anchor","$onChange","$pointsInOrder","point1","point2","equalPointsInOrder","bColIsAfter","$clipPositionToDocument","$insertRight","point","moveIfEqual","deltaIsInsert","deltaRowShift","deltaColShift","deltaStart","deltaEnd","$getTransformedPoint","noClip","Document","textOrLines","$lines","insertMergedLines","setValue","getAllLines","getNewLineCharacter","$split","$detectNewLine","$autoNewLine","$newLineMode","setNewLineMode","newLineMode","getNewLineMode","isNewLine","getLines","getLinesForRange","insertLines","insertFullLines","removeLines","removeFullLines","insertNewLine","clippedPos","clonePos","$clipPosition","deleteFirstNewLine","deleteLastNewLine","deletedLines","removeNewLine","applyDeltas","deltas","revertDeltas","revertDelta","isInsert","$splitAndapplyLargeDelta","$safeApplyDelta","docLength","MAX","from","to","chunk","indexToPosition","newlineLength","positionToIndex","BackgroundTokenizer","tokenizer","running","currentLine","$worker","workerStart","endLine","startLine","processedLines","$tokenizeRow","fireUpdateEvent","setTokenizer","setDocument","first","scheduleStart","$updateOnChange","SearchHighlight","clazz","setRegexp","MAX_RANGES","update","markerLayer","drawSingleLineMarker","FoldLine","foldData","folds","setFoldLine","shiftRow","sameRow","sort","b","containsRow","walk","lastEnd","isNewRow","placeholder","getNextFoldTo","kind","addRemoveChars","foldBefore","newFoldLine","foldLineNext","idxToPosition","idx","lastFoldEndColumn","RangeList","$bias","pointIndex","excludeEdges","startIndex","addList","removed","substractPoint","containsPoint","rangeAtPoint","clipped","removeAll","lineDif","Fold","subFolds","consumePoint","restorePoint","subFold","collapseChildren","addSubFold","afterStart","firstConsumed","consumedFolds","k","restoreRange","Folding","side","getFoldsInRange","foldLines","$foldData","foundFolds","getFoldsInRangeList","getAllFolds","trim","lastFold","startFoldLine","getNextFoldLine","getFoldedRowCount","$addFoldLine","added","$clipRangeToDocument","startFold","endFold","removeFolds","$updateWrapData","$updateRowLengthCache","$modified","addFolds","$updating","cloneFolds","foldAll","expandFolds","unfold","expandInner","outermostFolds","isRowFolded","startFoldRow","getRowFoldEnd","getRowFoldStart","getFoldDisplayLine","textLine","lastColumn","$cloneFoldData","fd","toggleFold","tryToUnfold","bracketPos","getCommentFoldRange","depth","getFoldWidget","getFoldWidgetRange","foldToLevel","foldAllComments","$foldStyles","$foldStyle","setFoldStyle","$foldMode","$setFolding","foldMode","$updateFoldWidgets","$tokenizerUpdateFoldWidgets","updateFoldWidgets","tokenizerUpdateFoldWidgets","ignoreCurrent","fw","siblings","$toggleFoldWidget","toggleFoldWidget","toggleParent","BracketMatch","chr","charBeforeCursor","$findClosingBracket","getMatchingBracketRanges","$brackets","typeRe","openBracket","valueIndex","closingBracket","valueLength","TextMode","EditSession","$breakpoints","$decorations","$frontMarkers","$backMarkers","$markerId","$undoSelect","$uid","onChangeFold","setMode","bgTokenizer","resetCaches","$resetRowCache","cacheArray","low","mid","$rowLengthCache","removedFolds","$updateInternalDataOnChange","$fromUndo","$undoManager","mergeUndoDeltas","$informUndoManager","setUndoManager","getSelection","undoManager","addSession","$syncInformUndoManager","markUndoGroup","$defaultUndoManager","undo","redo","hasRedo","addSelection","startNewGroup","setUseSoftTabs","$useSoftTabs","$indentWithTabs","setTabSize","$tabSize","setNavigateWithinSoftTabs","navigateWithinSoftTabs","$navigateWithinSoftTabs","$overwrite","setOverwrite","overwrite","toggleOverwrite","addGutterDecoration","removeGutterDecoration","getBreakpoints","setBreakpoints","clearBreakpoints","setBreakpoint","clearBreakpoint","inFront","marker","addDynamicMarker","markerId","getMarkers","highlight","$searchHighlight","highlightLines","setAnnotations","annotations","getAnnotations","clearAnnotations","inToken","wordRange","setUseWorker","useWorker","getUseWorker","$useWorker","onReloadTokenizer","$modeId","$onChangeMode","$isPlaceholder","oldMode","$stopWorker","$startWorker","attachToSession","wrapMethod","$wrapMethod","foldingRules","terminate","getMode","$scrollTop","setScrollTop","scrollTop","$scrollLeft","setScrollLeft","getScrollLeft","getScreenWidth","$computeWidth","getLineWidgetMaxWidth","screenWidth","lineWidgetsWidth","lineWidgetWidth","force","$wrapLimit","longestScreenLine","foldIndex","foldStart","$getStringScreenWidth","undoChanges","dontSelect","selectionBefore","$getUndoSelection","redoChanges","selectionAfter","setUndoSelect","enable","isUndo","fromRange","toPosition","toRange","collDiff","oldStart","newStart","indentRows","indentString","outdentRows","rowRange","deleteRange","$moveLines","diff","$clipRowToDocument","moveLinesUp","moveLinesDown","duplicateLines","$clipColumnToRow","$wrapLimitRange","setUseWrapMode","useWrapMode","setWrapLimitRange","adjustWrapLimit","desiredLimit","$printMargin","limits","wrapLimit","$constrainWrapLimit","getWrapLimit","setWrapLimit","limit","getWrapLimitRange","foldLineBefore","wrapData","walkTokens","$getDisplayTokens","PLACEHOLDER_START","PLACEHOLDER_BODY","$computeWrapSplits","displayLength","lastSplit","lastDocSplit","isCode","$wrapAsCode","indentedSoftWrap","$indentedSoftWrap","maxIndent","addSplit","indentation","getWrapIndent","minSplit","maxScreenColumn","screenColumn","getRowLength","getRowLineCount","getRowWrapIndent","getScreenLastRowColumn","documentToScreenColumn","getDocumentLastRowColumn","docColumn","getRowSplitData","screenToDocumentRow","screenToDocumentColumn","rowLength","doCache","maxRow","foldStartRow","wrapRow","screenRowOffset","getScreenLength","screenRows","$getWidgetScreenLength","$setFontMetrics","fm","$enableVarChar","getCharacterWidth","$wrap","firstLineNumber","useSoftTabs","foldStyle","Search","find","$matchIterator","sr","sc","er","ec","skipCurrent","needle","$assembleRegExp","$isMultiLine","prevRange","replacement","preserveCase","$disableFakeMultiline","wholeWord","wordBoundary","addWordBoundary","caseSensitive","$assembleMultilineRegExp","backwards","forEachInLine","HashHandler","commandKeyBinding","addCommands","$singleCommand","MultiHashHandler","bindKey","isDefault","addCommand","removeCommand","_buildKeyHash","keepCommand","ckb","keyId","cmdGroup","keyPart","chain","binding","parseKeys","_addCommandToBinding","removeCommands","bindKeys","keyList","$keyChain","CommandManager","byName","$checkCommandState","isAvailable","returnValue","toggleRecording","$inReplay","recording","macro","$addCommandToMacro","oldMacro","replay","trimMacro","mac","description","showSettingsMenu","showErrorMarker","scrollIntoView","centerSelection","gotoLine","prompt","$type","multiSelectAction","getAllRanges","findNext","findPrevious","aceCommandGroup","navigateFileStart","navigateUp","times","navigateFileEnd","navigateDown","navigateWordLeft","navigateLineStart","navigateLeft","navigateWordRight","navigateLineEnd","navigateRight","selectPageDown","scrollPageDown","gotoPageDown","selectPageUp","scrollPageUp","gotoPageUp","jumpToMatching","$copyWithEmptySelection","$handlePaste","duplicateSelection","sortLines","modifyNumber","copyLinesUp","copyLinesDown","removeToLineStart","removeToLineEnd","removeWordLeft","removeWordRight","blockOutdent","blockIndent","splitLine","transposeLetters","transposeSelections","autoIndent","firstLineEndCol","selectedCount","insertLine","curLine","newRanges","exitMultiSelectMode","defaultCommands","Editor","getContainerElement","getTextAreaContainer","textarea","keyBinding","$search","$historyTracker","$initOperationListeners","_$emitInputEvent","setSession","$opResetTimer","$lastSel","prevOp","commandEvent","previousCommand","scrollSelectionIntoView","animateScrolling","sel","$mergeableCommands","$mergeUndoDeltas","mergeableCommands","shouldMerge","mergeNextCommand","sequenceStartTime","keyboardHandler","$keybindingId","oldSession","$onDocumentChange","$onTokenizerUpdate","$onChangeTabSize","$onChangeWrapLimit","$onChangeWrapMode","$onChangeFold","$onChangeFrontMarker","$onChangeBackMarker","$onChangeBreakpoint","$onChangeAnnotation","$onCursorChange","$onScrollTopChange","$onScrollLeftChange","$onSelectionChange","onDocumentChange","onChangeMode","onTokenizerUpdate","onChangeTabSize","onChangeWrapLimit","onChangeWrapMode","onChangeFrontMarker","onChangeBackMarker","onChangeBreakpoint","onChangeAnnotation","onCursorChange","onScrollTopChange","onScrollLeftChange","onSelectionChange","updateFull","oldEditor","getSession","resize","onResize","setTheme","theme","getTheme","getFontSize","setFontSize","$highlightBrackets","$highlightPending","$bracketHighlight","markerIds","getMatching","markerType","$highlightTags","$highlightTagPending","$tagHighlight","currentTag","prevToken","stepCount","tmpToken","sbm","$isFocused","showCursor","visualizeFocus","hideCursor","visualizeBlur","$cursorChange","updateCursor","$updateHighlightActiveLine","updateLines","scrollToY","scrollToX","$highlightActiveLine","$selectionStyle","$selectionColorConflict","$maxLines","$minLines","$highlightLineMarker","$selectionMarker","$highlightSelectedWord","$getSelectionHighLightRegexp","wordWithBoundary","updateFrontMarkers","updateBackMarkers","updateBreakpoints","updateText","getSelectedText","nl","copyLine","inVirtualSelectionMode","isFullLine","getBehavioursEnabled","d","lineState","shouldOutdent","$enableAutoIndent","lineIndent","selectedRange","currIndent","prevLineState","composition","applyComposition","forEachSelection","setScrollSpeed","getScrollSpeed","setDragDelay","setSelectionStyle","setHighlightActiveLine","shouldHighlight","getHighlightActiveLine","setHighlightGutterLine","getHighlightGutterLine","setHighlightSelectedWord","getHighlightSelectedWord","setAnimatedScroll","shouldAnimate","getAnimatedScroll","getShowInvisibles","setDisplayIndentGuides","getDisplayIndentGuides","setShowPrintMargin","showPrintMargin","getShowPrintMargin","setPrintMarginColumn","getPrintMarginColumn","setBehavioursEnabled","setWrapBehavioursEnabled","setShowFoldWidgets","getShowFoldWidgets","setFadeFoldWidgets","fade","getFadeFoldWidgets","new_range","swap","originalRange","$getSelectedRows","getNumberAt","_numberRx","amount","charRange","isFinite","nr","fp","decimals","nnr","toFixed","replaceRange","toggleWord","$toggleWordPairs","currWordStart","wordParts","curLength","itLength","that","reg","wordPairs","negate","firstCondition","res","endPoint","moved","totalDiff","rangeIndex","subRows","compositionState","showComposition","setCompositionText","hideComposition","getFirstVisibleRow","getLastVisibleRow","isRowVisible","isRowFullyVisible","getFirstFullyVisibleRow","getLastFullyVisibleRow","$getVisibleRowCount","getScrollBottomRow","getScrollTopRow","$moveByPage","scrollToRow","scrollToLine","center","animate","alignCursor","getCursorPositionScreen","expand","matchType","bracketType","found","brackets","lineNumber","navigateTo","replaced","$tryReplace","replaceAll","getLastSearchOptions","newRange","revealRange","setAutoScrollEditorIntoView","shouldScroll","$scrollAnchor","scrollAnchor","onChangeSelection","onBeforeRender","onAfterRender","searchBox","$pixelPos","$cursorStyle","cursorLayer","setSmoothBlinking","isBlinking","selectionStyle","highlightActiveLine","highlightSelectedWord","copyWithEmptySelection","behavioursEnabled","wrapBehavioursEnabled","enableAutoIndent","autoScrollEditorIntoView","showLineNumbers","setShowLineNumbers","$loop","CHANGE_GUTTER","$relativeLineNumbers","relativeNumberRenderer","relativeLineNumbers","$showLineNumbers","$updatePlaceholder","$composition","placeholderNode","$placeholder","content","hScrollBarAlwaysVisible","vScrollBarAlwaysVisible","highlightGutterLine","animatedScroll","printMarginColumn","printMargin","fadeFoldWidgets","showFoldWidgets","displayIndentGuides","showGutter","fontFamily","maxLines","minLines","scrollPastEnd","fixedWidthGutter","hasCssTransforms","maxPixelHeight","getText","lastLineNumber","$renderer","UndoManager","$maxRev","allowMerge","$lastDelta","$keepRedoStack","$redoStack","lastDeltas","$undoStack","$rev","rev","markIgnored","ignore","getRevision","getDeltas","getChangedRanges","getChangedLines","deltaSet","swapped","swapGroups","rearrangeUndoStack","$redoStackBaseRev","undoSelectionRange","$syncRev","redoStack","deltaSets","moveDeltasByOne","rebaseRedoStack","redoSelectionRange","nextDelta","canUndo","canRedo","bookmark","isAtBookmark","isClean","markClean","$prettyPrint","stringifyDelta","stringifyRange","d1","d2","i1","i2","ds1","ds2","xform","c1","splitDelta","shiftPos","rowsBefore","otherLines","cloneDelta","xformed","Lines","canvasHeight","cells","cellCache","$offsetCoefficient","moveContainer","firstRowScreen","pageChanged","oldConfig","newConfig","computeLineTop","screenTop","screenPage","computeLineHeight","$cacheCell","cell","fragment","insertAdjacentElement","createCell","initElement","Gutter","parentEl","$showFoldWidgets","gutterWidth","$updateAnnotations","onCreateCell","textNode","foldWidget","rowInfo","annoText","gutterOffset","oldLastRow","$updateCursorRow","$renderCell","$updateGutterWidth","gutterRenderer","$firstLineNumber","lastLineText","$fixedWidth","padding","$padding","$computePadding","ceil","$highlightGutterLine","$cursorRow","updateLineHighlight","$cursorCell","scrollLines","$renderLines","childNodes","breakpoints","decorations","foldHeight","getShowLineNumbers","paddingLeft","borderRightWidth","paddingRight","Marker","setPadding","setMarkers","markers","elt","css","$getTop","drawFullLineMarker","drawScreenLineMarker","drawTextMarker","drawMultiLineMarker","childElementCount","lastChild","stringBuilder","extraStyle","curr","lineRange","range1","drawBidiSingleLineMarker","radiusClass","extraLength","Text","$updateEolChar","EOF_CHAR","EOL_CHAR_LF","EOL_CHAR_CRLF","EOL_CHAR","TAB_CHAR","SPACE_CHAR","margin","getLineHeight","$fontMetrics","measure","$pollSizeChanges","checkForSizeChanges","$pollSizeChangesTimer","$computeTabString","showSpaces","showTabs","showEOL","$tabStrings","tabStr","span","$indentGuideRe","spaceClass","spaceContent","tabClass","tabContent","lineElements","lineElementsIdx","heightChanged","lineElement","$renderLine","$renderLinesFragment","lineEl","$useLineGroups","$textToken","$renderToken","valueFragment","simpleSpace","controlCharacter","cjkSpace","cjk","cloneNode","com","renderIndentGuide","cols","$createLineElement","$renderWrappedLine","splitChars","$renderOverflowMessage","$renderSimpleLine","overflowEl","$getFoldLineTokens","lastLineEl","invisibleEl","renderTokens","addTokens","Cursor","isVisible","blinkInterval","smoothBlinking","cursors","addCursor","$updateCursors","$updateOpacity","$startCssAnimation","animationDuration","$isAnimating","$stopCssAnimation","blinking","restartTimer","setBlinkInterval","removeCursor","intervalId","timeoutId","$isSmoothBlinking","blink","onScreen","isCursorInView","pixelPos","maxHeight","$selectionMarkers","cursorIndex","drawCursor","$setOverwrite","ScrollBar","classSuffix","setVisible","skipEvent","onScroll","coeff","VScrollBar","scrollHeight","$scrollbarWidth","$minWidth","setHeight","setInnerHeight","setScrollHeight","HScrollBar","setWidth","setInnerWidth","setScrollWidth","ScrollBarV","ScrollBarH","RenderLoop","onRender","pending","changes","$recursionLimit","_flush","change","clear","USE_OBSERVER","ResizeObserver","FontMetrics","$setMeasureNodeStyles","$measureNode","$addObserver","isRoot","visibility","whiteSpace","font","$measureSizes","fontWeight","boldSize","charSizes","allowBoldFonts","$observer","observe","setPolling","$getZoom","getZoom","zoom","$initTransformMeasureNodes","_t","transformCoordinates","clientPos","elPos","mul","solve","l1","l2","det","sub","m2","ut","u","f","GutterLayer","MarkerLayer","TextLayer","CursorLayer","editorCss","HIDE_TEXTAREA","VirtualRenderer","onGutterResize","$markerBack","textLayer","$textLayer","canvas","$markerFront","$horizScroll","$vScroll","scrollBar","$scrollAnimation","scrollMargin","updateCharacterSize","$size","scrollerHeight","scrollerWidth","$dirty","minHeight","v","$renderChanges","defaultView","CHANGE_FULL","CHANGE_CURSOR","CHANGE_MARKER","CHANGE_SCROLL","CHANGE_LINES","CHANGE_TEXT","CHANGE_SIZE","CHANGE_MARKER_BACK","CHANGE_MARKER_FRONT","CHANGE_H_SCROLL","$allowBoldFonts","$updatePrintMargin","onChangeNewLineMode","$changedLines","updateFontSize","$changes","$updateSizeAsync","resizing","scrollWidth","$updateCachedSize","$extraHeight","oldSize","$showGutter","$computeLayerConfig","availableWidth","$showPrintMargin","$printMarginColumn","$animatedScroll","getShowGutter","setShowGutter","$printMarginEl","containerEl","posTop","posLeft","setScrollMargin","sm","setMargin","getHScrollBarAlwaysVisible","$hScrollBarAlwaysVisible","setHScrollBarAlwaysVisible","alwaysVisible","getVScrollBarAlwaysVisible","$vScrollBarAlwaysVisible","setVScrollBarAlwaysVisible","$updateScrollBarV","$scrollPastEnd","$updateScrollBarH","$frozen","freeze","unfreeze","st","$updateLines","$autosize","desiredHeight","$maxPixelHeight","$gutterWidth","hideScrollbars","longestLine","$getLongestLine","horizScroll","hScrollChanged","vScrollBefore","vScrollChanged","firstRowHeight","lineCount","charCount","$viewMargin","topMargin","bottomMargin","alignment","STEPS","$calcSteps","fromValue","toValue","x_min","steps","initialScroll","oldSteps","$timer","scrollTo","canvasPos","$hasCssTransforms","$blockCursor","$useTextareaForIME","addToken","removeExtraToken","newToken","$themeId","cssClass","$theme","isDark","setMouseCursor","attachToShadowRoot","workerUrl","Worker","blob","Blob","blobBuilder","BlobBuilder","WebKitBlobBuilder","MozBlobBuilder","getBlob","$workerBlob","blobURL","URL","webkitURL","createObjectURL","WorkerClient","worker","$createWorkerFromOldConfig","$sendDeltaQueue","changeListener","onMessage","callbackId","callbacks","onmessage","topLevelNamespaces","classname","importScripts","nameToUrl","toUrl","normalizePath","$normalizePath","tlns","deltaQueue","$doc","cmd","emit","ex","attachToDocument","q","UIWorkerClient","main","emitSync","sender","messageBuffer","workerClient","processNext","setEmitSync","Main","PlaceHolder","others","mainClass","othersClass","$onUpdate","onUpdate","$others","undoStack","$undostack","$undoStackDepth","setup","other","showOtherMarkers","othersActive","hideOtherMarkers","updateAnchors","lengthDiff","inMainRange","distanceFromStart","newPos","otherPos","updateMarkers","updateMarker","undosRequired","isSamePoint","alt","ctrl","accel","selectionMode","isMultiSelect","mouseX","mouseY","screenAnchor","screenCursor","$enableJumpToDef","$blockSelectEnabled","addSelectionMarker","oldRange","removeSelectionMarker","tmpSel","rectSel","blockSelect","newCursor","removeSelectionMarkers","rectangularRangeBlock","updateSelectionMarkers","onSelectionInterval","selectMoreLines","selectMore","joinSelections","splitIntoLines","alignCursors","multiSelectCommands","getSelectionMarkers","$blockChangeEvents","$onAddRange","$onRemoveRange","mergeOverlappingRanges","lastRange","$initRangeList","toggleBlockSelection","includeEmptyLines","xBackwards","startOffsetX","endOffsetX","docEnd","yBackwards","MultiSelect","$multiselectOnSessionChange","$onMultiSelect","$onSingleSelect","onSessionChange","$checkMultiselectChange","altCursor","altDown","addAltCursorListeners","selectionMarkerCount","markerList","$onMultiSelectExec","inVirtualMode","keepOrder","$byLines","cmdResult","anim","buf","additive","skip","screenLead","toRemove","words","stopAtFirst","sameRowRanges","maxCol","minSpace","spaceOffsets","spaceOffset","fr","lr","guessRange","$reAlignText","forceLeft","startW","textW","endW","isLeftAligned","isRightAligned","alignLeft","enableMultiselect","enableBlockSelect","FoldMode","foldingStartMarker","foldingStopMarker","indentationBlock","startLevel","openingBracketBlock","closingBracketBlock","LineWidgets","widgetManager","updateOnChange","renderWidgets","measureWidgets","_changedWidgets","$onChangeEditor","updateOnFold","_inDocument","removeLineWidget","$updateRows","noWidgets","$oldWidget","$registerLineWidget","addLineWidget","zIndex","coverGutter","pixelHeight","$fold","onWidgetChanged","w1","getWidgetsAtRow","changedWidgets","fixedWidth","coverLine","fullWidth","oldWidget","gutterAnno","comparator","binarySearch","matched","findAnnotations","arrow","onmousedown","Renderer","edit","_id","getElementById","env","tagName","oldNode","createEditSession","DocCommentHighlightRules","getTagRule","getStartRule","getEndRule","identifierRe","JavaScriptHighlightRules","keywordMapper","escapedRe","comments","noES6","no_regex","jsx","JSX","tagRegex","jsxTag","jsxJsRule","jsxAttributes","reference","MatchingBraceOutdent","BaseFoldMode","commentRegex","source","singleLineBlockCommentRe","tripleStarBlockCommentRe","startRegionRe","_getFoldWidgetBase","forceMultiline","getCommentRegionBlock","getSectionRange","startIndent","subRange","CStyleFoldMode","$outdent","tokenizedLine","endState","results","snippetFileId","supportType","supportFunction","supportConstant","supportConstantColor","supportConstantFonts","numRe","pseudoElements","pseudoClasses","CssHighlightRules","strings","escapes","propertyMap","CssCompletions","completionsDefined","defineCompletions","getPropertyValueCompletions","getPropertyCompletions","caption","snippet","CssBehaviour","$completer","JsonHighlightRules","XmlHighlightRules","normalize","processing_instruction","doctype","int_subset","cdata","attr_reference","tag_whitespace","whitespace","attribute_value","embedTagRules","tagMap","form","img","label","table","tbody","td","tfoot","th","tr","HtmlHighlightRules","group","tag_stuff","is","lastIndexOf","XmlBehaviour","rightSpace","tokenEndColumn","nextToken","tokenRow","tokenColumn","voidElements","nextIndent","defaultMode","subModes","$getMode","$tryMode","optionalEndTags","Tag","selfClosing","_getFirstTagInLine","_findEndTagInLine","getCommentFoldWidget","_readTagForward","_readTagBackward","_pop","firstTag","MixedFoldMode","XmlFoldMode","optionalTags","globalAttributes","attributeMap","findTagName","HtmlCompletions","getTagCompletions","getAttributeCompletions","getAttributeValueCompletions","getHTMLEntityCompletions","attribute","attributeName","findAttributeName","JavaScriptMode","CssMode","HtmlFoldMode","fragmentContext","VARIABLES","CURRENT_WORD","SELECTION","CURRENT_LINE","PREV_LINE","LINE_INDEX","LINE_NUMBER","SOFT_TABS","TAB_SIZE","CLIPBOARD","FILENAME","FILEPATH","FILENAME_BASE","DIRECTORY","WORKSPACE_NAME","FULLNAME","BLOCK_COMMENT_START","BLOCK_COMMENT_END","LINE_COMMENT","CURRENT_YEAR","date","year","CURRENT_YEAR_SHORT","CURRENT_MONTH","month","CURRENT_MONTH_NAME","CURRENT_MONTH_NAME_SHORT","CURRENT_DATE","day","CURRENT_DAY_NAME","weekday","CURRENT_DAY_NAME_SHORT","CURRENT_HOUR","hour","hour12","CURRENT_MINUTE","minute","CURRENT_SECOND","second","dateFormat","toLocaleString","SELECTED_TEXT","SnippetManager","snippetMap","snippetNameMap","createTokenizer","TabstopToken","tabstopId","formatMatcher","fmtString","guard","snippetVar","choices","operator","formatString","expectElse","ifEnd","elseEnd","changeCase","local","formatStringVar","formatFunction","tokenizeTmSnippet","getVariableValue","variables","__","tmStrFormat","fmt","fmtTokens","oldArgs","fmtParts","resolveVariables","gChangeCase","tmFormatFunction","afterNewLine","gotoNext","insertSnippetForSelection","snippetText","tabString","tabstops","parents","expanding","copyValue","tabstopManager","TabstopManager","selectionId","addTabstops","insertSnippet","tabNext","$getScope","inlinePhp","getActiveScopes","scopes","includeScopes","expandWithTab","expandSnippetForSelection","snippets","findMatchingSnippet","dryRun","replaceBefore","replaceAfter","M__","matchBefore","T__","matchAfter","snippetList","startRe","endRe","triggerRe","endTriggerRe","register","wrapRegexp","guardedRegexp","addSnippet","unregister","tabTrigger","trigger","endTrigger","endGuard","removeSnippet","nameMap","parseSnippetFile","guardRe","getSnippetByName","$onChangeSelection","$onChangeSession","onChangeSession","$onAfterExec","onAfterExec","$openTabstops","selectedTabstop","removeTabstopMarkers","isRemove","active","parentActive","removeRange","$inChange","updateLinkedFields","hasLinkedRanges","firstNonLinked","linked","snippetManager","containsLead","containsAnchor","selectTabstop","addTabstopMarkers","useLink","moveRelative","dest","movePoint","tabstop","expandSnippet","$singleLineEditor","AcePopup","popup","lastMouseEvent","noop","selectionMarker","hoverMarker","setSelectOnHover","setRow","setHoverMarker","getRow","selectedNode","hideHoverMarker","suppressRedraw","getHoveredRow","lower","filterText","lastI","matchMask","isTopdown","autoSelect","topdownOnly","screenHeight","maxH","$borderSize","goTo","where","getTextLeftOffset","$imageSize","parForEach","completed","arLength","ID_REGEX","retrievePrecedingIdentifier","retrieveFollowingIdentifier","getCompletionPrefix","completers","completer","identifierRegexps","identifierRegex","util","Autocomplete","autoInsert","exactMatch","gatherCompletionsId","blurListener","mousedownListener","mousewheelListener","changeTimer","updateCompletions","tooltipTimer","updateDocTooltip","insertMatch","getPopup","openPopup","keepPopupPosition","completions","filtered","hideDocTooltip","activated","fromTooltip","relatedTarget","tooltipNode","deleteSuffix","gatherCompletions","total","finished","showPopup","setFilter","FilteredList","detachIfFinished","processResults","isImmediate","immediateResults","getDocTooltip","docText","docHTML","showDocTooltip","pointerEvents","tabIndex","onblur","onTooltipClick","nodeName","for","$shared","$sharedInstance","startCommand","filterCompletions","$score","localeCompare","items","upper","loop","penalty","fullMatchIndex","wordDistance","prefixPos","getWordIndex","wordScores","currentWord","wordScore","textCompleter","keyWordCompleter","snippetCompleter","setCompleters","addCompleter","loadSnippetsForMode","files","loadSnippetFile","modes","snippetFilePath","doLiveAutocomplete","hasCompleter","enableBasicAutocompletion","enableLiveAutocompletion","enableSnippets","o","1","encode","getTypeOf","decode","uint8array","Uint8Array","compressedSize","uncompressedSize","crc32","compression","compressedContent","getContentWorker","pipe","uncompressWorker","streamInfo","data_length","getCompressedWorker","withStreamInfo","createWorkerFrom","compressWorker","STORE","magic","DEFLATE","5","base64","binary","createFolders","compressionOptions","unixPermissions","dosPermissions","6","lie","7","Uint16Array","Uint32Array","_pako","_pakoAction","_pakoOptions","processChunk","_createPako","transformTo","flush","cleanUp","raw","onData","pako","A","file","O","utf8encode","I","S","z","C","getUTCHours","getUTCMinutes","getUTCSeconds","getUTCFullYear","getUTCMonth","getUTCDate","E","fileRecord","LOCAL_FILE_HEADER","dirRecord","CENTRAL_FILE_HEADER","bytesWritten","zipComment","zipPlatform","encodeFileName","streamFiles","accumulate","contentBuffer","dirRecords","currentSourceOffset","entriesCount","currentFile","_sources","percent","openedSource","closedSource","DATA_DESCRIPTOR","CENTRAL_DIRECTORY_END","prepareNextSource","isPaused","pause","resume","registerPrevious","generatedError","lock","generateWorker","_compressWorker","10","loadAsync","support","defaults","external","11","decompressed","checkCRC32","optimizedBinaryString","decodeFileName","utf8decode","isNode","isStream","prepareContent","load","fileNameStr","fileCommentStr","12","_upstreamEnded","_bindStream","_stream","Readable","_helper","_read","14","Buffer","newBufferFrom","allocBuffer","alloc","fill","isBuffer","15","folder","generate","generateInternalStream","mimeType","checkSupport","generateAsync","generateNodeStream","toNodejsStream","stream","byteAt","zero","lastIndexOfSignature","readAndCheckSignature","readData","checkOffset","checkIndex","setIndex","readInt","readString","readDate","UTC","20","21","subarray","22","23","ZIP64_CENTRAL_DIRECTORY_LOCATOR","ZIP64_CENTRAL_DIRECTORY_END","24","destType","25","26","propName","dataIsReady","_tickScheduled","_tickAndRepeat","isFinished","_tick","28","extraStreamInfo","isLocked","_listeners","mergeStreamInfo","29","nodestream","_internalType","_outputType","_mimeType","_worker","newBlob","objectMode","30","arraybuffer","ArrayBuffer","nodebuffer","MSBlobBuilder","31","leftOver","applyFromCharCode","Utf8DecodeWorker","Utf8EncodeWorker","stringifyByChunk","stringifyByChar","applyCanBeUsed","buffer","byteLength","MAX_VALUE_16BITS","MAX_VALUE_32BITS","pretty","FileReader","onerror","readAsArrayBuffer","loadOptions","checkSignature","reader","isSignature","readBlockEndOfCentral","diskNumber","diskWithCentralDirStart","centralDirRecordsOnThisDisk","centralDirRecords","centralDirSize","centralDirOffset","zipCommentLength","readBlockZip64EndOfCentral","zip64EndOfCentralSize","zip64ExtensibleData","readBlockZip64EndOfCentralLocator","diskWithZip64CentralDirStart","relativeOffsetEndOfZip64CentralDir","disksCount","readLocalFiles","localHeaderOffset","readLocalPart","handleUTF8","processAttributes","readCentralDir","zip64","readCentralPart","readEndOfCentral","prepareReader","isEncrypted","bitFlag","useUTF8","fileNameLength","fileName","compressionMethod","versionMadeBy","extraFieldsLength","fileCommentLength","diskNumberStart","internalFileAttributes","externalFileAttributes","readExtraFields","parseZIP64ExtraField","fileComment","extraFields","findExtraFieldUnicodePath","findExtraFieldUnicodeComment","_data","_dataBinary","internalStream","_decompressWorker","nodeStream","MutationObserver","WebKitMutationObserver","characterData","setImmediate","MessageChannel","port1","port2","queue","outcome","promise","onFulfilled","callFulfilled","otherCallFulfilled","onRejected","callRejected","otherCallRejected","status","finally","catch","race","immediate","assign","chunkSize","windowBits","memLevel","strategy","gzip","ended","strm","avail_out","deflateInit2","header","deflateSetHeader","dictionary","string2buf","deflateSetDictionary","_dict_set","next_in","avail_in","output","Buf8","next_out","deflate","onEnd","buf2binstring","shrinkBuf","deflateEnd","flattenChunks","Deflate","deflateRaw","inflateInit2","Z_OK","inflateGetHeader","Z_FINISH","Z_NO_FLUSH","binstring2buf","inflate","Z_NEED_DICT","inflateSetDictionary","Z_BUF_ERROR","Z_STREAM_END","Z_SYNC_FLUSH","utf8border","buf2string","arraySet","inflateEnd","Inflate","inflateRaw","ungzip","41","Int32Array","setTyped","Buf16","Buf32","42","43","Z_PARTIAL_FLUSH","Z_FULL_FLUSH","Z_BLOCK","Z_TREES","Z_ERRNO","Z_STREAM_ERROR","Z_DATA_ERROR","Z_NO_COMPRESSION","Z_BEST_SPEED","Z_BEST_COMPRESSION","Z_DEFAULT_COMPRESSION","Z_FILTERED","Z_HUFFMAN_ONLY","Z_RLE","Z_FIXED","Z_DEFAULT_STRATEGY","Z_BINARY","Z_TEXT","Z_UNKNOWN","Z_DEFLATED","T","D","F","pending_buf","pending_out","total_out","N","_tr_flush_block","block_start","strstart","U","P","max_chain_length","prev_length","nice_match","w_size","w_mask","good_match","lookahead","match_start","window_size","hash_size","adler","total_in","ins_h","hash_shift","hash_mask","Z","match_length","_tr_tally","max_lazy_match","last_lit","W","prev_match","match_available","M","good_length","max_lazy","nice_length","max_chain","H","pending_buf_size","gzhead","gzindex","last_flush","w_bits","hash_bits","dyn_ltree","dyn_dtree","bl_tree","l_desc","d_desc","bl_desc","bl_count","heap","heap_len","heap_max","l_buf","lit_bufsize","d_buf","opt_len","static_len","bi_buf","bi_valid","G","data_type","_tr_init","K","Y","deflateInit","deflateReset","deflateResetKeep","hcrc","extra","_tr_align","_tr_stored_block","deflateInfo","47","xflags","extra_len","dmax","wsize","whave","wnext","hold","bits","lencode","distcode","lenbits","distbits","sane","havedict","flags","check","wbits","ncode","nlen","ndist","have","lens","work","lendyn","distdyn","back","was","inflateReset","inflateReset2","inflateResetKeep","inflateInit","inflateInfo","0","static_tree","extra_bits","extra_base","elems","max_length","has_stree","dyn_tree","max_code","stat_desc","X","V","J","ieee754","kMaxLength","TYPED_ARRAY_SUPPORT","createBuffer","RangeError","encodingOrOffset","allocUnsafe","byteOffset","fromArrayLike","fromArrayBuffer","encoding","isEncoding","actual","write","fromString","checked","fromObject","assertSize","isView","loweredCase","utf8ToBytes","base64ToBytes","slowToString","hexSlice","utf8Slice","asciiSlice","latin1Slice","base64Slice","utf16leSlice","bidirectionalIndexOf","arrayIndexOf","indexSize","arrLength","valLength","read","readUInt16BE","foundIndex","hexWrite","remaining","strLen","parsed","utf8Write","blitBuffer","asciiWrite","byteArray","asciiToBytes","latin1Write","base64Write","ucs2Write","units","utf16leToBytes","fromByteArray","secondByte","thirdByte","fourthByte","tempCodePoint","firstByte","codePoint","bytesPerSequence","codePoints","decodeCodePointsArray","SlowBuffer","INSPECT_MAX_BYTES","foo","typedArraySupport","poolSize","_augment","species","allocUnsafeSlow","_isBuffer","swap16","swap32","swap64","equals","inspect","thisStart","thisEnd","thisCopy","targetCopy","includes","_arr","out","toHex","bytes","ext","checkInt","objectWriteUInt16","littleEndian","objectWriteUInt32","checkIEEE754","writeFloat","noAssert","writeDouble","newBuf","sliceLen","readUIntLE","readUIntBE","readUInt8","readUInt16LE","readUInt32LE","readUInt32BE","readIntLE","readIntBE","readInt8","readInt16LE","readInt16BE","readInt32LE","readInt32BE","readFloatLE","readFloatBE","readDoubleLE","readDoubleBE","writeUIntLE","writeUIntBE","writeUInt8","writeUInt16LE","writeUInt16BE","writeUInt32LE","writeUInt32BE","writeIntLE","writeIntBE","writeInt8","writeInt16LE","writeInt16BE","writeInt32LE","writeInt32BE","writeFloatLE","writeFloatBE","writeDoubleLE","writeDoubleBE","targetStart","INVALID_BASE64_RE","leadSurrogate","toByteArray","stringtrim","base64clean","dst","b64","getLens","validLen","placeHoldersLen","Arr","_byteLength","curByte","revLookup","uint8","extraBytes","len2","encodeChunk","num","isLE","mLen","nBytes","eLen","eMax","eBias","nBits","NaN","rt","LN2","Timeout","clearFn","_clearFn","unref","ref","enroll","msecs","_idleTimeoutId","_idleTimeout","unenroll","_unrefActive","_onTimeout","clearImmediate","registerImmediate","messagePrefix","onGlobalMessage","nextHandle","tasksByHandle","currentlyRunningATask","attachTo","process","runIfPresent","postMessageIsAsynchronous","oldOnMessage","canUsePostMessage","random","attachEvent","task","run","cachedSetTimeout","cachedClearTimeout","defaultSetTimout","defaultClearTimeout","runTimeout","currentQueue","draining","queueIndex","cleanUpNextTick","drainQueue","runClearTimeout","Item","title","browser","argv","versions","prependListener","prependOnceListener","cwd","chdir","umask"],"mappings":";oFAAAA,EAAOC,QAAU,SAAUD,GAsBzB,OArBKA,EAAOE,kBACVF,EAAOG,UAAY,aAEnBH,EAAOI,MAAQ,GAEVJ,EAAOK,WAAUL,EAAOK,SAAW,IACxCC,OAAOC,eAAeP,EAAQ,SAAU,CACtCQ,YAAY,EACZC,IAAK,WACH,OAAOT,EAAOU,KAGlBJ,OAAOC,eAAeP,EAAQ,KAAM,CAClCQ,YAAY,EACZC,IAAK,WACH,OAAOT,EAAOW,KAGlBX,EAAOE,gBAAkB,GAGpBF,I,8BCpBTA,EAAOC,QAAU,SAAUW,EAAKC,GAS9B,OARKA,IAEHA,EAAU,IAMO,kBAFnBD,EAAMA,GAAOA,EAAIE,WAAaF,EAAIG,QAAUH,GAGnCA,GAIL,eAAeI,KAAKJ,KAEtBA,EAAMA,EAAIK,MAAM,GAAI,IAGlBJ,EAAQK,OAEVN,GAAOC,EAAQK,MAKb,cAAcF,KAAKJ,IAAQC,EAAQM,WAC9B,IAAKC,OAAOR,EAAIS,QAAQ,KAAM,OAAOA,QAAQ,MAAO,OAAQ,KAG9DT,K,qBChCTZ,EAAOC,QAAU,EAAQ,M,0ECAzB,SAASqB,EAAQC,GAAmV,OAAtOD,EAArD,oBAAXE,QAAoD,kBAApBA,OAAOC,SAAmC,SAAiBF,GAAO,cAAcA,GAA2B,SAAiBA,GAAO,OAAOA,GAAyB,oBAAXC,QAAyBD,EAAIG,cAAgBF,QAAUD,IAAQC,OAAOG,UAAY,gBAAkBJ,IAAyBA,GAEnX,IAAIK,EAEJA,EAAI,WACF,OAAOC,KADL,GAIJ,IAEED,EAAIA,GAAK,IAAIE,SAAS,cAAb,GACT,MAAOC,GAEiE,YAAjD,qBAAXC,OAAyB,YAAcV,EAAQU,WAAuBJ,EAAII,QAMxFhC,EAAOC,QAAU2B,G,oECnBjB5B,EAAOC,QAAU,WAChB,MAAM,IAAIgC,MAAM,oC,iBCDjB,UAEmBC,EAFnB,cAAyW,OAA1OC,EAArD,oBAAXX,QAAoD,kBAApBA,OAAOC,SAAoC,SAAkBF,GAAO,cAAcA,GAA4B,SAAkBA,GAAO,OAAOA,GAAyB,oBAAXC,QAAyBD,EAAIG,cAAgBF,QAAUD,IAAQC,OAAOG,UAAY,gBAAkBJ,IAA0BA,GAEtWW,EAEV,SAAUjC,GACjB,aAEA,IAAImC,EAAW,CACbC,OAAQC,KAAKC,QACbC,UAAWF,KAAKE,WAEdH,EAAS,CACXI,IAAK,WACH,GAAIZ,KAAKa,QAAS,CAGhB,IAFA,IAAIC,EAEKC,EAAOC,UAAUC,OAAQC,EAAWC,MAAMJ,GAAOK,EAAO,EAAGA,EAAOL,EAAMK,IAC/EF,EAASE,GAAQJ,UAAUI,GAG7BF,EAASG,KAAKC,KAAKC,QAElBT,EAAmBP,EAASC,QAAQI,IAAIY,MAAMV,EAAkB,CAAC,iBAAiBvB,OAAO2B,OAK5FzB,EAA4B,oBAAXE,QAAuD,WAA9BW,EAASX,OAAOC,UAAyB,SAAUF,GAC/F,OAAOY,EAASZ,IACd,SAAUA,GACZ,OAAOA,GAAyB,oBAAXC,QAAyBD,EAAIG,cAAgBF,QAAUD,IAAQC,OAAOG,UAAY,SAAWQ,EAASZ,IAGzH+B,EAAiB,SAAwBC,EAAUC,GACrD,KAAMD,aAAoBC,GACxB,MAAM,IAAIC,UAAU,sCAIpBC,EAAc,WAChB,SAASC,EAAiBC,EAAQC,GAChC,IAAK,IAAIlD,EAAI,EAAGA,EAAIkD,EAAMf,OAAQnC,IAAK,CACrC,IAAImD,EAAaD,EAAMlD,GACvBmD,EAAWtD,WAAasD,EAAWtD,aAAc,EACjDsD,EAAWC,cAAe,EACtB,UAAWD,IAAYA,EAAWE,UAAW,GACjD1D,OAAOC,eAAeqD,EAAQE,EAAWG,IAAKH,IAIlD,OAAO,SAAUN,EAAaU,EAAYC,GAGxC,OAFID,GAAYP,EAAiBH,EAAY7B,UAAWuC,GACpDC,GAAaR,EAAiBH,EAAaW,GACxCX,GAdO,GAkBdJ,EAAM,WACR,OAAO,IAAID,MAAOiB,WAGhBC,EAAe,SAAsBC,GACvC,OAAQlB,IAAQkB,GAAQ,KAOtBC,EAAoB,WACtB,SAASA,EAAkBC,GACzBlB,EAAezB,KAAM0C,GACrB1C,KAAK4C,oBAAsB5C,KAAK4C,oBAAoBC,KAAK7C,MACzDA,KAAK2C,WAAaA,EAClB3C,KAAK8C,kBAAoB,EA0G3B,OAvGAJ,EAAkB5C,UAAUiD,MAAQ,WAC7B/C,KAAKgD,cACRhD,KAAKiD,UAAY1B,WACVvB,KAAKkD,UACZlD,KAAKmD,eACLC,iBAAiB,mBAAoBpD,KAAK4C,qBAC1CpC,EAAOI,IAAI,6CAA+CZ,KAAKqD,kBAAoB,SAIvFX,EAAkB5C,UAAUwD,KAAO,WAC7BtD,KAAKgD,cACPhD,KAAKkD,UAAY3B,IACjBvB,KAAKuD,cACLC,oBAAoB,mBAAoBxD,KAAK4C,qBAC7CpC,EAAOI,IAAI,+BAIf8B,EAAkB5C,UAAUkD,UAAY,WACtC,OAAOhD,KAAKiD,YAAcjD,KAAKkD,WAGjCR,EAAkB5C,UAAU2D,WAAa,WACvCzD,KAAK0D,SAAWnC,KAGlBmB,EAAkB5C,UAAU6D,cAAgB,WAC1C3D,KAAK8C,kBAAoB,EACzB9C,KAAKyD,oBACEzD,KAAK4D,eACZpD,EAAOI,IAAI,uCAGb8B,EAAkB5C,UAAU+D,iBAAmB,WAC7C7D,KAAK4D,eAAiBrC,IACtBf,EAAOI,IAAI,0CAGb8B,EAAkB5C,UAAUqD,aAAe,WACzCnD,KAAKuD,cACLvD,KAAK8D,QAGPpB,EAAkB5C,UAAUyD,YAAc,WACxCQ,aAAa/D,KAAKgE,cAGpBtB,EAAkB5C,UAAUgE,KAAO,WACjC,IAAIG,EAAQjE,KAEZA,KAAKgE,YAAcE,YAAW,WAC5BD,EAAME,mBAENF,EAAMH,SACL9D,KAAKqD,oBAGVX,EAAkB5C,UAAUuD,gBAAkB,WAC5C,IAAIe,EAAwBpE,KAAKH,YAAYwE,aACzCC,EAAMF,EAAsBE,IAC5BC,EAAMH,EAAsBG,IAE5BC,EADaJ,EAAsBK,WACXC,KAAK9D,IAAIZ,KAAK8C,kBAAoB,GAC9D,OAAO4B,KAAKC,MAAkC,IA5EtC,SAAeC,EAAQN,EAAKC,GACtC,OAAOG,KAAKH,IAAID,EAAKI,KAAKJ,IAAIC,EAAKK,IA2EfC,CAAML,EAAUF,EAAKC,KAGzC7B,EAAkB5C,UAAUqE,iBAAmB,WACzCnE,KAAK8E,sBACPtE,EAAOI,IAAI,oEAAsEZ,KAAK8C,kBAAoB,oBAAsB9C,KAAKqD,kBAAoB,4BAA8Bb,EAAaxC,KAAK4D,gBAAkB,yBAA2B5D,KAAKH,YAAYkF,eAAiB,MACxR/E,KAAK8C,oBAED9C,KAAKgF,uBACPxE,EAAOI,IAAI,2DAEXJ,EAAOI,IAAI,+BACXZ,KAAK2C,WAAWsC,YAKtBvC,EAAkB5C,UAAUgF,kBAAoB,WAC9C,OAAOtC,EAAaxC,KAAK0D,SAAW1D,KAAK0D,SAAW1D,KAAKiD,WAAajD,KAAKH,YAAYkF,gBAGzFrC,EAAkB5C,UAAUkF,qBAAuB,WACjD,OAAOhF,KAAK4D,gBAAkBpB,EAAaxC,KAAK4D,gBAAkB5D,KAAKH,YAAYkF,gBAGrFrC,EAAkB5C,UAAU8C,oBAAsB,WAChD,IAAIsC,EAASlF,KAEoB,YAA7BmF,SAASC,iBACXlB,YAAW,YACLgB,EAAOJ,qBAAwBI,EAAOvC,WAAW0C,WACnD7E,EAAOI,IAAI,uFAAyFuE,SAASC,iBAE7GF,EAAOvC,WAAWsC,YAEnB,MAIAvC,EA/Ge,GAkHxBA,EAAkB2B,aAAe,CAC/BC,IAAK,EACLC,IAAK,GACLE,WAAY,GAEd/B,EAAkBqC,eAAiB,EACnC,IAAIO,EAAW,CACbC,cAAe,CACbC,QAAS,UACTC,WAAY,aACZC,KAAM,OACNC,aAAc,uBACdC,UAAW,uBAEbC,mBAAoB,CAClBC,aAAc,eACdC,gBAAiB,kBACjBC,eAAgB,kBAElBC,mBAAoB,SACpBC,UAAW,CAAC,sBAAuB,4BAEjCX,EAAgBD,EAASC,cACzBW,EAAYZ,EAASY,UACrBC,EAAqBD,EAAU9G,MAAM,EAAG8G,EAAUjF,OAAS,GAC3DmF,EAAU,GAAGA,QAEbC,EAAa,WACf,SAASA,EAAWC,GAClB7E,EAAezB,KAAMqG,GACrBrG,KAAKuG,KAAOvG,KAAKuG,KAAK1D,KAAK7C,MAC3BA,KAAKsG,SAAWA,EAChBtG,KAAKwG,cAAgBxG,KAAKsG,SAASE,cACnCxG,KAAKyG,QAAU,IAAI/D,EAAkB1C,MACrCA,KAAK0G,cAAe,EAiHtB,OA9GAL,EAAWvG,UAAU6G,KAAO,SAAcC,GACxC,QAAI5G,KAAKqF,WACPrF,KAAK6G,UAAUF,KAAKG,KAAKC,UAAUH,KAC5B,IAMXP,EAAWvG,UAAUyG,KAAO,WAC1B,OAAIvG,KAAKgH,YACPxG,EAAOI,IAAI,uDAAyDZ,KAAKiH,aAClE,IAEPzG,EAAOI,IAAI,uCAAyCZ,KAAKiH,WAAa,mBAAqBf,GAEvFlG,KAAK6G,WACP7G,KAAKkH,yBAGPlH,KAAK6G,UAAY,IAAItG,EAASI,UAAUX,KAAKsG,SAASvH,IAAKmH,GAC3DlG,KAAKmH,uBACLnH,KAAKyG,QAAQ1D,SACN,IAIXsD,EAAWvG,UAAUsH,MAAQ,WAC3B,IAAIC,EAAOrG,UAAUC,OAAS,QAAsBqG,IAAjBtG,UAAU,GAAmBA,UAAU,GAAK,CAC7EuG,gBAAgB,GAEdA,EAAiBF,EAAKE,eAM1B,GAJKA,GACHvH,KAAKyG,QAAQnD,OAGXtD,KAAKgH,WACP,OAAOhH,KAAK6G,UAAUO,SAI1Bf,EAAWvG,UAAUmF,OAAS,WAG5B,GAFAzE,EAAOI,IAAI,yCAA2CZ,KAAKiH,aAEvDjH,KAAKgH,WAUP,OAAOhH,KAAKuG,OATZ,IACE,OAAOvG,KAAKoH,QACZ,MAAOI,GACPhH,EAAOI,IAAI,6BAA8B4G,GACzC,QACAhH,EAAOI,IAAI,0BAA4BZ,KAAKH,YAAY4H,YAAc,MACtEvD,WAAWlE,KAAKuG,KAAMvG,KAAKH,YAAY4H,eAO7CpB,EAAWvG,UAAU4H,YAAc,WACjC,GAAI1H,KAAK6G,UACP,OAAO7G,KAAK6G,UAAUc,UAI1BtB,EAAWvG,UAAUuF,OAAS,WAC5B,OAAOrF,KAAK4H,QAAQ,SAGtBvB,EAAWvG,UAAUkH,SAAW,WAC9B,OAAOhH,KAAK4H,QAAQ,OAAQ,eAG9BvB,EAAWvG,UAAU+H,oBAAsB,WACzC,OAAOzB,EAAQ0B,KAAK3B,EAAoBnG,KAAK0H,gBAAkB,GAGjErB,EAAWvG,UAAU8H,QAAU,WAC7B,IAAK,IAAI7G,EAAOC,UAAUC,OAAQ8G,EAAS5G,MAAMJ,GAAOK,EAAO,EAAGA,EAAOL,EAAMK,IAC7E2G,EAAO3G,GAAQJ,UAAUI,GAG3B,OAAOgF,EAAQ0B,KAAKC,EAAQ/H,KAAKiH,aAAe,GAGlDZ,EAAWvG,UAAUmH,SAAW,WAC9B,GAAIjH,KAAK6G,UACP,IAAK,IAAImB,KAASzH,EAASI,UACzB,GAAIJ,EAASI,UAAUqH,KAAWhI,KAAK6G,UAAUoB,WAC/C,OAAOD,EAAME,cAKnB,OAAO,MAGT7B,EAAWvG,UAAUqH,qBAAuB,WAC1C,IAAK,IAAIgB,KAAanI,KAAKoI,OAAQ,CACjC,IAAIC,EAAUrI,KAAKoI,OAAOD,GAAWtF,KAAK7C,MAC1CA,KAAK6G,UAAU,KAAOsB,GAAaE,IAIvChC,EAAWvG,UAAUoH,uBAAyB,WAC5C,IAAK,IAAIiB,KAAanI,KAAKoI,OACzBpI,KAAK6G,UAAU,KAAOsB,GAAa,cAIhC9B,EAxHQ,GA2HjBA,EAAWoB,YAAc,IACzBpB,EAAWvG,UAAUsI,OAAS,CAC5BE,QAAS,SAAiBC,GACxB,GAAKvI,KAAK6H,sBAAV,CAIA,IAAIW,EAAc1B,KAAK2B,MAAMF,EAAM3B,MAC/B8B,EAAaF,EAAYE,WACzBJ,EAAUE,EAAYF,QACtBK,EAASH,EAAYG,OACrBC,EAAYJ,EAAYI,UAG5B,OAFWJ,EAAYK,MAGrB,KAAKtD,EAAcC,QAEjB,OADAxF,KAAKyG,QAAQ9C,gBACN3D,KAAKwG,cAAcsC,SAE5B,KAAKvD,EAAcE,WAEjB,OADAjF,EAAOI,IAAI,0BAA4B+H,GAChC3I,KAAKoH,MAAM,CAChBG,eAAgBqB,IAGpB,KAAKrD,EAAcG,KACjB,OAAO1F,KAAKyG,QAAQhD,aAEtB,KAAK8B,EAAcI,aACjB,OAAO3F,KAAKwG,cAAcuC,OAAOL,EAAY,aAE/C,KAAKnD,EAAcK,UACjB,OAAO5F,KAAKwG,cAAcwC,OAAON,GAEnC,QACE,OAAO1I,KAAKwG,cAAcuC,OAAOL,EAAY,WAAYJ,MAG/D/B,KAAM,WAIJ,GAHA/F,EAAOI,IAAI,kCAAoCZ,KAAK0H,cAAgB,iBACpE1H,KAAK0G,cAAe,GAEf1G,KAAK6H,sBAER,OADArH,EAAOI,IAAI,gEACJZ,KAAKoH,MAAM,CAChBG,gBAAgB,KAItBH,MAAO,SAAemB,GAGpB,GAFA/H,EAAOI,IAAI,4BAEPZ,KAAK0G,aAMT,OAFA1G,KAAK0G,cAAe,EACpB1G,KAAKyG,QAAQ5C,mBACN7D,KAAKwG,cAAcyC,UAAU,eAAgB,CAClDC,qBAAsBlJ,KAAKyG,QAAQzD,eAGvCwE,MAAO,WACLhH,EAAOI,IAAI,6BAIf,IAAIuI,EAAS,SAAgBC,EAAQC,GACnC,GAAkB,MAAdA,EACF,IAAK,IAAIjH,KAAOiH,EAAY,CAC1B,IAAIC,EAAQD,EAAWjH,GACvBgH,EAAOhH,GAAOkH,EAIlB,OAAOF,GAGLG,EAAe,WACjB,SAASA,EAAajD,GACpB,IAAIkD,EAASxI,UAAUC,OAAS,QAAsBqG,IAAjBtG,UAAU,GAAmBA,UAAU,GAAK,GAC7EyI,EAAQzI,UAAU,GACtBS,EAAezB,KAAMuJ,GACrBvJ,KAAKsG,SAAWA,EAChBtG,KAAK0I,WAAa5B,KAAKC,UAAUyC,GACjCL,EAAOnJ,KAAMyJ,GAqBf,OAlBAF,EAAazJ,UAAU4J,QAAU,SAAiBC,GAChD,IAAI/C,EAAO5F,UAAUC,OAAS,QAAsBqG,IAAjBtG,UAAU,GAAmBA,UAAU,GAAK,GAE/E,OADA4F,EAAK+C,OAASA,EACP3J,KAAK2G,KAAKC,IAGnB2C,EAAazJ,UAAU6G,KAAO,SAAcC,GAC1C,OAAO5G,KAAKsG,SAASK,KAAK,CACxBiD,QAAS,UACTlB,WAAY1I,KAAK0I,WACjB9B,KAAME,KAAKC,UAAUH,MAIzB2C,EAAazJ,UAAU+J,YAAc,WACnC,OAAO7J,KAAKsG,SAASE,cAAcsD,OAAO9J,OAGrCuJ,EA5BU,GA+BfQ,EAAgB,WAClB,SAASA,EAAczD,GACrB7E,EAAezB,KAAM+J,GACrB/J,KAAKsG,SAAWA,EAChBtG,KAAKwG,cAAgB,GAqGvB,OAlGAuD,EAAcjK,UAAUkK,OAAS,SAAgBC,EAAaR,GAC5D,IAAIS,EAAUD,EACVT,EAA+E,YAAlD,qBAAZU,EAA0B,YAAczK,EAAQyK,IAAyBA,EAAU,CACtGA,QAASA,GAEPC,EAAe,IAAIZ,EAAavJ,KAAKsG,SAAUkD,EAAQC,GAC3D,OAAOzJ,KAAKoK,IAAID,IAGlBJ,EAAcjK,UAAUsK,IAAM,SAAaD,GAKzC,OAJAnK,KAAKwG,cAAcnF,KAAK8I,GACxBnK,KAAKsG,SAAS+D,yBACdrK,KAAK+I,OAAOoB,EAAc,eAC1BnK,KAAKsK,YAAYH,EAAc,aACxBA,GAGTJ,EAAcjK,UAAUgK,OAAS,SAAgBK,GAO/C,OANAnK,KAAKuK,OAAOJ,GAEPnK,KAAKwK,QAAQL,EAAazB,YAAYzH,QACzCjB,KAAKsK,YAAYH,EAAc,eAG1BA,GAGTJ,EAAcjK,UAAUkJ,OAAS,SAAgBN,GAC/C,IAAIzE,EAAQjE,KAEZ,OAAOA,KAAKwK,QAAQ9B,GAAY+B,KAAI,SAAUN,GAK5C,OAJAlG,EAAMsG,OAAOJ,GAEblG,EAAM8E,OAAOoB,EAAc,YAEpBA,MAIXJ,EAAcjK,UAAUyK,OAAS,SAAgBJ,GAI/C,OAHAnK,KAAKwG,cAAgBxG,KAAKwG,cAAckE,QAAO,SAAUC,GACvD,OAAOA,IAAMR,KAERA,GAGTJ,EAAcjK,UAAU0K,QAAU,SAAiB9B,GACjD,OAAO1I,KAAKwG,cAAckE,QAAO,SAAUC,GACzC,OAAOA,EAAEjC,aAAeA,MAI5BqB,EAAcjK,UAAUgJ,OAAS,WAC/B,IAAI5D,EAASlF,KAEb,OAAOA,KAAKwG,cAAciE,KAAI,SAAUN,GACtC,OAAOjF,EAAOoF,YAAYH,EAAc,iBAI5CJ,EAAcjK,UAAUmJ,UAAY,SAAmB2B,GAGrD,IAFA,IAAIC,EAAS7K,KAEJe,EAAOC,UAAUC,OAAQ6J,EAAO3J,MAAMJ,EAAO,EAAIA,EAAO,EAAI,GAAIK,EAAO,EAAGA,EAAOL,EAAMK,IAC9F0J,EAAK1J,EAAO,GAAKJ,UAAUI,GAG7B,OAAOpB,KAAKwG,cAAciE,KAAI,SAAUN,GACtC,OAAOU,EAAO9B,OAAOvH,MAAMqJ,EAAQ,CAACV,EAAcS,GAAcrL,OAAOuL,QAI3Ef,EAAcjK,UAAUiJ,OAAS,SAAgBoB,EAAcS,GAC7D,IAAK,IAAIG,EAAQ/J,UAAUC,OAAQ6J,EAAO3J,MAAM4J,EAAQ,EAAIA,EAAQ,EAAI,GAAIC,EAAQ,EAAGA,EAAQD,EAAOC,IACpGF,EAAKE,EAAQ,GAAKhK,UAAUgK,GAW9B,OAN4B,kBAAjBb,EACOnK,KAAKwK,QAAQL,GAEb,CAACA,IAGEM,KAAI,SAAUN,GACjC,MAA6C,oBAA/BA,EAAaS,GAA+BT,EAAaS,GAAcpJ,MAAM2I,EAAcW,QAAQxD,MAIrHyC,EAAcjK,UAAUwK,YAAc,SAAqBH,EAAcP,GACvE,IAAIlB,EAAayB,EAAazB,WAC9B,OAAO1I,KAAKsG,SAASK,KAAK,CACxBiD,QAASA,EACTlB,WAAYA,KAITqB,EAzGW,GA4GhBkB,EAAW,WACb,SAASA,EAASlM,GAChB0C,EAAezB,KAAMiL,GACrBjL,KAAKkL,KAAOnM,EACZiB,KAAKwG,cAAgB,IAAIuD,EAAc/J,MACvCA,KAAK2C,WAAa,IAAI0D,EAAWrG,MA6BnC,OA1BAiL,EAASnL,UAAU6G,KAAO,SAAcC,GACtC,OAAO5G,KAAK2C,WAAWgE,KAAKC,IAG9BqE,EAASnL,UAAUqL,QAAU,WAC3B,OAAOnL,KAAK2C,WAAW4D,QAGzB0E,EAASnL,UAAU2F,WAAa,WAC9B,OAAOzF,KAAK2C,WAAWyE,MAAM,CAC3BG,gBAAgB,KAIpB0D,EAASnL,UAAUuK,uBAAyB,WAC1C,IAAKrK,KAAK2C,WAAWqE,WACnB,OAAOhH,KAAK2C,WAAW4D,QAI3B1E,EAAYoJ,EAAU,CAAC,CACrB7I,IAAK,MACLxD,IAAK,WACH,OAAOwM,EAAmBpL,KAAKkL,UAG5BD,EAlCM,GAqCf,SAASG,EAAmBrM,GAK1B,GAJmB,oBAARA,IACTA,EAAMA,KAGJA,IAAQ,UAAUI,KAAKJ,GAAM,CAC/B,IAAIsM,EAAIlG,SAASmG,cAAc,KAI/B,OAHAD,EAAEE,KAAOxM,EACTsM,EAAEE,KAAOF,EAAEE,KACXF,EAAE1D,SAAW0D,EAAE1D,SAASnI,QAAQ,OAAQ,MACjC6L,EAAEE,KAET,OAAOxM,EASX,SAASyM,EAAUC,GACjB,IAAIC,EAAUvG,SAASwG,KAAKC,cAAc,2BAA6BH,EAAO,MAE9E,GAAIC,EACF,OAAOA,EAAQG,aAAa,WAIhCzN,EAAQiI,WAAaA,EACrBjI,EAAQsE,kBAAoBA,EAC5BtE,EAAQ6M,SAAWA,EACnB7M,EAAQkH,SAAWA,EACnBlH,EAAQmL,aAAeA,EACvBnL,EAAQ2L,cAAgBA,EACxB3L,EAAQmC,SAAWA,EACnBnC,EAAQgN,mBAAqBA,EAC7BhN,EAAQoC,OAASA,EACjBpC,EAAQ0N,eAtBR,WACE,IAAI/M,EAAMiC,UAAUC,OAAS,QAAsBqG,IAAjBtG,UAAU,GAAmBA,UAAU,GAAKwK,EAAU,QAAUlG,EAASW,mBAC3G,OAAO,IAAIgF,EAASlM,IAqBtBX,EAAQoN,UAAYA,EACpB/M,OAAOC,eAAeN,EAAS,aAAc,CAC3CkL,OAAO,KAjnB8D,WAAvBhJ,EAASlC,IAA4C,qBAAXD,EAAyBkC,EAAQjC,IAAwD,EAAO,CAAC,QAAmB,2BAAP,EAAF,GAAS,iC,gECIhN,IAAI2N,EAAW,SAAU3N,GACvB,aAEA,IAAI4N,EAAKvN,OAAOqB,UACZmM,EAASD,EAAGE,eAEZC,EAA4B,oBAAXxM,OAAwBA,OAAS,GAClDyM,EAAiBD,EAAQvM,UAAY,aACrCyM,EAAsBF,EAAQG,eAAiB,kBAC/CC,EAAoBJ,EAAQK,aAAe,gBAE/C,SAASC,EAAO/M,EAAK0C,EAAKkH,GAOxB,OANA7K,OAAOC,eAAegB,EAAK0C,EAAK,CAC9BkH,MAAOA,EACP3K,YAAY,EACZuD,cAAc,EACdC,UAAU,IAELzC,EAAI0C,GAEb,IAEEqK,EAAO,GAAI,IACX,MAAOC,GACPD,EAAS,SAAS/M,EAAK0C,EAAKkH,GAC1B,OAAO5J,EAAI0C,GAAOkH,GAItB,SAASqD,EAAKC,EAASC,EAASpM,EAAMqM,GAEpC,IAAIC,EAAiBF,GAAWA,EAAQ/M,qBAAqBkN,EAAYH,EAAUG,EAC/EC,EAAYxO,OAAOuL,OAAO+C,EAAejN,WACzCoN,EAAU,IAAIC,EAAQL,GAAe,IAMzC,OAFAG,EAAUG,QAuMZ,SAA0BR,EAASnM,EAAMyM,GACvC,IAAIlF,EAhLuB,iBAkL3B,OAAO,SAAgBqF,EAAQC,GAC7B,GAjLoB,cAiLhBtF,EACF,MAAM,IAAI5H,MAAM,gCAGlB,GApLoB,cAoLhB4H,EAA6B,CAC/B,GAAe,UAAXqF,EACF,MAAMC,EAKR,OAAOC,IAMT,IAHAL,EAAQG,OAASA,EACjBH,EAAQI,IAAMA,IAED,CACX,IAAIE,EAAWN,EAAQM,SACvB,GAAIA,EAAU,CACZ,IAAIC,EAAiBC,EAAoBF,EAAUN,GACnD,GAAIO,EAAgB,CAClB,GAAIA,IAAmBE,EAAkB,SACzC,OAAOF,GAIX,GAAuB,SAAnBP,EAAQG,OAGVH,EAAQU,KAAOV,EAAQW,MAAQX,EAAQI,SAElC,GAAuB,UAAnBJ,EAAQG,OAAoB,CACrC,GApNqB,mBAoNjBrF,EAEF,MADAA,EAlNc,YAmNRkF,EAAQI,IAGhBJ,EAAQY,kBAAkBZ,EAAQI,SAEN,WAAnBJ,EAAQG,QACjBH,EAAQa,OAAO,SAAUb,EAAQI,KAGnCtF,EA7NkB,YA+NlB,IAAIgG,EAASC,EAASrB,EAASnM,EAAMyM,GACrC,GAAoB,WAAhBc,EAAOnF,KAAmB,CAO5B,GAJAb,EAAQkF,EAAQgB,KAlOA,YAFK,iBAwOjBF,EAAOV,MAAQK,EACjB,SAGF,MAAO,CACLrE,MAAO0E,EAAOV,IACdY,KAAMhB,EAAQgB,MAGS,UAAhBF,EAAOnF,OAChBb,EAhPgB,YAmPhBkF,EAAQG,OAAS,QACjBH,EAAQI,IAAMU,EAAOV,OA/QPa,CAAiBvB,EAASnM,EAAMyM,GAE7CD,EAcT,SAASgB,EAASG,EAAI1O,EAAK4N,GACzB,IACE,MAAO,CAAEzE,KAAM,SAAUyE,IAAKc,EAAGtG,KAAKpI,EAAK4N,IAC3C,MAAOZ,GACP,MAAO,CAAE7D,KAAM,QAASyE,IAAKZ,IAhBjCtO,EAAQuO,KAAOA,EAoBf,IAOIgB,EAAmB,GAMvB,SAASX,KACT,SAASqB,KACT,SAASC,KAIT,IAAIC,EAAoB,GACxB9B,EAAO8B,EAAmBnC,GAAgB,WACxC,OAAOpM,QAGT,IAAIwO,EAAW/P,OAAOgQ,eAClBC,EAA0BF,GAAYA,EAASA,EAASG,EAAO,MAC/DD,GACAA,IAA4B1C,GAC5BC,EAAOnE,KAAK4G,EAAyBtC,KAGvCmC,EAAoBG,GAGtB,IAAIE,EAAKN,EAA2BxO,UAClCkN,EAAUlN,UAAYrB,OAAOuL,OAAOuE,GAYtC,SAASM,EAAsB/O,GAC7B,CAAC,OAAQ,QAAS,UAAUgP,SAAQ,SAASzB,GAC3CZ,EAAO3M,EAAWuN,GAAQ,SAASC,GACjC,OAAOtN,KAAKoN,QAAQC,EAAQC,SAkClC,SAASyB,EAAc9B,EAAW+B,GAgChC,IAAIC,EAgCJjP,KAAKoN,QA9BL,SAAiBC,EAAQC,GACvB,SAAS4B,IACP,OAAO,IAAIF,GAAY,SAASG,EAASnG,IAnC7C,SAASoG,EAAO/B,EAAQC,EAAK6B,EAASnG,GACpC,IAAIgF,EAASC,EAAShB,EAAUI,GAASJ,EAAWK,GACpD,GAAoB,UAAhBU,EAAOnF,KAEJ,CACL,IAAIwG,EAASrB,EAAOV,IAChBhE,EAAQ+F,EAAO/F,MACnB,OAAIA,GACiB,kBAAVA,GACP2C,EAAOnE,KAAKwB,EAAO,WACd0F,EAAYG,QAAQ7F,EAAMgG,SAASC,MAAK,SAASjG,GACtD8F,EAAO,OAAQ9F,EAAO6F,EAASnG,MAC9B,SAAS0D,GACV0C,EAAO,QAAS1C,EAAKyC,EAASnG,MAI3BgG,EAAYG,QAAQ7F,GAAOiG,MAAK,SAASC,GAI9CH,EAAO/F,MAAQkG,EACfL,EAAQE,MACP,SAAS7H,GAGV,OAAO4H,EAAO,QAAS5H,EAAO2H,EAASnG,MAvBzCA,EAAOgF,EAAOV,KAiCZ8B,CAAO/B,EAAQC,EAAK6B,EAASnG,MAIjC,OAAOiG,EAaLA,EAAkBA,EAAgBM,KAChCL,EAGAA,GACEA,KAkHV,SAASxB,EAAoBF,EAAUN,GACrC,IAAIG,EAASG,EAAS5N,SAASsN,EAAQG,QACvC,QA3TE/F,IA2TE+F,EAAsB,CAKxB,GAFAH,EAAQM,SAAW,KAEI,UAAnBN,EAAQG,OAAoB,CAE9B,GAAIG,EAAS5N,SAAiB,SAG5BsN,EAAQG,OAAS,SACjBH,EAAQI,SAtUZhG,EAuUIoG,EAAoBF,EAAUN,GAEP,UAAnBA,EAAQG,QAGV,OAAOM,EAIXT,EAAQG,OAAS,QACjBH,EAAQI,IAAM,IAAI1L,UAChB,kDAGJ,OAAO+L,EAGT,IAAIK,EAASC,EAASZ,EAAQG,EAAS5N,SAAUsN,EAAQI,KAEzD,GAAoB,UAAhBU,EAAOnF,KAIT,OAHAqE,EAAQG,OAAS,QACjBH,EAAQI,IAAMU,EAAOV,IACrBJ,EAAQM,SAAW,KACZG,EAGT,IAAI8B,EAAOzB,EAAOV,IAElB,OAAMmC,EAOFA,EAAKvB,MAGPhB,EAAQM,EAASkC,YAAcD,EAAKnG,MAGpC4D,EAAQyC,KAAOnC,EAASoC,QAQD,WAAnB1C,EAAQG,SACVH,EAAQG,OAAS,OACjBH,EAAQI,SA1XVhG,GAoYF4F,EAAQM,SAAW,KACZG,GANE8B,GA3BPvC,EAAQG,OAAS,QACjBH,EAAQI,IAAM,IAAI1L,UAAU,oCAC5BsL,EAAQM,SAAW,KACZG,GAoDX,SAASkC,EAAaC,GACpB,IAAIC,EAAQ,CAAEC,OAAQF,EAAK,IAEvB,KAAKA,IACPC,EAAME,SAAWH,EAAK,IAGpB,KAAKA,IACPC,EAAMG,WAAaJ,EAAK,GACxBC,EAAMI,SAAWL,EAAK,IAGxB9P,KAAKoQ,WAAW/O,KAAK0O,GAGvB,SAASM,EAAcN,GACrB,IAAI/B,EAAS+B,EAAMO,YAAc,GACjCtC,EAAOnF,KAAO,gBACPmF,EAAOV,IACdyC,EAAMO,WAAatC,EAGrB,SAASb,EAAQL,GAIf9M,KAAKoQ,WAAa,CAAC,CAAEJ,OAAQ,SAC7BlD,EAAYgC,QAAQe,EAAc7P,MAClCA,KAAKuQ,OAAM,GA8Bb,SAAS5B,EAAO6B,GACd,GAAIA,EAAU,CACZ,IAAIC,EAAiBD,EAASpE,GAC9B,GAAIqE,EACF,OAAOA,EAAe3I,KAAK0I,GAG7B,GAA6B,oBAAlBA,EAASb,KAClB,OAAOa,EAGT,IAAKE,MAAMF,EAASvP,QAAS,CAC3B,IAAInC,GAAK,EAAG6Q,EAAO,SAASA,IAC1B,OAAS7Q,EAAI0R,EAASvP,QACpB,GAAIgL,EAAOnE,KAAK0I,EAAU1R,GAGxB,OAFA6Q,EAAKrG,MAAQkH,EAAS1R,GACtB6Q,EAAKzB,MAAO,EACLyB,EAOX,OAHAA,EAAKrG,WA1eThC,EA2eIqI,EAAKzB,MAAO,EAELyB,GAGT,OAAOA,EAAKA,KAAOA,GAKvB,MAAO,CAAEA,KAAMpC,GAIjB,SAASA,IACP,MAAO,CAAEjE,WA1fPhC,EA0fyB4G,MAAM,GA+MnC,OA7mBAG,EAAkBvO,UAAYwO,EAC9B7B,EAAOmC,EAAI,cAAeN,GAC1B7B,EAAO6B,EAA4B,cAAeD,GAClDA,EAAkBsC,YAAclE,EAC9B6B,EACA/B,EACA,qBAaFnO,EAAQwS,oBAAsB,SAASC,GACrC,IAAIC,EAAyB,oBAAXD,GAAyBA,EAAOhR,YAClD,QAAOiR,IACHA,IAASzC,GAG2B,uBAAnCyC,EAAKH,aAAeG,EAAKrF,QAIhCrN,EAAQ2S,KAAO,SAASF,GAQtB,OAPIpS,OAAOuS,eACTvS,OAAOuS,eAAeH,EAAQvC,IAE9BuC,EAAOI,UAAY3C,EACnB7B,EAAOoE,EAAQtE,EAAmB,sBAEpCsE,EAAO/Q,UAAYrB,OAAOuL,OAAO4E,GAC1BiC,GAOTzS,EAAQ8S,MAAQ,SAAS5D,GACvB,MAAO,CAAEgC,QAAShC,IAsEpBuB,EAAsBE,EAAcjP,WACpC2M,EAAOsC,EAAcjP,UAAWuM,GAAqB,WACnD,OAAOrM,QAET5B,EAAQ2Q,cAAgBA,EAKxB3Q,EAAQ+S,MAAQ,SAASvE,EAASC,EAASpM,EAAMqM,EAAakC,QACxC,IAAhBA,IAAwBA,EAAcoC,SAE1C,IAAIC,EAAO,IAAItC,EACbpC,EAAKC,EAASC,EAASpM,EAAMqM,GAC7BkC,GAGF,OAAO5Q,EAAQwS,oBAAoB/D,GAC/BwE,EACAA,EAAK1B,OAAOJ,MAAK,SAASF,GACxB,OAAOA,EAAOnB,KAAOmB,EAAO/F,MAAQ+H,EAAK1B,WAuKjDd,EAAsBD,GAEtBnC,EAAOmC,EAAIrC,EAAmB,aAO9BE,EAAOmC,EAAIxC,GAAgB,WACzB,OAAOpM,QAGTyM,EAAOmC,EAAI,YAAY,WACrB,MAAO,wBAkCTxQ,EAAQkT,KAAO,SAASlI,GACtB,IAAIkI,EAAO,GACX,IAAK,IAAIlP,KAAOgH,EACdkI,EAAKjQ,KAAKe,GAMZ,OAJAkP,EAAKC,UAIE,SAAS5B,IACd,KAAO2B,EAAKrQ,QAAQ,CAClB,IAAImB,EAAMkP,EAAKE,MACf,GAAIpP,KAAOgH,EAGT,OAFAuG,EAAKrG,MAAQlH,EACbuN,EAAKzB,MAAO,EACLyB,EAQX,OADAA,EAAKzB,MAAO,EACLyB,IAsCXvR,EAAQuQ,OAASA,EAMjBxB,EAAQrN,UAAY,CAClBD,YAAasN,EAEboD,MAAO,SAASkB,GAcd,GAbAzR,KAAK0R,KAAO,EACZ1R,KAAK2P,KAAO,EAGZ3P,KAAK4N,KAAO5N,KAAK6N,WArgBjBvG,EAsgBAtH,KAAKkO,MAAO,EACZlO,KAAKwN,SAAW,KAEhBxN,KAAKqN,OAAS,OACdrN,KAAKsN,SA1gBLhG,EA4gBAtH,KAAKoQ,WAAWtB,QAAQuB,IAEnBoB,EACH,IAAK,IAAIhG,KAAQzL,KAEQ,MAAnByL,EAAKkG,OAAO,IACZ1F,EAAOnE,KAAK9H,KAAMyL,KACjBiF,OAAOjF,EAAKrM,MAAM,MACrBY,KAAKyL,QAphBXnE,IA0hBFhE,KAAM,WACJtD,KAAKkO,MAAO,EAEZ,IACI0D,EADY5R,KAAKoQ,WAAW,GACLE,WAC3B,GAAwB,UAApBsB,EAAW/I,KACb,MAAM+I,EAAWtE,IAGnB,OAAOtN,KAAK6R,MAGd/D,kBAAmB,SAASgE,GAC1B,GAAI9R,KAAKkO,KACP,MAAM4D,EAGR,IAAI5E,EAAUlN,KACd,SAAS+R,EAAOC,EAAKC,GAYnB,OAXAjE,EAAOnF,KAAO,QACdmF,EAAOV,IAAMwE,EACb5E,EAAQyC,KAAOqC,EAEXC,IAGF/E,EAAQG,OAAS,OACjBH,EAAQI,SArjBZhG,KAwjBY2K,EAGZ,IAAK,IAAInT,EAAIkB,KAAKoQ,WAAWnP,OAAS,EAAGnC,GAAK,IAAKA,EAAG,CACpD,IAAIiR,EAAQ/P,KAAKoQ,WAAWtR,GACxBkP,EAAS+B,EAAMO,WAEnB,GAAqB,SAAjBP,EAAMC,OAIR,OAAO+B,EAAO,OAGhB,GAAIhC,EAAMC,QAAUhQ,KAAK0R,KAAM,CAC7B,IAAIQ,EAAWjG,EAAOnE,KAAKiI,EAAO,YAC9BoC,EAAalG,EAAOnE,KAAKiI,EAAO,cAEpC,GAAImC,GAAYC,EAAY,CAC1B,GAAInS,KAAK0R,KAAO3B,EAAME,SACpB,OAAO8B,EAAOhC,EAAME,UAAU,GACzB,GAAIjQ,KAAK0R,KAAO3B,EAAMG,WAC3B,OAAO6B,EAAOhC,EAAMG,iBAGjB,GAAIgC,GACT,GAAIlS,KAAK0R,KAAO3B,EAAME,SACpB,OAAO8B,EAAOhC,EAAME,UAAU,OAG3B,KAAIkC,EAMT,MAAM,IAAI/R,MAAM,0CALhB,GAAIJ,KAAK0R,KAAO3B,EAAMG,WACpB,OAAO6B,EAAOhC,EAAMG,gBAU9BnC,OAAQ,SAASlF,EAAMyE,GACrB,IAAK,IAAIxO,EAAIkB,KAAKoQ,WAAWnP,OAAS,EAAGnC,GAAK,IAAKA,EAAG,CACpD,IAAIiR,EAAQ/P,KAAKoQ,WAAWtR,GAC5B,GAAIiR,EAAMC,QAAUhQ,KAAK0R,MACrBzF,EAAOnE,KAAKiI,EAAO,eACnB/P,KAAK0R,KAAO3B,EAAMG,WAAY,CAChC,IAAIkC,EAAerC,EACnB,OAIAqC,IACU,UAATvJ,GACS,aAATA,IACDuJ,EAAapC,QAAU1C,GACvBA,GAAO8E,EAAalC,aAGtBkC,EAAe,MAGjB,IAAIpE,EAASoE,EAAeA,EAAa9B,WAAa,GAItD,OAHAtC,EAAOnF,KAAOA,EACdmF,EAAOV,IAAMA,EAET8E,GACFpS,KAAKqN,OAAS,OACdrN,KAAK2P,KAAOyC,EAAalC,WAClBvC,GAGF3N,KAAKqS,SAASrE,IAGvBqE,SAAU,SAASrE,EAAQmC,GACzB,GAAoB,UAAhBnC,EAAOnF,KACT,MAAMmF,EAAOV,IAcf,MAXoB,UAAhBU,EAAOnF,MACS,aAAhBmF,EAAOnF,KACT7I,KAAK2P,KAAO3B,EAAOV,IACM,WAAhBU,EAAOnF,MAChB7I,KAAK6R,KAAO7R,KAAKsN,IAAMU,EAAOV,IAC9BtN,KAAKqN,OAAS,SACdrN,KAAK2P,KAAO,OACa,WAAhB3B,EAAOnF,MAAqBsH,IACrCnQ,KAAK2P,KAAOQ,GAGPxC,GAGT2E,OAAQ,SAASpC,GACf,IAAK,IAAIpR,EAAIkB,KAAKoQ,WAAWnP,OAAS,EAAGnC,GAAK,IAAKA,EAAG,CACpD,IAAIiR,EAAQ/P,KAAKoQ,WAAWtR,GAC5B,GAAIiR,EAAMG,aAAeA,EAGvB,OAFAlQ,KAAKqS,SAAStC,EAAMO,WAAYP,EAAMI,UACtCE,EAAcN,GACPpC,IAKb,MAAS,SAASqC,GAChB,IAAK,IAAIlR,EAAIkB,KAAKoQ,WAAWnP,OAAS,EAAGnC,GAAK,IAAKA,EAAG,CACpD,IAAIiR,EAAQ/P,KAAKoQ,WAAWtR,GAC5B,GAAIiR,EAAMC,SAAWA,EAAQ,CAC3B,IAAIhC,EAAS+B,EAAMO,WACnB,GAAoB,UAAhBtC,EAAOnF,KAAkB,CAC3B,IAAI0J,EAASvE,EAAOV,IACpB+C,EAAcN,GAEhB,OAAOwC,GAMX,MAAM,IAAInS,MAAM,0BAGlBoS,cAAe,SAAShC,EAAUd,EAAYE,GAa5C,OAZA5P,KAAKwN,SAAW,CACd5N,SAAU+O,EAAO6B,GACjBd,WAAYA,EACZE,QAASA,GAGS,SAAhB5P,KAAKqN,SAGPrN,KAAKsN,SA9rBPhG,GAisBOqG,IAQJvP,EA9sBK,CAqtBiBD,EAAOC,SAGtC,IACEqU,mBAAqB1G,EACrB,MAAO2G,GAWmB,kBAAfC,WACTA,WAAWF,mBAAqB1G,EAEhC9L,SAAS,IAAK,yBAAdA,CAAwC8L,K,iBC/uB5C,0BAAoW,OAAtOtM,EAArD,oBAAXE,QAAoD,kBAApBA,OAAOC,SAAmC,SAAiBF,GAAO,cAAcA,GAA2B,SAAiBA,GAAO,OAAOA,GAAyB,oBAAXC,QAAyBD,EAAIG,cAAgBF,QAAUD,IAAQC,OAAOG,UAAY,gBAAkBJ,IAAyBA,IAqCnX,WACE,IAEIkT,EAAS,WACX,OAAO5S,KADI,GAIR4S,GAA2B,oBAAVzS,SAAuByS,EAASzS,QAItD,IAAIsM,EAAS,SAASA,EAAOtO,EAAQ0U,EAAMC,GACnB,kBAAX3U,GAQa,GAApB6C,UAAUC,SAAa6R,EAAUD,GAEhCpG,EAAOsG,QAAQ5U,KAClBsO,EAAOuG,SAAS7U,GAAU2U,EAC1BrG,EAAOsG,QAAQ5U,GAAU,OAXrBsO,EAAOwG,SAAUxG,EAAOwG,SAASzR,MAAMxB,KAAMgB,YAC/CN,QAAQ8G,MAAM,mDACd9G,QAAQwS,UAadzG,EAAOsG,QAAU,GACjBtG,EAAOuG,SAAW,GAKlB,IAsFmBG,EACbC,EAvFFC,EAAW,SAAkBC,EAAUnV,EAAQoV,GACjD,GAAsB,kBAAXpV,EAAqB,CAC9B,IAAI2U,EAAUU,EAAOF,EAAUnV,GAE/B,QAAemJ,GAAXwL,EAEF,OADAS,GAAYA,IACLT,OAEJ,GAA+C,mBAA3CrU,OAAOqB,UAAU2T,SAAS3L,KAAK3J,GAA8B,CAGtE,IAFA,IAAIqL,EAAS,GAEJ1K,EAAI,EAAGD,EAAIV,EAAO8C,OAAQnC,EAAID,IAAKC,EAAG,CAC7C,IAAI4U,EAAMF,EAAOF,EAAUnV,EAAOW,IAClC,QAAWwI,GAAPoM,GAAoBC,EAAQV,SAAU,OAC1CzJ,EAAOnI,KAAKqS,GAGd,OAAOH,GAAYA,EAAS/R,MAAM,KAAMgI,KAAW,IAInDmK,EAAU,SAASA,EAAQxV,EAAQoV,GACrC,IAAIK,EAAiBP,EAAS,GAAIlV,EAAQoV,GAE1C,YAAsBjM,GAAlBsM,GAA+BD,EAAQV,SAAiBU,EAAQV,SAASzR,MAAMxB,KAAMgB,WAClF4S,GA6BLJ,EAAS,SAAgBF,EAAUO,GACrCA,EA3BoB,SAASC,EAAgBR,EAAUO,GAEvD,IAAiC,IAA7BA,EAAWzN,QAAQ,KAAa,CAClC,IAAI2N,EAASF,EAAWG,MAAM,KAC9B,OAAOF,EAAgBR,EAAUS,EAAO,IAAM,IAAMD,EAAgBR,EAAUS,EAAO,IAIvF,GAA4B,KAAxBF,EAAWlC,OAAO,GAIpB,IAFAkC,EADWP,EAASU,MAAM,KAAK5U,MAAM,GAAI,GAAG6U,KAAK,KAC7B,IAAMJ,GAEU,IAA7BA,EAAWzN,QAAQ,MAAe8N,GAAYL,GAAY,CAC/D,IAAIK,EAAWL,EACfA,EAAaA,EAAWrU,QAAQ,SAAU,KAAKA,QAAQ,iBAAkB,IAI7E,OAAOqU,EASMC,CAAgBR,EAAUO,GACvC,IAAI1V,EAASsO,EAAOsG,QAAQc,GAE5B,IAAK1V,EAAQ,CAGX,GAAsB,oBAFtBA,EAASsO,EAAOuG,SAASa,IAES,CAChC,IAAIzV,EAAU,GACV+V,EAAM,CACRC,GAAIP,EACJQ,IAAK,GACLjW,QAASA,EACTkW,UAAU,GAQZlW,EADkBD,GAJR,SAAaA,EAAQoV,GAC7B,OAAOF,EAASQ,EAAY1V,EAAQoV,KAGRnV,EAAS+V,IACdA,EAAI/V,QAC7BqO,EAAOsG,QAAQc,GAAczV,SACtBqO,EAAOuG,SAASa,GAGzB1V,EAASsO,EAAOsG,QAAQc,GAAczV,GAAWD,EAGnD,OAAOA,GAIHiV,EAAOR,GADMO,EAvHC,SA2HXP,EAAOO,KAAKP,EAAOO,GAAM,IAC9BC,EAAOR,EAAOO,IAGXC,EAAK3G,QAAW2G,EAAK3G,OAAO6H,WAC/B7H,EAAOwG,SAAWG,EAAK3G,OACvB2G,EAAK3G,OAASA,EACd2G,EAAK3G,OAAO6H,UAAW,GAGpBlB,EAAKO,SAAYP,EAAKO,QAAQW,WACjCX,EAAQV,SAAWG,EAAKO,QACxBP,EAAKO,QAAUA,EACfP,EAAKO,QAAQW,UAAW,GAzI9B,GAgJAC,IAAI9H,OAAO,yBAA0B,CAAC,UAAW,UAAW,WAAW,SAAUkH,EAASvV,EAASD,GACjG,aAEsB,oBAAXqW,SAA2BA,QAAQ1U,UAAUgK,QACtDrL,OAAOC,eAAe8V,QAAQ1U,UAAW,SAAU,CACjDnB,YAAY,EACZwD,UAAU,EACVD,cAAc,EACdoH,MAAO,WACLtJ,KAAKyU,YAAczU,KAAKyU,WAAWC,YAAY1U,YAKvDuU,IAAI9H,OAAO,oBAAqB,CAAC,UAAW,UAAW,WAAW,SAAUkH,EAASvV,EAASD,GAC5F,aAEAC,EAAQuW,GAAK,CACXC,MAAO,QACPC,IAAK,MACLC,QAAS,WAGX1W,EAAQ2W,MAAQ,WACd,OAAI3W,EAAQ4W,MACH5W,EAAQuW,GAAGE,IACTzW,EAAQ6W,QACV7W,EAAQuW,GAAGC,MAEXxW,EAAQuW,GAAGG,SAItB,IAAII,EAAsF,WAAnD,qBAAdC,UAA4B,YAAc1V,EAAQ0V,YAA0BA,UAAY,GAE7GC,GAAM,iBAAiBC,KAAKH,EAAWI,WAAa,CAAC,UAAU,GAAGpN,cAClEqN,EAAKL,EAAWM,WAAa,GAC7BC,EAAUP,EAAWO,SAAW,GACpCrX,EAAQsX,MAAc,OAANN,EAChBhX,EAAQ4W,MAAc,OAANI,EAChBhX,EAAQ6W,QAAgB,SAANG,EAClBhX,EAAQuX,KAAkB,+BAAXF,GAA4CA,EAAQrP,QAAQ,cAAgB,EAAIwP,YAAYL,EAAGM,MAAM,4DAA8D,IAAI,IAAMD,YAAYL,EAAGM,MAAM,sDAAwD,IAAI,IAE7QzX,EAAQ0X,QAAU1X,EAAQuX,MAAQvX,EAAQuX,KAAO,EACjDvX,EAAQ2X,QAAU3X,EAAQ4X,UAAYT,EAAGM,MAAM,eAC/CzX,EAAQ6X,QAA2E,WAA/C,qBAAVC,MAAwB,YAAczW,EAAQyW,SAAuE,kBAAhDzX,OAAOqB,UAAU2T,SAAS3L,KAAK3H,OAAO+V,OACrI9X,EAAQ+X,SAAWP,WAAWL,EAAGvB,MAAM,WAAW,UAAO1M,EACzDlJ,EAAQgY,SAAWR,WAAWL,EAAGvB,MAAM,YAAY,UAAO1M,EAC1DlJ,EAAQiY,OAAST,WAAWL,EAAGvB,MAAM,UAAU,UAAO1M,EACtDlJ,EAAQkY,MAAQf,EAAGnP,QAAQ,aAAe,EAC1ChI,EAAQmY,UAAYhB,EAAGnP,QAAQ,YAAc,EAC7ChI,EAAQoY,WAAajB,EAAGnP,QAAQ,WAAa,EAC7ChI,EAAQqY,MAAQ,mBAAmBtX,KAAKoW,KAAQpV,OAAOuW,SACnDtY,EAAQqY,QAAOrY,EAAQ4W,OAAQ,GACnC5W,EAAQuY,SAAWvY,EAAQqY,OAASrY,EAAQmY,aAE9ChC,IAAI9H,OAAO,cAAe,CAAC,UAAW,UAAW,SAAU,sBAAsB,SAAUkH,EAASvV,EAASD,GAC3G,aAEA,IAoJIyY,EApJAC,EAAYlD,EAAQ,eAIxBvV,EAAQ0Y,SAAW,SAASA,EAASC,EAAKC,EAAQC,GAChD,GAAkB,iBAAPF,GAAmBA,EAAK,CACjC,IAAIG,EAAM/R,SAASgS,eAAeJ,GAElC,OADIC,GAAQA,EAAOI,YAAYF,GACxBA,EAGT,IAAK/V,MAAMkW,QAAQN,GAEjB,OADIA,GAAOA,EAAIK,aAAeJ,GAAQA,EAAOI,YAAYL,GAClDA,EAGT,GAAqB,iBAAVA,EAAI,KAAmBA,EAAI,GAAI,CAGxC,IAFA,IAAIO,EAAM,GAEDxY,EAAI,EAAGA,EAAIiY,EAAI9V,OAAQnC,IAAK,CACnC,IAAIyY,EAAKT,EAASC,EAAIjY,GAAIkY,EAAQC,GAClCM,GAAMD,EAAIjW,KAAKkW,GAGjB,OAAOD,EAGT,IAAIE,EAAKrS,SAASmG,cAAcyL,EAAI,IAChC/X,EAAU+X,EAAI,GACdU,EAAa,EACbzY,GAA+B,UAApBS,EAAQT,KAAyBmC,MAAMkW,QAAQrY,KAAUyY,EAAa,GAErF,IAAS3Y,EAAI2Y,EAAY3Y,EAAIiY,EAAI9V,OAAQnC,IACvCgY,EAASC,EAAIjY,GAAI0Y,EAAIP,GAsBvB,OAnBkB,GAAdQ,GACFhZ,OAAO6S,KAAKtS,GAAS8P,SAAQ,SAAU4I,GACrC,IAAIC,EAAM3Y,EAAQ0Y,GAER,UAANA,EACFF,EAAGI,UAAYzW,MAAMkW,QAAQM,GAAOA,EAAI1D,KAAK,KAAO0D,EAC7B,mBAAPA,GAA0B,SAALD,GAAwB,KAARA,EAAE,GACvDF,EAAGE,GAAKC,EACO,QAAND,EACLT,IAAMA,EAAKU,GAAOH,GACP,UAANE,EACS,iBAAPC,IAAiBH,EAAGK,MAAMC,QAAUH,GAC/B,MAAPA,GACTH,EAAGO,aAAaL,EAAGC,MAKrBX,GAAQA,EAAOI,YAAYI,GACxBA,GAGTpZ,EAAQ4Z,gBAAkB,SAAUC,GAElC,OADKA,IAAKA,EAAM9S,UACT8S,EAAItM,MAAQsM,EAAIC,qBAAqB,QAAQ,IAAMD,EAAIE,iBAGhE/Z,EAAQkN,cAAgB,SAAU8M,EAAKjF,GACrC,OAAOhO,SAASkT,gBAAkBlT,SAASkT,gBAAgBlF,GA9D9C,+BA8D8DiF,GAAOjT,SAASmG,cAAc8M,IAG3Gha,EAAQka,eAAiB,SAAU5M,GACjCA,EAAQ6M,UAAY,IAGtBna,EAAQ+Y,eAAiB,SAAUqB,EAAa9M,GAE9C,OADUA,EAAUA,EAAQ+M,cAAgBtT,UACjCgS,eAAeqB,IAG5Bpa,EAAQsa,eAAiB,SAAUhN,GAEjC,OADUA,EAAUA,EAAQ+M,cAAgBtT,UACjCwT,0BAGbva,EAAQwa,YAAc,SAAUpB,EAAI/L,GAElC,OAAkC,KADnB+L,EAAGI,UAAY,IAAI5D,MAAM,QACzB5N,QAAQqF,IAGzBrN,EAAQya,YAAc,SAAUrB,EAAI/L,GAC7BrN,EAAQwa,YAAYpB,EAAI/L,KAC3B+L,EAAGI,WAAa,IAAMnM,IAI1BrN,EAAQ0a,eAAiB,SAAUtB,EAAI/L,GAGrC,IAFA,IAAIsN,EAAUvB,EAAGI,UAAU5D,MAAM,UAEpB,CACX,IAAIgF,EAAQD,EAAQ3S,QAAQqF,GAE5B,IAAc,GAAVuN,EACF,MAGFD,EAAQE,OAAOD,EAAO,GAGxBxB,EAAGI,UAAYmB,EAAQ9E,KAAK,MAG9B7V,EAAQ8a,eAAiB,SAAU1B,EAAI/L,GAIrC,IAHA,IAAIsN,EAAUvB,EAAGI,UAAU5D,MAAM,QAC7B5J,GAAM,IAEG,CACX,IAAI4O,EAAQD,EAAQ3S,QAAQqF,GAE5B,IAAc,GAAVuN,EACF,MAGF5O,GAAM,EACN2O,EAAQE,OAAOD,EAAO,GAKxB,OAFI5O,GAAK2O,EAAQ1X,KAAKoK,GACtB+L,EAAGI,UAAYmB,EAAQ9E,KAAK,KACrB7J,GAGThM,EAAQ+a,YAAc,SAAUC,EAAMxB,EAAWyB,GAC3CA,EACFjb,EAAQya,YAAYO,EAAMxB,GAE1BxZ,EAAQ0a,eAAeM,EAAMxB,IAIjCxZ,EAAQkb,aAAe,SAAUlF,EAAI6D,GACnC,IACIsB,EADAP,EAAQ,EAIZ,GAAIO,GAFJtB,EAAMA,GAAO9S,UAEIqU,iBAAiB,SAChC,KAAOR,EAAQO,EAAOtY,QACpB,GAAIsY,EAAOP,KAAS5E,KAAOA,EAAI,OAAO,GAM5C,IAAIqF,EAAW,GAOf,SAASC,IACP,IAAIC,EAAQF,EACZA,EAAW,KACXE,GAASA,EAAM7K,SAAQ,SAAU8K,GAC/BC,EAAgBD,EAAK,GAAIA,EAAK,OAIlC,SAASC,EAAgB/B,EAAS1D,EAAIrS,GACpC,GAAuB,oBAAZoD,SAAX,CAEA,GAAIsU,EACF,GAAI1X,EACF2X,SACK,IAAe,IAAX3X,EACT,OAAO0X,EAASpY,KAAK,CAACyW,EAAS1D,IAInC,IAAIwC,EAAJ,CACA,IAAIkD,EAAY/X,EAEXA,GAAWA,EAAOgY,cAGrBD,EAAY/X,EAAOgY,gBACDD,GAAa/X,IAH/B+X,EAAY3U,UAMd,IAAI8S,EAAM6B,EAAUrB,eAAiBqB,EACrC,GAAI1F,GAAMhW,EAAQkb,aAAalF,EAAI0F,GAAY,OAAO,KAClD1F,IAAI0D,GAAW,2BAA6B1D,EAAK,OACrD,IAAIyD,EAAQzZ,EAAQkN,cAAc,SAClCuM,EAAMT,YAAYa,EAAId,eAAeW,IACjC1D,IAAIyD,EAAMzD,GAAKA,GACf0F,GAAa7B,IAAK6B,EAAY1b,EAAQ4Z,gBAAgBC,IAC1D6B,EAAUE,aAAanC,EAAOiC,EAAUG,cAyD1C,GAlGA7b,EAAQ8b,aAAe,SAAU5Q,GAC/BsN,EAAYtN,EACC,GAATA,EAAgBoQ,IAAgCD,IAAUA,EAAW,KA0C3Erb,EAAQyb,gBAAkBA,EAE1Bzb,EAAQ+b,mBAAqB,SAAU9F,EAAK4D,GAC1C7Z,EAAQ0Y,SAAS,CAAC,OAAQ,CACxBsD,IAAK,aACL7O,KAAM8I,IACJjW,EAAQ4Z,gBAAgBC,KAG9B7Z,EAAQic,eAAiB,SAAUlV,GACjC,IAAImV,EAAQlc,EAAQkN,cAAc,aAClCgP,EAAMzC,MAAM0C,MAAQ,OACpBD,EAAMzC,MAAM2C,SAAW,MACvBF,EAAMzC,MAAM4C,OAAS,QACrBH,EAAMzC,MAAM6C,QAAU,QACtB,IAAIC,EAAQvc,EAAQkN,cAAc,aAC9BuM,EAAQ8C,EAAM9C,MAClBA,EAAM+C,SAAW,WACjB/C,EAAMgD,KAAO,WACbhD,EAAMiD,SAAW,SACjBjD,EAAM0C,MAAQ,QACd1C,EAAM2C,SAAW,MACjB3C,EAAM4C,OAAS,QACf5C,EAAM6C,QAAU,QAChBC,EAAMvD,YAAYkD,GAClB,IAAIS,EAAO5V,EAASgT,gBACpB4C,EAAK3D,YAAYuD,GACjB,IAAIK,EAAcV,EAAMW,YACxBpD,EAAMiD,SAAW,SACjB,IAAII,EAAgBZ,EAAMW,YAO1B,OALID,GAAeE,IACjBA,EAAgBP,EAAMQ,aAGxBJ,EAAKrG,YAAYiG,GACVK,EAAcE,GAGvB9c,EAAQgd,cAAgB,SAAU1P,EAASmM,GACzC,OAAO1X,OAAOkb,iBAAiB3P,EAAS,KAAO,IAGjDtN,EAAQkd,SAAW,SAAUC,EAAQC,EAAUlS,GACzCiS,EAAOC,KAAclS,IACvBiS,EAAOC,GAAYlS,IAIvBlL,EAAQqd,mBAAoB,EAC5Brd,EAAQsd,oBAAqB,EAC7Btd,EAAQud,QAAS9E,EAAUnB,OAA0B,qBAAXvV,QAA0BA,OAAOyb,kBAAoB,IAC3F/E,EAAUL,aAAYpY,EAAQud,QAAS,GAEnB,qBAAbxW,SAA0B,CACnC,IAAI0W,EAAM1W,SAASmG,cAAc,OAC7BlN,EAAQud,aAAkCrU,IAAxBuU,EAAIhE,MAAMiE,YAAyB1d,EAAQsd,oBAAqB,GACjF7E,EAAUR,QAA6C,qBAA5BwF,EAAIhE,MAAMkE,gBAA+B3d,EAAQqd,mBAAoB,GACrGI,EAAM,KAGJzd,EAAQsd,mBACVtd,EAAQ4d,UAAY,SAAUtQ,EAASuQ,EAAIC,GACzCxQ,EAAQmM,MAAMiE,UAAY,aAAepX,KAAKC,MAAMsX,GAAM,OAASvX,KAAKC,MAAMuX,GAAM,OAGtF9d,EAAQ4d,UAAY,SAAUtQ,EAASuQ,EAAIC,GACzCxQ,EAAQmM,MAAMsE,IAAMzX,KAAKC,MAAMuX,GAAM,KACrCxQ,EAAQmM,MAAMgD,KAAOnW,KAAKC,MAAMsX,GAAM,SAI5C1H,IAAI9H,OAAO,cAAe,CAAC,UAAW,UAAW,WAAW,SAAUkH,EAASvV,EAASD,GACtF,aAEAC,EAAQge,SAAW,SAAUtL,EAAMuL,GACjCvL,EAAKwL,OAASD,EACdvL,EAAKhR,UAAYrB,OAAOuL,OAAOqS,EAAUvc,UAAW,CAClDD,YAAa,CACXyJ,MAAOwH,EACPnS,YAAY,EACZwD,UAAU,EACVD,cAAc,MAKpB9D,EAAQqL,MAAQ,SAAU/J,EAAK+J,GAC7B,IAAK,IAAIrH,KAAOqH,EACd/J,EAAI0C,GAAOqH,EAAMrH,GAGnB,OAAO1C,GAGTtB,EAAQme,UAAY,SAAUC,EAAO/S,GACnCrL,EAAQqL,MAAM+S,EAAO/S,OAGzB8K,IAAI9H,OAAO,eAAgB,CAAC,UAAW,UAAW,SAAU,gBAAgB,SAAUkH,EAASvV,EAASD,GACtG,aAEA,IAAIse,EAAM9I,EAAQ,SAEd+I,EAAO,WACT,IA2HIjR,EAAM3M,EA3HN6d,EAAM,CACRC,cAAe,CACbC,GAAI,QACJC,GAAI,OACJC,GAAI,MACJC,IAAK,OACLC,GAAI,WACJC,GAAI,YACJC,GAAI,eAENC,SAAU,CACR,KAAQ,EACR,IAAO,EACP,OAAU,EACV,MAAS,EACT,MAAS,EACT,KAAQ,EACR,QAAW,EACX,IAAO,EACP,QAAW,GAEbC,cAAe,CACbC,EAAG,YACHC,EAAG,MACHC,GAAI,SACJC,GAAI,QACJC,GAAI,MACJC,GAAI,QACJC,GAAI,SACJC,GAAI,WACJC,GAAI,MACJC,GAAI,OACJC,GAAI,OACJC,GAAI,KACJC,GAAI,QACJC,GAAI,OACJC,GAAI,QACJC,GAAI,SACJC,GAAI,SACJC,GAAI,UACJC,GAAI,UACJC,GAAI,UACJC,GAAI,UACJC,IAAK,UACLC,IAAK,UACLC,IAAK,UACLC,IAAK,UACLC,IAAK,UACLC,IAAK,UACL,MAAO,cACPC,IAAK,KACLC,IAAK,KACLC,IAAK,KACLC,IAAK,KACLC,IAAK,KACLC,IAAK,KACLC,IAAK,KACLC,IAAK,KACLC,IAAK,KACLC,IAAK,MACLC,IAAK,MACLC,IAAK,MACLC,IAAK,UACLC,IAAK,cAEPC,eAAgB,CACdpC,GAAI,IACJqC,GAAI,IACJC,GAAI,IACJC,GAAI,IACJC,GAAI,IACJC,GAAI,IACJC,GAAI,IACJC,GAAI,IACJC,GAAI,IACJC,GAAI,IACJC,GAAI,IACJC,GAAI,IACJC,GAAI,IACJC,GAAI,IACJC,GAAI,IACJC,GAAI,IACJC,GAAI,IACJC,GAAI,IACJC,GAAI,IACJC,GAAI,IACJC,GAAI,IACJC,GAAI,IACJC,GAAI,IACJC,GAAI,IACJC,GAAI,IACJC,GAAI,IACJC,GAAI,IACJC,GAAI,IACJC,GAAI,IACJC,GAAI,IACJC,GAAI,IACJC,GAAI,IACJC,GAAI,IACJC,GAAI,IACJC,GAAI,IACJC,GAAI,IACJC,GAAI,IACJC,GAAI,IACJC,GAAI,IACJC,IAAK,IACLC,IAAK,IACLC,IAAK,IACLC,IAAK,IACLC,IAAK,IACLC,IAAK,IACLC,IAAK,IACLC,IAAK,IACLC,IAAK,IACLC,IAAK,IACLC,IAAK,IACLC,IAAK,KACLC,IAAK,IACLC,IAAK,IACLC,IAAK,IACLC,IAAK,MAKT,IAAKvkB,KAAK6d,EAAIU,cACZ5R,EAAOkR,EAAIU,cAAcve,GAAGoJ,cAC5ByU,EAAIlR,GAAQ6X,SAASxkB,EAAG,IAG1B,IAAKA,KAAK6d,EAAIoD,eACZtU,EAAOkR,EAAIoD,eAAejhB,GAAGoJ,cAC7ByU,EAAIlR,GAAQ6X,SAASxkB,EAAG,IAuB1B,OApBA2d,EAAIhT,MAAMkT,EAAKA,EAAIC,eACnBH,EAAIhT,MAAMkT,EAAKA,EAAIoD,gBACnBtD,EAAIhT,MAAMkT,EAAKA,EAAIU,eACnBV,EAAI4G,MAAQ5G,EAAY,OACxBA,EAAI6G,OAAS7G,EAAI8G,IACjB9G,EAAI+G,IAAM/G,EAAY,OACtBA,EAAI,KAAO,IAEX,WAGE,IAFA,IAAIgH,EAAO,CAAC,MAAO,OAAQ,MAAO,SAEzB7kB,EAAI4F,KAAKkf,IAAI,EAAGD,EAAK1iB,QAASnC,KACrC6d,EAAIS,SAASte,GAAK6kB,EAAKjZ,QAAO,SAAUmZ,GACtC,OAAO/kB,EAAI6d,EAAIS,SAASyG,MACvB5P,KAAK,KAAO,IANnB,GAUA0I,EAAIS,SAAS,GAAK,GAClBT,EAAIS,UAAU,GAAK,SACZT,EA5JE,GA+JXF,EAAIhT,MAAMrL,EAASse,GAEnBte,EAAQ0lB,gBAAkB,SAAUC,GAClC,IAAIC,EAAYtH,EAAKqH,GAErB,MADwB,iBAAbC,IAAuBA,EAAYC,OAAOC,aAAaH,IAC3DC,EAAU9b,kBAGrBqM,IAAI9H,OAAO,gBAAiB,CAAC,UAAW,UAAW,SAAU,eAAgB,sBAAsB,SAAUkH,EAASvV,EAASD,GAC7H,aAEA,IAMIgmB,EANA7S,EAAOqC,EAAQ,UAEfkD,EAAYlD,EAAQ,eAEpByQ,EAAc,KACdC,EAAK,EAkBT,SAASC,IAEP,YAD6Bhd,GAAzB6c,GAhBN,WACEA,GAAwB,EAExB,IACEhf,SAASof,cAAc,IAAInhB,iBAAiB,QAAQ,cAAgB,CAClE,cACE+gB,EAAwB,CACtBK,SAAS,MAKf,MAAOtkB,KAI+BukB,GACjCN,EAGT,SAASO,EAAcC,EAAM9b,EAAM0K,GACjCvT,KAAK2kB,KAAOA,EACZ3kB,KAAK6I,KAAOA,EACZ7I,KAAKuT,SAAWA,EAGlBmR,EAAc5kB,UAAU8kB,QAAU,WAChCC,EAAe7kB,KAAK2kB,KAAM3kB,KAAK6I,KAAM7I,KAAKuT,UAC1CvT,KAAK2kB,KAAO3kB,KAAK6I,KAAO7I,KAAKuT,cAAWjM,GAG1C,IAAIwd,EAAc1mB,EAAQ0mB,YAAc,SAAUH,EAAM9b,EAAM0K,EAAUwR,GACtEJ,EAAKvhB,iBAAiByF,EAAM0K,EAAU+Q,KAClCS,GAAWA,EAAUC,WAAW3jB,KAAK,IAAIqjB,EAAcC,EAAM9b,EAAM0K,KAGrEsR,EAAiBzmB,EAAQymB,eAAiB,SAAUF,EAAM9b,EAAM0K,GAClEoR,EAAKnhB,oBAAoBqF,EAAM0K,EAAU+Q,MAG3ClmB,EAAQ6mB,UAAY,SAAU/kB,GAG5B,OAFA9B,EAAQ8mB,gBAAgBhlB,GACxB9B,EAAQ+mB,eAAejlB,IAChB,GAGT9B,EAAQ8mB,gBAAkB,SAAUhlB,GAC9BA,EAAEglB,iBAAiBhlB,EAAEglB,mBAG3B9mB,EAAQ+mB,eAAiB,SAAUjlB,GAC7BA,EAAEilB,gBAAgBjlB,EAAEilB,kBAG1B/mB,EAAQgnB,UAAY,SAAUllB,GAC5B,MAAc,YAAVA,EAAE2I,KAA2B,EACnB,eAAV3I,EAAE2I,MAAyBgO,EAAU7B,OAAS9U,EAAEmlB,UAAYnlB,EAAEolB,SAAWplB,EAAEqlB,SAAiB,EACzFrlB,EAAEslB,QAGXpnB,EAAQqnB,QAAU,SAAUjO,EAAIkO,EAAcC,GAC5C,IAAIlN,EAAgBjB,GAAMA,EAAGiB,eAAiBtT,SAE9C,SAASygB,EAAU1lB,GACjBwlB,GAAgBA,EAAaxlB,GAC7BylB,GAAyBA,EAAsBzlB,GAC/C2kB,EAAepM,EAAe,YAAaiN,GAC3Cb,EAAepM,EAAe,UAAWmN,GACzCf,EAAepM,EAAe,YAAamN,GAM7C,OAHAd,EAAYrM,EAAe,YAAaiN,GACxCZ,EAAYrM,EAAe,UAAWmN,GACtCd,EAAYrM,EAAe,YAAamN,GACjCA,GAGTxnB,EAAQynB,sBAAwB,SAAUrO,EAAIjE,EAAUwR,GAClD,iBAAkBvN,EACpBsN,EAAYtN,EAAI,cAAc,SAAUtX,QAGhBoH,IAAlBpH,EAAE4lB,aACJ5lB,EAAE6lB,QAAU7lB,EAAE4lB,YAHH,EAIX5lB,EAAE8lB,QAAU9lB,EAAE+lB,YAJH,IAMX/lB,EAAE6lB,OAAS,EACX7lB,EAAE8lB,QAAU9lB,EAAEgmB,WAPH,GAUb3S,EAASrT,KACR6kB,GACM,YAAavN,EACtBsN,EAAYtN,EAAI,SAAS,SAAUtX,GAGjC,OAAQA,EAAEimB,WACR,KAAKjmB,EAAEkmB,gBACLlmB,EAAE6lB,OAJO,IAIE7lB,EAAEmmB,QAAmB,EAChCnmB,EAAE8lB,OALO,IAKE9lB,EAAEomB,QAAmB,EAChC,MAEF,KAAKpmB,EAAEqmB,eACP,KAAKrmB,EAAEsmB,eACLtmB,EAAE6lB,OAA2B,GAAjB7lB,EAAEmmB,QAAU,GACxBnmB,EAAE8lB,OAA2B,GAAjB9lB,EAAEomB,QAAU,GAI5B/S,EAASrT,KACR6kB,GAEHD,EAAYtN,EAAI,kBAAkB,SAAUtX,GACtCA,EAAEumB,MAAQvmB,EAAEumB,MAAQvmB,EAAEwmB,iBACxBxmB,EAAE6lB,OAA2B,GAAjB7lB,EAAEymB,QAAU,GACxBzmB,EAAE8lB,OAAS,IAEX9lB,EAAE6lB,OAAS,EACX7lB,EAAE8lB,OAA2B,GAAjB9lB,EAAEymB,QAAU,IAG1BpT,EAASrT,KACR6kB,IAIP3mB,EAAQwoB,0BAA4B,SAAUC,EAAUC,EAAUpB,EAAc9a,EAAcma,GAC5F,IACIgC,EAAQC,EAAQC,EADhBC,EAAS,EAETC,EAAa,CACfC,EAAG,WACHC,EAAG,cACHC,EAAG,aAGL,SAASC,EAAYrnB,GAUnB,GAT6B,IAAzB9B,EAAQgnB,UAAUllB,GACpBgnB,EAAS,EACAhnB,EAAEymB,OAAS,IACpBO,EACa,IAAGA,EAAS,GAEzBA,EAAS,EAGPrQ,EAAUlB,KAAM,CAClB,IAAI6R,EAAa9iB,KAAK+iB,IAAIvnB,EAAEwnB,QAAUX,GAAU,GAAKriB,KAAK+iB,IAAIvnB,EAAEynB,QAAUX,GAAU,EAC/EC,IAASO,IAAYN,EAAS,GAC/BD,GAAOljB,aAAakjB,GACxBA,EAAQ/iB,YAAW,WACjB+iB,EAAQ,OACPH,EAASI,EAAS,IAAM,KAEb,GAAVA,IACFH,EAAS7mB,EAAEwnB,QACXV,EAAS9mB,EAAEynB,SAMf,GAFAznB,EAAE0nB,QAAUV,EACZxB,EAAa9a,GAAc,YAAa1K,GACpCgnB,EAAS,EAAGA,EAAS,OAAO,GAAIA,EAAS,EAAG,OAAOxB,EAAa9a,GAAcuc,EAAWD,GAAShnB,GAGnGiB,MAAMkW,QAAQwP,KAAWA,EAAW,CAACA,IAC1CA,EAAS/X,SAAQ,SAAU0I,GACzBsN,EAAYtN,EAAI,YAAa+P,EAAaxC,OAI9C,IAAI8C,EAAkB,SAAyB3nB,GAC7C,OAAO,GAAKA,EAAEmlB,QAAU,EAAI,IAAMnlB,EAAEolB,OAAS,EAAI,IAAMplB,EAAEqlB,SAAW,EAAI,IAAMrlB,EAAE4nB,QAAU,EAAI,IAOhG,SAASC,EAAqBxU,EAAUrT,EAAG6jB,GACzC,IAAIiE,EAASH,EAAgB3nB,GAE7B,IAAK2W,EAAU7B,OAASoP,EAAa,CAGnC,GAFIlkB,EAAE+nB,mBAAqB/nB,EAAE+nB,iBAAiB,OAAS/nB,EAAE+nB,iBAAiB,UAASD,GAAU,GAEzF5D,EAAY8D,MAAO,CACrB,GAAoB,IAAf,EAAIF,GAAyC,OAA3B5D,EAAY8D,MAAQ,EAG7C,GAAgB,KAAZnE,GAA8B,KAAZA,EAAgB,CACpC,IAAIoE,EAAW,aAAcjoB,EAAIA,EAAEioB,SAAWjoB,EAAEkoB,YAEhD,GAAgB,KAAZrE,GAA+B,IAAboE,EACQ,GAAxB/D,EAAYL,KAAeM,EAAKnkB,EAAEmoB,gBACjC,GAAgB,KAAZtE,GAA6B,IAAXiE,GAA6B,IAAbG,EAAgB,CAClDjoB,EAAEmoB,UAAYhE,EACd,KAAID,EAAY8D,OAAQ,KASvC,IAJInE,KAAWzS,EAAKsL,gBAClBmH,GAAW,IAGRiE,GAAsB,KAAZjE,KAGI,KAFboE,EAAW,aAAcjoB,EAAIA,EAAEioB,SAAWjoB,EAAEkoB,eAG9C7U,EAASrT,EAAG8nB,GAASjE,GACjB7jB,EAAEooB,mBAAkB,OAI5B,GAAIzR,EAAUL,YAAuB,EAATwR,EAAY,CAEtC,GADAzU,EAASrT,EAAG8nB,EAAQjE,GAChB7jB,EAAEooB,iBAAkB,OAAYN,IAAU,EAGhD,SAAKA,GAAYjE,KAAWzS,EAAK+L,eAAoB0G,KAAWzS,EAAKyO,iBAI9DxM,EAASrT,EAAG8nB,EAAQjE,GAqC7B,SAASwE,IACPnE,EAAc3lB,OAAOuL,OAAO,MAG9B,GAzFA5L,EAAQoqB,kBAAoB,SAAUtoB,GACpC,OAAOoR,EAAK8L,SAASyK,EAAgB3nB,KAkDvC9B,EAAQqqB,sBAAwB,SAAUjR,EAAIjE,EAAUwR,GACtD,GAAIlO,EAAU6R,YAAc7R,EAAUZ,WAAa,kBAAmB9V,QAAS,CAC7E,IAAIwoB,EAAqB,KACzB7D,EAAYtN,EAAI,WAAW,SAAUtX,GACnCyoB,EAAqBzoB,EAAE6jB,UACtBgB,GACHD,EAAYtN,EAAI,YAAY,SAAUtX,GACpC,OAAO6nB,EAAqBxU,EAAUrT,EAAGyoB,KACxC5D,OACE,CACL,IAAI6D,EAAuB,KAC3B9D,EAAYtN,EAAI,WAAW,SAAUtX,GACnCkkB,EAAYlkB,EAAE6jB,UAAYK,EAAYlkB,EAAE6jB,UAAY,GAAK,EACzD,IAAI1U,EAAS0Y,EAAqBxU,EAAUrT,EAAGA,EAAE6jB,SAEjD,OADA6E,EAAuB1oB,EAAEooB,iBAClBjZ,IACN0V,GACHD,EAAYtN,EAAI,YAAY,SAAUtX,GAChC0oB,IAAyB1oB,EAAEmlB,SAAWnlB,EAAEolB,QAAUplB,EAAEqlB,UAAYrlB,EAAE4nB,WACpE1pB,EAAQ6mB,UAAU/kB,GAClB0oB,EAAuB,QAExB7D,GACHD,EAAYtN,EAAI,SAAS,SAAUtX,GACjCkkB,EAAYlkB,EAAE6jB,SAAW,OACxBgB,GAEEX,IACHmE,IACAzD,EAAY3kB,OAAQ,QAASooB,MASoC,WAAhD,qBAAXpoB,OAAyB,YAAcV,EAAQU,UAAwBA,OAAO0oB,cAAgBhS,EAAUf,QAAS,CAC3H,IAAIgT,EAAgB,EAEpB1qB,EAAQ2qB,SAAW,SAAUxV,EAAUyV,GACrCA,EAAMA,GAAO7oB,OACb,IAAI8oB,EAAc,wBAA0BH,IAU5ChE,EAAYkE,EAAK,WARF,SAASE,EAAShpB,GAC3BA,EAAE0G,MAAQqiB,IACZ7qB,EAAQ8mB,gBAAgBhlB,GACxB2kB,EAAemE,EAAK,UAAWE,GAC/B3V,QAKJyV,EAAIH,YAAYI,EAAa,MAIjC7qB,EAAQ+qB,cAAe,EAEvB/qB,EAAQgrB,OAAS,SAAUC,EAAIC,GAC7B,OAAOplB,YAAW,SAASmE,IACpBjK,EAAQ+qB,aAGXjlB,WAAWmE,EAAS,KAFpBghB,MAIDC,IAGLlrB,EAAQmrB,aAAe,KAEvBnrB,EAAQorB,UAAY,SAAUC,GACxBrrB,EAAQmrB,cAAcxlB,aAAa3F,EAAQmrB,cAC/CnrB,EAAQ+qB,cAAe,EACvB/qB,EAAQmrB,aAAerlB,YAAW,WAChC9F,EAAQ+qB,cAAe,IACtBM,GAAS,MAGdrrB,EAAQsrB,UAA+E,WAAhD,qBAAXvpB,OAAyB,YAAcV,EAAQU,WAAyBA,OAAOwpB,uBAAyBxpB,OAAOypB,0BAA4BzpB,OAAO0pB,6BAA+B1pB,OAAO2pB,yBAA2B3pB,OAAO4pB,wBAClP3rB,EAAQsrB,UAAWtrB,EAAQsrB,UAAYtrB,EAAQsrB,UAAU7mB,KAAK1C,QAAa/B,EAAQsrB,UAAY,SAAUnW,GAC3GrP,WAAWqP,EAAU,QAGzBgB,IAAI9H,OAAO,YAAa,CAAC,UAAW,UAAW,WAAW,SAAUkH,EAASvV,EAASD,GACpF,aAEA,IAII6rB,EAAQ,SAAeC,EAAUC,EAAaC,EAAQC,GACxDpqB,KAAK+C,MAAQ,CACXsnB,IAAKJ,EACLK,OAAQJ,GAEVlqB,KAAKuqB,IAAM,CACTF,IAAKF,EACLG,OAAQF,KAIZ,WACEpqB,KAAKwqB,QAAU,SAAUC,GACvB,OAAOzqB,KAAK+C,MAAMsnB,MAAQI,EAAM1nB,MAAMsnB,KAAOrqB,KAAKuqB,IAAIF,MAAQI,EAAMF,IAAIF,KAAOrqB,KAAK+C,MAAMunB,SAAWG,EAAM1nB,MAAMunB,QAAUtqB,KAAKuqB,IAAID,SAAWG,EAAMF,IAAID,QAG3JtqB,KAAKyT,SAAW,WACd,MAAO,WAAazT,KAAK+C,MAAMsnB,IAAM,IAAMrqB,KAAK+C,MAAMunB,OAAS,SAAWtqB,KAAKuqB,IAAIF,IAAM,IAAMrqB,KAAKuqB,IAAID,OAAS,KAGnHtqB,KAAK0qB,SAAW,SAAUL,EAAKC,GAC7B,OAAoC,GAA7BtqB,KAAK2qB,QAAQN,EAAKC,IAG3BtqB,KAAK4qB,aAAe,SAAUH,GAC5B,IAAII,EACAN,EAAME,EAAMF,IACZxnB,EAAQ0nB,EAAM1nB,MAGlB,OAAW,IAFX8nB,EAAM7qB,KAAK2qB,QAAQJ,EAAIF,IAAKE,EAAID,SAKnB,IAFXO,EAAM7qB,KAAK2qB,QAAQ5nB,EAAMsnB,IAAKtnB,EAAMunB,SAG3B,EACS,GAAPO,EACF,EAEA,GAEQ,GAARA,GACD,GAII,IAFZA,EAAM7qB,KAAK2qB,QAAQ5nB,EAAMsnB,IAAKtnB,EAAMunB,UAG1B,EACQ,GAAPO,EACF,GAEA,GAKb7qB,KAAK8qB,aAAe,SAAUC,GAC5B,OAAO/qB,KAAK2qB,QAAQI,EAAEV,IAAKU,EAAET,SAG/BtqB,KAAKgrB,cAAgB,SAAUP,GAC7B,OAAyC,GAAlCzqB,KAAK8qB,aAAaL,EAAM1nB,QAA+C,GAAhC/C,KAAK8qB,aAAaL,EAAMF,MAGxEvqB,KAAKirB,WAAa,SAAUR,GAC1B,IAAII,EAAM7qB,KAAK4qB,aAAaH,GAC5B,OAAe,GAARI,GAAoB,GAAPA,GAAmB,GAAPA,GAGlC7qB,KAAKkrB,MAAQ,SAAUb,EAAKC,GAC1B,OAAOtqB,KAAKuqB,IAAIF,KAAOA,GAAOrqB,KAAKuqB,IAAID,QAAUA,GAGnDtqB,KAAKmrB,QAAU,SAAUd,EAAKC,GAC5B,OAAOtqB,KAAK+C,MAAMsnB,KAAOA,GAAOrqB,KAAK+C,MAAMunB,QAAUA,GAGvDtqB,KAAKorB,SAAW,SAAUf,EAAKC,GACT,UAAhB7qB,EAAQ4qB,IACVrqB,KAAK+C,MAAMunB,OAASD,EAAIC,OACxBtqB,KAAK+C,MAAMsnB,IAAMA,EAAIA,MAErBrqB,KAAK+C,MAAMsnB,IAAMA,EACjBrqB,KAAK+C,MAAMunB,OAASA,IAIxBtqB,KAAKqrB,OAAS,SAAUhB,EAAKC,GACP,UAAhB7qB,EAAQ4qB,IACVrqB,KAAKuqB,IAAID,OAASD,EAAIC,OACtBtqB,KAAKuqB,IAAIF,IAAMA,EAAIA,MAEnBrqB,KAAKuqB,IAAIF,IAAMA,EACfrqB,KAAKuqB,IAAID,OAASA,IAItBtqB,KAAKsrB,OAAS,SAAUjB,EAAKC,GAC3B,OAAiC,GAA7BtqB,KAAK2qB,QAAQN,EAAKC,MAChBtqB,KAAKkrB,MAAMb,EAAKC,KAAWtqB,KAAKmrB,QAAQd,EAAKC,KAUrDtqB,KAAKurB,YAAc,SAAUlB,EAAKC,GAChC,OAAiC,GAA7BtqB,KAAK2qB,QAAQN,EAAKC,KAChBtqB,KAAKkrB,MAAMb,EAAKC,IAUxBtqB,KAAKwrB,UAAY,SAAUnB,EAAKC,GAC9B,OAAiC,GAA7BtqB,KAAK2qB,QAAQN,EAAKC,KAChBtqB,KAAKmrB,QAAQd,EAAKC,IAU1BtqB,KAAK2qB,QAAU,SAAUN,EAAKC,GAC5B,OAAKtqB,KAAKyrB,eACJpB,IAAQrqB,KAAK+C,MAAMsnB,IAKrBA,EAAMrqB,KAAK+C,MAAMsnB,KAAa,EAC9BA,EAAMrqB,KAAKuqB,IAAIF,IAAY,EAC3BrqB,KAAK+C,MAAMsnB,MAAQA,EAAYC,GAAUtqB,KAAK+C,MAAMunB,OAAS,GAAK,EAClEtqB,KAAKuqB,IAAIF,MAAQA,EAAYC,GAAUtqB,KAAKuqB,IAAID,OAAS,EAAI,EAC1D,EARIA,EAAStqB,KAAK+C,MAAMunB,QAAU,EAAIA,EAAStqB,KAAKuqB,IAAID,OAAS,EAAI,GAW9EtqB,KAAK0rB,aAAe,SAAUrB,EAAKC,GACjC,OAAItqB,KAAK+C,MAAMsnB,KAAOA,GAAOrqB,KAAK+C,MAAMunB,QAAUA,GACxC,EAEDtqB,KAAK2qB,QAAQN,EAAKC,IAI7BtqB,KAAK2rB,WAAa,SAAUtB,EAAKC,GAC/B,OAAItqB,KAAKuqB,IAAIF,KAAOA,GAAOrqB,KAAKuqB,IAAID,QAAUA,EACrC,EAEAtqB,KAAK2qB,QAAQN,EAAKC,IAI7BtqB,KAAK4rB,cAAgB,SAAUvB,EAAKC,GAClC,OAAItqB,KAAKuqB,IAAIF,KAAOA,GAAOrqB,KAAKuqB,IAAID,QAAUA,EACrC,EACEtqB,KAAK+C,MAAMsnB,KAAOA,GAAOrqB,KAAK+C,MAAMunB,QAAUA,GAC/C,EAEDtqB,KAAK2qB,QAAQN,EAAKC,IAI7BtqB,KAAK6rB,SAAW,SAAUC,EAAUC,GAClC,GAAI/rB,KAAKuqB,IAAIF,IAAM0B,EAAS,IAAIxB,EAAM,CACpCF,IAAK0B,EAAU,EACfzB,OAAQ,QACH,GAAItqB,KAAKuqB,IAAIF,IAAMyB,EAAcvB,EAAM,CAC5CF,IAAKyB,EACLxB,OAAQ,GAEV,GAAItqB,KAAK+C,MAAMsnB,IAAM0B,EAAS,IAAIhpB,EAAQ,CACxCsnB,IAAK0B,EAAU,EACfzB,OAAQ,QACH,GAAItqB,KAAK+C,MAAMsnB,IAAMyB,EAAc/oB,EAAQ,CAChDsnB,IAAKyB,EACLxB,OAAQ,GAEV,OAAON,EAAMgC,WAAWjpB,GAAS/C,KAAK+C,MAAOwnB,GAAOvqB,KAAKuqB,MAG3DvqB,KAAKmJ,OAAS,SAAUkhB,EAAKC,GAC3B,IAAIO,EAAM7qB,KAAK2qB,QAAQN,EAAKC,GAC5B,GAAW,GAAPO,EAAU,OAAO7qB,KAAU,IAAY,GAAR6qB,EAAW,IAAI9nB,EAAQ,CACxDsnB,IAAKA,EACLC,OAAQA,QACH,IAAIC,EAAM,CACfF,IAAKA,EACLC,OAAQA,GAEV,OAAON,EAAMgC,WAAWjpB,GAAS/C,KAAK+C,MAAOwnB,GAAOvqB,KAAKuqB,MAG3DvqB,KAAKisB,QAAU,WACb,OAAOjsB,KAAK+C,MAAMsnB,MAAQrqB,KAAKuqB,IAAIF,KAAOrqB,KAAK+C,MAAMunB,SAAWtqB,KAAKuqB,IAAID,QAG3EtqB,KAAKyrB,YAAc,WACjB,OAAOzrB,KAAK+C,MAAMsnB,MAAQrqB,KAAKuqB,IAAIF,KAGrCrqB,KAAKksB,MAAQ,WACX,OAAOlC,EAAMgC,WAAWhsB,KAAK+C,MAAO/C,KAAKuqB,MAG3CvqB,KAAKmsB,aAAe,WAClB,OAAuB,GAAnBnsB,KAAKuqB,IAAID,OAAoB,IAAIN,EAAMhqB,KAAK+C,MAAMsnB,IAAK,EAAG3lB,KAAKH,IAAIvE,KAAK+C,MAAMsnB,IAAKrqB,KAAKuqB,IAAIF,IAAM,GAAI,GAAe,IAAIL,EAAMhqB,KAAK+C,MAAMsnB,IAAK,EAAGrqB,KAAKuqB,IAAIF,IAAK,IAGtKrqB,KAAKosB,cAAgB,SAAUC,GAC7B,IAAIC,EAAiBD,EAAQE,yBAAyBvsB,KAAK+C,OACvDypB,EAAeH,EAAQE,yBAAyBvsB,KAAKuqB,KACzD,OAAO,IAAIP,EAAMsC,EAAejC,IAAKiC,EAAehC,OAAQkC,EAAanC,IAAKmC,EAAalC,SAG7FtqB,KAAKysB,OAAS,SAAUpC,EAAKC,GAC3BtqB,KAAK+C,MAAMsnB,KAAOA,EAClBrqB,KAAK+C,MAAMunB,QAAUA,EACrBtqB,KAAKuqB,IAAIF,KAAOA,EAChBrqB,KAAKuqB,IAAID,QAAUA,KAEpBxiB,KAAKkiB,EAAMlqB,WAEdkqB,EAAMgC,WAAa,SAAUjpB,EAAOwnB,GAClC,OAAO,IAAIP,EAAMjnB,EAAMsnB,IAAKtnB,EAAMunB,OAAQC,EAAIF,IAAKE,EAAID,SAGzDN,EAAM0C,cAhPc,SAAuBC,EAAIC,GAC7C,OAAOD,EAAGtC,IAAMuC,EAAGvC,KAAOsC,EAAGrC,OAASsC,EAAGtC,QAiP3CN,EAAM0C,cAAgB,SAAUC,EAAIC,GAClC,OAAOD,EAAGtC,IAAMuC,EAAGvC,KAAOsC,EAAGrC,OAASsC,EAAGtC,QAG3ClsB,EAAQ4rB,MAAQA,KAElBzV,IAAI9H,OAAO,eAAgB,CAAC,UAAW,UAAW,WAAW,SAAUkH,EAASvV,EAASD,GACvF,aAEAC,EAAQyuB,KAAO,SAAUxhB,GACvB,OAAOA,EAAEA,EAAEpK,OAAS,IAGtB7C,EAAQ0uB,cAAgB,SAAUC,GAChC,OAAOA,EAAO/Y,MAAM,IAAIzC,UAAU0C,KAAK,KAGzC7V,EAAQ4uB,aAAe,SAAUD,EAAQE,GAGvC,IAFA,IAAI5d,EAAS,GAEN4d,EAAQ,GACD,EAARA,IAAW5d,GAAU0d,IACrBE,IAAU,KAAGF,GAAUA,GAG7B,OAAO1d,GAGT,IAAI6d,EAAkB,SAClBC,EAAgB,SAEpB/uB,EAAQgvB,eAAiB,SAAUL,GACjC,OAAOA,EAAOvtB,QAAQ0tB,EAAiB,KAGzC9uB,EAAQivB,gBAAkB,SAAUN,GAClC,OAAOA,EAAOvtB,QAAQ2tB,EAAe,KAGvC/uB,EAAQkvB,WAAa,SAAU5tB,GAC7B,IAAI6tB,EAAO,GAEX,IAAK,IAAInrB,KAAO1C,EACd6tB,EAAKnrB,GAAO1C,EAAI0C,GAGlB,OAAOmrB,GAGTnvB,EAAQovB,UAAY,SAAUC,GAG5B,IAFA,IAAIF,EAAO,GAEFzuB,EAAI,EAAGD,EAAI4uB,EAAMxsB,OAAQnC,EAAID,EAAGC,IACnC2uB,EAAM3uB,IAA2B,UAArBW,EAAQguB,EAAM3uB,IAAiByuB,EAAKzuB,GAAKkB,KAAKstB,WAAWG,EAAM3uB,IAASyuB,EAAKzuB,GAAK2uB,EAAM3uB,GAG1G,OAAOyuB,GAGTnvB,EAAQsvB,SAAW,SAASA,EAAShuB,GACnC,GAAqB,WAAjBD,EAAQC,KAAsBA,EAAK,OAAOA,EAC9C,IAAI6tB,EAEJ,GAAIpsB,MAAMkW,QAAQ3X,GAAM,CACtB6tB,EAAO,GAEP,IAAK,IAAInrB,EAAM,EAAGA,EAAM1C,EAAIuB,OAAQmB,IAClCmrB,EAAKnrB,GAAOsrB,EAAShuB,EAAI0C,IAG3B,OAAOmrB,EAGT,GAA4C,oBAAxC9uB,OAAOqB,UAAU2T,SAAS3L,KAAKpI,GAA4B,OAAOA,EAGtE,IAAK,IAAI0C,KAFTmrB,EAAO,GAES7tB,EACd6tB,EAAKnrB,GAAOsrB,EAAShuB,EAAI0C,IAG3B,OAAOmrB,GAGTnvB,EAAQuvB,WAAa,SAAU5W,GAG7B,IAFA,IAAItM,EAAM,GAED3L,EAAI,EAAGA,EAAIiY,EAAI9V,OAAQnC,IAC9B2L,EAAIsM,EAAIjY,IAAM,EAGhB,OAAO2L,GAGTrM,EAAQwvB,UAAY,SAAU5rB,GAC5B,IAAIyI,EAAMhM,OAAOuL,OAAO,MAExB,IAAK,IAAIlL,KAAKkD,EACZyI,EAAI3L,GAAKkD,EAAMlD,GAGjB,OAAO2L,GAGTrM,EAAQyvB,YAAc,SAAUJ,EAAOnkB,GACrC,IAAK,IAAIxK,EAAI,EAAGA,GAAK2uB,EAAMxsB,OAAQnC,IAC7BwK,IAAUmkB,EAAM3uB,IAClB2uB,EAAMxU,OAAOna,EAAG,IAKtBV,EAAQ0vB,aAAe,SAAUC,GAC/B,OAAOA,EAAIvuB,QAAQ,0BAA2B,SAGhDpB,EAAQ4vB,WAAa,SAAUD,GAC7B,OAAQ,GAAKA,GAAKvuB,QAAQ,KAAM,SAASA,QAAQ,KAAM,SAASA,QAAQ,KAAM,SAASA,QAAQ,KAAM,UAGvGpB,EAAQ6vB,gBAAkB,SAAUlB,EAAQmB,GAC1C,IAAIC,EAAU,GAOd,OANApB,EAAOvtB,QAAQ0uB,GAAQ,SAAUH,GAC/BI,EAAQ9sB,KAAK,CACX+sB,OAAQptB,UAAUA,UAAUC,OAAS,GACrCA,OAAQ8sB,EAAI9sB,YAGTktB,GAGT/vB,EAAQiwB,aAAe,SAAUC,GAC/B,IAAIrH,EAAQ,KAER1T,EAAW,WACb0T,EAAQ,KACRqH,KAGEC,EAAW,SAASA,EAASjF,GAG/B,OAFAiF,EAASC,SACTvH,EAAQ/iB,WAAWqP,EAAU+V,GAAW,GACjCiF,GAqBT,OAlBAA,EAASE,SAAWF,EAEpBA,EAASzmB,KAAO,WAGd,OAFA9H,KAAKwuB,SACLF,IACOC,GAGTA,EAASC,OAAS,WAGhB,OAFAzqB,aAAakjB,GACbA,EAAQ,KACDsH,GAGTA,EAASG,UAAY,WACnB,OAAOzH,GAGFsH,GAGTnwB,EAAQuwB,YAAc,SAAUL,EAAKM,GACnC,IAAI3H,EAAQ,KAER1T,EAAW,WACb0T,EAAQ,KACRqH,KAGEO,EAAQ,SAAevF,GACZ,MAATrC,IAAeA,EAAQ/iB,WAAWqP,EAAU+V,GAAWsF,KAwB7D,OArBAC,EAAMpF,MAAQ,SAAUH,GACtBrC,GAASljB,aAAakjB,GACtBA,EAAQ/iB,WAAWqP,EAAU+V,GAAWsF,IAG1CC,EAAMJ,SAAWI,EAEjBA,EAAM/mB,KAAO,WACX9H,KAAKwuB,SACLF,KAGFO,EAAML,OAAS,WACbvH,GAASljB,aAAakjB,GACtBA,EAAQ,MAGV4H,EAAMH,UAAY,WAChB,OAAOzH,GAGF4H,MAGXta,IAAI9H,OAAO,gBAAiB,CAAC,UAAW,UAAW,WAAW,SAAUkH,EAASvV,EAASD,GACxF,aAEA,IAAI2wB,EACJ3wB,EAAOC,QAAU,CACf2wB,UAAU,EACVC,eAAgB,WACd,SAAIF,GAAYA,EAAWxtB,KAAKC,MAAQ,MACjCutB,GAAW,IAEpBN,OAAQ,WACNM,EAAWxtB,KAAKC,WAItBgT,IAAI9H,OAAO,yBAA0B,CAAC,UAAW,UAAW,SAAU,gBAAiB,oBAAqB,cAAe,eAAgB,gBAAiB,iBAAiB,SAAUkH,EAASvV,EAASD,GACvM,aAEA,IAAIoK,EAAQoL,EAAQ,gBAEhBkD,EAAYlD,EAAQ,oBAEpBsb,EAAMtb,EAAQ,cAEdub,EAAOvb,EAAQ,eAEfwb,EAAYxb,EAAQ,gBAEpByb,EAAiBvY,EAAUT,SAAW,GACtCiZ,EAAmBxY,EAAUlB,KAC7B2Z,EAAiBzY,EAAUT,SAAW,GAGtCmZ,EAAO5b,EAAQ,eAEf6b,EAAOD,EAAKnS,SACZ3G,EAAQI,EAAUJ,MAClBgZ,EAAkBhZ,EAAQ,KAAO,KACjCE,EAAWE,EAAUF,SAynBzBvY,EAAQsxB,UAvnBQ,SAAmBjb,EAAYkb,GAC7C,IAAIC,EAAOX,EAAI3jB,cAAc,YAC7BskB,EAAKhY,UAAY,iBACjBgY,EAAK7X,aAAa,OAAQ,OAC1B6X,EAAK7X,aAAa,cAAe,OACjC6X,EAAK7X,aAAa,iBAAkB,OACpC6X,EAAK7X,aAAa,cAAc,GAChC6X,EAAK/X,MAAMgY,QAAU,IACrBpb,EAAWuF,aAAa4V,EAAMnb,EAAWwF,YACzC,IAAI6V,GAAS,EACTC,GAAS,EACTC,GAAgB,EAChBC,GAAc,EACdC,EAAY,GACXvZ,IAAUiZ,EAAK/X,MAAMsY,SAAW,OACrC,IAAIC,GAAc,EACdC,GAAoB,EACpBC,EAAY,GACZC,EAAqB,EACrBC,EAAmB,EACnBC,EAAiB,EAErB,IACE,IAAIC,EAAYvrB,SAASwrB,gBAAkBf,EAC3C,MAAO1vB,IAETqI,EAAMuc,YAAY8K,EAAM,QAAQ,SAAU1vB,GACpCmwB,IACJV,EAAKiB,OAAO1wB,GACZwwB,GAAY,KACXf,GACHpnB,EAAMuc,YAAY8K,EAAM,SAAS,SAAU1vB,GACzC,IAAImwB,EAAJ,CAGA,GAFAK,GAAY,EAER7Z,EAAUR,OACZ,IACE,IAAKlR,SAAS0rB,WAAY,OAC1B,MAAO3wB,IAGXyvB,EAAKmB,QAAQ5wB,GACT2W,EAAUR,OAAQnS,WAAW6sB,GAAqBA,OACrDpB,GACH3vB,KAAKgxB,cAAe,EAEpBhxB,KAAKixB,MAAQ,WACX,GAAIf,GAAaZ,GAAuC,WAArBtvB,KAAKgxB,aAA2B,OAAOpB,EAAKqB,MAAM,CACnFC,eAAe,IAEjB,IAAI/U,EAAMyT,EAAK/X,MAAMsE,IACrByT,EAAK/X,MAAM+C,SAAW,QACtBgV,EAAK/X,MAAMsE,IAAM,MAEjB,IACE,IAAIgV,EAAoD,GAApCvB,EAAKwB,wBAAwBjV,IACjD,MAAOjc,GACP,OAGF,IAAImxB,EAAY,GAEhB,GAAIF,EAGF,IAFA,IAAIG,EAAI1B,EAAK2B,cAEND,GAAmB,GAAdA,EAAEE,UACZH,EAAUhwB,KAAKiwB,GACfA,EAAEvZ,aAAa,iBAAiB,GACOuZ,GAAlCA,EAAEC,eAAiBD,EAAEvX,YAAiBuX,EAAEvX,cAAc4V,KAAc2B,EAAEC,cAI/E3B,EAAKqB,MAAM,CACTC,eAAe,IAGbC,GACFE,EAAUviB,SAAQ,SAAUic,GAC1BA,EAAE0G,gBAAgB,oBAItBvtB,YAAW,WACT0rB,EAAK/X,MAAM+C,SAAW,GACA,OAAlBgV,EAAK/X,MAAMsE,MAAcyT,EAAK/X,MAAMsE,IAAMA,KAC7C,IAGLnc,KAAK0xB,KAAO,WACV9B,EAAK8B,QAGP1xB,KAAK0wB,UAAY,WACf,OAAOA,GAGTf,EAAKgC,GAAG,sBAAsB,WAC5B,IAAIC,EAAQjC,EAAKiC,MACbC,EAAcD,GAASA,EAAMhoB,SAAWgoB,EAAMhoB,QAAQ6B,KAC1D,GAAmB,gBAAfomB,EAAJ,CACA,IAAIC,EAAeD,IAAgBD,EAAMG,YAAcH,EAAMI,kBAEzDhC,GAAiB8B,IACnBxB,EAAYV,EAAKtmB,MAAQ,GACzB2oB,KAGFlB,QAEF,IAAIA,EAAiBta,EAAQ,SAAUnN,GACrC,GAAKonB,KAAaZ,GAAWxmB,KAAS2mB,EAAtC,CACK3mB,IAAOA,EAAQ,IACpB,IAAI4oB,EAAW,QAAU5oB,EAAQ,WAC7B4oB,GAAYtC,EAAKtmB,QAAOsmB,EAAKtmB,MAAQgnB,EAAY4B,GACrD,IACIC,EAAe,GAAK7oB,EAAMrI,SAAW0uB,EAAKyC,UAAUnG,UAAY,EAAI,IADnD,GAGjBsE,GAAwCC,GAAoB2B,GAC9DvC,EAAKyC,kBAJc,EAIoBF,GAGzC5B,EAPqB,EAQrBC,EAAmB2B,IACjB,WACF,IAAInC,IAAiBC,IAChBS,GAAc4B,GAAnB,CACAtC,GAAgB,EAChB,IAAIuC,EAAiB,EACjBJ,EAAe,EACfK,EAAO,GAEX,GAAI7C,EAAKtD,QAAS,CAChB,IAAI+F,EAAYzC,EAAKyC,UACjB3H,EAAQ2H,EAAUK,WAClBpI,EAAM+H,EAAUM,OAAOrI,IAK3B,GAJAkI,EAAiB9H,EAAM1nB,MAAMunB,OAC7B6H,EAAe1H,EAAMF,IAAID,OACzBkI,EAAO7C,EAAKtD,QAAQsG,QAAQtI,GAExBI,EAAM1nB,MAAMsnB,KAAOA,EAAK,CAC1B,IAAIuI,EAAWjD,EAAKtD,QAAQsG,QAAQtI,EAAM,GAC1CkI,EAAiB9H,EAAM1nB,MAAMsnB,IAAMA,EAAM,EAAI,EAAIkI,EACjDJ,GAAgBS,EAAS3xB,OAAS,EAClCuxB,EAAOI,EAAW,KAAOJ,OACpB,GAAI/H,EAAMF,IAAIF,KAAOA,EAAK,CAC/B,IAAIwI,EAAWlD,EAAKtD,QAAQsG,QAAQtI,EAAM,GAC1C8H,EAAe1H,EAAMF,IAAIF,IAAMA,EAAM,EAAIwI,EAAS5xB,OAASkxB,EAC3DA,GAAgBK,EAAKvxB,OAAS,EAC9BuxB,EAAOA,EAAO,KAAOK,OACZlc,GAAY0T,EAAM,IAC3BmI,EAAO,KAAOA,EACdL,GAAgB,EAChBI,GAAkB,GAGhBC,EAAKvxB,OApKO,MAqKVsxB,EArKU,KAqK0BJ,EArK1B,IAsKZK,EAAOA,EAAKpzB,MAAM,EAtKN,MAwKZozB,EAAO,KAEHD,GAAkBJ,EACpBI,EAAiBJ,EAAe,GAEhCI,EAAiB,EACjBJ,EAAe,KAMvB,IAAID,EAAWM,EAAO,OAYtB,GAVIN,GAAY5B,IACdV,EAAKtmB,MAAQgnB,EAAY4B,EACzB3B,EAAqBC,EAAmB0B,EAASjxB,QAG/CqxB,IACF/B,EAAqBX,EAAK2C,eAC1B/B,EAAmBZ,EAAKuC,cAGtB3B,GAAoB2B,GAAgB5B,GAAsBgC,GAAkB3C,EAAKuC,cAAgB3B,EAEnG,IACEZ,EAAKyC,kBAAkBE,EAAgBJ,GACvC5B,EAAqBgC,EACrB/B,EAAmB2B,EACnB,MAAOjyB,IAGX8vB,GAAgB,IAElBhwB,KAAK+wB,eAAiBA,EAClBL,GAAWf,EAAKmB,UAEpB,IAiBIgC,EAAe,KAEnB9yB,KAAK+yB,gBAAkB,SAAU1J,GAC/ByJ,EAAezJ,GAGjBrpB,KAAKgzB,gBAAkB,WACrB,OAAOF,GAGT,IAAIR,GAAmB,EAEnBW,EAAW,SAAkB3pB,EAAO4pB,GAGtC,GAFIZ,IAAkBA,GAAmB,GAErCvC,EAIF,OAHAgB,IACIznB,GAAOqmB,EAAKwD,QAAQ7pB,GACxBymB,GAAS,EACF,GAWP,IATA,IAAIwC,EAAiB3C,EAAK2C,eACtBJ,EAAevC,EAAKuC,aACpBiB,EAAa7C,EACb8C,EAAc/C,EAAUrvB,OAASuvB,EACjC8C,EAAWhqB,EACXiqB,EAAejqB,EAAMrI,OAASsxB,EAC9BiB,EAAalqB,EAAMrI,OAASkxB,EAC5BrzB,EAAI,EAEDs0B,EAAa,GAAK9C,EAAUxxB,IAAMwK,EAAMxK,IAC7CA,IACAs0B,IAMF,IAHAE,EAAWA,EAASl0B,MAAMN,GAC1BA,EAAI,EAEGu0B,EAAc,GAAK/C,EAAUrvB,OAASnC,EAAIyxB,EAAqB,GAAKD,EAAUA,EAAUrvB,OAASnC,IAAMwK,EAAMA,EAAMrI,OAASnC,IACjIA,IACAu0B,IAGFE,GAAgBz0B,EAAI,EACpB00B,GAAc10B,EAAI,EAClB,IAAI20B,EAAWH,EAASryB,OAASnC,EAAI,EAQrC,GANI20B,EAAW,IACbL,GAAcK,EACdA,EAAW,GAGbH,EAAWA,EAASl0B,MAAM,EAAGq0B,IACxBP,IAAcI,IAAaC,IAAiBH,IAAeC,IAAgBG,EAAY,MAAO,GACnGvD,GAAc,EACd,IAAIyD,GAAc,EAuBlB,OArBI7c,EAAUN,WAAyB,MAAZ+c,IACzBA,EAAW,KACXI,GAAc,GAGZJ,IAAaF,IAAeC,IAAgBE,IAAiBC,GAAcpD,EAC7ET,EAAKgE,YAAYL,GAEjB3D,EAAKgE,YAAYL,EAAU,CACzBF,WAAYA,EACZC,YAAaA,EACbE,aAAcA,EACdC,WAAYA,IAIhBvD,GAAc,EACdK,EAAYhnB,EACZinB,EAAqBgC,EACrB/B,EAAmB2B,EACnB1B,EAAiB+C,EACVE,EAAc,KAAOJ,GAI5BM,EAAU,SAAiB1zB,GAC7B,GAAI8vB,EAAe,OAAO6D,IAE1B,GAAI3zB,GAAKA,EAAE4zB,UAAW,CACpB,GAAmB,eAAf5zB,EAAE4zB,UAA4B,OAAOnE,EAAKoE,YAAY,QAC1D,GAAmB,eAAf7zB,EAAE4zB,UAA4B,OAAOnE,EAAKoE,YAAY,QAG5D,IAAIntB,EAAOgpB,EAAKtmB,MACZgqB,EAAWL,EAASrsB,GAAM,IAE1BA,EAAK3F,OAAS+yB,KAAyBvE,EAAgBtwB,KAAKm0B,IAAa3c,GAAY4Z,EAAqB,GAAKA,GAAsBC,IACvIO,KAIAkD,EAAsB,SAASA,EAAoB/zB,EAAG0G,EAAMstB,GAC9D,IAAIC,EAAgBj0B,EAAEi0B,eAAiBh0B,OAAOg0B,cAC9C,GAAKA,IAAiB/E,EAAtB,CACA,IAAIgF,EAAO/E,GAAoB6E,EAAc,OAAS,aAEtD,IACE,OAAIttB,GAC2C,IAAtCutB,EAAcE,QAAQD,EAAMxtB,GAE5ButB,EAAcG,QAAQF,GAE/B,MAAOl0B,GACP,IAAKg0B,EAAa,OAAOD,EAAoB/zB,EAAG0G,GAAM,MAItD2tB,EAAS,SAAgBr0B,EAAGs0B,GAC9B,IAAI5tB,EAAO+oB,EAAK8E,cAChB,IAAK7tB,EAAM,OAAO2B,EAAM4c,eAAejlB,GAEnC+zB,EAAoB/zB,EAAG0G,IACrB6P,IACFsa,EAAenqB,GACfkpB,EAASlpB,EACT1C,YAAW,WACT4rB,GAAS,IACR,KAGL0E,EAAQ7E,EAAK+E,QAAU/E,EAAKgF,SAC5BpsB,EAAM4c,eAAejlB,KAErB4vB,GAAS,EACTF,EAAKtmB,MAAQ1C,EACbgpB,EAAKgF,SACL1wB,YAAW,WACT4rB,GAAS,EACTiB,IACAyD,EAAQ7E,EAAK+E,QAAU/E,EAAKgF,cAK9BD,EAAQ,SAAex0B,GACzBq0B,EAAOr0B,GAAG,IAGRy0B,EAAS,SAAgBz0B,GAC3Bq0B,EAAOr0B,GAAG,IAGRizB,EAAU,SAAiBjzB,GAC7B,IAAI0G,EAAOqtB,EAAoB/zB,GAC3BivB,EAAUH,mBAEK,iBAARpoB,GACLA,GAAM+oB,EAAKwD,QAAQvsB,EAAM1G,GACzB2W,EAAUlB,MAAMzR,WAAW6sB,GAC/BxoB,EAAM4c,eAAejlB,KAErB0vB,EAAKtmB,MAAQ,GACbymB,GAAS,KAIbxnB,EAAMkgB,sBAAsBmH,EAAMD,EAAKkF,aAAahyB,KAAK8sB,GAAOA,GAChEpnB,EAAMuc,YAAY8K,EAAM,UAjLT,SAAkB1vB,GAC3B8vB,IAEAF,EACFA,GAAS,GARO,SAAuBF,GACzC,OAA+B,IAAxBA,EAAK2C,gBAAwB3C,EAAKuC,cAAgB7B,EAAUrvB,QAAU2uB,EAAKtmB,QAAUgnB,GAAaA,GAAaV,EAAKuC,eAAiB3B,EAQjIsE,CAAclF,GAGdjZ,GAAYiZ,EAAK2C,gBAAkBhC,GAC5CQ,KAHApB,EAAKoF,YACLhE,QA0KwCpB,GAC5CpnB,EAAMuc,YAAY8K,EAAM,QAASgE,EAASjE,GAC1CpnB,EAAMuc,YAAY8K,EAAM,MAAO8E,EAAO/E,GACtCpnB,EAAMuc,YAAY8K,EAAM,OAAQ+E,EAAQhF,GACxCpnB,EAAMuc,YAAY8K,EAAM,QAASuD,EAASxD,GAEpC,UAAWC,GAAW,WAAYA,GAAW,YAAaA,GAC9DrnB,EAAMuc,YAAYrQ,EAAY,WAAW,SAAUvU,GACjD,KAAI2W,EAAU7B,OAAU9U,EAAE4nB,UAAY5nB,EAAEmlB,QAExC,OAAQnlB,EAAE6jB,SACR,KAAK,GACH4Q,EAAOz0B,GACP,MAEF,KAAK,GACHizB,EAAQjzB,GACR,MAEF,KAAK,GACHw0B,EAAMx0B,MAGTyvB,GAGL,IA2BIkE,EAAsB,WACxB,GAAK7D,GAAkBL,EAAKkE,sBAAuBlE,EAAKqF,UAAxD,CACA,GAAI5E,EAAa,OAAO6E,IAExB,GAAIjF,EAAckF,kBAChBvF,EAAKkE,oBAAoBjE,EAAKtmB,WACzB,CACL,IAAI1C,EAAOgpB,EAAKtmB,MAChB2pB,EAASrsB,GAELopB,EAAcmF,cACZnF,EAAc9iB,UAChB8iB,EAAcmF,YAAYpyB,MAAMunB,OAAS0F,EAAcuC,eAAiBvC,EAAc9iB,QAAQkoB,wBAGhGpF,EAAcmF,YAAY5K,IAAID,OAAS0F,EAAcmF,YAAYpyB,MAAMunB,OAASkG,EAAmBR,EAAcuC,eAAiB9B,MAKpIwB,EAAmB,SAA0B/xB,GAC1CyvB,EAAKsC,mBAAoBtC,EAAKqF,YACnChF,GAAgB,EAChBL,EAAKsC,mBACLtC,EAAK0F,IAAI,YAAaJ,GAClB/0B,GAAG0zB,MAGT,SAASqB,IACP5E,GAAoB,EACpBT,EAAK8B,OACL9B,EAAKqB,QACLZ,GAAoB,EAGtB,IAkEIiF,EAlEAC,EAAkBrG,EAAKP,YAAYkF,EAAqB,IAAIpF,SAAS5rB,KAAK,KAAM,MAoEpF,SAAS2yB,IACPzxB,aAAauxB,GACbA,EAAepxB,YAAW,WACpBgsB,IACFN,EAAK/X,MAAMC,QAAUoY,EACrBA,EAAY,IAGdP,EAAK8F,SAASC,iBAAkB,EAC5B/F,EAAK8F,SAASE,uBAAuBhG,EAAK8F,SAASG,0BACtD,GAlELrtB,EAAMuc,YAAY8K,EAAM,oBA1EC,SAA4B1vB,GACnD,IAAI8vB,GAAkBL,EAAKkG,qBAAsBlG,EAAKqF,YACtDhF,EAAgB,IACZI,GAAJ,CACIlwB,EAAE0G,OAAMopB,EAAckF,mBAAoB,GAC9ChxB,WAAW2vB,EAAqB,GAEhClE,EAAKmG,QAAQ,oBAEbnG,EAAKgC,GAAG,YAAasD,GACrB,IAAIxK,EAAQkF,EAAKoG,oBACjBtL,EAAMF,IAAIF,IAAMI,EAAM1nB,MAAMsnB,IAC5BI,EAAMF,IAAID,OAASG,EAAM1nB,MAAMunB,OAC/B0F,EAAcmF,YAAc1K,EAC5BuF,EAAcuC,eAAiBhC,EAC/BZ,EAAKkG,mBAAmB7F,GAEpBA,EAAckF,mBAChB5E,EAAYV,EAAKtmB,MAAQ,GACzBinB,EAAqB,EACrBC,EAAmB,IAEfZ,EAAKoG,oBAAmBhG,EAAc9iB,QAAU0iB,EAAKoG,qBACrDpG,EAAKqG,kBAAiBjG,EAAc9iB,QAAU0iB,EAAKqG,uBAmDKtG,GAChEpnB,EAAMuc,YAAY8K,EAAM,oBAAqBiE,EAAqBlE,GAClEpnB,EAAMuc,YAAY8K,EAAM,SAZxB,SAAiB1vB,GACE,IAAbA,EAAE6jB,SAAiB6L,EAAKtmB,MAAMrI,OAAS2uB,EAAK2C,iBACzCvC,IAAeM,EAAYV,EAAKtmB,OACrCinB,EAAqBC,GAAoB,EACzCO,KAGFwE,MAKwC5F,GAC1CpnB,EAAMuc,YAAY8K,EAAM,UAAW2F,EAAiB5F,GACpDpnB,EAAMuc,YAAY8K,EAAM,iBAAkBqC,EAAkBtC,GAE5D3vB,KAAKk2B,WAAa,WAChB,OAAOtG,GAGT5vB,KAAKm2B,eAAiB,SAAU7sB,GAC9B8mB,EAAc9mB,EACdsmB,EAAKwG,UAAW,GAGlBp2B,KAAKq2B,YAAc,SAAUD,GACtBhG,IAAaR,EAAKwG,SAAWA,IAGpCp2B,KAAKs2B,0BAA4B,SAAUhtB,KAE3CtJ,KAAKu2B,cAAgB,SAAUr2B,GAC7BoyB,GAAmB,EACnBvB,IAEApB,EAAK6G,MAAM,oBAAqB,CAC9Bz0B,OAAQ4tB,EACR8G,SAAUv2B,IAGZF,KAAK02B,YAAYx2B,GAAG,IAGtBF,KAAK02B,YAAc,SAAUx2B,EAAGy2B,GACzBzG,IAAWA,EAAYN,EAAK/X,MAAMC,SACvC8X,EAAK/X,MAAMC,SAAW6e,EAAe,kBAAoB,KAAO9f,EAAUlB,KAAO,eAAiB,IAAM,kBAAoB4a,EAAqBC,GAAoBb,EAAK8F,SAASmB,eAAiB,GAAM,MAC1M,IAAIC,EAAOlH,EAAK7V,UAAUsX,wBACtBvZ,EAAQoX,EAAI7T,cAAcuU,EAAK7V,WAC/BqC,EAAM0a,EAAK1a,KAAOmH,SAASzL,EAAMif,iBAAmB,GACpDjc,EAAOgc,EAAKhc,MAAQyI,SAASuT,EAAKE,kBAAoB,GACtDC,EAASH,EAAKI,OAAS9a,EAAMyT,EAAKsH,aAAe,EAEjDC,EAAO,SAAcj3B,GACvB+uB,EAAIjT,UAAU4T,EAAM1vB,EAAEwnB,QAAU7M,EAAO,EAAGnW,KAAKJ,IAAIpE,EAAEynB,QAAUxL,EAAM,EAAG6a,KAG1EG,EAAKj3B,GACS,aAAVA,EAAE2I,OACN8mB,EAAK8F,SAASC,iBAAkB,EAChC3xB,aAAauxB,GACTze,EAAUnB,OAAOnN,EAAMkd,QAAQkK,EAAK7V,UAAWqd,EAAM3B,KAG3Dx1B,KAAKw1B,mBAAqBA,EAgB1B,IAAIe,EAAgB,SAAuBr2B,GACzCyvB,EAAKyH,UAAUb,cAAcr2B,GAC7Bs1B,KAGFjtB,EAAMuc,YAAY8K,EAAM,UAAW2G,EAAe5G,GAClDpnB,EAAMuc,YAAY8K,EAAM,aAAa,SAAU1vB,GAC7CA,EAAEilB,iBACFqQ,MACC7F,GACHpnB,EAAMuc,YAAY6K,EAAK8F,SAAS4B,SAAU,cAAed,EAAe5G,GACxEpnB,EAAMuc,YAAY8K,EAAM,cAAe2G,EAAe5G,GAClDlZ,GAEJ,SAAgChC,EAAYkb,EAAMC,GAChD,IAAI0H,EAAqB,KACrBC,GAAS,EACb3H,EAAKxsB,iBAAiB,WAAW,SAAUlD,GACrCo3B,GAAoBvzB,aAAauzB,GACrCC,GAAS,KACR,GACH3H,EAAKxsB,iBAAiB,SAAS,SAAUlD,GACvCo3B,EAAqBpzB,YAAW,WAC9BqzB,GAAS,IACR,QACF,GAEH,IAAIC,EAAkB,SAAyBt3B,GAC7C,GAAIiF,SAASwrB,gBAAkBf,KAC3B2H,GAAUvH,GAAiBL,EAAK8H,cAAcC,kBAE9C5H,EAAJ,CAIA,IAAIyC,EAAiB3C,EAAK2C,eACtBJ,EAAevC,EAAKuC,aACpB/vB,EAAM,KACNu1B,EAAW,EAwBf,GAtBsB,GAAlBpF,EACFnwB,EAAMmtB,EAAKqI,GACgB,GAAlBrF,EACTnwB,EAAMmtB,EAAKsI,KACF1F,EAAe3B,GAA+C,MAA3BF,EAAU6B,GACtD/vB,EAAMmtB,EAAKhF,IACFgI,EAAiBhC,GAAuD,KAAjCD,EAAUiC,EAAiB,IAC3EnwB,EAAMmtB,EAAK1U,KACX8c,EAAWnI,EAAKsI,QACPvF,EAAiBhC,GAAsBgC,GAAkBhC,GAAsBC,GAAoBD,GAAsBgC,GAAkBJ,EACpJ/vB,EAAMmtB,EAAK1U,KACFsX,EAAe3B,GAAoBF,EAAUlxB,MAAM,EAAG+yB,GAAcne,MAAM,MAAM/S,OAAS,EAClGmB,EAAMmtB,EAAKwI,KACF5F,EAAe3B,GAAmD,KAA/BF,EAAU6B,EAAe,IACrE/vB,EAAMmtB,EAAKyI,MACXL,EAAWnI,EAAKsI,SACP3F,EAAe3B,GAAoB2B,GAAgB3B,GAAoBA,GAAoBD,GAAsBgC,GAAkBJ,KAC5I/vB,EAAMmtB,EAAKyI,OAGTzF,IAAmBJ,IAAcwF,GAAYnI,EAAKyI,OAElD71B,EAAK,CAGP,IAFautB,EAAKkF,aAAa,GAAI8C,EAAUv1B,IAE9ButB,EAAKuI,SAAU,CAC5B91B,EAAMmtB,EAAKzL,gBAAgB1hB,GAC3B,IAAIwH,EAAU+lB,EAAKuI,SAASC,eAAeR,EAAUv1B,GACjDwH,GAAS+lB,EAAKoE,YAAYnqB,GAGhC2mB,EAAqBgC,EACrB/B,EAAmB2B,EACnBpB,EAAe,OAInB5rB,SAAS/B,iBAAiB,kBAAmBo0B,GAC7C7H,EAAKgC,GAAG,WAAW,WACjBxsB,SAAS3B,oBAAoB,kBAAmBg0B,MAnEzCY,CAAuB3jB,EAAYkb,EAAMC,IA0EtDxxB,EAAQi6B,sBAAwB,SAAUC,EAAWC,GACnD5hB,EAAW2hB,EACX7hB,EAAQ8hB,MAGZhkB,IAAI9H,OAAO,6BAA8B,CAAC,UAAW,UAAW,SAAU,sBAAsB,SAAUkH,EAASvV,EAASD,GAC1H,aAEA,IAAI0Y,EAAYlD,EAAQ,oBAMxB,SAAS6kB,EAAgBC,GACvBA,EAAaC,gBAAkB,KAC/B,IAAIC,EAASF,EAAaE,OAC1BA,EAAOC,kBAAkB,YAAa54B,KAAK64B,YAAYh2B,KAAK41B,IAC5DE,EAAOC,kBAAkB,WAAY54B,KAAK84B,cAAcj2B,KAAK41B,IAC7DE,EAAOC,kBAAkB,cAAe54B,KAAK+4B,cAAcl2B,KAAK41B,IAChEE,EAAOC,kBAAkB,YAAa54B,KAAKg5B,YAAYn2B,KAAK41B,IAC5DE,EAAOC,kBAAkB,aAAc54B,KAAKi5B,aAAap2B,KAAK41B,IAChD,CAAC,SAAU,cAAe,YAAa,eAAgB,mBAAoB,mBAAoB,WAAY,cAAe,aAChI3pB,SAAQ,SAAU+U,GACxB4U,EAAa5U,GAAK7jB,KAAK6jB,KACtB7jB,MACHy4B,EAAaS,cAAgBl5B,KAAKm5B,kBAAkBt2B,KAAK41B,EAAc,gBACvEA,EAAaW,cAAgBp5B,KAAKm5B,kBAAkBt2B,KAAK41B,EAAc,gBAyOzE,SAASY,EAAqB5O,EAAOiI,GACnC,GAAIjI,EAAM1nB,MAAMsnB,KAAOI,EAAMF,IAAIF,IAAK,IAAIQ,EAAM,EAAI6H,EAAOpI,OAASG,EAAM1nB,MAAMunB,OAASG,EAAMF,IAAID,YAAY,GAAIG,EAAM1nB,MAAMsnB,KAAOI,EAAMF,IAAIF,IAAM,GAAMI,EAAM1nB,MAAMunB,QAAWG,EAAMF,IAAID,OAA6CO,EAAM,EAAI6H,EAAOrI,IAAMI,EAAM1nB,MAAMsnB,IAAMI,EAAMF,IAAIF,SAAxF,IAAIQ,EAAM6H,EAAOpI,OAAS,EAC/N,OAAIO,EAAM,EAAU,CAClB6H,OAAQjI,EAAM1nB,MACdu2B,OAAQ7O,EAAMF,KACF,CACZmI,OAAQjI,EAAMF,IACd+O,OAAQ7O,EAAM1nB,QA7OlB,WACE/C,KAAK64B,YAAc,SAAUU,GAC3B,IAAIC,EAAcD,EAAGC,cACjBC,EAAMF,EAAGG,sBACb15B,KAAK25B,eAAiBJ,EACtB,IAAIZ,EAAS34B,KAAK24B,OACdnT,EAAS+T,EAAGnU,YAEhB,OAAe,IAAXI,IACmBmT,EAAO5C,oBACQ9J,WACJ,GAAVzG,IAAamT,EAAOvG,UAAUwH,eAAeH,QAErD,GAAVjU,IACFmT,EAAOvB,UAAUb,cAAcgD,EAAG9C,UAC7B5f,EAAUb,WAAWujB,EAAGpU,qBAMjCnlB,KAAK25B,eAAel3B,KAAOnB,KAAKC,OAE5Bi4B,GAAgBb,EAAOjI,cACzBiI,EAAO1H,SAEHjxB,KAAK65B,eAAkB75B,KAAK04B,iBAAoBC,EAAOmB,oBAO7D95B,KAAK+5B,aAAaR,GAClBv5B,KAAKg6B,YAAYP,EAAKF,EAAG9C,SAAS7O,QAAU,GACrC2R,EAAGpU,mBARNnlB,KAAKi6B,SAAS,kBACdj6B,KAAK+5B,aAAaR,MAUxBv5B,KAAKg6B,YAAc,SAAUP,EAAKS,GAChCT,EAAMA,GAAOz5B,KAAK24B,OAAOlD,SAAS0E,wBAAwBn6B,KAAK6jB,EAAG7jB,KAAKo6B,GACvE,IAAIzB,EAAS34B,KAAK24B,OACb34B,KAAK25B,iBACN35B,KAAK25B,eAAeU,cAAe1B,EAAOvG,UAAUkI,iBAAiBb,GAAeS,GAAuBvB,EAAOvG,UAAUwH,eAAeH,GAC1IS,GAAuBl6B,KAAK40B,SAE7B+D,EAAOlD,SAAS4B,SAASkD,YAC3B5B,EAAOlD,SAAS4B,SAASkD,aAG3B5B,EAAOrd,SAAS,iBAChBtb,KAAKi6B,SAAS,YAGhBj6B,KAAK40B,OAAS,WACZ,IAAI0E,EACAX,EAAS34B,KAAK24B,OACdjG,EAASiG,EAAOlD,SAAS0E,wBAAwBn6B,KAAK6jB,EAAG7jB,KAAKo6B,GAElE,GAAIp6B,KAAK04B,gBAAiB,CACxB,IAAI7N,EAAM7qB,KAAK04B,gBAAgB5N,aAAa4H,GAE5C,IAAY,GAAR7H,EACFyO,EAASt5B,KAAK04B,gBAAgBnO,SACzB,GAAW,GAAPM,EACTyO,EAASt5B,KAAK04B,gBAAgB31B,UACzB,CACL,IAAIy3B,EAAgBnB,EAAqBr5B,KAAK04B,gBAAiBhG,GAC/DA,EAAS8H,EAAc9H,OACvB4G,EAASkB,EAAclB,OAGzBX,EAAOvG,UAAUqI,mBAAmBnB,EAAOjP,IAAKiP,EAAOhP,QAGzDqO,EAAOvG,UAAUkI,iBAAiB5H,GAClCiG,EAAOlD,SAASiF,wBAGlB16B,KAAKm5B,kBAAoB,SAAUwB,GACjC,IAAIrB,EACAX,EAAS34B,KAAK24B,OACdjG,EAASiG,EAAOlD,SAAS0E,wBAAwBn6B,KAAK6jB,EAAG7jB,KAAKo6B,GAC9D3P,EAAQkO,EAAOvG,UAAUuI,GAAUjI,EAAOrI,IAAKqI,EAAOpI,QAE1D,GAAItqB,KAAK04B,gBAAiB,CACxB,IAAIkC,EAAW56B,KAAK04B,gBAAgB5N,aAAaL,EAAM1nB,OACnD83B,EAAS76B,KAAK04B,gBAAgB5N,aAAaL,EAAMF,KAErD,IAAiB,GAAbqQ,GAAkBC,GAAU,EAC9BvB,EAASt5B,KAAK04B,gBAAgBnO,IAC1BE,EAAMF,IAAIF,KAAOqI,EAAOrI,KAAOI,EAAMF,IAAID,QAAUoI,EAAOpI,SAAQoI,EAASjI,EAAM1nB,YAChF,GAAc,GAAV83B,GAAeD,GAAY,EACpCtB,EAASt5B,KAAK04B,gBAAgB31B,MAC1B0nB,EAAM1nB,MAAMsnB,KAAOqI,EAAOrI,KAAOI,EAAM1nB,MAAMunB,QAAUoI,EAAOpI,SAAQoI,EAASjI,EAAMF,UACpF,IAAiB,GAAbqQ,GAA4B,GAAVC,EAC3BnI,EAASjI,EAAMF,IACf+O,EAAS7O,EAAM1nB,UACV,CACL,IAAIy3B,EAAgBnB,EAAqBr5B,KAAK04B,gBAAiBhG,GAC/DA,EAAS8H,EAAc9H,OACvB4G,EAASkB,EAAclB,OAGzBX,EAAOvG,UAAUqI,mBAAmBnB,EAAOjP,IAAKiP,EAAOhP,QAGzDqO,EAAOvG,UAAUkI,iBAAiB5H,GAClCiG,EAAOlD,SAASiF,wBAGlB16B,KAAK86B,UAAY96B,KAAK+6B,aAAe/6B,KAAKg7B,iBAAmBh7B,KAAKi7B,iBAAmB,WACnFj7B,KAAK04B,gBAAkB,KACvB14B,KAAK24B,OAAOuC,WAAW,iBAEnBl7B,KAAK24B,OAAOlD,SAAS4B,SAAS8D,gBAChCn7B,KAAK24B,OAAOlD,SAAS4B,SAAS8D,kBAIlCn7B,KAAKo7B,UAAY,WACf,IA0GkBC,EAAIC,EAAIC,EAAIC,EA1G1BC,GA0GcJ,EA1GUr7B,KAAK25B,eAAe9V,EA0G1ByX,EA1G6Bt7B,KAAK25B,eAAeS,EA0G7CmB,EA1GgDv7B,KAAK6jB,EA0GjD2X,EA1GoDx7B,KAAKo6B,EA2GlF11B,KAAKg3B,KAAKh3B,KAAKkf,IAAI2X,EAAKF,EAAI,GAAK32B,KAAKkf,IAAI4X,EAAKF,EAAI,KA1GpD74B,EAAOnB,KAAKC,OACZk6B,EA9IU,GA8IgBh5B,EAAOzC,KAAK25B,eAAel3B,KAAOzC,KAAK65B,gBAAe75B,KAAKg6B,YAAYh6B,KAAK25B,eAAeD,wBAG3H15B,KAAK84B,cAAgB,SAAUS,GAC7B,IAAIE,EAAMF,EAAGG,sBACTf,EAAS34B,KAAK24B,OAEdlO,EADUkO,EAAOtM,QACDsP,gBAAgBlC,GAEhChP,GACEA,EAAMwB,YACRxB,EAAM1nB,MAAMunB,SACZG,EAAMF,IAAID,UAGZtqB,KAAKi6B,SAAS,YAEdxP,EAAQkO,EAAOvG,UAAUwJ,aAAanC,EAAIpP,IAAKoP,EAAInP,QACnDtqB,KAAKi6B,SAAS,kBAGhBj6B,KAAK04B,gBAAkBjO,EACvBzqB,KAAK40B,UAGP50B,KAAK+4B,cAAgB,SAAUQ,GAC7B,IAAIE,EAAMF,EAAGG,sBACTf,EAAS34B,KAAK24B,OAClB34B,KAAKi6B,SAAS,iBACd,IAAIxP,EAAQkO,EAAO5C,oBAEftL,EAAMgB,eAAiBhB,EAAMC,SAAS+O,EAAIpP,IAAKoP,EAAInP,SACrDtqB,KAAK04B,gBAAkBC,EAAOvG,UAAUyJ,aAAapR,EAAM1nB,MAAMsnB,KACjErqB,KAAK04B,gBAAgBnO,IAAMoO,EAAOvG,UAAUyJ,aAAapR,EAAMF,IAAIF,KAAKE,KAExEvqB,KAAK04B,gBAAkBC,EAAOvG,UAAUyJ,aAAapC,EAAIpP,KAG3DrqB,KAAK40B,UAGP50B,KAAKg5B,YAAc,SAAUO,GAC3B,IAAIZ,EAAS34B,KAAK24B,OAClBA,EAAO5D,YACP/0B,KAAK04B,gBAAkBC,EAAO5C,oBAC9B/1B,KAAKi6B,SAAS,cAGhBj6B,KAAKi5B,aAAe,SAAUM,GAC5B,IAAIA,EAAGuC,cAAP,CAEIvC,EAAGc,eAAiBd,EAAGvT,SAAWuT,EAAGxT,SACvCwT,EAAGxT,OAASwT,EAAGvT,OACfuT,EAAGvT,OAAS,GAGd,IAAI2S,EAAS34B,KAAK24B,OACb34B,KAAK+7B,cAAa/7B,KAAK+7B,YAAc,CACxCzK,EAAG,EACH0K,GAAI,EACJC,GAAI,EACJC,QAAS,IAEX,IAAIC,EAAan8B,KAAK+7B,YAClBzK,EAAIiI,EAAG9C,SAASpO,UAChB+T,EAAK9K,EAAI6K,EAAW7K,EACpB0K,EAAKI,EAAK7C,EAAGxT,OAASqW,EAAKD,EAAWH,GACtCC,EAAKG,EAAK7C,EAAGvT,OAASoW,EAAKD,EAAWF,GAEtCG,EAjNgB,MAkNlBJ,GAAMA,EAAKG,EAAWH,IAAM,EAC5BC,GAAMA,EAAKE,EAAWF,IAAM,GAG9B,IAAII,EAAY33B,KAAK+iB,IAAIuU,EAAKC,GAC1BK,GAAY,EAIhB,GAHID,GAAa,GAAK1D,EAAOlD,SAAS8G,eAAehD,EAAGxT,OAASwT,EAAGiD,MAAO,KAAIF,GAAY,GACvFD,GAAa,GAAK1D,EAAOlD,SAAS8G,eAAe,EAAGhD,EAAGvT,OAASuT,EAAGiD,SAAQF,GAAY,GAEvFA,EACFH,EAAWD,QAAU5K,OAChB,GAAIA,EAAI6K,EAAWD,QA7NN,IA6NmC,CACtCx3B,KAAK+iB,IAAIuU,IAAO,IAAMt3B,KAAK+iB,IAAI0U,EAAWH,KAAOt3B,KAAK+iB,IAAIwU,IAAO,IAAMv3B,KAAK+iB,IAAI0U,EAAWF,KAGxGK,GAAY,EACZH,EAAWD,QAAU5K,GAErB6K,EAAWD,QAAU,EAQzB,OAJAC,EAAW7K,EAAIA,EACf6K,EAAWH,GAAKA,EAChBG,EAAWF,GAAKA,EAEZK,GACF3D,EAAOlD,SAASgH,SAASlD,EAAGxT,OAASwT,EAAGiD,MAAOjD,EAAGvT,OAASuT,EAAGiD,OACvDjD,EAAGj2B,aAFZ,MAKDwE,KAAK0wB,EAAgB14B,WACxB1B,EAAQo6B,gBAAkBA,KAiB5BjkB,IAAI9H,OAAO,cAAe,CAAC,UAAW,UAAW,SAAU,cAAe,gBAAgB,SAAUkH,EAASvV,EAASD,GACpH,aAEUwV,EAAQ,aAAlB,IAEIsb,EAAMtb,EAAQ,aAElB,SAAS+oB,EAAQjoB,GACfzU,KAAKqF,QAAS,EACdrF,KAAK28B,SAAW,KAChB38B,KAAK48B,YAAcnoB,GAGrB,WACEzU,KAAK68B,MAAQ,WAKX,OAJA78B,KAAK28B,SAAW1N,EAAI3jB,cAAc,OAClCtL,KAAK28B,SAAS/kB,UAAY,cAC1B5X,KAAK28B,SAAS9kB,MAAM6C,QAAU,OAC9B1a,KAAK48B,YAAYxlB,YAAYpX,KAAK28B,UAC3B38B,KAAK28B,UAGd38B,KAAKk2B,WAAa,WAChB,OAAOl2B,KAAK28B,UAAY38B,KAAK68B,SAG/B78B,KAAK88B,QAAU,SAAUlN,GACvB5vB,KAAKk2B,aAAa1d,YAAcoX,GAGlC5vB,KAAK+8B,QAAU,SAAUC,GACvBh9B,KAAKk2B,aAAa3d,UAAYykB,GAGhCh9B,KAAKi9B,YAAc,SAAUpZ,EAAGuW,GAC9Bp6B,KAAKk2B,aAAare,MAAMgD,KAAOgJ,EAAI,KACnC7jB,KAAKk2B,aAAare,MAAMsE,IAAMie,EAAI,MAGpCp6B,KAAKk9B,aAAe,SAAUtlB,GAC5BqX,EAAIpW,YAAY7Y,KAAKk2B,aAActe,IAGrC5X,KAAKm9B,KAAO,SAAUvN,EAAM/L,EAAGuW,GACjB,MAARxK,GAAc5vB,KAAK88B,QAAQlN,GACtB,MAAL/L,GAAkB,MAALuW,GAAWp6B,KAAKi9B,YAAYpZ,EAAGuW,GAE3Cp6B,KAAKqF,SACRrF,KAAKk2B,aAAare,MAAM6C,QAAU,QAClC1a,KAAKqF,QAAS,IAIlBrF,KAAKo9B,KAAO,WACNp9B,KAAKqF,SACPrF,KAAKk2B,aAAare,MAAM6C,QAAU,OAClC1a,KAAKqF,QAAS,IAIlBrF,KAAKq9B,UAAY,WACf,OAAOr9B,KAAKk2B,aAAaoH,cAG3Bt9B,KAAKu9B,SAAW,WACd,OAAOv9B,KAAKk2B,aAAajb,aAG3Bjb,KAAK4kB,QAAU,WACb5kB,KAAKqF,QAAS,EAEVrF,KAAK28B,UAAY38B,KAAK28B,SAASloB,YACjCzU,KAAK28B,SAASloB,WAAWC,YAAY1U,KAAK28B,aAG7C70B,KAAK40B,EAAQ58B,WAChB1B,EAAQs+B,QAAUA,KAEpBnoB,IAAI9H,OAAO,mCAAoC,CAAC,UAAW,UAAW,SAAU,cAAe,cAAe,gBAAiB,gBAAgB,SAAUkH,EAASvV,EAASD,GACzK,aAEA,IAAI8wB,EAAMtb,EAAQ,cAEd8I,EAAM9I,EAAQ,cAEdpL,EAAQoL,EAAQ,gBAEhB+oB,EAAU/oB,EAAQ,cAAc+oB,QAiGpC,SAASc,EAAc/oB,GACrBioB,EAAQ50B,KAAK9H,KAAMyU,GAGrBgI,EAAIL,SAASohB,EAAed,GAC5B,WACE18B,KAAKi9B,YAAc,SAAUpZ,EAAGuW,GAC9B,IAAIqD,EAAct9B,OAAOu9B,YAAcv4B,SAASgT,gBAAgBgD,YAC5DwiB,EAAex9B,OAAOy9B,aAAez4B,SAASgT,gBAAgB+e,aAC9D3c,EAAQva,KAAKu9B,WACb9iB,EAASza,KAAKq9B,aAClBxZ,GAAK,IAGGtJ,EAAQkjB,IACd5Z,GAAKA,EAAItJ,EAAQkjB,IAHnBrD,GAAK,IAMG3f,EAASkjB,IACfvD,GAAK,GAAK3f,GAGZiiB,EAAQ58B,UAAUm9B,YAAYn1B,KAAK9H,KAAM6jB,EAAGuW,KAE7CtyB,KAAK01B,EAAc19B,WACtB1B,EAAQy/B,cAxHR,SAAuBpF,GACrB,IAqBIqF,EAAgBC,EAAYC,EArB5BrF,EAASF,EAAaE,OACtBsF,EAAStF,EAAOlD,SAASyI,aACzBC,EAAU,IAAIX,EAAc7E,EAAO7e,WAqDvC,SAASskB,IACHN,IAAgBA,EAAiB/5B,aAAa+5B,IAE9CE,IACFG,EAAQf,OACRY,EAAoB,KAEpBrF,EAAO7C,QAAQ,oBAAqBqI,GAEpCxF,EAAOtD,IAAI,aAAc+I,IAI7B,SAASC,EAAYn+B,GACnBi+B,EAAQlB,YAAY/8B,EAAE2jB,EAAG3jB,EAAEk6B,GAlE7B3B,EAAaE,OAAOC,kBAAkB,mBAAmB,SAAU14B,GACjE,GAAKy4B,EAAOjI,aAAgC,GAAjBxwB,EAAEklB,aAET,eADD6Y,EAAOK,UAAUp+B,GACpC,CACA,IAAImqB,EAAMnqB,EAAEw5B,sBAAsBrP,IAC9B+H,EAAYuG,EAAOtM,QAAQ+F,UAC/B,GAAIlyB,EAAEm6B,cAAejI,EAAUmM,SAASlU,EAAK,OAAQ,CACnD,GAAyB,GAArBnqB,EAAEu2B,SAAS9P,OAEb,OADAgS,EAAO5D,YACA70B,EAAEilB,iBAGXsT,EAAaC,gBAAkBC,EAAOvG,UAAUyJ,aAAaxR,GAI/D,OAFAoO,EAAawB,SAAS,iBACtBxB,EAAasB,aAAa75B,GACnBA,EAAEilB,qBAqDXsT,EAAaE,OAAOC,kBAAkB,mBAAmB,SAAU14B,GACjE,IAAI6B,EAAS7B,EAAEu2B,SAAS10B,QAAU7B,EAAEu2B,SAAS+H,WAC7C,GAAIvP,EAAIrW,YAAY7W,EAAQ,mBAAoB,OAAOq8B,IACnDJ,GAAqBvF,EAAagG,sBAAsBJ,EAAYn+B,GACxE69B,EAAa79B,EACT49B,IACJA,EAAiB55B,YAAW,WAC1B45B,EAAiB,KACbC,IAAetF,EAAaf,eAzDpC,WACE,IAAIrN,EAAM0T,EAAWrE,sBAAsBrP,IACvCqU,EAAaT,EAAOU,aAAatU,GACrC,IAAKqU,EAAY,OAAON,IAGxB,GAAI/T,GAFSsO,EAAOtM,QAAQuS,YAET,CACjB,IAAIC,EAAYlG,EAAOlD,SAASqJ,yBAAyB,EAAGf,EAAW3D,GAAG/P,IACtEoP,EAAMsE,EAAWgB,KACrB,GAAIF,EAAYlG,EAAOtM,QAAQ2S,oBAAoBvF,EAAIpP,IAAKoP,EAAInP,QAAS,OAAO8T,IAGlF,GAAIJ,GAAqBU,EASzB,GARAV,EAAoBU,EAAW9O,KAAK3b,KAAK,SACzCkqB,EAAQpB,QAAQiB,GAChBG,EAAQhB,OAERxE,EAAO7C,QAAQ,oBAAqBqI,GAEpCxF,EAAOhH,GAAG,aAAcyM,GAEpB3F,EAAagG,qBACfJ,EAAYN,OACP,CACL,IACIlH,EADgBkH,EAAWtH,SAAS10B,OACfqvB,wBACrBvZ,EAAQsmB,EAAQjI,aAAare,MACjCA,EAAMgD,KAAOgc,EAAKmB,MAAQ,KAC1BngB,EAAMsE,IAAM0a,EAAKI,OAAS,MA6BsBgI,GAAmBb,MAClE,QAEL71B,EAAMuc,YAAY6T,EAAOlD,SAASyJ,QAAS,YAAY,SAAUh/B,GAC/D69B,EAAa,KACRC,IAAqBF,IAC1BA,EAAiB55B,YAAW,WAC1B45B,EAAiB,KACjBM,MACC,OACFzF,GACHA,EAAOhH,GAAG,gBAAiByM,OA8B/B7pB,IAAI9H,OAAO,wBAAyB,CAAC,UAAW,UAAW,SAAU,gBAAiB,sBAAsB,SAAUkH,EAASvV,EAASD,GACtI,aAEA,IAAIoK,EAAQoL,EAAQ,gBAEhBkD,EAAYlD,EAAQ,oBAEpBwrB,EAAa/gC,EAAQ+gC,WAAa,SAAU1I,EAAUkC,GACxD34B,KAAKy2B,SAAWA,EAChBz2B,KAAK24B,OAASA,EACd34B,KAAK6jB,EAAI7jB,KAAK0nB,QAAU+O,EAAS/O,QACjC1nB,KAAKo6B,EAAIp6B,KAAK2nB,QAAU8O,EAAS9O,QACjC3nB,KAAK++B,KAAO,KACZ/+B,KAAKo/B,aAAe,KACpBp/B,KAAKq/B,oBAAqB,EAC1Br/B,KAAKsoB,kBAAmB,IAG1B,WACEtoB,KAAKklB,gBAAkB,WACrB3c,EAAM2c,gBAAgBllB,KAAKy2B,UAC3Bz2B,KAAKq/B,oBAAqB,GAG5Br/B,KAAKmlB,eAAiB,WACpB5c,EAAM4c,eAAenlB,KAAKy2B,UAC1Bz2B,KAAKsoB,kBAAmB,GAG1BtoB,KAAKsD,KAAO,WACVtD,KAAKklB,kBACLllB,KAAKmlB,kBAGPnlB,KAAK05B,oBAAsB,WACzB,OAAI15B,KAAK++B,OACT/+B,KAAK++B,KAAO/+B,KAAK24B,OAAOlD,SAAS0E,wBAAwBn6B,KAAK0nB,QAAS1nB,KAAK2nB,UADtD3nB,KAAK++B,MAK7B/+B,KAAKw5B,YAAc,WACjB,GAA0B,OAAtBx5B,KAAKo/B,aAAuB,OAAOp/B,KAAKo/B,aAC5C,IACIE,EADSt/B,KAAK24B,OACU5C,oBAC5B,GAAIuJ,EAAerT,UAAWjsB,KAAKo/B,cAAe,MAAW,CAC3D,IAAI3F,EAAMz5B,KAAK05B,sBACf15B,KAAKo/B,aAAeE,EAAe5U,SAAS+O,EAAIpP,IAAKoP,EAAInP,QAE3D,OAAOtqB,KAAKo/B,cAGdp/B,KAAKolB,UAAY,WACf,OAAO7c,EAAM6c,UAAUplB,KAAKy2B,WAG9Bz2B,KAAKq6B,YAAc,WACjB,OAAOr6B,KAAKy2B,SAASlR,UAGvBvlB,KAAK87B,YAAcjlB,EAAU7B,MAAQ,WACnC,OAAOhV,KAAKy2B,SAAS3O,SACnB,WACF,OAAO9nB,KAAKy2B,SAASpR,WAEtBvd,KAAKq3B,EAAWr/B,cAErByU,IAAI9H,OAAO,6BAA8B,CAAC,UAAW,UAAW,SAAU,cAAe,gBAAiB,sBAAsB,SAAUkH,EAASvV,EAASD,GAC1J,aAEA,IAAI8wB,EAAMtb,EAAQ,cAEdpL,EAAQoL,EAAQ,gBAEhBkD,EAAYlD,EAAQ,oBAMxB,SAAS4rB,EAAgB9G,GACvB,IAAIE,EAASF,EAAaE,OACtB6G,EAAYvQ,EAAI3jB,cAAc,OAClCk0B,EAAU3nB,MAAMC,QAAU,8DAC1B0nB,EAAUhnB,YAAc,OACV,CAAC,WAAY,cAAe,YAAa,eAAgB,eAC/D1J,SAAQ,SAAU+U,GACxB4U,EAAa5U,GAAK7jB,KAAK6jB,KACtB7jB,MACH24B,EAAOhH,GAAG,YAAa3xB,KAAK64B,YAAYh2B,KAAK41B,IAC7C,IACIgH,EAAqB5b,EAAGuW,EACxBsF,EAASjV,EACTkV,EAEAC,EACAC,EACAC,EACAC,EACAC,EATAC,EAActH,EAAO7e,UAIrBomB,EAAU,EA6Ld,SAASC,IACP,IAAIC,EAAaT,GAlEnB,SAA8BjN,EAAQ0N,GACpC,IAAI7+B,EAAMD,KAAKC,MACX8+B,GAAaD,GAAc1N,EAAOrI,KAAO+V,EAAW/V,IACpDiW,GAAaF,GAAc1N,EAAOpI,QAAU8V,EAAW9V,QAEtDyV,GAAmBM,GAAaC,GACnC3H,EAAO4H,qBAAqB7N,GAC5BqN,EAAkBx+B,EAClBy+B,EAA0B,CACxBnc,EAAGA,EACHuW,EAAGA,IAGUoG,EAAaR,EAAwBnc,EAAGmc,EAAwB5F,EAAGvW,EAAGuW,GAzJ5D,EA4JvB2F,EAAkB,KACTx+B,EAAMw+B,GA9JG,MA+JlBpH,EAAOlD,SAASiF,uBAChBqF,EAAkB,OAiDtBrF,CADAiF,EAAahH,EAAOlD,SAAS0E,wBAAwBtW,EAAGuW,GACvBgG,GA5CnC,SAAoB1N,EAAQ0N,GAC1B,IAAI7+B,EAAMD,KAAKC,MACXk/B,EAAa9H,EAAOlD,SAASiL,YAAYD,WACzC7J,EAAiB+B,EAAOlD,SAASiL,YAAY9J,eAC7C+J,EAAahI,EAAOlD,SAAS4B,SAASjG,wBACtCwP,EAAU,CACZ/c,EAAG,CACDhJ,KAAMgJ,EAAI8c,EAAW9lB,KACrBmd,MAAO2I,EAAW3I,MAAQnU,GAE5BuW,EAAG,CACDje,IAAKie,EAAIuG,EAAWxkB,IACpB8a,OAAQ0J,EAAW1J,OAASmD,IAG5ByG,EAAiBn8B,KAAKJ,IAAIs8B,EAAQ/c,EAAEhJ,KAAM+lB,EAAQ/c,EAAEmU,OACpD8I,EAAiBp8B,KAAKJ,IAAIs8B,EAAQxG,EAAEje,IAAKykB,EAAQxG,EAAEnD,QACnD8J,EAAe,CACjB1W,IAAKqI,EAAOrI,IACZC,OAAQoI,EAAOpI,QAGbuW,EAAiBjK,GAAkB,IACrCmK,EAAazW,QAAUsW,EAAQ/c,EAAEhJ,KAAO+lB,EAAQ/c,EAAEmU,OAAS,EAAI,GAG7D8I,EAAiBL,GAAc,IACjCM,EAAa1W,KAAOuW,EAAQxG,EAAEje,IAAMykB,EAAQxG,EAAEnD,QAAU,EAAI,GAG9D,IAAI+J,EAAUtO,EAAOrI,KAAO0W,EAAa1W,IACrC4W,EAAUvO,EAAOpI,QAAUyW,EAAazW,OACxC+V,GAAaD,GAAc1N,EAAOrI,KAAO+V,EAAW/V,IAEpD2W,GAAWC,IAAYZ,EACpBP,EAAwDv+B,EAAMu+B,GAzMlD,KAyM2FnH,EAAOlD,SAASiF,qBAAqBqG,GAAvHjB,EAAsBv+B,EAEhDu+B,EAAsB,KAQxBoB,CAAWvB,EAAYS,GAGzB,SAASe,IACP1W,EAAQkO,EAAOvG,UAAUgP,kBACzB3B,EAAsB9G,EAAOtM,QAAQgV,UAAU5W,EAAO,gBAAiBkO,EAAO2I,qBAC9E3I,EAAO4I,iBACH5I,EAAOjI,aAAaiI,EAAOlD,SAAS+L,aAAaC,aAAY,GACjEC,cAAchC,GACdS,IACAT,EAAUiC,YAAYxB,EAAgB,IACtCD,EAAU,EACV33B,EAAMuc,YAAY3f,SAAU,YAAay8B,GAG3C,SAASC,IACPH,cAAchC,GACd/G,EAAOtM,QAAQyV,aAAarC,GAC5BA,EAAsB,KACtB9G,EAAOvG,UAAU2P,kBAAkBtX,GAC/BkO,EAAOjI,cAAgBmP,GAAYlH,EAAOqJ,oBAC9CvX,EAAQ,KACRkV,EAAa,KACbO,EAAU,EACVJ,EAAsB,KACtBC,EAAkB,KAClBx3B,EAAMsc,eAAe1f,SAAU,YAAay8B,GApN9C5hC,KAAKiiC,YAAc,SAAU/hC,GAC3B,GAAIF,KAAKkiC,aAAejC,EAAYkC,UAAW,CAC7C,IAAI1hC,EAAOT,KAKX,OAJAkE,YAAW,WACTzD,EAAKu5B,cACLv5B,EAAKs5B,aAAa75B,KACjB,GACIA,EAAEilB,iBAGXsF,EAAQkO,EAAO5C,oBACf,IAAIqM,EAAeliC,EAAEkiC,aACrBA,EAAaC,cAAgB1J,EAAO2J,cAAgB,OAAS,WAC7D3J,EAAO7e,UAAU1C,YAAYooB,GAC7B4C,EAAaG,cAAgBH,EAAaG,aAAa/C,EAAW,EAAG,GACrEt7B,YAAW,WACTy0B,EAAO7e,UAAUpF,YAAY8qB,MAE/B4C,EAAaI,YACbJ,EAAa/N,QAAQ,OAAQsE,EAAOtM,QAAQoW,gBAC5C5C,GAAa,EACb7/B,KAAKi6B,SAAS,SAGhBj6B,KAAK0iC,UAAY,SAAUxiC,GAKzB,GAJA+/B,EAAYkC,WAAY,EACxBtC,GAAa,EACb7/B,KAAKi6B,SAAS,OAETtB,EAAO2J,cAAe,CACzB,IAAIK,EAAaziC,EAAEkiC,aAAaO,WAC3B/C,GAA+B,QAAd+C,GAAsBhK,EAAOtM,QAAQviB,OAAO6uB,EAAO5C,qBACzE4C,EAAOqJ,oBAGThiC,KAAK24B,OAAOuC,WAAW,gBACvBl7B,KAAK24B,OAAOlD,SAASmN,eAAe,KAGtC5iC,KAAK6iC,YAAc,SAAU3iC,GAC3B,IAAIy4B,EAAO2J,eAAkBQ,EAAU5iC,EAAEkiC,cAMzC,OALAve,EAAI3jB,EAAEwnB,QACN0S,EAAIl6B,EAAEynB,QACD8X,GAAqB0B,IAC1BjB,IACAhgC,EAAEkiC,aAAaO,WAAa/C,EAAgBmD,EAAc7iC,GACnDqI,EAAM4c,eAAejlB,IAG9BF,KAAKgjC,WAAa,SAAU9iC,GAC1B,IAAIy4B,EAAO2J,eAAkBQ,EAAU5iC,EAAEkiC,cAWzC,OAVAve,EAAI3jB,EAAEwnB,QACN0S,EAAIl6B,EAAEynB,QAED8X,IACH0B,IACAjB,KAGuB,OAArB+C,IAA2BA,EAAmB,MAClD/iC,EAAEkiC,aAAaO,WAAa/C,EAAgBmD,EAAc7iC,GACnDqI,EAAM4c,eAAejlB,IAG9BF,KAAKkjC,YAAc,SAAUhjC,GAG3B,KAFAggC,GAEe,GAAKT,EAGlB,OAFAoC,IACAjC,EAAgB,KACTr3B,EAAM4c,eAAejlB,IAIhCF,KAAKmjC,OAAS,SAAUjjC,GACtB,GAAKy/B,EAAL,CACA,IAAIyC,EAAeliC,EAAEkiC,aAErB,GAAIvC,EACF,OAAQD,GACN,IAAK,OAEDnV,EADEA,EAAMC,SAASiV,EAAWtV,IAAKsV,EAAWrV,QACpC,CACNvnB,MAAO48B,EACPpV,IAAKoV,GAGChH,EAAOyK,SAAS3Y,EAAOkV,GAGjC,MAEF,IAAK,OACHlV,EAAQkO,EAAOyK,SAAS3Y,EAAOkV,GAAY,OAG1C,CACL,IAAI0D,EAAWjB,EAAa9N,QAAQ,QACpC7J,EAAQ,CACN1nB,MAAO48B,EACPpV,IAAKoO,EAAOtM,QAAQiX,OAAO3D,EAAY0D,IAEzC1K,EAAO1H,QACP2O,EAAgB,KAIlB,OADAiC,IACOt5B,EAAM4c,eAAejlB,KAG9BqI,EAAMuc,YAAYmb,EAAa,YAAajgC,KAAKiiC,YAAYp/B,KAAK41B,GAAeE,GACjFpwB,EAAMuc,YAAYmb,EAAa,UAAWjgC,KAAK0iC,UAAU7/B,KAAK41B,GAAeE,GAC7EpwB,EAAMuc,YAAYmb,EAAa,YAAajgC,KAAK6iC,YAAYhgC,KAAK41B,GAAeE,GACjFpwB,EAAMuc,YAAYmb,EAAa,WAAYjgC,KAAKgjC,WAAWngC,KAAK41B,GAAeE,GAC/EpwB,EAAMuc,YAAYmb,EAAa,YAAajgC,KAAKkjC,YAAYrgC,KAAK41B,GAAeE,GACjFpwB,EAAMuc,YAAYmb,EAAa,OAAQjgC,KAAKmjC,OAAOtgC,KAAK41B,GAAeE,GAoGvE,IAAIsK,EAAmB,KAEvB,SAASrB,IACiB,MAApBqB,IACFA,EAAmB/+B,YAAW,WACJ,MAApB++B,GAA4BxD,GAAqBoC,MACpD,KAIP,SAASiB,EAAUV,GACjB,IAAImB,EAAQnB,EAAamB,MACzB,OAAQA,GAASpiC,MAAMrB,UAAU0jC,KAAK17B,KAAKy7B,GAAO,SAAU16B,GAC1D,MAAe,cAARA,GAAgC,QAARA,KAInC,SAASk6B,EAAc7iC,GACrB,IAAIujC,EAAc,CAAC,OAAQ,WAAY,MAAO,iBAE1CC,EAAoB7sB,EAAU7B,MAAQ9U,EAAEolB,OAASplB,EAAEmlB,QACnDgd,EAAgB,gBAEpB,IACEA,EAAgBniC,EAAEkiC,aAAaC,cAAcn6B,cAC7C,MAAOhI,IAET,IAAIyiC,EAAa,OAEjB,OADIe,GAAqBD,EAAYr9B,QAAQi8B,IAAkB,EAAGM,EAAa,OAT7D,CAAC,OAAQ,WAAY,WAAY,MAAO,iBASiDv8B,QAAQi8B,IAAkB,EAAGM,EAAa,OAAgBc,EAAYr9B,QAAQi8B,IAAkB,IAAGM,EAAa,QACpNA,GAsFX,SAASnC,EAAanF,EAAIC,EAAIC,EAAIC,GAChC,OAAO92B,KAAKg3B,KAAKh3B,KAAKkf,IAAI2X,EAAKF,EAAI,GAAK32B,KAAKkf,IAAI4X,EAAKF,EAAI,KAnF5D,WACEt7B,KAAK2jC,SAAW,WACCriC,KAAKC,MAAQvB,KAAK25B,eAAel3B,KACjCzC,KAAK24B,OAAOiL,gBAAgB5jC,KAAK6jC,aAGlD7jC,KAAK8jC,YAAc,WACJ9jC,KAAK24B,OAAO7e,UAClBqoB,WAAY,EACnBniC,KAAKg6B,YAAYh6B,KAAK25B,eAAeD,uBACrC15B,KAAK86B,aAGP96B,KAAK+jC,aAAe,SAAU7jC,GAC5BF,KAAK24B,OAAOqJ,oBACZhiC,KAAK24B,OAAOuC,WAAW,gBACvBl7B,KAAK24B,OAAOlD,SAASmN,eAAe,IACpC5iC,KAAK8jC,eAGP9jC,KAAK6jC,UAAY,WACf7jC,KAAKkiC,YAAa,EAClB,IAAIvJ,EAAS34B,KAAK24B,OACLA,EAAO7e,UACbqoB,WAAY,EACnBxJ,EAAOlD,SAAS+L,aAAaC,aAAY,GACzC9I,EAAOrd,SAAS,gBAChB,IAAI0oB,EAAcntB,EAAUnB,MAAQ,UAAY,OAChDijB,EAAOlD,SAASmN,eAAeoB,GAC/BhkC,KAAKi6B,SAAS,cAGhBj6B,KAAKikC,YAAc,SAAU/jC,GAC3B,IAAI6B,EAAS/B,KAAK24B,OAAO7e,UAErBjD,EAAUlB,MAAsB,aAAd3V,KAAKgI,QACVw4B,EAAaxgC,KAAK25B,eAAe9V,EAAG7jB,KAAK25B,eAAeS,EAAGp6B,KAAK6jB,EAAG7jB,KAAKo6B,GACxE,GAAGr4B,EAAOmiC,YAGR,aAAflkC,KAAKgI,QACQw4B,EAAaxgC,KAAK25B,eAAe9V,EAAG7jB,KAAK25B,eAAeS,EAAGp6B,KAAK6jB,EAAG7jB,KAAKo6B,GAExE,IACbr4B,EAAOogC,WAAY,EACnBniC,KAAKg6B,YAAYh6B,KAAK25B,eAAeD,0BAK3C15B,KAAK64B,YAAc,SAAU34B,GAC3B,GAAKF,KAAKmkC,aAAV,CACAnkC,KAAK25B,eAAiBz5B,EACtB,IAAIy4B,EAAS34B,KAAK24B,OACda,EAAct5B,EAAEs5B,cAChBhU,EAAStlB,EAAEklB,YAGf,GAAmB,KAFFllB,EAAEu2B,SAAS9P,QAAU,IAEH,IAAXnB,GAAgBgU,EAAa,CACnD,GAAIt5B,EAAEy4B,OAAOmB,oBAAsB55B,EAAE47B,eAAiB57B,EAAEm6B,eAAgB,OACxEr6B,KAAK25B,eAAel3B,KAAOnB,KAAKC,MAChC,IAAI6iC,EAAclkC,EAAEu2B,SAAS10B,QAAU7B,EAAEu2B,SAAS+H,WAGlD,GAFI,iBAAkB4F,IAAaA,EAAYC,aAAe,MAE1D1L,EAAOiL,eAAgB,CACzB,GAAI/sB,EAAUV,SACZnW,KAAKkiC,YAAa,EACAvJ,EAAO7e,UACbqoB,WAAY,EAG1BniC,KAAKi6B,SAAS,iBAEdj6B,KAAK6jC,YAGP7jC,KAAK+5B,aAAa75B,EAAGF,KAAKikC,YAAYphC,KAAK7C,OAC3CE,EAAEooB,kBAAmB,OAGxBxgB,KAAKy3B,EAAgBz/B,WAMxB1B,EAAQmhC,gBAAkBA,KAE5BhrB,IAAI9H,OAAO,0BAA2B,CAAC,UAAW,UAAW,SAAU,wBAAyB,gBAAiB,gBAAgB,SAAUkH,EAASvV,EAASD,GAC3J,aAEA,IAAIghC,EAAaxrB,EAAQ,iBAAiBwrB,WAEtC52B,EAAQoL,EAAQ,gBAEhBsb,EAAMtb,EAAQ,cAElBvV,EAAQkmC,kBAAoB,SAAU9sB,EAAImhB,GACxC,IACI5R,EACAC,EACAud,EACAC,EACAC,EACAC,EAEAjL,EAIAkL,EACAC,EAbAC,EAAO,SAOPC,EAAiB,EAEjBC,EAAa,EACbC,EAAK,EACLC,EAAK,EAIT,SAASC,IACP,IAAI/V,EAAYhvB,OAAOgV,WAAahV,OAAOgV,UAAUga,UACjD9pB,GAAS,EA6BT8/B,EAAc,SAAqBjlC,GACrC,IA3BIklC,EACAC,EA0BA17B,EAASzJ,EAAE6B,OAAO8J,aAAa,UAEnC,GAAc,QAAVlC,IAAqBtE,EAEvB,OADAA,GAAUA,EA9BR+/B,EAAWzM,EAAOlE,cAClB4Q,EAAU1M,EAAOtM,QAAQiZ,iBAAiBD,eAC9CT,EAAYW,aAAatW,EAAInY,SAASzR,EAAS,CAAC,QAAS+/B,GAAY,CAAC,OAAQ,CAC5EI,MAAO,oBACP77B,OAAQ,aACP,cAAey7B,GAAY,CAAC,OAAQ,CACrCI,MAAO,oBACP77B,OAAQ,QACP,QAASy7B,GAAY,CAAC,OAAQ,CAC/BI,MAAO,oBACP77B,OAAQ,OACP,OAAQwlB,GAAa,CAAC,OAAQ,CAC/BqW,MAAO,oBACP77B,OAAQ,SACP,SAAU07B,GAAW,CAAC,OAAQ,CAC/BG,MAAO,oBACP77B,OAAQ,QACP,QAAS,CAAC,OAAQ,CACnB67B,MAAO,oBACP77B,OAAQ,QACP,QAAS,CAAC,OAAQ,CACnB67B,MAAO,oBACP77B,OAAQ,sBACP,YAAc,CAAC,SAAUi7B,EAAY3qB,YAW1B,SAAVtQ,EACFwlB,EAAUsW,WAAWl2B,MAAK,SAAUqgB,GAClC+I,EAAO5E,YAAYpqB,EAAQimB,MAEpBjmB,IACK,OAAVA,GAA6B,QAAVA,IACjBwlB,EAAWA,EAAUuW,UAAU/M,EAAOlE,eAAoBtvB,SAAS4uB,YAAY,SAGrF4E,EAAO5E,YAAYpqB,IAGrBi7B,EAAY3qB,WAAWpC,MAAM6C,QAAU,OACvCrV,GAAS,EACK,sBAAVsE,GAAgCgvB,EAAO1H,SAG7C2T,EAAc3V,EAAInY,SAAS,CAAC,MAAO,CACjC0uB,MAAO,kBACPG,aAAc,SAAsBzlC,GAClC2kC,EAAO,OACP3kC,EAAEglB,kBACFhlB,EAAEilB,iBACFwT,EAAOvB,UAAUnG,SAEnB2U,WAAY,SAAoB1lC,GAC9BA,EAAEglB,kBACFhlB,EAAEilB,iBACFggB,EAAYjlC,IAEd2lC,QAASV,GACR,CAAC,QAAS,CAAC,OAAQ,CACpBK,MAAO,oBACP77B,OAAQ,QACP,QAASgvB,EAAO7e,WAGrB,SAASgsB,IACFlB,GAAaM,IAClB,IAAIxS,EAASiG,EAAOvG,UAAUM,OAC1BqT,EAAUpN,EAAOlD,SAASuQ,wBAAwBtT,EAAOrI,IAAKqI,EAAOpI,QACrE2b,EAAatN,EAAOlD,SAASuQ,wBAAwB,EAAG,GAAGE,MAC3DC,EAAaxN,EAAOlD,SAAS0Q,WAC7BtP,EAAO8B,EAAO7e,UAAUsX,wBAC5BwT,EAAY/sB,MAAMsE,IAAM4pB,EAAQK,MAAQvP,EAAK1a,IAAM,EAAI,KAEnD4pB,EAAQG,MAAQrP,EAAKhc,KAAOgc,EAAKtc,MAAQ,IAC3CqqB,EAAY/sB,MAAMgD,KAAO,GACzB+pB,EAAY/sB,MAAMmgB,MAAQ,SAE1B4M,EAAY/sB,MAAMmgB,MAAQ,GAC1B4M,EAAY/sB,MAAMgD,KAAOorB,EAAaE,EAAatP,EAAKhc,KAAO,MAGjE+pB,EAAY/sB,MAAM6C,QAAU,GAC5BkqB,EAAY3qB,WAAWpC,MAAM6C,QAAU,OACvCie,EAAOhH,GAAG,QAAS0U,GAGrB,SAASA,EAAgBnmC,GACnB0kC,IAAaA,EAAY/sB,MAAM6C,QAAU,QAC7Cie,EAAOtD,IAAI,QAASgR,GAGtB,SAASC,IACP7B,EAAiB,KACjB1gC,aAAa0gC,GACb,IAAIha,EAAQkO,EAAOvG,UAAUK,WACzB+G,EAAc/O,EAAMC,SAAS+O,EAAIpP,IAAKoP,EAAInP,SAE1CG,EAAMwB,WAAcuN,IACtBb,EAAOvG,UAAUwH,eAAeH,GAChCd,EAAOvG,UAAUmU,cAGnB1B,EAAO,OACPiB,IAkBFv9B,EAAMuc,YAAYtN,EAAI,eAAe,SAAUtX,GACxCykC,GACUhM,EAAOvB,UAAUlB,aACvBjF,UACR0H,GACHpwB,EAAMuc,YAAYtN,EAAI,cAAc,SAAUtX,GAC5C,IAAIsmC,EAAUtmC,EAAEsmC,QAEhB,GAAI/B,GAAkB+B,EAAQvlC,OAAS,EAKrC,OAJA8C,aAAa0gC,GACbA,EAAiB,KACjBF,GAAe,OACfM,EAAO,QAITF,EAAUhM,EAAOlB,cAAcC,gBAAiB,EAChD,IAAI+O,EAAI9N,EAAOlD,SAASiL,YAAYD,WAChCiG,EAAI/N,EAAOlD,SAASiL,YAAYD,WAChCnP,EAAIpxB,EAAEmoB,UACVmc,EAAQlT,EACR,IAAIqV,EAAWH,EAAQ,GACnB3iB,EAAI8iB,EAASjf,QACb0S,EAAIuM,EAAShf,QACbjjB,KAAK+iB,IAAIV,EAASlD,GAAKnf,KAAK+iB,IAAIT,EAASoT,GAAKqM,IAAGlC,GAAe,GACpExd,EAAS7mB,EAAEwnB,QAAU7D,EACrBmD,EAAS9mB,EAAEynB,QAAUyS,EACrB4K,EAAKC,EAAK,EACV,IAAI1L,EAAK,IAAI4F,EAAWj/B,EAAGy4B,GAG3B,GAFAc,EAAMF,EAAGG,sBAELpI,EAAIiT,EAAc,KAAyB,GAAlBiC,EAAQvlC,SAAgB6jC,EACnDC,IACA7kC,EAAEilB,iBACFjlB,EAAEslB,OAAS,EAjDf,WACEif,EAAiB,KACjB1gC,aAAa0gC,GACb9L,EAAOvG,UAAUwH,eAAeH,GAChC,IAAIhP,EAAQsa,GAAc,EAAIpM,EAAOvG,UAAUyJ,aAAapC,EAAIpP,KAAOsO,EAAOtM,QAAQsP,gBAAgBlC,GAElGhP,IAAUA,EAAMwB,UAClB0M,EAAOvG,UAAUwU,SAASnc,GAE1BkO,EAAOvG,UAAUmU,aAGnB1B,EAAO,OAsCLgC,OACK,CACL9B,EAAa,EACb,IAAIrS,EAASiG,EAAOvG,UAAUM,OAC1B4G,EAASX,EAAOvG,UAAUnG,UAAYyG,EAASiG,EAAOvG,UAAUkH,OAChEwN,EAAYnO,EAAOlD,SAAS+L,aAAauF,iBAAiBrU,GAAQ,GAClEsU,EAAYrO,EAAOlD,SAAS+L,aAAauF,iBAAiBzN,GAAQ,GAClEzC,EAAO8B,EAAOlD,SAAS4B,SAASjG,wBAChC6V,EAAYtO,EAAOlD,SAASiL,YAAYtS,OACxC8Y,EAAavO,EAAOlD,SAAS0Q,WAE7BgB,EAAmB,SAA0BtjB,EAAGuW,GAGlD,OAFAvW,GAAQ6iB,GAEG7iB,GADXuW,EAAIA,EAAIqM,EAAI,KACOrM,GAGrB,GAAIl6B,EAAEwnB,QAAUmP,EAAKhc,KAEnB,YADAgqB,EAAO,QAIT,IAAIuC,EAAQD,EAAiBjnC,EAAEwnB,QAAUmP,EAAKhc,KAAOisB,EAAUjsB,KAAOqsB,EAAYhnC,EAAEynB,QAAUkP,EAAK1a,IAAM2qB,EAAU3qB,IAAM8qB,GACrHI,EAAQF,EAAiBjnC,EAAEwnB,QAAUmP,EAAKhc,KAAOmsB,EAAUnsB,KAAOqsB,EAAYhnC,EAAEynB,QAAUkP,EAAK1a,IAAM6qB,EAAU7qB,IAAM8qB,GACrHG,EAAQ,KAAOC,EAAQ,MAAKxC,EAAOuC,EAAQC,EAAQ,SAAW,UACjDxC,EAAbwC,EAAQ,IAAY,SAAkBD,EAAQ,IAAY,SAAqB,SACnF3C,EAAiBvgC,WAAWoiC,EAAe,KAG7C/B,EAAcjT,IACbqH,GACHpwB,EAAMuc,YAAYtN,EAAI,YAAY,SAAUtX,GAC1CykC,EAAUhM,EAAOlB,cAAcC,gBAAiB,EAC5CgN,GAAgBhD,cAAcgD,GAEtB,QAARG,GACFA,EAAO,GACPC,EAAiB,GACRL,GACT9L,EAAOvG,UAAUwH,eAAeH,GAChCqL,EAAiB,EACjBgB,KACiB,UAARjB,GA8DXC,GAAkB,GAClBJ,EAAiB/C,aAAY,WACvBmD,KAAoB,IACtBpD,cAAcgD,GACdA,EAAiB,MAGfhgC,KAAK+iB,IAAIud,GAAM,MAAMA,EAAK,GAC1BtgC,KAAK+iB,IAAIwd,GAAM,MAAMA,EAAK,GAC1BH,EAAiB,KAAIE,GAAK,IAC1BF,EAAiB,KAAIG,GAAK,IAC9B,IAAIqC,EAAe3O,EAAOtM,QAAQkb,eAClC5O,EAAOlD,SAASgH,SAAS,GAAKuI,EAAI,GAAKC,GACnCqC,GAAgB3O,EAAOtM,QAAQkb,iBAAgBzC,EAAiB,KACnE,IA1EDuB,KAEAP,IAGF/hC,aAAa0gC,GACbA,EAAiB,OAChB9L,GACHpwB,EAAMuc,YAAYtN,EAAI,aAAa,SAAUtX,GACvCukC,IACF1gC,aAAa0gC,GACbA,EAAiB,MAGnB,IAAI+B,EAAUtmC,EAAEsmC,QAChB,KAAIA,EAAQvlC,OAAS,GAAa,QAAR4jC,GAA1B,CACA,IAAI8B,EAAWH,EAAQ,GACnBzgB,EAASgB,EAAS4f,EAASjf,QAC3B1B,EAASgB,EAAS2f,EAAShf,QAE/B,GAAY,QAARkd,EAAgB,CAClB,KAAI9e,EAASA,EAASC,EAASA,EAAS,GAAwB,OAAO9lB,EAAEilB,iBAA9B0f,EAAO,SAGpD9d,EAAS4f,EAASjf,QAClBV,EAAS2f,EAAShf,QAClBznB,EAAEwnB,QAAUif,EAASjf,QACrBxnB,EAAEynB,QAAUgf,EAAShf,QACrB,IAAI2J,EAAIpxB,EAAEmoB,UACN+T,EAAK9K,EAAIkT,EAGb,GAFAA,EAAQlT,EAEI,UAARuT,EAAkB,CACpB,IAAI9G,EAAa,IAAIoB,EAAWj/B,EAAGy4B,GACnCoF,EAAWvB,MAAQ,EACnBuB,EAAWhY,OAASA,EACpBgY,EAAW/X,OAASA,EAChB,GAAKthB,KAAK+iB,IAAI1B,GAAUrhB,KAAK+iB,IAAIzB,KAASD,EAAS,GACnD,GAAKrhB,KAAK+iB,IAAIzB,GAAUthB,KAAK+iB,IAAI1B,KAASC,EAAS,GAE7C,GAANoW,IACF4I,EAAKjf,EAASqW,EACd6I,EAAKjf,EAASoW,GAGhBzD,EAAOnC,MAAM,aAAcuH,GAEtBA,EAAWsB,qBACd2F,EAAKC,EAAK,OAEP,CACL,IACIxL,EADK,IAAI0F,EAAWj/B,EAAGy4B,GACde,sBACD,UAARmL,EAAkBlM,EAAOvG,UAAUmO,qBAAqB9G,GAAsB,UAARoL,GAAkBlM,EAAOvG,UAAUqI,mBAAmBhB,EAAIpP,IAAKoP,EAAInP,QAC7IqO,EAAOlD,SAASiF,qBAAqBjB,GACrCv5B,EAAEilB,qBAEHwT,OAqBPpkB,IAAI9H,OAAO,cAAe,CAAC,UAAW,UAAW,SAAU,gBAAgB,SAAUkH,EAASvV,EAASD,GACrG,aAEA,IAAI8wB,EAAMtb,EAAQ,SAElBvV,EAAQQ,IAAM,SAAUG,EAAKwU,GAC3B,IAAIi0B,EAAM,IAAIC,eACdD,EAAIjhC,KAAK,MAAOxH,GAAK,GAErByoC,EAAIE,mBAAqB,WACA,IAAnBF,EAAIv/B,YACNsL,EAASi0B,EAAIG,eAIjBH,EAAI7gC,KAAK,OAGXvI,EAAQwpC,WAAa,SAAUC,EAAMt0B,GACnC,IAAI5H,EAAOsjB,EAAIjX,kBACXrN,EAAIxF,SAASmG,cAAc,UAC/BX,EAAEm9B,IAAMD,EACRl8B,EAAKyL,YAAYzM,GAEjBA,EAAEo9B,OAASp9B,EAAE+8B,mBAAqB,SAAUM,EAAGC,IACzCA,GAAYt9B,EAAE1C,YAA8B,UAAhB0C,EAAE1C,YAA0C,YAAhB0C,EAAE1C,aAC5D0C,EAAIA,EAAEo9B,OAASp9B,EAAE+8B,mBAAqB,KACjCO,GAAS10B,OAKpBnV,EAAQ8pC,WAAa,SAAUnpC,GAC7B,IAAIsM,EAAIlG,SAASmG,cAAc,KAE/B,OADAD,EAAEE,KAAOxM,EACFsM,EAAEE,SAGbgJ,IAAI9H,OAAO,wBAAyB,CAAC,UAAW,UAAW,WAAW,SAAUkH,EAASvV,EAASD,GAChG,aAEA,IAAIgqC,EAAe,GAEfjjB,EAAkB,WACpBllB,KAAKq/B,oBAAqB,GAGxBla,EAAiB,WACnBnlB,KAAKsoB,kBAAmB,GAG1B6f,EAAa3R,MAAQ2R,EAAaC,eAAiB,SAAUjgC,EAAWjI,GACtEF,KAAKqoC,iBAAmBroC,KAAKqoC,eAAiB,IAC9CroC,KAAKsoC,mBAAqBtoC,KAAKsoC,iBAAmB,IAClD,IAAIC,EAAYvoC,KAAKqoC,eAAelgC,IAAc,GAC9CqgC,EAAiBxoC,KAAKsoC,iBAAiBngC,GAC3C,GAAKogC,EAAUtnC,QAAWunC,EAA1B,CACkB,UAAd/oC,EAAQS,IAAmBA,IAAGA,EAAI,IACjCA,EAAE2I,OAAM3I,EAAE2I,KAAOV,GACjBjI,EAAEglB,kBAAiBhlB,EAAEglB,gBAAkBA,GACvChlB,EAAEilB,iBAAgBjlB,EAAEilB,eAAiBA,GAC1CojB,EAAYA,EAAUnpC,QAEtB,IAAK,IAAIN,EAAI,EAAGA,EAAIypC,EAAUtnC,SAC5BsnC,EAAUzpC,GAAGoB,EAAGF,OACZE,EAAEm/B,oBAF8BvgC,KAKtC,OAAI0pC,IAAmBtoC,EAAEooB,iBAAyBkgB,EAAetoC,EAAGF,WAApE,IAGFmoC,EAAarS,QAAU,SAAU3tB,EAAWjI,GAC1C,IAAIqoC,GAAavoC,KAAKqoC,gBAAkB,IAAIlgC,GAC5C,GAAKogC,EAAL,CACAA,EAAYA,EAAUnpC,QAEtB,IAAK,IAAIN,EAAI,EAAGA,EAAIypC,EAAUtnC,OAAQnC,IACpCypC,EAAUzpC,GAAGoB,EAAGF,QAIpBmoC,EAAaM,KAAO,SAAUtgC,EAAWoL,GACvC,IAAIsb,EAAQ7uB,KAQZ,GANAA,KAAK2xB,GAAGxpB,GAAW,SAASugC,IAC1B7Z,EAAMwG,IAAIltB,EAAWugC,GAErBn1B,EAAS/R,MAAM,KAAMR,eAGlBuS,EACH,OAAO,IAAInC,SAAQ,SAAUjC,GAC3BoE,EAAWpE,MAKjBg5B,EAAavP,kBAAoB,SAAUzwB,EAAWoL,GACpD,IAAIo1B,EAAW3oC,KAAKsoC,iBAKpB,GAJKK,IAAUA,EAAW3oC,KAAKsoC,iBAAmB,CAChDM,WAAY,KAGVD,EAASxgC,GAAY,CACvB,IAAI0gC,EAAMF,EAASxgC,GACf2gC,EAAWH,EAASC,WAAWzgC,GAC9B2gC,IAAUH,EAASC,WAAWzgC,GAAa2gC,EAAW,IAC3DA,EAASznC,KAAKwnC,GACd,IAAI/pC,EAAIgqC,EAAS1iC,QAAQmN,IACf,GAANzU,GAASgqC,EAAS7vB,OAAOna,EAAG,GAGlC6pC,EAASxgC,GAAaoL,GAGxB40B,EAAaY,qBAAuB,SAAU5gC,EAAWoL,GACvD,IAAIo1B,EAAW3oC,KAAKsoC,iBACpB,GAAKK,EAAL,CACA,IAAIG,EAAWH,EAASC,WAAWzgC,GAEnC,GAAIwgC,EAASxgC,IAAcoL,EACrBu1B,GAAU9oC,KAAK44B,kBAAkBzwB,EAAW2gC,EAASt3B,YACpD,GAAIs3B,EAAU,CACnB,IAAIhqC,EAAIgqC,EAAS1iC,QAAQmN,IACf,GAANzU,GAASgqC,EAAS7vB,OAAOna,EAAG,MAIpCqpC,EAAaxW,GAAKwW,EAAa/kC,iBAAmB,SAAU+E,EAAWoL,EAAUy1B,GAC/EhpC,KAAKqoC,eAAiBroC,KAAKqoC,gBAAkB,GAC7C,IAAIE,EAAYvoC,KAAKqoC,eAAelgC,GAGpC,OAFKogC,IAAWA,EAAYvoC,KAAKqoC,eAAelgC,GAAa,KACzB,GAAhCogC,EAAUniC,QAAQmN,IAAiBg1B,EAAUS,EAAY,UAAY,QAAQz1B,GAC1EA,GAGT40B,EAAa9S,IAAM8S,EAAatjB,eAAiBsjB,EAAa3kC,oBAAsB,SAAU2E,EAAWoL,GACvGvT,KAAKqoC,eAAiBroC,KAAKqoC,gBAAkB,GAC7C,IAAIE,EAAYvoC,KAAKqoC,eAAelgC,GACpC,GAAKogC,EAAL,CACA,IAAIvvB,EAAQuvB,EAAUniC,QAAQmN,IACf,IAAXyF,GAAcuvB,EAAUtvB,OAAOD,EAAO,KAG5CmvB,EAAac,mBAAqB,SAAU9gC,GACrCA,IAAWnI,KAAKqoC,eAAiBroC,KAAKsoC,sBAAmBhhC,GAC1DtH,KAAKqoC,iBAAgBroC,KAAKqoC,eAAelgC,QAAab,GACtDtH,KAAKsoC,mBAAkBtoC,KAAKsoC,iBAAiBngC,QAAab,IAGhElJ,EAAQ+pC,aAAeA,KAEzB5zB,IAAI9H,OAAO,qBAAsB,CAAC,UAAW,UAAW,SAAU,cAAe,0BAA0B,SAAUkH,EAASvV,EAASD,GAGrI,IAAIse,EAAM9I,EAAQ,SAEdw0B,EAAex0B,EAAQ,mBAAmBw0B,aAE1Ce,EAAkB,CACpBC,WAAY,SAAoBC,GAC9B3qC,OAAO6S,KAAK83B,GAASt6B,SAAQ,SAAU1M,GACrCpC,KAAKqpC,UAAUjnC,EAAKgnC,EAAQhnC,MAC3BpC,OAELspC,WAAY,SAAoBC,GAC9B,IAAIl6B,EAAS,GAEb,GAAKk6B,EAKOpoC,MAAMkW,QAAQkyB,KACxBl6B,EAASk6B,EACTA,EAAc9qC,OAAO6S,KAAKjC,QAPV,CAChB,IAAIrQ,EAAUgB,KAAKwpC,SACnBD,EAAc9qC,OAAO6S,KAAKtS,GAAS0L,QAAO,SAAUtI,GAClD,OAAQpD,EAAQoD,GAAKqnC,UAUzB,OAHAF,EAAYz6B,SAAQ,SAAU1M,GAC5BiN,EAAOjN,GAAOpC,KAAK0pC,UAAUtnC,KAC5BpC,MACIqP,GAETg6B,UAAW,SAAmB59B,EAAMnC,GAClC,GAAItJ,KAAK,IAAMyL,KAAUnC,EAAzB,CACA,IAAIqgC,EAAM3pC,KAAKwpC,SAAS/9B,GAExB,IAAKk+B,EACH,OAAOC,EAAK,sBAAwBn+B,EAAO,KAG7C,GAAIk+B,EAAIE,UAAW,OAAO7pC,KAAK2pC,EAAIE,YAAc7pC,KAAK2pC,EAAIE,WAAWR,UAAU59B,EAAMnC,GAChFqgC,EAAIG,aAAY9pC,KAAK,IAAMyL,GAAQnC,GACpCqgC,GAAOA,EAAII,KAAKJ,EAAII,IAAIjiC,KAAK9H,KAAMsJ,KAEzCogC,UAAW,SAAmBj+B,GAC5B,IAAIk+B,EAAM3pC,KAAKwpC,SAAS/9B,GAExB,OAAKk+B,EAIDA,EAAIE,UAAkB7pC,KAAK2pC,EAAIE,YAAc7pC,KAAK2pC,EAAIE,WAAWH,UAAUj+B,GACxEk+B,GAAOA,EAAI/qC,IAAM+qC,EAAI/qC,IAAIkJ,KAAK9H,MAAQA,KAAK,IAAMyL,GAJ/Cm+B,EAAK,sBAAwBn+B,EAAO,OAQjD,SAASm+B,EAAKthC,GACU,oBAAX5H,SAA0BA,QAAQkpC,MAAMlpC,QAAQkpC,KAAKpoC,MAAMd,QAASM,WAGjF,SAASgpC,EAAYC,EAAKrjC,GACxB,IAAI1G,EAAI,IAAIE,MAAM6pC,GAClB/pC,EAAE0G,KAAOA,EACgE,WAAjD,qBAAZlG,QAA0B,YAAcjB,EAAQiB,WAAyBA,QAAQ8G,OAAO9G,QAAQ8G,MAAMtH,GAClHgE,YAAW,WACT,MAAMhE,KAIV,IAAIgqC,EAAY,WACdlqC,KAAKmqC,gBAAkB,KAGzB,WACE1tB,EAAIF,UAAUvc,KAAMmoC,GAEpBnoC,KAAKoqC,cAAgB,SAAU1qC,EAAKmoC,EAAM7oC,GAYxC,OAXKU,EAAI8pC,WAAUxpC,KAAKmqC,gBAAgBtC,GAAQnoC,EAAI8pC,SAAW,IAC/D/qC,OAAO6S,KAAKtS,GAAS8P,SAAQ,SAAU1M,GACrC,IAAIunC,EAAM3qC,EAAQoD,GACA,iBAAPunC,IAAiBA,EAAM,CAChCE,UAAWF,IAEbA,EAAIl+B,OAASk+B,EAAIl+B,KAAOrJ,GACxB1C,EAAI8pC,SAASG,EAAIl+B,MAAQk+B,EACrB,iBAAkBA,IAAKjqC,EAAI,IAAMiqC,EAAIl+B,MAAQk+B,EAAIU,iBAEvD5tB,EAAIF,UAAU7c,EAAKwpC,GACZlpC,MAGTA,KAAKsqC,aAAe,SAAU5qC,GAC5BjB,OAAO6S,KAAK5R,EAAI8pC,UAAU16B,SAAQ,SAAU1M,GAC1C,IAAIunC,EAAMjqC,EAAI8pC,SAASpnC,GACnB,UAAWunC,GAAKjqC,EAAI2pC,UAAUjnC,EAAKunC,EAAIrgC,WAI/CtJ,KAAKuqC,gBAAkB,SAAU1C,EAAMp8B,EAAMnC,GAC3C,IAAKu+B,EAAM,CACT,IAAKA,KAAQ7nC,KAAKmqC,gBAChB,GAAInqC,KAAKmqC,gBAAgBtC,GAAMp8B,GAAO,MAGxC,IAAKzL,KAAKmqC,gBAAgBtC,GAAMp8B,GAAO,OAAO,EAGhD,IAAI++B,EAAOxqC,KAAKmqC,gBAAgBtC,KAAU7nC,KAAKmqC,gBAAgBtC,GAAQ,IAEnE2C,EAAK/+B,KACH++B,EAAKX,UAAW7pC,KAAKuqC,gBAAgBC,EAAKX,UAAWp+B,EAAMnC,GAAYkhC,EAAK/+B,GAAMnC,MAAQA,IAIlGtJ,KAAKyqC,iBAAmB,SAAU5C,EAAM6C,GACtCjsC,OAAO6S,KAAKo5B,GAAY57B,SAAQ,SAAU1M,GACxCpC,KAAKuqC,gBAAgB1C,EAAMzlC,EAAKsoC,EAAWtoC,MAC1CpC,OAGLA,KAAK4pC,KAAOA,EACZ5pC,KAAKgqC,YAAcA,IAClBliC,KAAKoiC,EAAUpqC,WAClB1B,EAAQ8rC,UAAYA,KAEtB31B,IAAI9H,OAAO,aAAc,CAAC,UAAW,UAAW,SAAU,eAAgB,cAAe,cAAe,cAAe,uBAAuB,SAAUkH,EAASvV,EAASD,GAGxK,IAAI+wB,EAAOvb,EAAQ,cAIfg3B,GAFMh3B,EAAQ,aAERA,EAAQ,cAEdsb,EAAMtb,EAAQ,aAEdu2B,EAAYv2B,EAAQ,oBAAoBu2B,UAE5C/rC,EAAOC,QAAUA,EAAU,IAAI8rC,EAE/B,IAAIt3B,EAAS,WACX,OAAO5S,MAAyB,oBAAVG,QAAyBA,OADpC,GAITnB,EAAU,CACZsV,UAAU,EACVs2B,WAAY,KACZC,SAAU,KACVC,UAAW,KACXC,SAAU,GACVC,OAAQ,MACRC,YAAa,GACbC,oBAAoB,EACpBC,cAAc,EACdjxB,aAAc,MAGhB9b,EAAQQ,IAAM,SAAUwD,GACtB,IAAKpD,EAAQkN,eAAe9J,GAAM,MAAM,IAAIhC,MAAM,uBAAyBgC,GAC3E,OAAOpD,EAAQoD,IAGjBhE,EAAQ2rC,IAAM,SAAU3nC,EAAKkH,GAC3B,GAAItK,EAAQkN,eAAe9J,GAAMpD,EAAQoD,GAAOkH,OAAW,GAA4C,GAAxCtJ,KAAKuqC,gBAAgB,GAAInoC,EAAKkH,GAAiB,MAAM,IAAIlJ,MAAM,uBAAyBgC,GAC5I,gBAAPA,GAAuB6sB,EAAI/U,aAAa5Q,IAG9ClL,EAAQgtC,IAAM,WACZ,OAAOlc,EAAK5B,WAAWtuB,IAGzBZ,EAAQitC,OAAS,GAEjBjtC,EAAQktC,UAAY,SAAU7/B,EAAM8/B,GAClC,GAAIvsC,EAAQisC,YAAYx/B,GAAO,OAAOzM,EAAQisC,YAAYx/B,GAC1D,IAAI+/B,EAAQ//B,EAAKuI,MAAM,KAEnBy3B,EAAmB,aADvBF,EAAYA,GAAaC,EAAMA,EAAMvqC,OAAS,IAAM,IAChB,IAAM,IACtCyqC,EAAOF,EAAMA,EAAMvqC,OAAS,GAEhC,GAAiB,UAAbsqC,GAAgC,KAAPE,EAAY,CACvC,IAAIE,EAAK,IAAIC,OAAO,IAAML,EAAY,gBAAkBA,EAAY,IAAK,KACzEG,EAAOA,EAAKlsC,QAAQmsC,EAAI,MAGpBD,GAAQA,GAAQH,IAAcC,EAAMvqC,OAAS,IAAGyqC,EAAOF,EAAMA,EAAMvqC,OAAS,IAClF,IAAI4mC,EAAO7oC,EAAQusC,EAAY,QAS/B,OAPY,MAAR1D,EACFA,EAAO7oC,EAAQ+rC,SACC,KAAPU,IACTF,EAAYE,EAAM,IAGhB5D,GAA0B,KAAlBA,EAAKzoC,OAAO,KAAWyoC,GAAQ,KACpCA,EAAO0D,EAAYE,EAAMC,EAAO1rC,KAAKpB,IAAI,WAGlDR,EAAQytC,aAAe,SAAUpgC,EAAMqgC,GACrC,OAAO9sC,EAAQisC,YAAYx/B,GAAQqgC,GAGrC1tC,EAAQ2tC,SAAW,GAEnB3tC,EAAQ4tC,WAAa,SAAUn4B,EAAYo4B,GACzC,IAAI9tC,EAAQ+tC,EAER/qC,MAAMkW,QAAQxD,KAChBq4B,EAAar4B,EAAW,GACxBA,EAAaA,EAAW,IAG1B,IACE1V,EAASwV,EAAQE,GACjB,MAAO3T,IAET,GAAI/B,IAAWC,EAAQ2tC,SAASl4B,GAAa,OAAOo4B,GAAUA,EAAO9tC,GAGrE,GAFKC,EAAQ2tC,SAASl4B,KAAazV,EAAQ2tC,SAASl4B,GAAc,IAClEzV,EAAQ2tC,SAASl4B,GAAYxS,KAAK4qC,KAC9B7tC,EAAQ2tC,SAASl4B,GAAY5S,OAAS,GAA1C,CAEA,IAAIkrC,EAAY,WACdx4B,EAAQ,CAACE,IAAa,SAAU1V,GAC9BC,EAAQo4B,MAAM,cAAe,CAC3B/qB,KAAMoI,EACN1V,OAAQA,IAGV,IAAIoqC,EAAYnqC,EAAQ2tC,SAASl4B,GACjCzV,EAAQ2tC,SAASl4B,GAAc,KAC/B00B,EAAUz5B,SAAQ,SAAUm9B,GAC1BA,GAAUA,EAAO9tC,UAKvB,IAAKC,EAAQQ,IAAI,YAAa,OAAOutC,IACrCxB,EAAI/C,WAAWxpC,EAAQktC,UAAUz3B,EAAYq4B,GAAaC,GAE1DC,MAGF,IAAIA,EAAoC,WACjCptC,EAAQ+rC,UAAa/rC,EAAQ4rC,YAAe5rC,EAAQ6rC,UAAa7rC,EAAQ8rC,WAAcrsC,OAAO6S,KAAKtS,EAAQisC,aAAahqC,SAC3HP,QAAQ8G,MAAM,+CAAgD,uFAAwF,4CAEtJ4kC,EAAoC,eAMxC,SAASC,EAAK/3B,GACZ,GAAK1B,GAAWA,EAAOzN,SAAvB,CACAnG,EAAQsV,SAAWA,GAAYX,EAAQW,UAAYnW,EAAOmW,UAAY1B,EAAOnG,QAAU,OAAO6H,SAQ9F,IAPA,IA2CmByZ,EA3Cfue,EAAgB,GAChBC,EAAY,GACZC,EAAgBrnC,SAASqnC,eAAiBrnC,SAASsnC,eAGnDC,GADkBF,GAAiBA,EAAc/zB,eAAiBtT,UACxC+S,qBAAqB,UAE1CpZ,EAAI,EAAGA,EAAI4tC,EAAQzrC,OAAQnC,IAAK,CACvC,IAAI6tC,EAASD,EAAQ5tC,GACjBgpC,EAAM6E,EAAO7E,KAAO6E,EAAO9gC,aAAa,OAC5C,GAAKi8B,EAAL,CAGA,IAFA,IAAI8E,EAAaD,EAAOC,WAEfC,EAAI,EAAGhuC,EAAI+tC,EAAW3rC,OAAQ4rC,EAAIhuC,EAAGguC,IAAK,CACjD,IAAIC,EAAOF,EAAWC,GAEiB,IAAnCC,EAAKrhC,KAAKrF,QAAQ,eACpBkmC,GA0Bave,EA1Ba+e,EAAKrhC,KAAKjM,QAAQ,aAAc,IA2BzDuuB,EAAIvuB,QAAQ,SAAS,SAAUutC,EAAGC,GACvC,OAAOA,EAAGC,mBA5B4DH,EAAKxjC,OAI3E,IAAIyjC,EAAIjF,EAAIjyB,MAAM,gCACdk3B,IAAGR,EAAYQ,EAAE,KAcvB,IAAK,IAAI3qC,KAXLmqC,IACFD,EAAcZ,KAAOY,EAAcZ,MAAQa,EAC3CD,EAAch4B,UAAW,GAG3Bg4B,EAAcvB,SAAWuB,EAAcZ,KACvCY,EAAc1B,WAAa0B,EAAc1B,YAAc0B,EAAcZ,KACrEY,EAAczB,SAAWyB,EAAczB,UAAYyB,EAAcZ,KACjEY,EAAcxB,UAAYwB,EAAcxB,WAAawB,EAAcZ,YAC5DY,EAAcZ,KAELY,EACoB,qBAAvBA,EAAclqC,IAAsBhE,EAAQ2rC,IAAI3nC,EAAKkqC,EAAclqC,KA1ClFiqC,GAAK,GA8CLjuC,EAAQiuC,KAAOA,EAQfjuC,EAAQ8uC,QAAU,YAEpB34B,IAAI9H,OAAO,0BAA2B,CAAC,UAAW,UAAW,SAAU,gBAAiB,oBAAqB,6BAA8B,mCAAoC,wBAAyB,6BAA8B,0BAA2B,eAAe,SAAUkH,EAASvV,EAASD,GAC1S,aAEA,IAAIoK,EAAQoL,EAAQ,gBAEhBkD,EAAYlD,EAAQ,oBAEpB6kB,EAAkB7kB,EAAQ,sBAAsB6kB,gBAEhD2U,EAAuBx5B,EAAQ,4BAA4BkqB,cAE3DsB,EAAaxrB,EAAQ,iBAAiBwrB,WAEtCI,EAAkB5rB,EAAQ,sBAAsB4rB,gBAEhD+E,EAAoB3wB,EAAQ,mBAAmB2wB,kBAE/C8I,EAASz5B,EAAQ,aAEjB05B,EAAe,SAAsB1U,GACvC,IAAI9J,EAAQ7uB,KAEZA,KAAK24B,OAASA,EACd,IAAIH,EAAgBx4B,MACpB,IAAImtC,EAAqBntC,MACzB,IAAIu/B,EAAgBv/B,MAEpB,IAAIstC,EAAc,SAAqBptC,KAChBiF,SAAS0rB,WAAa1rB,SAAS0rB,aAAe8H,EAAOjI,aAAevrB,SAASwrB,gBAAkBgI,EAAOvB,WAAauB,EAAOvB,UAAUlB,gBACtI/1B,OAAO8wB,QAC1B0H,EAAO1H,SAGLgP,EAActH,EAAOlD,SAAS8X,sBAClChlC,EAAMuc,YAAYmb,EAAa,QAASjgC,KAAKwtC,aAAa3qC,KAAK7C,KAAM,SAAU24B,GAC/EpwB,EAAMuc,YAAYmb,EAAa,YAAajgC,KAAK4hC,YAAY/+B,KAAK7C,KAAM,aAAc24B,GACtFpwB,EAAMqe,0BAA0B,CAACqZ,EAAatH,EAAOlD,SAASgY,YAAc9U,EAAOlD,SAASgY,WAAWnzB,MAAOqe,EAAOlD,SAASiY,YAAc/U,EAAOlD,SAASiY,WAAWpzB,MAAOqe,EAAOvB,WAAauB,EAAOvB,UAAUlB,cAAcxrB,OAAOijC,SAAU,CAAC,IAAK,IAAK,KAAM3tC,KAAM,eAAgB24B,GACzRpwB,EAAMsd,sBAAsB8S,EAAO7e,UAAW9Z,KAAKi5B,aAAap2B,KAAK7C,KAAM,cAAe24B,GAC1F2L,EAAkB3L,EAAO7e,UAAW6e,GACpC,IAAIiV,EAAWjV,EAAOlD,SAASyJ,QAC/B32B,EAAMuc,YAAY8oB,EAAU,YAAa5tC,KAAKwtC,aAAa3qC,KAAK7C,KAAM,mBAAoB24B,GAC1FpwB,EAAMuc,YAAY8oB,EAAU,QAAS5tC,KAAKwtC,aAAa3qC,KAAK7C,KAAM,eAAgB24B,GAClFpwB,EAAMuc,YAAY8oB,EAAU,WAAY5tC,KAAKwtC,aAAa3qC,KAAK7C,KAAM,kBAAmB24B,GACxFpwB,EAAMuc,YAAY8oB,EAAU,YAAa5tC,KAAKwtC,aAAa3qC,KAAK7C,KAAM,mBAAoB24B,GAC1FpwB,EAAMuc,YAAYmb,EAAa,YAAaqN,EAAa3U,GACzDpwB,EAAMuc,YAAY8oB,EAAU,YAAaN,EAAa3U,GAElD9hB,EAAUlB,MAAQgjB,EAAOlD,SAASgY,aACpCllC,EAAMuc,YAAY6T,EAAOlD,SAASgY,WAAW/hC,QAAS,YAAa4hC,EAAa3U,GAChFpwB,EAAMuc,YAAY6T,EAAOlD,SAASiY,WAAWhiC,QAAS,YAAa4hC,EAAa3U,IAGlFA,EAAOhH,GAAG,aAAa,SAAUzxB,GAC/B,IAAI2uB,EAAM7mB,QAAS6mB,EAAMgf,YAAehf,EAAMsV,aAA9C,CACA,IAAI2J,EAAYnV,EAAOlD,SAAS0E,wBAAwBj6B,EAAE2jB,EAAG3jB,EAAEk6B,GAC3D3P,EAAQkO,EAAOtM,QAAQ+F,UAAUK,WACjCgD,EAAWkD,EAAOlD,UAEjBhL,EAAMwB,WAAaxB,EAAMc,YAAYuiB,EAAUzjB,IAAKyjB,EAAUxjB,QACjEmL,EAASmN,eAAe,WAExBnN,EAASmN,eAAe,OAEzBjK,KAGL,WACE34B,KAAKwtC,aAAe,SAAU/hC,EAAMvL,GAC7BF,KAAK24B,OAAOtM,SAEjBrsB,KAAK24B,OAAOnC,MAAM/qB,EAAM,IAAI0zB,EAAWj/B,EAAGF,KAAK24B,UAGjD34B,KAAK4hC,YAAc,SAAUn2B,EAAMvL,GACjC,IAAIqoC,EAAYvoC,KAAK24B,OAAO0P,gBAAkBroC,KAAK24B,OAAO0P,eAAe0F,UACpExF,GAAcA,EAAUtnC,QAE7BjB,KAAK24B,OAAOnC,MAAM/qB,EAAM,IAAI0zB,EAAWj/B,EAAGF,KAAK24B,UAGjD34B,KAAKi5B,aAAe,SAAUxtB,EAAMvL,GAClC,IAAI69B,EAAa,IAAIoB,EAAWj/B,EAAGF,KAAK24B,QACxCoF,EAAWvB,MAA4B,EAApBx8B,KAAKguC,aACxBjQ,EAAWhY,OAAS7lB,EAAE6lB,OACtBgY,EAAW/X,OAAS9lB,EAAE8lB,OAEtBhmB,KAAK24B,OAAOnC,MAAM/qB,EAAMsyB,IAG1B/9B,KAAKi6B,SAAW,SAAUjyB,GACxBhI,KAAKgI,MAAQA,GAGfhI,KAAK+5B,aAAe,SAAUR,EAAI0U,GAChCjuC,KAAK6jB,EAAI0V,EAAG1V,EACZ7jB,KAAKo6B,EAAIb,EAAGa,EACZp6B,KAAK03B,gBAAiB,EACtB,IAAIiB,EAAS34B,KAAK24B,OACdlD,EAAWz1B,KAAK24B,OAAOlD,SAC3BA,EAASC,iBAAkB,EAC3B,IAAIj1B,EAAOT,KAEP4hC,EAAc,SAAqB1hC,GACrC,GAAKA,EAAL,CACA,GAAI2W,EAAUV,WAAajW,EAAEguC,OAASztC,EAAK0tC,aAAc,OAAO1tC,EAAK0tC,eACrE1tC,EAAKojB,EAAI3jB,EAAEwnB,QACXjnB,EAAK25B,EAAIl6B,EAAEynB,QACXsmB,GAAoBA,EAAiB/tC,GACrCO,EAAKs9B,WAAa,IAAIoB,EAAWj/B,EAAGO,EAAKk4B,QACzCl4B,EAAK2tC,aAAc,IAGjBC,EAAe,SAAsBnuC,GACvCy4B,EAAOtD,IAAI,qBAAsBiZ,GACjC5M,cAAchC,GACV/G,EAAOtM,SAASkiB,IACpB9tC,EAAKA,EAAKuH,MAAQ,QAAUvH,EAAKA,EAAKuH,MAAQ,OAAO9H,GACrDO,EAAKuH,MAAQ,GACbvH,EAAKi3B,eAAiBjC,EAASC,iBAAkB,EAC7CD,EAASE,uBAAuBF,EAASG,wBAC7Cn1B,EAAK+tC,oBAAsB/tC,EAAK0tC,aAAe,KAC/CjuC,GAAKO,EAAK+sC,aAAa,UAAWttC,GAClCy4B,EAAO8V,gBAGLF,EAAoB,WACtB9tC,EAAKA,EAAKuH,QAAUvH,EAAKA,EAAKuH,SAC9BvH,EAAK2tC,aAAc,GAGrB,GAAIv3B,EAAUf,SAA+B,YAApByjB,EAAG9C,SAAS5tB,KACnC,OAAO3E,YAAW,WAChBmqC,EAAa9U,MAIjB,IAAI+U,EAAiB,SAAwBpuC,GACtCO,EAAK0tC,cAENxV,EAAO/G,MAAMhoB,QAAQ6B,MAAQktB,EAAO/G,MAAMI,mBAC5CvxB,EAAKA,EAAKuH,MAAQ,QAAUvH,EAAKA,EAAKuH,MAAQ,SAC9CvH,EAAKuH,MAAQ,GACbvH,EAAK0tC,iBAITxV,EAAOhH,GAAG,qBAAsB2c,GAChC3V,EAAO+V,eAAe,CACpB9kC,QAAS,CACP6B,KAAM,WAGVhL,EAAK+tC,oBAAsB5M,EAC3BnhC,EAAK0tC,aAAe5lC,EAAMkd,QAAQzlB,KAAK24B,OAAO7e,UAAW8nB,EAAayM,GACtE,IAAI3O,EAAUiC,YAAY4M,EAAmB,KAG/CvuC,KAAKmuC,aAAe,KAEpBnuC,KAAK2uC,kBAAoB,WACvB,IAAIrrC,EAAO,SAAUpD,GACfA,GAAKA,EAAEu2B,UAA+B,eAAnBv2B,EAAEu2B,SAAS5tB,OAClC7I,KAAK24B,OAAOtD,IAAI,oBAAqB/xB,GACjCpD,GAAKA,EAAEu2B,UAAUluB,EAAM0c,UAAU/kB,EAAEu2B,YACvC5zB,KAAK7C,MAEPkE,WAAWZ,EAAM,IACjBtD,KAAK24B,OAAOhH,GAAG,oBAAqBruB,IAGtCtD,KAAK4kB,QAAU,WACT5kB,KAAKmuC,cAAcnuC,KAAKmuC,kBAE7BrmC,KAAKulC,EAAavtC,WACrBstC,EAAOhD,cAAciD,EAAavtC,UAAW,eAAgB,CAC3D8uC,YAAa,CACXvE,aAAc,GAEhBwE,UAAW,CACTxE,aAAcxzB,EAAU7B,MAAQ,IAAM,GAExC85B,YAAa,CACXzE,cAAc,GAEhB0E,aAAc,CACZ1E,aAAc,GAEhB2E,oBAAqB,CACnB3E,cAAc,KAGlBjsC,EAAQivC,aAAeA,KAEzB94B,IAAI9H,OAAO,yBAA0B,CAAC,UAAW,UAAW,SAAU,gBAAgB,SAAUkH,EAASvV,EAASD,GAChH,aAEA,IAAI8wB,EAAMtb,EAAQ,cA8DlBvV,EAAQ6wC,YA5DR,SAAqBtW,GACnBA,EAAOhH,GAAG,SAAS,SAAUzxB,GAC3B,IAAI0a,EAAW1a,EAAEw5B,sBACbrN,EAAUsM,EAAOtM,QACjB6iB,EAAO7iB,EAAQ8iB,UAAUv0B,EAASyP,IAAKzP,EAAS0P,OAAQ,GAExD4kB,IACEhvC,EAAE47B,cAAezP,EAAQ+iB,WAAWF,GAAW7iB,EAAQgjB,WAAWH,GACtEhvC,EAAEoD,QAGJ,IAAIvB,EAAS7B,EAAEu2B,UAAYv2B,EAAEu2B,SAAS10B,OAElCA,GAAUktB,EAAIrW,YAAY7W,EAAQ,sBAChCktB,EAAIrW,YAAY7W,EAAQ,qBAC1BsqB,EAAQgd,UAAU,QAAShd,EAAQijB,kBACnC3W,EAAOlD,SAASiF,2BAItB/B,EAAOhH,GAAG,eAAe,SAAUzxB,GAGjC,GAAoB,eAFDy4B,EAAOlD,SAASyI,aAAaI,UAAUp+B,GAEvB,CACjC,IAAImqB,EAAMnqB,EAAEw5B,sBAAsBrP,IAC9BgC,EAAUsM,EAAOtM,QACjBA,EAAQkjB,aAAeljB,EAAQkjB,YAAYllB,IAAMsO,EAAOtM,QAAQmjB,kBAAkBnlB,EAAKnqB,GACtFy4B,EAAOjI,aAAaiI,EAAO1H,QAChC/wB,EAAEoD,WAGNq1B,EAAOhH,GAAG,kBAAkB,SAAUzxB,GAGpC,GAAoB,eAFDy4B,EAAOlD,SAASyI,aAAaI,UAAUp+B,GAEvB,CACjC,IAAImqB,EAAMnqB,EAAEw5B,sBAAsBrP,IAC9BgC,EAAUsM,EAAOtM,QACjBzlB,EAAOylB,EAAQojB,uBAAuBplB,GAAK,GAC3CI,EAAQ7jB,EAAK6jB,OAAS7jB,EAAK8oC,WAE/B,GAAIjlB,EAAO,CACTJ,EAAMI,EAAM1nB,MAAMsnB,IAClB,IAAI6kB,EAAO7iB,EAAQ8iB,UAAU9kB,EAAKgC,EAAQsG,QAAQtI,GAAKppB,OAAQ,GAE3DiuC,EACF7iB,EAAQ+iB,WAAWF,IAEnB7iB,EAAQsjB,QAAQ,MAAOllB,GACvBkO,EAAOlD,SAASiF,qBAAqB,CACnCrQ,IAAKI,EAAM1nB,MAAMsnB,IACjBC,OAAQ,KAKdpqB,EAAEoD,eAOViR,IAAI9H,OAAO,0BAA2B,CAAC,UAAW,UAAW,SAAU,eAAgB,kBAAkB,SAAUkH,EAASvV,EAASD,GACnI,aAEA,IAAIyxC,EAAUj8B,EAAQ,eAElBpL,EAAQoL,EAAQ,gBAEhBk8B,EAAa,SAAoBlX,GACnC34B,KAAK8vC,QAAUnX,EACf34B,KAAK+vC,MAAQ,CACXpX,OAAQA,GAEV34B,KAAKgwC,UAAY,GACjBhwC,KAAK44B,kBAAkBD,EAAOT,YAGhC,WACEl4B,KAAK44B,kBAAoB,SAAUqX,GACjCjwC,KAAKkwC,sBAAsBlwC,KAAKmwC,iBAChCnwC,KAAKmwC,gBAAkBF,EACvBjwC,KAAKowC,mBAAmBH,EAAI,IAG9BjwC,KAAKqwC,mBAAqB,SAAUJ,GAClC,IAAIxJ,EAAIzmC,KAAKgwC,UACb,GAAIvJ,EAAEA,EAAExlC,OAAS,IAAMgvC,EAAvB,CAEA,KAAOxJ,EAAEA,EAAExlC,OAAS,IAAMwlC,EAAEA,EAAExlC,OAAS,IAAMjB,KAAKmwC,iBAChDnwC,KAAKkwC,sBAAsBzJ,EAAEA,EAAExlC,OAAS,IAG1CjB,KAAKowC,mBAAmBH,EAAI,KAG9BjwC,KAAKowC,mBAAqB,SAAUH,EAAIxW,GACtC,GAAKwW,EAAL,CACiB,mBAANA,GAAqBA,EAAGK,iBAAgBL,EAAGK,eAAiBL,GACvE,IAAInxC,EAAIkB,KAAKgwC,UAAU5pC,QAAQ6pC,IACrB,GAANnxC,GAASkB,KAAKgwC,UAAU/2B,OAAOna,EAAG,QAC3BwI,GAAPmyB,EAAkBz5B,KAAKgwC,UAAU3uC,KAAK4uC,GAASjwC,KAAKgwC,UAAU/2B,OAAOwgB,EAAK,EAAGwW,IACvE,GAANnxC,GAAWmxC,EAAGM,QAAQN,EAAGM,OAAOvwC,KAAK8vC,WAG3C9vC,KAAKkwC,sBAAwB,SAAUD,GACrC,IAAInxC,EAAIkB,KAAKgwC,UAAU5pC,QAAQ6pC,GAC/B,OAAU,GAANnxC,IACJkB,KAAKgwC,UAAU/2B,OAAOna,EAAG,GACzBmxC,EAAGO,QAAUP,EAAGO,OAAOxwC,KAAK8vC,UACrB,IAGT9vC,KAAKywC,mBAAqB,WACxB,OAAOzwC,KAAKgwC,UAAUhwC,KAAKgwC,UAAU/uC,OAAS,IAGhDjB,KAAK0wC,cAAgB,WACnB,IAAI9pC,EAAO5G,KAAK+vC,MACZpX,EAAS/xB,EAAK+xB,OAClB,OAAO34B,KAAKgwC,UAAUvlC,KAAI,SAAUg8B,GAClC,OAAOA,EAAEiK,eAAiBjK,EAAEiK,cAAc/X,EAAQ/xB,IAAS,MAC1D8D,OAAOijC,SAAS15B,KAAK,MAG1BjU,KAAK2wC,sBAAwB,SAAU3oB,EAAQhE,EAAWD,EAAS7jB,GAKjE,IAJA,IAAI0wC,EACAC,GAAU,EACV3Y,EAAWl4B,KAAK8vC,QAAQ5X,SAEnBp5B,EAAIkB,KAAKgwC,UAAU/uC,OAAQnC,QAClC8xC,EAAY5wC,KAAKgwC,UAAUlxC,GAAGwxC,eAAetwC,KAAK+vC,MAAO/nB,EAAQhE,EAAWD,EAAS7jB,KAClE0wC,EAAUhnC,WAG3BinC,EADuB,QAArBD,EAAUhnC,SAGFsuB,EAAS7iB,KAAKu7B,EAAUhnC,QAAS5J,KAAK8vC,QAASc,EAAU9lC,KAAM5K,KAG5DA,IAAgB,GAAX8nB,GAAuC,GAAvB4oB,EAAUE,WAAoD,GAA/BF,EAAUhnC,QAAQknC,WACnFvoC,EAAM0c,UAAU/kB,GAGd2wC,MAWN,OARKA,IAAsB,GAAX7oB,IACd4oB,EAAY,CACVhnC,QAAS,gBAEXinC,EAAU3Y,EAAS7iB,KAAK,eAAgBrV,KAAK8vC,QAAS9rB,IAGpD6sB,GAAW7wC,KAAK8vC,QAAQha,SAAS91B,KAAK8vC,QAAQha,QAAQ,mBAAoB8a,GACvEC,GAGT7wC,KAAK60B,aAAe,SAAU30B,EAAG8nB,EAAQjE,GACvC,IAAIC,EAAY4rB,EAAQ9rB,gBAAgBC,GACxC,OAAO/jB,KAAK2wC,sBAAsB3oB,EAAQhE,EAAWD,EAAS7jB,IAGhEF,KAAK2zB,YAAc,SAAU/D,GAC3B,OAAO5vB,KAAK2wC,uBAAuB,EAAG/gB,MAEvC9nB,KAAK+nC,EAAW/vC,WACnB1B,EAAQyxC,WAAaA,KAEvBt7B,IAAI9H,OAAO,mBAAoB,CAAC,UAAW,UAAW,WAAW,SAAUkH,EAASvV,EAASD,GAC3F,aAEA,IAEI4yC,EAAM,EACNC,EAAU,EACVC,GAAa,EAEbC,GAAY,EACZC,GAAY,EAGZC,EAAa,CAAC,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,CAAC,EAAG,EAAG,EAAG,GAAM,EAAG,EAAG,GAAI,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,CAAC,EAAG,EAAG,GAAM,GAAM,EAAG,EAAG,GAAI,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,IAC7JC,EAAa,CAAC,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,CAAC,EAAG,EAAG,EAAG,GAAM,EAAG,EAAG,IAsBzGC,EAAe,CADV,2BAZD,EADA,EACA,EAEC,EAHD,EAaC,0CAbD,MACA,EAEC,EAJA,IAOA,SAPA,UAMA,GADA,EACA,GADA,IAPA,oBAOA,EALA,YAJD,oDAIC,YAJD,oDAIC,QAcA,kBAbD,EAaC,8EATA,EALA,EAOA,YAPA,QAJD,EAIC,IAcA,GAdA,IAOA,MATA,IAEA,EAJD,EAIC,MAFA,EAFD,EAIC,WAgBLC,EAAe,CAZV,sBAUA,SAlBD,EACA,EAGC,gDAIA,EAHD,EAQE,GACA,GACA,GACA,GACA,GARD,EAEA,eAPA,8BAKA,EALA,oDAIA,GAmGT,SAASC,EAAaC,EAAKC,EAAQC,GACjC,KAAIX,EAAUS,GAId,GAAW,GAAPA,GAjHI,GAiHQV,GAAeG,EAa/B,IAPA,IAEI3mB,EACAqnB,EACAC,EACAC,EALAC,EAAMJ,EAAO1wC,OACb8B,EAAQ,EAMLA,EAAQgvC,GAAK,CAClB,GAAIL,EAAO3uC,IAAU0uC,EAAK,CAGxB,IAFAlnB,EAAMxnB,EAAQ,EAEPwnB,EAAMwnB,GAAOL,EAAOnnB,IAAQknB,GACjClnB,IAGF,IAAKqnB,EAAK7uC,EAAO8uC,EAAKtnB,EAAM,EAAGqnB,EAAKC,EAAID,IAAMC,IAC5CC,EAAMH,EAAOC,GACbD,EAAOC,GAAMD,EAAOE,GACpBF,EAAOE,GAAMC,EAGf/uC,EAAQwnB,EAGVxnB,SA7BA4uC,EAAOpgC,UAiCX,SAASygC,EAAcC,EAAO1O,EAAOxqB,EAASm5B,GAC5C,IACIC,EACAC,EACAL,EACAjzC,EAJAuzC,EAAQ9O,EAAM2O,GAMlB,OAAQG,GACN,KA1JI,EA2JJ,KA1JI,EA2JFpB,GAAa,EAEf,KA1JK,EA2JL,KA5JK,EA6JH,OAAOoB,EAET,KAhKK,EAiKH,OAAOpB,EAhKJ,EADA,EAmKL,KA9JK,EAiKH,OAFAA,GAAa,GACA,EAtKX,EAyKJ,KAlKK,EAmKH,OAvKG,EAyKL,KApKK,EAqKH,OAAIiB,EAAK,GAAKA,EAAK,GAAK3O,EAAMtiC,QA5K3B,IA4KsCkxC,EAAQp5B,EAAQm5B,EAAK,KA3K3D,GA2KwEC,GA5KxE,IA4KwFC,EAAQ7O,EAAM2O,EAAK,KA3K3G,GA2KwHE,EA1KxH,GA8KCnB,IACFmB,EAhLC,GAmLIA,GAASD,EAAQC,EAlLrB,GAoLL,KA9KK,GAiLH,OAzLG,IAuLHD,EAAQD,EAAK,EAAIn5B,EAAQm5B,EAAK,GApL5B,IAsLiBA,EAAK,EAAI3O,EAAMtiC,QAzL/B,GAyLyCsiC,EAAM2O,EAAK,GAzLpD,EAEA,EA6LL,KAtLK,GAuLH,GAAIA,EAAK,GAhMN,GAgMWn5B,EAAQm5B,EAAK,GACzB,OAjMC,EAoMH,GAAIjB,EACF,OAnMC,EAyMH,IAHAnyC,EAAIozC,EAAK,EACTH,EAAMxO,EAAMtiC,OAELnC,EAAIizC,GAlMR,IAkMexO,EAAMzkC,IACtBA,IAGF,OAAIA,EAAIizC,GA/ML,GA+MYxO,EAAMzkC,GA/MlB,EAEA,EAmNL,KA3MM,GA+MJ,IAHAizC,EAAMxO,EAAMtiC,OACZnC,EAAIozC,EAAK,EAEFpzC,EAAIizC,GA/MP,IA+McxO,EAAMzkC,IACtBA,IAGF,GAAIA,EAAIizC,EAAK,CACX,IAAIO,EAAIL,EAAMC,GACVK,EAAeD,GAAK,MAAUA,GAAK,MAAe,OAALA,EAGjD,GAFAH,EAAQ5O,EAAMzkC,GAEVyzC,IAnOJ,GAmOqBJ,GA7NpB,GA6NkCA,GACjC,OApOF,EAwOF,OAAID,EAAK,GApOP,IAoOaC,EAAQ5O,EAAM2O,EAAK,IArO/B,EAyOIn5B,EAAQm5B,EAAK,GAEtB,KA1OI,EA6OF,OAFAjB,GAAa,EACbC,GAAY,EACLH,EAET,KA9OI,EAgPF,OADAI,GAAY,EAjPT,EAoPL,KA3OM,GA4ON,KA3OM,GA4ON,KA1OM,GA2ON,KA1OM,GA2ON,KA7OM,GA8OJF,GAAa,EAEf,KA7OK,GA8OH,OA5PG,GAgQT,SAASuB,EAAkBj7B,GACzB,IAAIk7B,EAAKl7B,EAAGm7B,WAAW,GACnBb,EAAKY,GAAM,EAEf,OAAU,GAANZ,EACKY,EAAK,IAzQR,EAyQqBnB,EAAamB,GACvB,GAANZ,EACF,kBAAkB1yC,KAAKoY,GA1Q1B,EADA,EA4QW,GAANs6B,EACL,yDAAyD1yC,KAAKoY,GAjQ5D,GAiQqF,+BAA+BpY,KAAKoY,GA1Q1H,EA0QwJ,MAANk7B,EAlQlJ,GAkQmL,kBAAkBtzC,KAAKoY,GA3Q1M,EAKA,EAuQU,IAANs6B,GAAcY,GAAM,KACtBlB,EAAkB,IAALkB,GACL,KAANZ,GACFY,GAAM,MA1QR,EAHA,EAuRTr0C,EAAQu0C,EA3RA,EA4RRv0C,EAAQw0C,EA3RA,EA4RRx0C,EAAQy0C,GA3RC,EA4RTz0C,EAAQ00C,KAAO,EACf10C,EAAQ20C,GAAK,EACb30C,EAAQ40C,IAAM,EACd50C,EAAQ60C,EAAI,EACZ70C,EAAQ80C,IAAM,EACd90C,EAAQ+0C,IAAM,OAEd/0C,EAAQg1C,cAAgB,SAAUxjB,EAAMyjB,EAAeC,GACrD,GAAI1jB,EAAK3uB,OAAS,EAAG,MAAO,GAC5B,IAAIgxC,EAAQriB,EAAK5b,MAAM,IACnBu/B,EAAoB,IAAIpyC,MAAM8wC,EAAMhxC,QACpCuyC,EAAa,IAAIryC,MAAM8wC,EAAMhxC,QAC7BywC,EAAS,GACbX,EAAMuC,EA5SE,EADA,EAwBV,SAAwBrB,EAAOP,EAAQK,EAAK0B,GAC1C,IAAIC,EAAS3C,EAAMM,EAAaD,EAC5BuC,EAAY,KACZC,EAAW,KACXC,EAAW,KACXC,EAAW,EACXnqC,EAAS,KAEToqC,GAAW,EACXj1C,EAAI,KACJozC,EAAK,KACLn5B,EAAU,GAEd,IAAK06B,EACH,IAAK30C,EAAI,EAAG20C,EAAY,GAAI30C,EAAIizC,EAAKjzC,IACnC20C,EAAU30C,GAAK0zC,EAAkBP,EAAMnzC,IAU3C,IANAkyC,EAAUD,EACVE,GAAa,GACA,EACbC,GAAY,EACZC,GAAY,EAEPe,EAAK,EAAGA,EAAKH,EAAKG,IAAM,CAQ3B,GAPAyB,EAAYG,EACZ/6B,EAAQm5B,GAAM0B,EAAW5B,EAAcC,EAAOwB,EAAW16B,EAASm5B,GAElEvoC,EAAoB,KADpBmqC,EAAWJ,EAAOC,GAAWC,IAE7BE,GAAY,GACZpC,EAAOQ,GAAM2B,EAAWH,EAAOI,GAAU,GAErCnqC,EAAS,EACX,GAAc,IAAVA,EAAgB,CAClB,IAAK7K,EAAIi1C,EAASj1C,EAAIozC,EAAIpzC,IACxB4yC,EAAO5yC,GAAK,EAGdi1C,GAAW,OAEXA,GAAW,EAMf,GAFOL,EAAOI,GAAU,IAGN,GAAZC,IACFA,EAAU7B,QAGZ,GAAI6B,GAAW,EAAG,CAChB,IAAKj1C,EAAIi1C,EAASj1C,EAAIozC,EAAIpzC,IACxB4yC,EAAO5yC,GAAK+0C,EAGdE,GAAW,EA1EX,GA8EAN,EAAUvB,KACZR,EAAOQ,GAAM,GAGflB,GAAW6C,EAGb,GAAI1C,EACF,IAAKryC,EAAI,EAAGA,EAAIizC,EAAKjzC,IACnB,GAtFE,GAsFE20C,EAAU30C,GAAS,CACrB4yC,EAAO5yC,GAAKiyC,EAEZ,IAAK,IAAIlE,EAAI/tC,EAAI,EAAG+tC,GAAK,GAvFxB,GAwFK4G,EAAU5G,GADYA,IAExB6E,EAAO7E,GAAKkE,GA4MtBiD,CAAe/B,EAAOP,EAAQO,EAAMhxC,OAAQoyC,GAE5C,IAAK,IAAIv0C,EAAI,EAAGA,EAAIy0C,EAAkBtyC,OAAQsyC,EAAkBz0C,GAAKA,EAAGA,KAIxE0yC,EAAa,EAAGE,EAAQ6B,GAExB/B,EAAa,EAAGE,EAAQ6B,GAExB,IAASz0C,EAAI,EAAGA,EAAIy0C,EAAkBtyC,OAAS,EAAGnC,IApT3C,IAsTDu0C,EAAcv0C,GAChB4yC,EAAO5yC,GAAKV,EAAQ20C,GAzTlB,IA0TOrB,EAAO5yC,KAAau0C,EAAcv0C,GApTxC,GAoTmDu0C,EAAcv0C,GA9ShE,IATD,IAuT6Eu0C,EAAcv0C,IAzS3F,KAySwGu0C,EAAcv0C,IACzH4yC,EAAO5yC,GAAKV,EAAQ00C,KACXh0C,EAAI,GAAsB,WAAjBmzC,EAAMnzC,EAAI,IAAmB,8BAA8BK,KAAK8yC,EAAMnzC,MACxF4yC,EAAO5yC,EAAI,GAAK4yC,EAAO5yC,GAAKV,EAAQ40C,IACpCl0C,KAIAmzC,EAAMA,EAAMhxC,OAAS,KAAO7C,EAAQ+0C,MAAKzB,EAAOO,EAAMhxC,OAAS,GAAK7C,EAAQ60C,GAC/D,WAAbhB,EAAM,KAAiBP,EAAO,GAAKtzC,EAAQ80C,KAE/C,IAASp0C,EAAI,EAAGA,EAAIy0C,EAAkBtyC,OAAQnC,IAC5C00C,EAAW10C,GAAK4yC,EAAO6B,EAAkBz0C,IAG3C,MAAO,CACL,kBAAqBy0C,EACrB,WAAcC,IAIlBp1C,EAAQ61C,kBAAoB,SAAUrkB,EAAMyjB,GAG1C,IAFA,IAAI12B,GAAM,EAED7d,EAAI,EAAGA,EAAI8wB,EAAK3uB,OAAQnC,IAC/Bu0C,EAAcv0C,GAAK0zC,EAAkB5iB,EAAKje,OAAO7S,IAC5C6d,GApVD,GAoVS02B,EAAcv0C,IA9UtB,GA8UiCu0C,EAAcv0C,IAlV/C,GAkV2Du0C,EAAcv0C,KAAW6d,GAAM,GAGjG,OAAOA,GAGTve,EAAQ81C,wBAA0B,SAAUC,EAAQC,GAClD,IAAK,IAAIt1C,EAAI,EAAGA,EAAIs1C,EAAOb,kBAAkBtyC,OAAQnC,IACnD,GAAIs1C,EAAOb,kBAAkBz0C,IAAMq1C,EAAQ,OAAOr1C,EAGpD,OAAO,MAGXyV,IAAI9H,OAAO,kBAAmB,CAAC,UAAW,UAAW,SAAU,mBAAoB,iBAAiB,SAAUkH,EAASvV,EAASD,GAC9H,aAEA,IAAIk2C,EAAW1gC,EAAQ,kBAEnBub,EAAOvb,EAAQ,cAEf2gC,EAAS,kDAETC,EAAc,SAAqBloB,GACrCrsB,KAAKqsB,QAAUA,EACfrsB,KAAKw0C,QAAU,GACfx0C,KAAKy0C,WAAa,KAClBz0C,KAAKq0C,SAAWA,EAChBr0C,KAAK00C,WAAa,GAClB10C,KAAK20C,IAAM,OACX30C,KAAK40C,gBAAiB,EACtB50C,KAAK60C,UAAW,EAChB70C,KAAK80C,QAAS,EACd90C,KAAKwyB,KAAO,GACZxyB,KAAK+0C,WAAa,EAClB/0C,KAAKg1C,IAAM,OACXh1C,KAAKkzC,IAAM,SACXlzC,KAAKi1C,aAAe,EACpBj1C,KAAKk1C,YAAc,KACnBl1C,KAAKm1C,cAAgB,EACrBn1C,KAAKo1C,WAAa,EAClBp1C,KAAKq1C,qBAAsB,EAC3Br1C,KAAKs1C,SAAWhB,EAAOn1C,KAAKktB,EAAQkpB,cAGtC,WACEv1C,KAAKw1C,UAAY,SAAU3W,EAAW4W,EAAQC,GAC5C,QAAK11C,KAAKs1C,WAENzW,IAAc7+B,KAAKy0C,aACrBz0C,KAAKy0C,WAAa5V,EAClB7+B,KAAK21C,cAAcF,EAAQC,GAC3B11C,KAAK41C,iBAGA51C,KAAKw0C,QAAQhB,aAGtBxzC,KAAK61C,SAAW,SAAUC,GACnB91C,KAAKs1C,SAMRt1C,KAAKy0C,WAAa,KALE,UAAhBqB,EAAMnsC,QAAsB2qC,EAAOn1C,KAAK22C,EAAMC,MAAM9hC,KAAK,SAC3DjU,KAAKs1C,UAAW,EAChBt1C,KAAKy0C,WAAa,OAOxBz0C,KAAKg2C,eAAiB,WACpB,IAAIP,EAAS,EACTQ,EAAWj2C,KAAKqsB,QAAQ6pB,gBAE5B,GAAID,EAASh1C,OAAQ,CACnB,IAAI+X,EAAQhZ,KAAKqsB,QAAQ8pB,kBAAkBF,EAAUj2C,KAAKy0C,YACtDz7B,GAAS,IAAGy8B,EAASz1C,KAAKqsB,QAAQ+pB,aAAap9B,IAGrD,OAAOy8B,GAGTz1C,KAAKq2C,cAAgB,WACnB,IAAIX,EAAa,EACbO,EAAWj2C,KAAKqsB,QAAQ6pB,gBAE5B,GAAID,EAASh1C,OAIX,IAHA,IAAIq1C,EACAC,EAAYv2C,KAAKqsB,QAAQ8pB,kBAAkBF,EAAUj2C,KAAKy0C,YAEvDz0C,KAAKy0C,WAAaiB,EAAa,IACpCY,EAAet2C,KAAKqsB,QAAQ8pB,kBAAkBF,EAAUj2C,KAAKy0C,WAAaiB,EAAa,MAClEa,GACrBA,EAAYD,EACZZ,SAGFA,EAAa11C,KAAKy0C,WAGpB,OAAOiB,GAGT11C,KAAK21C,cAAgB,SAAUF,EAAQC,QACtBpuC,IAAXmuC,IAAsBA,EAASz1C,KAAKg2C,kBACxC,IACIQ,EADYf,IAAWz1C,KAAKqsB,QAAQuS,YAAc,EAC1B5+B,KAAKg1C,IAAMh1C,KAAK20C,IAK5C,GAJA30C,KAAK+0C,WAAa,EAClB/0C,KAAKwyB,KAAOxyB,KAAKqsB,QAAQsG,QAAQ8iB,GACjCz1C,KAAK60C,SAAW70C,KAAK80C,QAAU90C,KAAKwyB,KAAK7gB,OAAO,KAAO3R,KAAKkzC,IAExDlzC,KAAKqsB,QAAQoqB,aAAc,CAC7B,IAAIC,EAAS12C,KAAKqsB,QAAQsqB,UAAUlB,GAEhCiB,SACiBpvC,IAAfouC,IAA0BA,EAAa11C,KAAKq2C,iBAE5CX,EAAa,GAAKgB,EAAOz1C,QAC3BjB,KAAK+0C,WAAa2B,EAAOE,OACzB52C,KAAKo1C,WAAap1C,KAAK+0C,WAAa/0C,KAAK00C,WAAWL,EAAS1B,GAC7D3yC,KAAKwyB,KAAOkjB,EAAagB,EAAOz1C,OAASjB,KAAKwyB,KAAKqkB,UAAUH,EAAOhB,EAAa,GAAIgB,EAAOhB,IAAe11C,KAAKwyB,KAAKqkB,UAAUH,EAAOA,EAAOz1C,OAAS,KAEtJjB,KAAKwyB,KAAOxyB,KAAKwyB,KAAKqkB,UAAU,EAAGH,EAAOhB,KAI1CA,GAAcgB,EAAOz1C,SAAQjB,KAAKwyB,MAAQxyB,KAAK40C,eAAiB4B,EAAYnC,EAASlB,UAEzFnzC,KAAKwyB,MAAQxyB,KAAK40C,eAAiB4B,EAAYnC,EAASlB,IAG1D,IAEI2D,EAFAzqB,EAAUrsB,KAAKqsB,QACf4L,EAAQ,EAEZj4B,KAAKwyB,KAAOxyB,KAAKwyB,KAAKhzB,QAAQ,sCAAsC,SAAU+X,EAAIzY,GAChF,MAAW,OAAPyY,GAAe8U,EAAQ0qB,YAAYx/B,EAAGm7B,WAAW,KACnDoE,EAAc,OAAPv/B,EAAc8U,EAAQ2qB,iBAAiBl4C,EAAIm5B,GAAS,EAC3DA,GAAS6e,EAAO,EACT5nB,EAAKlC,aAAaqnB,EAASlB,IAAK2D,IAGlCv/B,KAGLvX,KAAK60C,WACP70C,KAAKk1C,YAAY+B,MAAMz+B,YAAcxY,KAAKwyB,KAAK7gB,OAAO3R,KAAKwyB,KAAKvxB,OAAS,IAAMozC,EAASlB,IAAMnzC,KAAKwyB,KAAK0kB,OAAO,EAAGl3C,KAAKwyB,KAAKvxB,OAAS,GAAKjB,KAAKwyB,KAC/IxyB,KAAKm1C,cAAgBn1C,KAAKi1C,aAAej1C,KAAKk1C,YAAY+B,MAAM7lB,wBAAwB7W,QAI5Fva,KAAK41C,cAAgB,WACnB,IAAIvC,EAAgB,GAEhBgB,EAASJ,kBAAkBj0C,KAAKwyB,KAAM6gB,IAAkBrzC,KAAK60C,SAC/D70C,KAAKw0C,QAAUH,EAASjB,cAAcpzC,KAAKwyB,KAAM6gB,EAAerzC,KAAK60C,UAErE70C,KAAKw0C,QAAU,IAInBx0C,KAAKm3C,YAAc,WACjBn3C,KAAKy0C,WAAa,MAGpBz0C,KAAKo3C,sBAAwB,SAAUlC,GACrC,GAAIl1C,KAAK42B,iBAAmBse,EAAYmC,eAAe98B,MAAvD,CACAva,KAAKk1C,YAAcA,EACnB,IAAIte,EAAiB52B,KAAK42B,eAAiBse,EAAYmC,eAAe98B,MAClE+8B,EAAgBpC,EAAYqC,kBAAkB,UAClDv3C,KAAK00C,WAAWL,EAAS1B,GAAK3yC,KAAK00C,WAAWL,EAASxB,IAAM7yC,KAAK00C,WAAWL,EAASvB,MAAQlc,EAC9F52B,KAAK00C,WAAWL,EAASzB,GAAK5yC,KAAK00C,WAAWL,EAAStB,IAAMuE,EAC7Dt3C,KAAK00C,WAAWL,EAASrB,KAAuB,IAAhBsE,EAChCt3C,KAAK00C,WAAWL,EAASpB,GAAKjzC,KAAK00C,WAAWL,EAASnB,KAAO,EAC9DlzC,KAAKy0C,WAAa,OAGpBz0C,KAAKw3C,kBAAoB,SAAU5C,GACjC50C,KAAK40C,eAAiBA,EACtB50C,KAAKy0C,WAAa,MAGpBz0C,KAAKy3C,WAAa,SAAUC,GAC1B13C,KAAK20C,IAAM+C,GAGb13C,KAAK23C,gBAAkB,SAAUp9B,GAC/Bva,KAAKi1C,aAAe16B,GAGtBva,KAAK43C,UAAY,SAAUvtB,GACzB,QAAIrqB,KAAK80C,cACExtC,GAAP+iB,EAAyBrqB,KAAKqsB,QAAQsG,QAAQtI,GAAK1Y,OAAO,IAAM3R,KAAKkzC,IAAgBlzC,KAAK60C,WAGhG70C,KAAK63C,gBAAkB,SAAUlf,EAAQkc,GAGvC,IAFA,IAAIniB,EAASiG,EAAOmf,oBAEXztB,EAAMsO,EAAOvG,UAAU2lB,qBAAqB1tB,IAAKA,GAAOqI,EAAOrI,IAAKA,IACtEwqB,GAAYlc,EAAOtM,QAAQsG,QAAQtI,GAAK1Y,OAAO,KAAOgnB,EAAOtM,QAAQ2rB,aAAa9E,IAAyD2B,GAAYlc,EAAOtM,QAAQsG,QAAQtI,GAAK1Y,OAAO,KAAOgnB,EAAOtM,QAAQ2rB,aAAa9E,KAAKva,EAAOtM,QAAQpU,IAAIqrB,OAAO,CAC/PhZ,OAAQ,EACRD,IAAKA,GACJsO,EAAOtM,QAAQ2rB,aAAa9E,KAH6Dva,EAAOtM,QAAQpU,IAAIggC,aAAa5tB,EAAK,EAAG,IAOxIrqB,KAAKk4C,WAAa,SAAUC,GAC1BA,GAAOn4C,KAAK+0C,WACZ,IAAIqD,EAAep4C,KAAKwyB,KAAK7gB,OAAO,KAAO3R,KAAKkzC,IAAM,EAAI,EACtDmF,EAAaF,EAAMC,EAAep4C,KAAKqsB,QAAQisB,eAAiBH,EAAMA,EAAM,EAAIC,EAChFG,EAAYlE,EAASH,wBAAwBmE,EAAYr4C,KAAKw0C,SAC9D9C,EAAS1xC,KAAKw0C,QAAQhB,WACtB34B,EAAO,GACN7a,KAAKqsB,QAAQisB,gBAAkBH,GAAOC,GAAgB1G,EAAO6G,GAAa,IAAM,GAAGA,IAExF,IAAK,IAAIz5C,EAAI,EAAGA,EAAIy5C,EAAWz5C,IAC7B+b,GAAQ7a,KAAK00C,WAAWhD,EAAO5yC,IAMjC,OAHKkB,KAAKqsB,QAAQisB,gBAAkBH,EAAMC,GAAgB1G,EAAO6G,GAAa,IAAM,IAAG19B,GAAQ7a,KAAK00C,WAAWhD,EAAO6G,KAClHv4C,KAAK+0C,aAAYl6B,GAAQ7a,KAAK60C,UAAY,EAAI70C,KAAKo1C,WAAap1C,KAAKo1C,YACrEp1C,KAAK60C,WAAUh6B,GAAQ7a,KAAKm1C,eACzBt6B,GAGT7a,KAAKw4C,cAAgB,SAAUC,EAAUC,GACvC,IAEIC,EAFAluC,EAAMzK,KAAKw0C,QACX9C,EAASjnC,EAAI+oC,WAEboF,EAAa,GACbxqB,EAAS,EACTyqB,EAAYn0C,KAAKJ,IAAIm0C,EAAUC,GAAU14C,KAAK+0C,WAC9C+D,EAAYp0C,KAAKH,IAAIk0C,EAAUC,GAAU14C,KAAK+0C,WAC9CgE,GAAa,EACbC,GAAiB,EACjBzmB,EAAiB,EACjBvyB,KAAK+0C,aAAY3mB,GAAUpuB,KAAK60C,UAAY,EAAI70C,KAAKo1C,WAAap1C,KAAKo1C,YAE3E,IAAK,IAAIjB,EAAQ8E,EAAS,EAAGA,EAASvH,EAAOzwC,OAAQg4C,IACnD9E,EAAS1pC,EAAI8oC,kBAAkB0F,GAC/BN,EAAQjH,EAAOuH,IACfF,EAAa5E,GAAU0E,GAAa1E,EAAS2E,KAE1BE,EACjBzmB,EAAiBnE,GACP2qB,GAAcC,GACxBJ,EAAWv3C,KAAK,CACdwZ,KAAM0X,EACNhY,MAAO6T,EAASmE,IAIpBnE,GAAUpuB,KAAK00C,WAAWiE,GAC1BK,EAAiBD,EAUnB,GAPIA,GAAcE,IAAWvH,EAAOzwC,QAClC23C,EAAWv3C,KAAK,CACdwZ,KAAM0X,EACNhY,MAAO6T,EAASmE,IAIhBvyB,KAAK60C,SACP,IAAK,IAAI/1C,EAAI,EAAGA,EAAI85C,EAAW33C,OAAQnC,IACrC85C,EAAW95C,GAAG+b,MAAQ7a,KAAKm1C,cAI/B,OAAOyD,GAGT54C,KAAKk5C,YAAc,SAAUC,GACvBn5C,KAAK60C,WAAUsE,GAAQn5C,KAAKm1C,eAChC,IAAIkD,EAAa,EAEbjqB,GADA+qB,EAAOz0C,KAAKH,IAAI40C,EAAM,GACb,GACTZ,EAAY,EACZ7G,EAAS1xC,KAAKw0C,QAAQhB,WACtB4F,EAAYp5C,KAAK00C,WAAWhD,EAAO6G,IAGvC,IAFIv4C,KAAK+0C,aAAYoE,GAAQn5C,KAAK60C,UAAY,EAAI70C,KAAKo1C,WAAap1C,KAAKo1C,YAElE+D,EAAO/qB,EAASgrB,EAAY,GAAG,CAGpC,GAFAhrB,GAAUgrB,EAENb,IAAc7G,EAAOzwC,OAAS,EAAG,CACnCm4C,EAAY,EACZ,MAGFA,EAAYp5C,KAAK00C,WAAWhD,IAAS6G,IAgBvC,OAbIA,EAAY,GAAK7G,EAAO6G,EAAY,GAAK,IAAM,GAAK7G,EAAO6G,GAAa,IAAM,GAC5EY,EAAO/qB,GAAQmqB,IACnBF,EAAar4C,KAAKw0C,QAAQjB,kBAAkBgF,IACnCA,EAAY,GAAK7G,EAAO6G,EAAY,GAAK,IAAM,GAAK7G,EAAO6G,GAAa,IAAM,EACvFF,EAAa,GAAKc,EAAO/qB,EAASpuB,KAAKw0C,QAAQjB,kBAAkBgF,GAAav4C,KAAKw0C,QAAQjB,kBAAkBgF,EAAY,IAChHv4C,KAAK60C,UAAY0D,IAAc7G,EAAOzwC,OAAS,GAAmB,IAAdm4C,GAAmB1H,EAAO6G,EAAY,GAAK,IAAM,IAAMv4C,KAAK60C,UAA0B,IAAd0D,GAAmB7G,EAAO6G,GAAa,IAAM,EAClLF,EAAa,EAAIr4C,KAAKw0C,QAAQjB,kBAAkBgF,IAE5CA,EAAY,GAAK7G,EAAO6G,EAAY,GAAK,IAAM,GAAmB,IAAda,GAAiBb,IACzEF,EAAar4C,KAAKw0C,QAAQjB,kBAAkBgF,IAG3B,IAAfF,GAAoBr4C,KAAK60C,UAAUwD,IAChCA,EAAar4C,KAAK+0C,cAE1BjtC,KAAKysC,EAAYz0C,WACpB1B,EAAQm2C,YAAcA,KAExBhgC,IAAI9H,OAAO,gBAAiB,CAAC,UAAW,UAAW,SAAU,cAAe,eAAgB,wBAAyB,cAAc,SAAUkH,EAASvV,EAASD,GAC7J,aAEA,IAAIse,EAAM9I,EAAQ,aAEdub,EAAOvb,EAAQ,cAEfw0B,EAAex0B,EAAQ,uBAAuBw0B,aAE9Cne,EAAQrW,EAAQ,WAAWqW,MAE3BqvB,EAAY,SAAmBhtB,GACjCrsB,KAAKqsB,QAAUA,EACfrsB,KAAKiY,IAAMoU,EAAQitB,cACnBt5C,KAAKuhC,iBACLvhC,KAAK0yB,OAAS1yB,KAAKu5C,KAAOv5C,KAAKiY,IAAIuhC,aAAa,EAAG,GACnDx5C,KAAKs5B,OAASt5B,KAAKiY,IAAIuhC,aAAa,EAAG,GACvCx5C,KAAKy5C,SAAU,EACf,IAAIh5C,EAAOT,KACXA,KAAK0yB,OAAOf,GAAG,UAAU,SAAUzxB,GACjCO,EAAKi5C,gBAAiB,EACjBj5C,EAAKg5C,SAASh5C,EAAK+1B,MAAM,gBACzB/1B,EAAKk5C,UAAal5C,EAAKg5C,SAASh5C,EAAK+1B,MAAM,mBAC3C/1B,EAAKm5C,4BAA8B15C,EAAE2oC,IAAIve,QAAUpqB,EAAEoJ,MAAMghB,SAAQ7pB,EAAKo5C,eAAiB,SAEhG75C,KAAKs5B,OAAO3H,GAAG,UAAU,WACvBlxB,EAAKq5C,gBAAiB,EACjBr5C,EAAKk5C,UAAal5C,EAAKg5C,SAASh5C,EAAK+1B,MAAM,wBAIpD,WACE/Z,EAAIF,UAAUvc,KAAMmoC,GAEpBnoC,KAAKisB,QAAU,WACb,OAAOjsB,KAAK25C,UAAY35C,KAAKs5B,OAAOjP,KAAOrqB,KAAKu5C,KAAKlvB,KAAOrqB,KAAKs5B,OAAOhP,QAAUtqB,KAAKu5C,KAAKjvB,QAG9FtqB,KAAKyrB,YAAc,WACjB,OAAQzrB,KAAK25C,UAAY35C,KAAKs5B,OAAOjP,KAAOrqB,KAAK0yB,OAAOrI,KAG1DrqB,KAAK+5C,UAAY,WACf,OAAO/5C,KAAKu5C,KAAKS,eAGnBh6C,KAAKy6B,mBAAqB,SAAUpQ,EAAKC,GACvCtqB,KAAK25C,UAAW,EAChB35C,KAAKs5B,OAAO2D,YAAY5S,EAAKC,IAG/BtqB,KAAKi6C,UAAYj6C,KAAK+3C,mBAAqB,WACzC,OAAI/3C,KAAK25C,SAAiB35C,KAAKk6C,mBACxBl6C,KAAKs5B,OAAO0gB,eAGrBh6C,KAAKk6C,iBAAmB,WACtB,OAAOl6C,KAAKu5C,KAAKS,eAGnBh6C,KAAKm6C,YAAc,WACjB,IAAI7gB,EAASt5B,KAAKs5B,OACdigB,EAAOv5C,KAAKu5C,KAChB,OAAOjgB,EAAOjP,IAAMkvB,EAAKlvB,KAAOiP,EAAOjP,KAAOkvB,EAAKlvB,KAAOiP,EAAOhP,OAASivB,EAAKjvB,QAGjFtqB,KAAKyyB,SAAW,WACd,IAAI6G,EAASt5B,KAAKs5B,OACdigB,EAAOv5C,KAAKu5C,KAChB,OAAIv5C,KAAK25C,SAAiB3vB,EAAMgC,WAAWutB,EAAMA,GAC1Cv5C,KAAKm6C,cAAgBnwB,EAAMgC,WAAWutB,EAAMjgB,GAAUtP,EAAMgC,WAAWsN,EAAQigB,IAGxFv5C,KAAKuhC,eAAiB,WACfvhC,KAAK25C,WACR35C,KAAK25C,UAAW,EAEhB35C,KAAKw2B,MAAM,qBAIfx2B,KAAK+0B,UAAY,WACf/0B,KAAKo6C,cAAc,EAAG,EAAGC,OAAOC,UAAWD,OAAOC,YAGpDt6C,KAAK4mC,SAAW5mC,KAAKqyB,kBAAoB,SAAU5H,EAAOlZ,GACxD,IAAIxO,EAAQwO,EAAUkZ,EAAMF,IAAME,EAAM1nB,MACpCwnB,EAAMhZ,EAAUkZ,EAAM1nB,MAAQ0nB,EAAMF,IACxCvqB,KAAKo6C,cAAcr3C,EAAMsnB,IAAKtnB,EAAMunB,OAAQC,EAAIF,IAAKE,EAAID,SAG3DtqB,KAAKo6C,cAAgB,SAAUG,EAAWC,EAAcC,EAAWC,GACjE,IAAI16C,KAAKy5C,QAAT,CACA,IAAIkB,EAAW36C,KAAK25C,SAChBiB,EAAiB56C,KAAK85B,kBAC1B95B,KAAKy5C,SAAU,EACfz5C,KAAK05C,eAAiB15C,KAAK85C,gBAAiB,EAC5C95C,KAAKs5B,OAAO2D,YAAYsd,EAAWC,GACnCx6C,KAAK0yB,OAAOuK,YAAYwd,EAAWC,GACnC16C,KAAK25C,UAAY3vB,EAAM0C,cAAc1sB,KAAKs5B,OAAQt5B,KAAK0yB,QACvD1yB,KAAKy5C,SAAU,EACXz5C,KAAK05C,gBAAgB15C,KAAKw2B,MAAM,iBAChCx2B,KAAK05C,gBAAkB15C,KAAK85C,gBAAkBa,GAAY36C,KAAK25C,UAAYiB,IAAgB56C,KAAKw2B,MAAM,qBAG5Gx2B,KAAK66C,eAAiB,SAAUC,GAC9B,IAAIvB,EAAOv5C,KAAKu5C,KACZv5C,KAAK25C,UAAU35C,KAAKy6B,mBAAmB8e,EAAKlvB,IAAKkvB,EAAKjvB,QAC1DwwB,EAAMhzC,KAAK9H,OAGbA,KAAKu+B,SAAW,SAAUlU,EAAKC,GAC7BtqB,KAAK66C,gBAAe,WAClB76C,KAAK+6C,aAAa1wB,EAAKC,OAI3BtqB,KAAKs6B,iBAAmB,SAAUb,GAChCz5B,KAAK66C,gBAAe,WAClB76C,KAAKugC,qBAAqB9G,OAI9Bz5B,KAAKg7C,OAAS,SAAU3wB,EAAKC,GAC3BtqB,KAAKuhC,iBACLvhC,KAAK+6C,aAAa1wB,EAAKC,IAGzBtqB,KAAK45B,eAAiB,SAAUH,GAC9Bz5B,KAAKuhC,iBACLvhC,KAAKugC,qBAAqB9G,IAG5Bz5B,KAAKi7C,SAAW,WACdj7C,KAAK66C,eAAe76C,KAAKk7C,eAG3Bl7C,KAAKm7C,WAAa,WAChBn7C,KAAK66C,eAAe76C,KAAKo7C,iBAG3Bp7C,KAAKq7C,YAAc,WACjBr7C,KAAK66C,eAAe76C,KAAKs7C,kBAG3Bt7C,KAAKu7C,WAAa,WAChBv7C,KAAK66C,eAAe76C,KAAKw7C,iBAG3Bx7C,KAAKy7C,gBAAkB,WACrBz7C,KAAK66C,eAAe76C,KAAK07C,sBAG3B17C,KAAK27C,cAAgB,WACnB37C,KAAK66C,eAAe76C,KAAK47C,oBAG3B57C,KAAK67C,cAAgB,WACnB77C,KAAK66C,eAAe76C,KAAK87C,oBAG3B97C,KAAK+7C,gBAAkB,WACrB/7C,KAAK66C,eAAe76C,KAAKg8C,sBAG3Bh8C,KAAKi8C,gBAAkB,WACrBj8C,KAAK66C,eAAe76C,KAAKk8C,sBAG3Bl8C,KAAKm8C,eAAiB,WACpBn8C,KAAK66C,eAAe76C,KAAKo8C,qBAG3Bp8C,KAAK47B,aAAe,SAAUvR,EAAKC,GACjC,GAAqB,oBAAVA,EAAuB,CAChC,IAAIoI,EAASrI,GAAOrqB,KAAKu5C,KACzBlvB,EAAMqI,EAAOrI,IACbC,EAASoI,EAAOpI,OAGlB,OAAOtqB,KAAKqsB,QAAQuP,aAAavR,EAAKC,IAGxCtqB,KAAKumC,WAAa,WAChBvmC,KAAKqyB,kBAAkBryB,KAAK47B,iBAG9B57B,KAAKq8C,YAAc,WACjB,IAAI3pB,EAAS1yB,KAAK+5C,YACdtvB,EAAQzqB,KAAKqsB,QAAQiwB,cAAc5pB,EAAOrI,IAAKqI,EAAOpI,QAC1DtqB,KAAKqyB,kBAAkB5H,IAGzBzqB,KAAK67B,aAAe,SAAUxR,EAAKkyB,GACjC,IACIC,EADAC,EAAyB,iBAAPpyB,EAAkBA,EAAMrqB,KAAKu5C,KAAKlvB,IAEpDqyB,EAAW18C,KAAKqsB,QAAQswB,YAAYF,GASxC,OAPIC,GACFD,EAAWC,EAAS35C,MAAMsnB,IAC1BmyB,EAASE,EAASnyB,IAAIF,KAEtBmyB,EAASC,GAGa,IAApBF,EAAiC,IAAIvyB,EAAMyyB,EAAU,EAAGD,EAAQx8C,KAAKqsB,QAAQsG,QAAQ6pB,GAAQv7C,QAAoB,IAAI+oB,EAAMyyB,EAAU,EAAGD,EAAS,EAAG,IAG1Jx8C,KAAK48C,WAAa,WAChB58C,KAAKqyB,kBAAkBryB,KAAK67B,iBAG9B77B,KAAKk7C,aAAe,WAClBl7C,KAAK68C,cAAc,EAAG,IAGxB78C,KAAKo7C,eAAiB,WACpBp7C,KAAK68C,aAAa,EAAG,IAGvB78C,KAAK88C,qBAAuB,SAAUpqB,EAAQqqB,EAAS1gB,GACrD,IAAIt5B,EAAQ2vB,EAAOpI,OACfC,EAAMmI,EAAOpI,OAASyyB,EAO1B,OALI1gB,EAAY,IACdt5B,EAAQ2vB,EAAOpI,OAASyyB,EACxBxyB,EAAMmI,EAAOpI,QAGRtqB,KAAKqsB,QAAQ2wB,UAAUtqB,IAAW1yB,KAAKiY,IAAI0a,QAAQD,EAAOrI,KAAKjrB,MAAM2D,EAAOwnB,GAAKvW,MAAM,KAAK/S,OAAS,GAAK87C,GAGnH/8C,KAAKw7C,eAAiB,WACpB,IACItM,EADAxc,EAAS1yB,KAAKu5C,KAAKS,cAGvB,GAAI9K,EAAOlvC,KAAKqsB,QAAQ8iB,UAAUzc,EAAOrI,IAAKqI,EAAOpI,QAAS,GAC5DtqB,KAAK+6C,aAAa7L,EAAKnsC,MAAMsnB,IAAK6kB,EAAKnsC,MAAMunB,aACxC,GAAsB,IAAlBoI,EAAOpI,OACZoI,EAAOrI,IAAM,GACfrqB,KAAK+6C,aAAaroB,EAAOrI,IAAM,EAAGrqB,KAAKiY,IAAI0a,QAAQD,EAAOrI,IAAM,GAAGppB,YAEhE,CACL,IAAI87C,EAAU/8C,KAAKqsB,QAAQ4wB,aAEvBj9C,KAAK88C,qBAAqBpqB,EAAQqqB,GAAU,KAAO/8C,KAAKqsB,QAAQ6wB,4BAClEl9C,KAAK68C,aAAa,GAAIE,GAEtB/8C,KAAK68C,aAAa,GAAI,KAK5B78C,KAAKs7C,gBAAkB,WACrB,IACIpM,EADAxc,EAAS1yB,KAAKu5C,KAAKS,cAGvB,GAAI9K,EAAOlvC,KAAKqsB,QAAQ8iB,UAAUzc,EAAOrI,IAAKqI,EAAOpI,OAAQ,GAC3DtqB,KAAK+6C,aAAa7L,EAAK3kB,IAAIF,IAAK6kB,EAAK3kB,IAAID,aACpC,GAAItqB,KAAKu5C,KAAKjvB,QAAUtqB,KAAKiY,IAAI0a,QAAQ3yB,KAAKu5C,KAAKlvB,KAAKppB,OACzDjB,KAAKu5C,KAAKlvB,IAAMrqB,KAAKiY,IAAI2mB,YAAc,GACzC5+B,KAAK+6C,aAAa/6C,KAAKu5C,KAAKlvB,IAAM,EAAG,OAElC,CACL,IAAI0yB,EAAU/8C,KAAKqsB,QAAQ4wB,aACvBvqB,EAAS1yB,KAAKu5C,KAEdv5C,KAAK88C,qBAAqBpqB,EAAQqqB,EAAS,KAAO/8C,KAAKqsB,QAAQ6wB,4BACjEl9C,KAAK68C,aAAa,EAAGE,GAErB/8C,KAAK68C,aAAa,EAAG,KAK3B78C,KAAK07C,oBAAsB,WACzB,IAAIrxB,EAAMrqB,KAAKu5C,KAAKlvB,IAChBC,EAAStqB,KAAKu5C,KAAKjvB,OACnBuU,EAAY7+B,KAAKqsB,QAAQ2S,oBAAoB3U,EAAKC,GAClD6yB,EAAsBn9C,KAAKqsB,QAAQ+wB,yBAAyBve,EAAW,GAEvEwe,EADer9C,KAAKqsB,QAAQixB,eAAejzB,EAAK,KAAM8yB,EAAoB9yB,IAAK8yB,EAAoB7yB,QACvEzU,MAAM,QAClCwnC,EAAa,GAAGp8C,QAAUqpB,GAAWtqB,KAAKqsB,QAAQkxB,0BAAyBJ,EAAoB7yB,QAAU+yB,EAAa,GAAGp8C,QAC7HjB,KAAKugC,qBAAqB4c,IAG5Bn9C,KAAK47C,kBAAoB,WACvB,IAAIrC,EAAOv5C,KAAKu5C,KACZiE,EAAUx9C,KAAKqsB,QAAQoxB,iCAAiClE,EAAKlvB,IAAKkvB,EAAKjvB,QAE3E,GAAItqB,KAAKu5C,KAAKjvB,QAAUkzB,EAAQlzB,OAAQ,CACtC,IAAIkI,EAAOxyB,KAAKqsB,QAAQsG,QAAQ6qB,EAAQnzB,KAExC,GAAImzB,EAAQlzB,QAAUkI,EAAKvxB,OAAQ,CACjC,IAAIy8C,EAAUlrB,EAAKmrB,OAAO,QACtBD,EAAU,IAAGF,EAAQlzB,OAASozB,IAItC19C,KAAK+6C,aAAayC,EAAQnzB,IAAKmzB,EAAQlzB,SAGzCtqB,KAAK87C,kBAAoB,WACvB,IAAIzxB,EAAMrqB,KAAKiY,IAAI2mB,YAAc,EAC7BtU,EAAStqB,KAAKiY,IAAI0a,QAAQtI,GAAKppB,OACnCjB,KAAK+6C,aAAa1wB,EAAKC,IAGzBtqB,KAAKg8C,oBAAsB,WACzBh8C,KAAK+6C,aAAa,EAAG,IAGvB/6C,KAAK49C,wBAA0B,WAC7B,IAAIvzB,EAAMrqB,KAAKu5C,KAAKlvB,IAChBC,EAAStqB,KAAKu5C,KAAKjvB,OACnBkI,EAAOxyB,KAAKiY,IAAI0a,QAAQtI,GACxBwzB,EAAgBrrB,EAAKqkB,UAAUvsB,GACnCtqB,KAAKqsB,QAAQyxB,WAAWC,UAAY,EACpC/9C,KAAKqsB,QAAQ2xB,QAAQD,UAAY,EACjC,IAAI7O,EAAOlvC,KAAKqsB,QAAQ8iB,UAAU9kB,EAAKC,EAAQ,GAE/C,GAAI4kB,EACFlvC,KAAK+6C,aAAa7L,EAAK3kB,IAAIF,IAAK6kB,EAAK3kB,IAAID,YAD3C,CAWA,GANItqB,KAAKqsB,QAAQyxB,WAAWzoC,KAAKwoC,KAC/BvzB,GAAUtqB,KAAKqsB,QAAQyxB,WAAWC,UAClC/9C,KAAKqsB,QAAQyxB,WAAWC,UAAY,EACpCF,EAAgBrrB,EAAKqkB,UAAUvsB,IAG7BA,GAAUkI,EAAKvxB,OAIjB,OAHAjB,KAAK+6C,aAAa1wB,EAAKmI,EAAKvxB,QAC5BjB,KAAKs7C,uBACDjxB,EAAMrqB,KAAKiY,IAAI2mB,YAAc,GAAG5+B,KAAKk8C,uBAIvCl8C,KAAKqsB,QAAQ2xB,QAAQ3oC,KAAKwoC,KAC5BvzB,GAAUtqB,KAAKqsB,QAAQ2xB,QAAQD,UAC/B/9C,KAAKqsB,QAAQ2xB,QAAQD,UAAY,GAGnC/9C,KAAK+6C,aAAa1wB,EAAKC,KAGzBtqB,KAAKi+C,uBAAyB,WAC5B,IAEI/O,EAFA7kB,EAAMrqB,KAAKu5C,KAAKlvB,IAChBC,EAAStqB,KAAKu5C,KAAKjvB,OAGvB,GAAI4kB,EAAOlvC,KAAKqsB,QAAQ8iB,UAAU9kB,EAAKC,GAAS,GAC9CtqB,KAAK+6C,aAAa7L,EAAKnsC,MAAMsnB,IAAK6kB,EAAKnsC,MAAMunB,YAD/C,CAKA,IAAIyD,EAAM/tB,KAAKqsB,QAAQ6xB,gBAAgB7zB,EAAKC,GAAS,GAE1C,MAAPyD,IACFA,EAAM/tB,KAAKiY,IAAI0a,QAAQtI,GAAKwsB,UAAU,EAAGvsB,IAG3C,IAAI6zB,EAAejvB,EAAKpC,cAAciB,GAUtC,GATA/tB,KAAKqsB,QAAQyxB,WAAWC,UAAY,EACpC/9C,KAAKqsB,QAAQ2xB,QAAQD,UAAY,EAE7B/9C,KAAKqsB,QAAQyxB,WAAWzoC,KAAK8oC,KAC/B7zB,GAAUtqB,KAAKqsB,QAAQyxB,WAAWC,UAClCI,EAAeA,EAAa/+C,MAAMY,KAAKqsB,QAAQyxB,WAAWC,WAC1D/9C,KAAKqsB,QAAQyxB,WAAWC,UAAY,GAGlCzzB,GAAU,EAIZ,OAHAtqB,KAAK+6C,aAAa1wB,EAAK,GACvBrqB,KAAKw7C,sBACDnxB,EAAM,GAAGrqB,KAAKo8C,sBAIhBp8C,KAAKqsB,QAAQ2xB,QAAQ3oC,KAAK8oC,KAC5B7zB,GAAUtqB,KAAKqsB,QAAQ2xB,QAAQD,UAC/B/9C,KAAKqsB,QAAQ2xB,QAAQD,UAAY,GAGnC/9C,KAAK+6C,aAAa1wB,EAAKC,KAGzBtqB,KAAKo+C,mBAAqB,SAAUP,GAClC,IACItmC,EADAyB,EAAQ,EAERqlC,EAAe,KACfL,EAAUh+C,KAAKqsB,QAAQ2xB,QAG3B,GAFAA,EAAQD,UAAY,EAEhB/9C,KAAKqsB,QAAQ2xB,QAAQ3oC,KAAKwoC,GAC5B7kC,EAAQhZ,KAAKqsB,QAAQ2xB,QAAQD,cACxB,CACL,MAAQxmC,EAAKsmC,EAAc7kC,KAAWqlC,EAAal/C,KAAKoY,IACtDyB,IAGF,GAAIA,EAAQ,EAGV,IAFAglC,EAAQD,UAAY,GAEZxmC,EAAKsmC,EAAc7kC,MAAYglC,EAAQ7+C,KAAKoY,IAIlD,GAHAymC,EAAQD,UAAY,EACpB/kC,IAEIqlC,EAAal/C,KAAKoY,GAAK,CACzB,GAAIyB,EAAQ,EAAG,CACbA,IACA,MAEA,MAAQzB,EAAKsmC,EAAc7kC,KAAWqlC,EAAal/C,KAAKoY,IACtDyB,IAGF,GAAIA,EAAQ,EAAG,OAQzB,OADAglC,EAAQD,UAAY,EACb/kC,GAGThZ,KAAKs+C,yBAA2B,WAC9B,IAAIj0B,EAAMrqB,KAAKu5C,KAAKlvB,IAChBC,EAAStqB,KAAKu5C,KAAKjvB,OACnBkI,EAAOxyB,KAAKiY,IAAI0a,QAAQtI,GACxBwzB,EAAgBrrB,EAAKqkB,UAAUvsB,GAC/B4kB,EAAOlvC,KAAKqsB,QAAQ8iB,UAAU9kB,EAAKC,EAAQ,GAC/C,GAAI4kB,EAAM,OAAOlvC,KAAK+6C,aAAa7L,EAAK3kB,IAAIF,IAAK6kB,EAAK3kB,IAAID,QAE1D,GAAIA,GAAUkI,EAAKvxB,OAAQ,CACzB,IAAIpC,EAAImB,KAAKiY,IAAI2mB,YAEjB,GACEvU,IACAwzB,EAAgB79C,KAAKiY,IAAI0a,QAAQtI,SAC1BA,EAAMxrB,GAAK,QAAQM,KAAK0+C,IAE5B,OAAO1+C,KAAK0+C,KAAgBA,EAAgB,IACjDvzB,EAAS,EAGX,IAAItR,EAAQhZ,KAAKo+C,mBAAmBP,GACpC79C,KAAK+6C,aAAa1wB,EAAKC,EAAStR,IAGlChZ,KAAKu+C,wBAA0B,WAC7B,IAEIrP,EAFA7kB,EAAMrqB,KAAKu5C,KAAKlvB,IAChBC,EAAStqB,KAAKu5C,KAAKjvB,OAEvB,GAAI4kB,EAAOlvC,KAAKqsB,QAAQ8iB,UAAU9kB,EAAKC,GAAS,GAAI,OAAOtqB,KAAK+6C,aAAa7L,EAAKnsC,MAAMsnB,IAAK6kB,EAAKnsC,MAAMunB,QACxG,IAAIkI,EAAOxyB,KAAKqsB,QAAQsG,QAAQtI,GAAKwsB,UAAU,EAAGvsB,GAElD,GAAe,IAAXA,EAAc,CAChB,GACED,IACAmI,EAAOxyB,KAAKiY,IAAI0a,QAAQtI,SACjBA,EAAM,GAAK,QAAQlrB,KAAKqzB,IAEjClI,EAASkI,EAAKvxB,OACT,OAAO9B,KAAKqzB,KAAOA,EAAO,IAGjC,IAAI2rB,EAAejvB,EAAKpC,cAAc0F,GAClCxZ,EAAQhZ,KAAKo+C,mBAAmBD,GACpC,OAAOn+C,KAAK+6C,aAAa1wB,EAAKC,EAAStR,IAGzChZ,KAAKk8C,oBAAsB,WACrBl8C,KAAKqsB,QAAQmyB,iBAAkBx+C,KAAK49C,0BAA+B59C,KAAKs+C,4BAG9Et+C,KAAKo8C,mBAAqB,WACpBp8C,KAAKqsB,QAAQmyB,iBAAkBx+C,KAAKi+C,yBAA8Bj+C,KAAKu+C,2BAG7Ev+C,KAAK68C,aAAe,SAAU4B,EAAMxM,GAClC,IACIyM,EADAC,EAAY3+C,KAAKqsB,QAAQE,yBAAyBvsB,KAAKu5C,KAAKlvB,IAAKrqB,KAAKu5C,KAAKjvB,QAgB/E,GAbc,IAAV2nB,IACW,IAATwM,IACEz+C,KAAKqsB,QAAQ2rB,aAAaxC,UAAUmJ,EAAUt0B,IAAKrqB,KAAKu5C,KAAKlvB,MAC/Dq0B,EAAU1+C,KAAKqsB,QAAQ2rB,aAAaE,WAAWyG,EAAUr0B,QACzDq0B,EAAUr0B,OAAS5lB,KAAKC,MAAM+5C,EAAU1+C,KAAKqsB,QAAQ2rB,aAAatD,WAAW,KAE7EgK,EAAUC,EAAUr0B,OAAStqB,KAAKqsB,QAAQ2rB,aAAatD,WAAW,IAIlE10C,KAAK65C,eAAgB8E,EAAUr0B,OAAStqB,KAAK65C,eAAoB75C,KAAK65C,eAAiB8E,EAAUr0B,QAG3F,GAARm0B,GAAaz+C,KAAKqsB,QAAQuyB,aAAe5+C,KAAKqsB,QAAQuyB,YAAY5+C,KAAKu5C,KAAKlvB,KAAM,CACpF,IAAIw0B,EAAS7+C,KAAKqsB,QAAQuyB,YAAY5+C,KAAKu5C,KAAKlvB,KAC5Co0B,EAAO,EAAGA,GAAQI,EAAOC,WAAa,EAAWL,EAAO,IAAGA,GAAQI,EAAOE,UAAYF,EAAOC,WAAa,IAGhH,IAAIE,EAASh/C,KAAKqsB,QAAQ+wB,yBAAyBuB,EAAUt0B,IAAMo0B,EAAME,EAAUr0B,OAAQo0B,GAE9E,IAATD,GAAwB,IAAVxM,GAAe+M,EAAO30B,MAAQrqB,KAAKu5C,KAAKlvB,MAAO20B,EAAO10B,OAAWtqB,KAAKu5C,KAAKjvB,QAE7FtqB,KAAK+6C,aAAaiE,EAAO30B,IAAK20B,EAAO10B,OAAS2nB,EAAiB,IAAVA,IAGvDjyC,KAAKugC,qBAAuB,SAAU3lB,GACpC5a,KAAK+6C,aAAangC,EAASyP,IAAKzP,EAAS0P,SAG3CtqB,KAAK+6C,aAAe,SAAU1wB,EAAKC,EAAQ20B,GACzC,IAAI/P,EAAOlvC,KAAKqsB,QAAQ8iB,UAAU9kB,EAAKC,EAAQ,GAE3C4kB,IACF7kB,EAAM6kB,EAAKnsC,MAAMsnB,IACjBC,EAAS4kB,EAAKnsC,MAAMunB,QAGtBtqB,KAAK45C,4BAA6B,EAClC,IAAIpnB,EAAOxyB,KAAKqsB,QAAQsG,QAAQtI,GAE5B,kBAAkBlrB,KAAKqzB,EAAK7gB,OAAO2Y,KAAYkI,EAAK7gB,OAAO2Y,EAAS,KAClEtqB,KAAKu5C,KAAKlvB,KAAOA,GAAOrqB,KAAKu5C,KAAKjvB,QAAUA,EAAS,EAAGA,GAAkB,EAAOA,GAAkB,GAGzGtqB,KAAKu5C,KAAKtc,YAAY5S,EAAKC,GAC3BtqB,KAAK45C,4BAA6B,EAC7BqF,IAAmBj/C,KAAK65C,eAAiB,OAGhD75C,KAAKk/C,mBAAqB,SAAU70B,EAAKC,EAAQ20B,GAC/C,IAAIxlB,EAAMz5B,KAAKqsB,QAAQ+wB,yBAAyB/yB,EAAKC,GACrDtqB,KAAK+6C,aAAathB,EAAIpP,IAAKoP,EAAInP,OAAQ20B,IAGzCj/C,KAAKwwC,OAAS,WACZxwC,KAAKu5C,KAAK/I,SACVxwC,KAAKs5B,OAAOkX,UAGdxwC,KAAK+hC,kBAAoB,SAAUtX,GACjCzqB,KAAKqyB,kBAAkB5H,EAAOA,EAAMiI,QAAUjI,EAAM1nB,OACpD/C,KAAK65C,eAAiBpvB,EAAM00B,eAAiBn/C,KAAK65C,gBAGpD75C,KAAKohC,gBAAkB,SAAU3W,GAC/B,IAAI20B,EAAIp/C,KAAKyyB,WAab,OAXIhI,GACFA,EAAM1nB,MAAMunB,OAAS80B,EAAEr8C,MAAMunB,OAC7BG,EAAM1nB,MAAMsnB,IAAM+0B,EAAEr8C,MAAMsnB,IAC1BI,EAAMF,IAAID,OAAS80B,EAAE70B,IAAID,OACzBG,EAAMF,IAAIF,IAAM+0B,EAAE70B,IAAIF,KAEtBI,EAAQ20B,EAGV30B,EAAMiI,OAAS1yB,KAAKm6C,cAAgB1vB,EAAM1nB,MAAQ0nB,EAAMF,IACxDE,EAAM00B,cAAgBn/C,KAAK65C,eACpBpvB,GAGTzqB,KAAKq/C,oBAAsB,SAAUC,GACnC,IAAIv8C,EAAQ/C,KAAK+5C,YAEjB,IACEuF,EAAKt/C,MACL,IAAIuqB,EAAMvqB,KAAK+5C,YACf,OAAO/vB,EAAMgC,WAAWjpB,EAAOwnB,GAC/B,MAAOrqB,GACP,OAAO8pB,EAAMgC,WAAWjpB,EAAOA,GAC/B,QACA/C,KAAKugC,qBAAqBx9B,KAI9B/C,KAAKu/C,OAAS,WACZ,GAAIv/C,KAAKw/C,WACP,IAAI54C,EAAO5G,KAAKy/C,OAAOh1C,KAAI,SAAU20C,GACnC,IAAIM,EAAKN,EAAElzB,QAEX,OADAwzB,EAAGvF,YAAciF,EAAE1sB,QAAU0sB,EAAEr8C,MACxB28C,UAGL94C,EAAO5G,KAAKyyB,YACX0nB,YAAcn6C,KAAKm6C,cAG1B,OAAOvzC,GAGT5G,KAAK2/C,SAAW,SAAU/4C,GACxB,QAAkBU,GAAdV,EAAK7D,MAAoB,CAC3B,GAAI/C,KAAK4/C,WAAah5C,EAAK3F,OAAS,EAAG,CACrCjB,KAAK6/C,cAAcj5C,EAAK,IAExB,IAAK,IAAI9H,EAAI8H,EAAK3F,OAAQnC,KAAM,CAC9B,IAAIsgD,EAAIp1B,EAAMgC,WAAWplB,EAAK9H,GAAGiE,MAAO6D,EAAK9H,GAAGyrB,KAC5C3jB,EAAK9H,GAAGq7C,cAAaiF,EAAE1sB,OAAS0sB,EAAEr8C,OACtC/C,KAAK8/C,SAASV,GAAG,GAGnB,OAEAx4C,EAAOA,EAAK,GAIZ5G,KAAK4/C,WAAW5/C,KAAK6/C,cAAcj5C,GACvC5G,KAAKqyB,kBAAkBzrB,EAAMA,EAAKuzC,cAGpCn6C,KAAKwqB,QAAU,SAAU5jB,GACvB,IAAKA,EAAK3F,QAAUjB,KAAKw/C,aAAe54C,EAAK3F,QAAUjB,KAAKw/C,WAAY,OAAO,EAC/E,IAAK54C,EAAK3F,SAAWjB,KAAKy/C,OAAQ,OAAOz/C,KAAKyyB,WAAWjI,QAAQ5jB,GAEjE,IAAK,IAAI9H,EAAIkB,KAAKy/C,OAAOx+C,OAAQnC,KAC/B,IAAKkB,KAAKy/C,OAAO3gD,GAAG0rB,QAAQ5jB,EAAK9H,IAAK,OAAO,EAG/C,OAAO,KAERgJ,KAAKuxC,EAAUv5C,WAClB1B,EAAQi7C,UAAYA,KAEtB9kC,IAAI9H,OAAO,gBAAiB,CAAC,UAAW,UAAW,SAAU,eAAe,SAAUkH,EAASvV,EAASD,GACtG,aAEA,IAAIivC,EAASz5B,EAAQ,YAEjBosC,EAAkB,IAElBC,EAAY,SAAmBC,GAKjC,IAAK,IAAI79C,KAJTpC,KAAK+H,OAASk4C,EACdjgD,KAAKkgD,QAAU,GACflgD,KAAKmgD,cAAgB,GAELngD,KAAK+H,OAAQ,CAU3B,IATA,IAAIC,EAAQhI,KAAK+H,OAAO3F,GACpBg+C,EAAc,GACdC,EAAa,EACbC,EAAUtgD,KAAKmgD,cAAc/9C,GAAO,CACtCm+C,aAAc,QAEZC,EAAO,IACPC,EAAiB,GAEZ3hD,EAAI,EAAGA,EAAIkJ,EAAM/G,OAAQnC,IAAK,CACrC,IAAI4hD,EAAO14C,EAAMlJ,GAGjB,GAFI4hD,EAAKH,eAAcD,EAAQC,aAAeG,EAAKH,cAC/CG,EAAKC,kBAAiBH,EAAO,MACf,MAAdE,EAAKE,MAAT,CACIF,EAAKE,iBAAiBhV,SAAQ8U,EAAKE,MAAQF,EAAKE,MAAMntC,WAAWrU,MAAM,GAAI,IAC/E,IAAIyhD,EAAgBH,EAAKE,MACrBE,EAAa,IAAIlV,OAAO,OAASiV,EAAgB,UAAUxrC,KAAK,KAAKpU,OAAS,EAE9EE,MAAMkW,QAAQqpC,EAAKK,OACI,GAArBL,EAAKK,MAAM9/C,QAA6B,GAAd6/C,EAC5BJ,EAAKK,MAAQL,EAAKK,MAAM,GACfD,EAAa,GAAKJ,EAAKK,MAAM9/C,QACtCjB,KAAKgqC,YAAY,oDAAqD,CACpE0W,KAAMA,EACNM,WAAYF,EAAa,IAE3BJ,EAAKK,MAAQL,EAAKK,MAAM,KAExBL,EAAKO,WAAaP,EAAKK,MACvBL,EAAKK,MAAQ,KACbL,EAAKQ,QAAUlhD,KAAKmhD,cAEQ,mBAAdT,EAAKK,OAAwBL,EAAKQ,UAC9BR,EAAKQ,QAArBJ,EAAa,EAAkB9gD,KAAKohD,YAAgCV,EAAKK,OAG3ED,EAAa,IACX,OAAO3hD,KAAKuhD,EAAKE,OACnBC,EAAgBH,EAAKE,MAAMphD,QAAQ,eAAe,SAAUqW,EAAOwrC,GACjE,MAAO,MAAQ/9B,SAAS+9B,EAAO,IAAMhB,EAAa,OAGpDS,EAAa,EACbD,EAAgB7gD,KAAKshD,sBAAsBZ,EAAKE,QAG7CF,EAAKa,YAAmC,iBAAdb,EAAKK,OAAmBN,EAAep/C,KAAKq/C,IAG7EJ,EAAQD,GAAcvhD,EACtBuhD,GAAcS,EACdV,EAAY/+C,KAAKw/C,GACZH,EAAKQ,UAASR,EAAKQ,QAAU,OAG/Bd,EAAYn/C,SACfq/C,EAAQ,GAAK,EACbF,EAAY/+C,KAAK,MAGnBo/C,EAAe3xC,SAAQ,SAAU4xC,GAC/BA,EAAKa,WAAavhD,KAAKwhD,qBAAqBd,EAAKE,MAAOJ,KACvDxgD,MACHA,KAAKkgD,QAAQ99C,GAAO,IAAIwpC,OAAO,IAAMwU,EAAYnsC,KAAK,OAAS,QAASusC,MAI5E,WACExgD,KAAKyhD,kBAAoB,SAAU1U,GACjCgT,EAAsB,EAAJhT,GAGpB/sC,KAAKohD,YAAc,SAAUrzB,GAC3B,IAAIpf,EAAS3O,KAAKuhD,WAAWlsC,KAAK0Y,GAAK3uB,MAAM,GACzCmkC,EAAQvjC,KAAK+gD,MAAMv/C,MAAMxB,KAAM2O,GACnC,GAAqB,kBAAV40B,EAAoB,MAAO,CAAC,CACrC16B,KAAM06B,EACNj6B,MAAOykB,IAIT,IAFA,IAAI2zB,EAAS,GAEJ5iD,EAAI,EAAGD,EAAI0kC,EAAMtiC,OAAQnC,EAAID,EAAGC,IACnC6P,EAAO7P,KAAI4iD,EAAOA,EAAOzgD,QAAU,CACrC4H,KAAM06B,EAAMzkC,GACZwK,MAAOqF,EAAO7P,KAIlB,OAAO4iD,GAGT1hD,KAAKmhD,aAAe,SAAUpzB,GAC5B,IAAKA,EAAK,MAAO,GACjB,IAAIpf,EAAS3O,KAAKuhD,WAAWlsC,KAAK0Y,GAClC,IAAKpf,EAAQ,MAAO,OAIpB,IAHA,IAAI+yC,EAAS,GACTne,EAAQvjC,KAAKihD,WAERniD,EAAI,EAAGD,EAAI0kC,EAAMtiC,OAAQnC,EAAID,EAAGC,IACnC6P,EAAO7P,EAAI,KAAI4iD,EAAOA,EAAOzgD,QAAU,CACzC4H,KAAM06B,EAAMzkC,GACZwK,MAAOqF,EAAO7P,EAAI,KAItB,OAAO4iD,GAGT1hD,KAAKshD,sBAAwB,SAAUxZ,GAIrC,OAHQA,EAAItoC,QAAQ,2CAA2C,SAAUqkB,EAAGuW,GAC1E,OAAOA,EAAI,MAAQvW,MAKvB7jB,KAAKwhD,qBAAuB,SAAU1Z,EAAK0Y,GACzC,IAA2B,GAAvB1Y,EAAI1hC,QAAQ,OAAc,CAC5B,IAAIu7C,EAAQ,EACRC,GAAY,EACZC,EAAc,GAClB/Z,EAAItoC,QAAQ,wCAAwC,SAAUutC,EAAGtpB,EAAKq+B,EAAWC,EAAYC,EAAQhpC,GAqBnG,OApBI4oC,EACFA,EAAsB,KAAVI,EACHA,EACTJ,GAAY,EACHG,GACLJ,GAASE,EAAYF,QACvBE,EAAYt3B,IAAMvR,EAAQ,EAC1B6oC,EAAYF,OAAS,GAGvBA,KACSG,IACTH,IAEwB,GAApBG,EAAU7gD,SACZ4gD,EAAYF,MAAQA,EACpBE,EAAY9+C,MAAQiW,IAIjB+zB,KAEc,MAAnB8U,EAAYt3B,KAAe,QAAQprB,KAAK2oC,EAAIoP,OAAO2K,EAAYt3B,QAAOud,EAAMA,EAAI+O,UAAU,EAAGgL,EAAY9+C,OAAS+kC,EAAIoP,OAAO2K,EAAYt3B,MAK/I,MAFqB,KAAjBud,EAAIn2B,OAAO,KAAWm2B,EAAM,IAAMA,GACJ,KAA9BA,EAAIn2B,OAAOm2B,EAAI7mC,OAAS,KAAW6mC,GAAO,KACvC,IAAI8D,OAAO9D,GAAM0Y,GAAQ,IAAIhhD,QAAQ,IAAK,MAGnDQ,KAAKiiD,cAAgB,SAAUzvB,EAAM0vB,GACnC,GAAIA,GAAmC,iBAAdA,EAAwB,CAC/C,IAAIP,EAAQO,EAAW9iD,MAAM,GAGV,UAFnB8iD,EAAaP,EAAM,MAGjBA,EAAM1pB,QACNiqB,EAAaP,EAAM1pB,cAEZ0pB,EAAQ,GAEnB,IAAIQ,EAAeD,GAAc,QAC7Bl6C,EAAQhI,KAAK+H,OAAOo6C,GAEnBn6C,IACHm6C,EAAe,QACfn6C,EAAQhI,KAAK+H,OAAOo6C,IAGtB,IAAI7B,EAAUtgD,KAAKmgD,cAAcgC,GAC7BxW,EAAK3rC,KAAKkgD,QAAQiC,GACtBxW,EAAGoS,UAAY,EAUf,IATA,IAAIloC,EACA6rC,EAAS,GACT3D,EAAY,EACZqE,EAAgB,EAChBrB,EAAQ,CACVl4C,KAAM,KACNS,MAAO,IAGFuM,EAAQ81B,EAAGt2B,KAAKmd,IAAO,CAC5B,IAAI3pB,EAAOy3C,EAAQC,aACfG,EAAO,KACPp3C,EAAQuM,EAAM,GACdmD,EAAQ2yB,EAAGoS,UAEf,GAAI/kC,EAAQ1P,EAAMrI,OAAS88C,EAAW,CACpC,IAAIsE,EAAU7vB,EAAKqkB,UAAUkH,EAAW/kC,EAAQ1P,EAAMrI,QAElD8/C,EAAMl4C,MAAQA,EAChBk4C,EAAMz3C,OAAS+4C,GAEXtB,EAAMl4C,MAAM64C,EAAOrgD,KAAK0/C,GAC5BA,EAAQ,CACNl4C,KAAMA,EACNS,MAAO+4C,IAKb,IAAK,IAAIvjD,EAAI,EAAGA,EAAI+W,EAAM5U,OAAS,EAAGnC,IACpC,QAAqBwI,IAAjBuO,EAAM/W,EAAI,GAAd,CAEkB+J,GADlB63C,EAAO14C,EAAMs4C,EAAQxhD,KACZoiD,QAAgBR,EAAKQ,QAAQ53C,EAAO64C,EAAcR,EAAOnvB,GAAkBkuB,EAAKK,MAErFL,EAAK/wC,OAELwyC,EADsB,iBAAbzB,EAAK/wC,KACC+wC,EAAK/wC,KAEL+wC,EAAK/wC,KAAKwyC,EAAcR,IAGzC35C,EAAQhI,KAAK+H,OAAOo6C,MAGlBniD,KAAKgqC,YAAY,sBAAuBmY,GACxCA,EAAe,QACfn6C,EAAQhI,KAAK+H,OAAOo6C,IAGtB7B,EAAUtgD,KAAKmgD,cAAcgC,GAC7BpE,EAAY/kC,GACZ2yB,EAAK3rC,KAAKkgD,QAAQiC,IACfpE,UAAY/kC,GAGb0nC,EAAK4B,iBAAgBvE,EAAY/kC,GACrC,MAGF,GAAI1P,EACF,GAAoB,kBAATT,EACH63C,IAAuB,IAAfA,EAAK6B,OAAoBxB,EAAMl4C,OAASA,GAGhDk4C,EAAMl4C,MAAM64C,EAAOrgD,KAAK0/C,GAC5BA,EAAQ,CACNl4C,KAAMA,EACNS,MAAOA,IALTy3C,EAAMz3C,OAASA,OAQZ,GAAIT,EAAM,CACXk4C,EAAMl4C,MAAM64C,EAAOrgD,KAAK0/C,GAC5BA,EAAQ,CACNl4C,KAAM,KACNS,MAAO,IAGT,IAASxK,EAAI,EAAGA,EAAI+J,EAAK5H,OAAQnC,IAC/B4iD,EAAOrgD,KAAKwH,EAAK/J,IAKvB,GAAIi/C,GAAavrB,EAAKvxB,OAAQ,MAG9B,GAFA88C,EAAY/kC,EAERopC,IAAkBrC,EAAiB,CAQrC,IAPIqC,EAAgB,EAAI5vB,EAAKvxB,QAC3BjB,KAAKgqC,YAAY,sCAAuC,CACtDkY,WAAYA,EACZ1vB,KAAMA,IAIHurB,EAAYvrB,EAAKvxB,QAClB8/C,EAAMl4C,MAAM64C,EAAOrgD,KAAK0/C,GAC5BA,EAAQ,CACNz3C,MAAOkpB,EAAKqkB,UAAUkH,EAAWA,GAAa,KAC9Cl1C,KAAM,YAIVs5C,EAAe,QACfR,EAAQ,GACR,OAUJ,OANIZ,EAAMl4C,MAAM64C,EAAOrgD,KAAK0/C,GAExBY,EAAM1gD,OAAS,GACb0gD,EAAM,KAAOQ,GAAcR,EAAMa,QAAQ,OAAQL,GAGhD,CACLT,OAAQA,EACR15C,MAAO25C,EAAM1gD,OAAS0gD,EAAQQ,IAIlCniD,KAAKgqC,YAAcoD,EAAOpD,cACzBliC,KAAKk4C,EAAUlgD,WAClB1B,EAAQ4hD,UAAYA,KAEtBzrC,IAAI9H,OAAO,gCAAiC,CAAC,UAAW,UAAW,SAAU,iBAAiB,SAAUkH,EAASvV,EAASD,GACxH,aAEA,IAAI+wB,EAAOvb,EAAQ,eAEf8uC,EAAqB,WACvBziD,KAAK0iD,OAAS,CACZ,MAAS,CAAC,CACR3B,MAAO,aACPH,MAAO,MACN,CACDL,aAAc,YAKpB,WACEvgD,KAAK2iD,SAAW,SAAU1C,EAAO2C,GAC/B,GAAKA,EAQL,IAAK,IAAIxgD,KAAO69C,EAAO,CAGrB,IAFA,IAAIj4C,EAAQi4C,EAAM79C,GAETtD,EAAI,EAAGA,EAAIkJ,EAAM/G,OAAQnC,IAAK,CACrC,IAAI4hD,EAAO14C,EAAMlJ,IAEb4hD,EAAK/wC,MAAQ+wC,EAAKQ,WACI,iBAAbR,EAAK/wC,MACoB,IAA9B+wC,EAAK/wC,KAAKvJ,QAAQw8C,KAAelC,EAAK/wC,KAAOizC,EAASlC,EAAK/wC,MAG7D+wC,EAAKmC,WAAgD,IAAnCnC,EAAKmC,UAAUz8C,QAAQw8C,KAAelC,EAAKmC,UAAYD,EAASlC,EAAKmC,YAI/F7iD,KAAK0iD,OAAOE,EAASxgD,GAAO4F,OAtB5B,IAAK,IAAI5F,KAAO69C,EACdjgD,KAAK0iD,OAAOtgD,GAAO69C,EAAM79C,IAyB/BpC,KAAK8iD,SAAW,WACd,OAAO9iD,KAAK0iD,QAGd1iD,KAAK+iD,WAAa,SAAUC,EAAgBJ,EAAQK,EAAal7C,EAAQm7C,GACvE,IAAIH,EAAsC,mBAAlBC,GAA+B,IAAIA,GAAiBF,WAAaE,EAEzF,GAAIj7C,EACF,IAAK,IAAIjJ,EAAI,EAAGA,EAAIiJ,EAAO9G,OAAQnC,IACjCiJ,EAAOjJ,GAAK8jD,EAAS76C,EAAOjJ,QAK9B,IAAK,IAAIsD,KAFT2F,EAAS,GAEOg7C,EACdh7C,EAAO1G,KAAKuhD,EAASxgD,GAMzB,GAFApC,KAAK2iD,SAASI,EAAYH,GAEtBK,EACF,KAAIN,EAAWxhD,MAAMrB,UAAUojD,EAAS,OAAS,WAEjD,IAASpkD,EAAI,EAAGA,EAAIiJ,EAAO9G,OAAQnC,IACjC6jD,EAASnhD,MAAMxB,KAAK0iD,OAAO36C,EAAOjJ,IAAKowB,EAAKxB,SAASu1B,IAIpDjjD,KAAKmjD,UAASnjD,KAAKmjD,QAAU,IAClCnjD,KAAKmjD,QAAQ9hD,KAAKuhD,IAGpB5iD,KAAKojD,UAAY,WACf,OAAOpjD,KAAKmjD,SAGd,IAAIE,EAAY,SAAmBlB,EAAcR,GAE/C,OADoB,SAAhBQ,GAA2BR,EAAM1gD,SAAQ0gD,EAAMa,QAAQxiD,KAAK6iD,UAAWV,GACpEniD,KAAK6iD,WAGVS,EAAW,SAAkBnB,EAAcR,GAE7C,OADAA,EAAM1pB,QACC0pB,EAAM1pB,SAAW,SAG1Bj4B,KAAKujD,eAAiB,WACpB,IAAInvC,EAAK,EACL6rC,EAAQjgD,KAAK0iD,OAuFjBjkD,OAAO6S,KAAK2uC,GAAOnxC,SArFnB,SAAS00C,EAAaphD,GACpB,IAAI4F,EAAQi4C,EAAM79C,GAClB4F,EAAMy7C,WAAY,EAElB,IAAK,IAAI3kD,EAAI,EAAGA,EAAIkJ,EAAM/G,OAAQnC,IAAK,CACrC,IAAI4hD,EAAO14C,EAAMlJ,GACb4kD,EAAW,KAEXviD,MAAMkW,QAAQqpC,KAChBgD,EAAWhD,EACXA,EAAO,KAGJA,EAAKE,OAASF,EAAK39C,QACtB29C,EAAKE,MAAQF,EAAK39C,MACb29C,EAAK/wC,OAAM+wC,EAAK/wC,KAAO,IAC5B+wC,EAAK/wC,KAAKtO,KAAK,CACbk/C,aAAcG,EAAKK,OAClB,CACDA,MAAOL,EAAKK,MAAQ,OACpBH,MAAOF,EAAKn2B,KAAOm2B,EAAK39C,MACxB4M,KAAM,QAER+wC,EAAKK,MAAQL,EAAKK,MAAQ,SAC1BL,EAAKr/C,MAAO,GAGd,IAAIsO,EAAO+wC,EAAK/wC,MAAQ+wC,EAAKr/C,KAE7B,GAAIsO,GAAQxO,MAAMkW,QAAQ1H,GAAO,CAC/B,IAAIg0C,EAAYjD,EAAKiD,UAEhBA,IAEqB,iBADxBA,EAAYjD,EAAKK,SACiB4C,EAAYA,EAAU,IAAM,IAC1D1D,EAAM0D,KAAYA,GAAavvC,MAGrC6rC,EAAM0D,GAAah0C,EACnB+wC,EAAK/wC,KAAOg0C,EACZH,EAAaG,OACI,OAARh0C,IACT+wC,EAAK/wC,KAAO2zC,GASd,GANI5C,EAAKr/C,OACPq/C,EAAKmC,UAAYnC,EAAK/wC,MAAQ+wC,EAAKr/C,KACnCq/C,EAAK/wC,KAAO0zC,SACL3C,EAAKr/C,MAGVq/C,EAAKT,MACP,IAAK,IAAIb,KAAKsB,EAAKT,MACbA,EAAMb,GACJa,EAAMb,GAAG/9C,MAAM4+C,EAAMb,GAAG/9C,KAAKG,MAAMy+C,EAAMb,GAAIsB,EAAKT,MAAMb,IAE5Da,EAAMb,GAAKsB,EAAKT,MAAMb,GAK5B,IAAIwE,EAA6B,iBAARlD,EAAmBA,EAAOA,EAAKrnC,QAQxD,GANIuqC,IAC8BF,EAA5BviD,MAAMkW,QAAQusC,GAAyBA,EAAYn5C,KAAI,SAAUoZ,GACnE,OAAOo8B,EAAMp8B,MACIo8B,EAAM2D,IAGvBF,EAAU,CACZ,IAAI54C,EAAO,CAAChM,EAAG,GAAGS,OAAOmkD,GACrBhD,EAAKmD,WAAU/4C,EAAOA,EAAKJ,QAAO,SAAUmZ,GAC9C,OAAQA,EAAElU,SAEZ3H,EAAMiR,OAAOzX,MAAMwG,EAAO8C,GAC1BhM,IAGE4hD,EAAKoD,aACPpD,EAAKK,MAAQ/gD,KAAK+jD,oBAAoBrD,EAAKoD,WAAYpD,EAAKH,cAAgB,OAAQG,EAAKC,wBAClFD,EAAKH,iBAKuBvgD,OAG3CA,KAAK+jD,oBAAsB,SAAUt5C,EAAK81C,EAAcyD,EAAYC,GAClE,IAAIC,EAAWzlD,OAAOuL,OAAO,MAc7B,OAbAhK,KAAKmkD,aAAe,GACpB1lD,OAAO6S,KAAK7G,GAAKqE,SAAQ,SAAU8I,GAIjC,IAHA,IACIwsC,EADI35C,EAAImN,GACC5D,MAAMiwC,GAAa,KAEvBnlD,EAAIslD,EAAKnjD,OAAQnC,KAAM,CAC9B,IAAIulD,EAAOD,EAAKtlD,GAChBkB,KAAKmkD,aAAa9iD,KAAKgjD,GACnBL,IAAYK,EAAOA,EAAKn8C,eAC5Bg8C,EAASG,GAAQzsC,KAElB5X,MACHyK,EAAM,KACCu5C,EAAa,SAAU16C,GAC5B,OAAO46C,EAAS56C,EAAMpB,gBAAkBq4C,GACtC,SAAUj3C,GACZ,OAAO46C,EAAS56C,IAAUi3C,IAI9BvgD,KAAKskD,YAAc,WACjB,OAAOtkD,KAAKukD,aAEbz8C,KAAK26C,EAAmB3iD,WAC3B1B,EAAQqkD,mBAAqBA,KAE/BluC,IAAI9H,OAAO,qBAAsB,CAAC,UAAW,UAAW,WAAW,SAAUkH,EAASvV,EAASD,GAC7F,aAEA,IAAIqmD,EAAY,WACdxkD,KAAKykD,YAAc,KAGrB,WACEzkD,KAAKoK,IAAM,SAAUqB,EAAM9B,EAAQ4J,GACjC,YAAQjM,GACN,KAAKtH,KAAKykD,YACRzkD,KAAKykD,YAAc,GAErB,KAAKzkD,KAAKykD,YAAYh5C,GACpBzL,KAAKykD,YAAYh5C,GAAQ,GAG7BzL,KAAKykD,YAAYh5C,GAAM9B,GAAU4J,GAGnCvT,KAAK0kD,cAAgB,SAAUC,GAC7B,IAAK,IAAIviD,KAAOuiD,EACd,IAAK,IAAIh7C,KAAUg7C,EAAWviD,GAC5BpC,KAAKoK,IAAIhI,EAAKuH,EAAQg7C,EAAWviD,GAAKuH,KAK5C3J,KAAK8J,OAAS,SAAU2B,GAClBzL,KAAKykD,aAAezkD,KAAKykD,YAAYh5C,WAChCzL,KAAKykD,YAAYh5C,IAI5BzL,KAAK4kD,QAAU,SAAU/f,EAAMn6B,GAC7B,GAAoB,oBAATm6B,EACT,IAAI8f,GAAa,IAAI9f,GAAOggB,cAAcn6C,QAEtCi6C,EAAa9f,EAAKggB,cAAcn6C,GAGtC1K,KAAK0kD,cAAcC,IAGrB3kD,KAAK6kD,cAAgB,SAAUn6C,GAC7B,GAAKA,EAEE,CAGL,IAFA,IAAIiS,EAAM,GAED7d,EAAI,EAAGA,EAAI4L,EAAOzJ,OAAQnC,IAC7BkB,KAAKykD,YAAY/5C,EAAO5L,MAC1B6d,EAAIjS,EAAO5L,IAAMkB,KAAKykD,YAAY/5C,EAAO5L,KAI7C,OAAO6d,EAVP,OAAO3c,KAAKykD,eAaf38C,KAAK08C,EAAU1kD,WAClB1B,EAAQomD,UAAYA,KAEtBjwC,IAAI9H,OAAO,qBAAsB,CAAC,UAAW,UAAW,SAAU,cAAc,SAAUkH,EAASvV,EAASD,GAC1G,aAEA,IAAI6rB,EAAQrW,EAAQ,WAAWqW,MAE3B86B,EAAgB,SAAuBz4B,EAAS04B,EAAYC,GAC9DhlD,KAAKilD,SAAW54B,EAChBrsB,KAAKklD,KAAOH,EACZ/kD,KAAKmlD,WAAa94B,EAAQ+4B,UAAUL,GACpC,IAAIhE,EAAQ10B,EAAQg5B,WAAWN,EAAYC,GAC3ChlD,KAAKslD,YAAcvE,EAAQA,EAAM/nC,OAAS,IAG5C,WACEhZ,KAAKulD,aAAe,WAGlB,IAFAvlD,KAAKslD,aAAe,EAEbtlD,KAAKslD,YAAc,GAAG,CAG3B,GAFAtlD,KAAKklD,MAAQ,EAETllD,KAAKklD,KAAO,EAEd,OADAllD,KAAKklD,KAAO,EACL,KAGTllD,KAAKmlD,WAAanlD,KAAKilD,SAASG,UAAUplD,KAAKklD,MAC/CllD,KAAKslD,YAActlD,KAAKmlD,WAAWlkD,OAAS,EAG9C,OAAOjB,KAAKmlD,WAAWnlD,KAAKslD,cAG9BtlD,KAAKwlD,YAAc,WAEjB,IAAIzG,EAEJ,IAHA/+C,KAAKslD,aAAe,EAGbtlD,KAAKslD,aAAetlD,KAAKmlD,WAAWlkD,QAAQ,CAIjD,GAHAjB,KAAKklD,MAAQ,EACRnG,IAAUA,EAAW/+C,KAAKilD,SAASrmB,aAEpC5+B,KAAKklD,MAAQnG,EAEf,OADA/+C,KAAKklD,KAAOnG,EAAW,EAChB,KAGT/+C,KAAKmlD,WAAanlD,KAAKilD,SAASG,UAAUplD,KAAKklD,MAC/CllD,KAAKslD,YAAc,EAGrB,OAAOtlD,KAAKmlD,WAAWnlD,KAAKslD,cAG9BtlD,KAAKylD,gBAAkB,WACrB,OAAOzlD,KAAKmlD,WAAWnlD,KAAKslD,cAG9BtlD,KAAK0lD,mBAAqB,WACxB,OAAO1lD,KAAKklD,MAGdllD,KAAK2lD,sBAAwB,WAC3B,IAAIC,EAAY5lD,KAAKmlD,WACjBU,EAAa7lD,KAAKslD,YAClBh7B,EAASs7B,EAAUC,GAAY9iD,MACnC,QAAeuE,IAAXgjB,EAAsB,OAAOA,EAGjC,IAFAA,EAAS,EAEFu7B,EAAa,GAElBv7B,GAAUs7B,EADVC,GAAc,GACkBv8C,MAAMrI,OAGxC,OAAOqpB,GAGTtqB,KAAK8lD,wBAA0B,WAC7B,MAAO,CACLz7B,IAAKrqB,KAAKklD,KACV56B,OAAQtqB,KAAK2lD,0BAIjB3lD,KAAK+lD,qBAAuB,WAC1B,IAAIhF,EAAQ/gD,KAAKmlD,WAAWnlD,KAAKslD,aAC7Bh7B,EAAStqB,KAAK2lD,wBAClB,OAAO,IAAI37B,EAAMhqB,KAAKklD,KAAM56B,EAAQtqB,KAAKklD,KAAM56B,EAASy2B,EAAMz3C,MAAMrI,WAErE6G,KAAKg9C,EAAchlD,WACtB1B,EAAQ0mD,cAAgBA,KAE1BvwC,IAAI9H,OAAO,4BAA6B,CAAC,UAAW,UAAW,SAAU,cAAe,qBAAsB,qBAAsB,iBAAiB,SAAUkH,EAASvV,EAASD,GAC/K,aAEA,IAUI+O,EAVAuP,EAAM9I,EAAQ,iBAEd6wC,EAAY7wC,EAAQ,gBAAgB6wC,UAEpCM,EAAgBnxC,EAAQ,wBAAwBmxC,cAEhD51B,EAAOvb,EAAQ,kBAEfqyC,EAAwB,CAAC,OAAQ,eAAgB,SAAU,QAAS,wBACpEC,EAA4B,CAAC,OAAQ,eAAgB,SAAU,QAAS,uBAAwB,WAEhGC,EAAe,GACfC,EAAgB,CAClB,IAAK,IACL,IAAK,KAGHC,EAAc,SAAqBztB,GACrC,IAAIvkB,GAAM,EASV,GAPIukB,EAAO0tB,cACTjyC,EAAKukB,EAAOvG,UAAUpZ,MAClBktC,EAAa1G,YAAc7mB,EAAO0tB,YAAY7G,aAAY0G,EAAe,CAC3E1G,WAAY7mB,EAAO0tB,YAAY7G,cAI/B0G,EAAa9xC,GAAK,OAAOlH,EAAUg5C,EAAa9xC,GACpDlH,EAAUg5C,EAAa9xC,GAAM,CAC3BkyC,qBAAsB,EACtBC,iBAAkB,EAClBC,oBAAqB,GACrBC,sBAAuB,EACvBC,kBAAmB,EACnBC,uBAAwB,GACxBC,qBAAsB,KAItBC,EAAa,SAAoBz0B,EAAWgT,EAAU0hB,EAASC,GACjE,IAAIC,EAAU50B,EAAU7H,IAAIF,IAAM+H,EAAUrvB,MAAMsnB,IAClD,MAAO,CACLuF,KAAMk3B,EAAU1hB,EAAW2hB,EAC3B30B,UAAW,CAAC,EAAGA,EAAUrvB,MAAMunB,OAAS,EAAG08B,EAAS50B,EAAU7H,IAAID,QAAU08B,EAAU,EAAI,MAI1FC,EAAkB,SAASA,EAAgBjoD,GAC7CgB,KAAKoK,IAAI,SAAU,aAAa,SAAUpC,EAAO2B,EAAQgvB,EAAQtM,EAASuD,GACxE,IAAI8C,EAASiG,EAAOmf,oBAChBtlB,EAAOnG,EAAQpU,IAAI0a,QAAQD,EAAOrI,KAEtC,GAAY,KAARuF,EAAa,CACfw2B,EAAYztB,GACZ,IAAIvG,EAAYuG,EAAO5C,oBACnBqP,EAAW/Y,EAAQpU,IAAIwqB,aAAarQ,GAExC,GAAiB,KAAbgT,GAAgC,MAAbA,GAAoBzM,EAAOuuB,2BAChD,OAAOL,EAAWz0B,EAAWgT,EAAU,IAAK,KACvC,GAAI6hB,EAAgBE,gBAAgBxuB,EAAQtM,GACjD,MAAI,WAAWltB,KAAKqzB,EAAKE,EAAOpI,UAAYqO,EAAOmB,mBAAqB96B,GAAWA,EAAQooD,QACzFH,EAAgBI,iBAAiB1uB,EAAQtM,EAAS,KAC3C,CACLuD,KAAM,KACNwC,UAAW,CAAC,EAAG,MAGjB60B,EAAgBK,kBAAkB3uB,EAAQtM,EAAS,KAC5C,CACLuD,KAAM,IACNwC,UAAW,CAAC,EAAG,UAIhB,GAAY,KAARxC,EAAa,CAItB,GAHAw2B,EAAYztB,GAGK,KAFDnG,EAAKqkB,UAAUnkB,EAAOpI,OAAQoI,EAAOpI,OAAS,GAQ5D,GAAiB,OALF+B,EAAQk7B,oBAAoB,IAAK,CAC9Cj9B,OAAQoI,EAAOpI,OAAS,EACxBD,IAAKqI,EAAOrI,OAGW48B,EAAgBO,sBAAsB90B,EAAQF,EAAM5C,GAE3E,OADAq3B,EAAgBQ,yBACT,CACL73B,KAAM,GACNwC,UAAW,CAAC,EAAG,QAIhB,IAAY,MAARxC,GAAwB,QAARA,EAAgB,CACzCw2B,EAAYztB,GACZ,IAAIouB,EAAU,GASd,GAPIE,EAAgBS,uBAAuBh1B,EAAQF,KACjDu0B,EAAU73B,EAAKlC,aAAa,IAAK9f,EAAQu5C,uBACzCQ,EAAgBU,6BAKA,MAFFn1B,EAAKqkB,UAAUnkB,EAAOpI,OAAQoI,EAAOpI,OAAS,GAEvC,CACrB,IAAIs9B,EAAev7B,EAAQw7B,oBAAoB,CAC7Cx9B,IAAKqI,EAAOrI,IACZC,OAAQoI,EAAOpI,OAAS,GACvB,KACH,IAAKs9B,EAAc,OAAO,KAC1B,IAAIE,EAAc9nD,KAAK+nD,WAAW17B,EAAQsG,QAAQi1B,EAAav9B,UAC1D,KAAI08B,EAIT,YADAE,EAAgBU,4BAFZG,EAAc9nD,KAAK+nD,WAAWv1B,GAMpC,IAAIokB,EAASkR,EAAcz7B,EAAQ27B,eACnC,MAAO,CACLp4B,KAAM,KAAOgnB,EAAS,KAAOkR,EAAcf,EAC3C30B,UAAW,CAAC,EAAGwkB,EAAO31C,OAAQ,EAAG21C,EAAO31C,SAG1CgmD,EAAgBU,gCAGpB3nD,KAAKoK,IAAI,SAAU,YAAY,SAAUpC,EAAO2B,EAAQgvB,EAAQtM,EAAS5B,GACvE,IAAI2a,EAAW/Y,EAAQpU,IAAIwqB,aAAahY,GAExC,IAAKA,EAAMgB,eAA6B,KAAZ2Z,EAAiB,CAK3C,GAJAghB,EAAYztB,GAIK,KAHNtM,EAAQpU,IAAI0a,QAAQlI,EAAM1nB,MAAMsnB,KACtBwsB,UAAUpsB,EAAMF,IAAID,OAAQG,EAAMF,IAAID,OAAS,GAIlE,OADAG,EAAMF,IAAID,SACHG,EAEPvd,EAAQu5C,4BAIdzmD,KAAKoK,IAAI,SAAU,aAAa,SAAUpC,EAAO2B,EAAQgvB,EAAQtM,EAASuD,GACxE,GAAY,KAARA,EAAa,CACfw2B,EAAYztB,GACZ,IAAIvG,EAAYuG,EAAO5C,oBACnBqP,EAAW/Y,EAAQpU,IAAIwqB,aAAarQ,GAExC,GAAiB,KAAbgT,GAAmBzM,EAAOuuB,2BAC5B,OAAOL,EAAWz0B,EAAWgT,EAAU,IAAK,KACvC,GAAI6hB,EAAgBE,gBAAgBxuB,EAAQtM,GAEjD,OADA46B,EAAgBI,iBAAiB1uB,EAAQtM,EAAS,KAC3C,CACLuD,KAAM,KACNwC,UAAW,CAAC,EAAG,SAGd,GAAY,KAARxC,EAAa,CACtBw2B,EAAYztB,GACZ,IAAIjG,EAASiG,EAAOmf,oBAChBtlB,EAAOnG,EAAQpU,IAAI0a,QAAQD,EAAOrI,KAGtC,GAAiB,KAFDmI,EAAKqkB,UAAUnkB,EAAOpI,OAAQoI,EAAOpI,OAAS,GAQ5D,GAAiB,OALF+B,EAAQk7B,oBAAoB,IAAK,CAC9Cj9B,OAAQoI,EAAOpI,OAAS,EACxBD,IAAKqI,EAAOrI,OAGW48B,EAAgBO,sBAAsB90B,EAAQF,EAAM5C,GAE3E,OADAq3B,EAAgBQ,yBACT,CACL73B,KAAM,GACNwC,UAAW,CAAC,EAAG,QAMzBpyB,KAAKoK,IAAI,SAAU,YAAY,SAAUpC,EAAO2B,EAAQgvB,EAAQtM,EAAS5B,GACvE,IAAI2a,EAAW/Y,EAAQpU,IAAIwqB,aAAahY,GAExC,IAAKA,EAAMgB,eAA6B,KAAZ2Z,IAC1BghB,EAAYztB,GAIK,KAHNtM,EAAQpU,IAAI0a,QAAQlI,EAAM1nB,MAAMsnB,KACtBwsB,UAAUpsB,EAAM1nB,MAAMunB,OAAS,EAAGG,EAAM1nB,MAAMunB,OAAS,IAI1E,OADAG,EAAMF,IAAID,SACHG,KAIbzqB,KAAKoK,IAAI,WAAY,aAAa,SAAUpC,EAAO2B,EAAQgvB,EAAQtM,EAASuD,GAC1E,GAAY,KAARA,EAAa,CACfw2B,EAAYztB,GACZ,IAAIvG,EAAYuG,EAAO5C,oBACnBqP,EAAW/Y,EAAQpU,IAAIwqB,aAAarQ,GAExC,GAAiB,KAAbgT,GAAmBzM,EAAOuuB,2BAC5B,OAAOL,EAAWz0B,EAAWgT,EAAU,IAAK,KACvC,GAAI6hB,EAAgBE,gBAAgBxuB,EAAQtM,GAEjD,OADA46B,EAAgBI,iBAAiB1uB,EAAQtM,EAAS,KAC3C,CACLuD,KAAM,KACNwC,UAAW,CAAC,EAAG,SAGd,GAAY,KAARxC,EAAa,CACtBw2B,EAAYztB,GACZ,IAAIjG,EAASiG,EAAOmf,oBAChBtlB,EAAOnG,EAAQpU,IAAI0a,QAAQD,EAAOrI,KAGtC,GAAiB,KAFDmI,EAAKqkB,UAAUnkB,EAAOpI,OAAQoI,EAAOpI,OAAS,GAQ5D,GAAiB,OALF+B,EAAQk7B,oBAAoB,IAAK,CAC9Cj9B,OAAQoI,EAAOpI,OAAS,EACxBD,IAAKqI,EAAOrI,OAGW48B,EAAgBO,sBAAsB90B,EAAQF,EAAM5C,GAE3E,OADAq3B,EAAgBQ,yBACT,CACL73B,KAAM,GACNwC,UAAW,CAAC,EAAG,QAMzBpyB,KAAKoK,IAAI,WAAY,YAAY,SAAUpC,EAAO2B,EAAQgvB,EAAQtM,EAAS5B,GACzE,IAAI2a,EAAW/Y,EAAQpU,IAAIwqB,aAAahY,GAExC,IAAKA,EAAMgB,eAA6B,KAAZ2Z,IAC1BghB,EAAYztB,GAIK,KAHNtM,EAAQpU,IAAI0a,QAAQlI,EAAM1nB,MAAMsnB,KACtBwsB,UAAUpsB,EAAM1nB,MAAMunB,OAAS,EAAGG,EAAM1nB,MAAMunB,OAAS,IAI1E,OADAG,EAAMF,IAAID,SACHG,KAIbzqB,KAAKoK,IAAI,iBAAkB,aAAa,SAAUpC,EAAO2B,EAAQgvB,EAAQtM,EAASuD,GAChF,IAAIq4B,EAAS57B,EAAQ67B,MAAMC,SAAWhC,EAEtC,GAAmB,GAAfv2B,EAAK3uB,QAAegnD,EAAOr4B,GAAO,CACpC,GAAI5vB,KAAKooD,mBAA4D,GAAxCpoD,KAAKooD,iBAAiBhiD,QAAQwpB,GAAa,OACxEw2B,EAAYztB,GACZ,IAAI0vB,EAAQz4B,EACRwC,EAAYuG,EAAO5C,oBACnBqP,EAAW/Y,EAAQpU,IAAIwqB,aAAarQ,GAExC,KAAiB,KAAbgT,GAAuC,GAAnBA,EAASnkC,QAAgBgnD,EAAO7iB,KAAczM,EAAOuuB,2BAC3E,OAAOL,EAAWz0B,EAAWgT,EAAUijB,EAAOA,GACzC,IAAKjjB,EAAU,CACpB,IAAI1S,EAASiG,EAAOmf,oBAChBtlB,EAAOnG,EAAQpU,IAAI0a,QAAQD,EAAOrI,KAClCi+B,EAAW91B,EAAKqkB,UAAUnkB,EAAOpI,OAAS,EAAGoI,EAAOpI,QACpDi+B,EAAY/1B,EAAKqkB,UAAUnkB,EAAOpI,OAAQoI,EAAOpI,OAAS,GAC1Dy2B,EAAQ10B,EAAQg5B,WAAW3yB,EAAOrI,IAAKqI,EAAOpI,QAC9Ck+B,EAAan8B,EAAQg5B,WAAW3yB,EAAOrI,IAAKqI,EAAOpI,OAAS,GAChE,GAAgB,MAAZg+B,GAAoBvH,GAAS,SAAS5hD,KAAK4hD,EAAMl4C,MAAO,OAAO,KACnE,IAEI4/C,EAFAC,EAAe3H,GAAS,gBAAgB5hD,KAAK4hD,EAAMl4C,MACnD8/C,GAAeH,GAAc,gBAAgBrpD,KAAKqpD,EAAW3/C,MAGjE,GAAI0/C,GAAaF,GACfI,EAAOC,IAAiBC,IACZ,cAAcxpD,KAAKqpD,EAAW3/C,QAAO4/C,GAAO,OACnD,CACL,GAAIC,IAAiBC,EAAa,OAAO,KAEzC,GAAID,GAAgBC,EAAa,OAAO,KAExC,IAAIC,EAASv8B,EAAQ67B,MAAMlK,QAC3B4K,EAAO7K,UAAY,EACnB,IAAI8K,EAAeD,EAAOzpD,KAAKmpD,GAC/BM,EAAO7K,UAAY,EACnB,IAAI+K,EAAcF,EAAOzpD,KAAKmpD,GAC9B,GAAIO,GAAgBC,EAAa,OAAO,KAExC,GAAIP,IAAc,gBAAgBppD,KAAKopD,GAAY,OAAO,KAE1D,IAAIQ,EAAav2B,EAAKE,EAAOpI,OAAS,GACtC,GAAIg+B,GAAYD,IAAUU,GAAcV,GAASO,EAAOzpD,KAAK4pD,IAAc,OAAO,KAClFN,GAAO,EAGT,MAAO,CACL74B,KAAM64B,EAAOJ,EAAQA,EAAQ,GAC7Bj2B,UAAW,CAAC,EAAG,SAKvBpyB,KAAKoK,IAAI,iBAAkB,YAAY,SAAUpC,EAAO2B,EAAQgvB,EAAQtM,EAAS5B,GAC/E,IAAIw9B,EAAS57B,EAAQ67B,MAAMC,SAAWhC,EAClC/gB,EAAW/Y,EAAQpU,IAAIwqB,aAAahY,GAExC,IAAKA,EAAMgB,eAAiBw8B,EAAO/7C,eAAek5B,KAChDghB,EAAYztB,GACDtM,EAAQpU,IAAI0a,QAAQlI,EAAM1nB,MAAMsnB,KACtBwsB,UAAUpsB,EAAM1nB,MAAMunB,OAAS,EAAGG,EAAM1nB,MAAMunB,OAAS,IAE3D8a,GAEf,OADA3a,EAAMF,IAAID,SACHG,MAMfw8B,EAAgBE,gBAAkB,SAAUxuB,EAAQtM,GAClD,IAAIqG,EAASiG,EAAOmf,oBAChBl4C,EAAW,IAAIklD,EAAcz4B,EAASqG,EAAOrI,IAAKqI,EAAOpI,QAE7D,IAAKtqB,KAAKgpD,gBAAgBppD,EAAS6lD,mBAAqB,OAAQO,GAAwB,CACtF,GAAI,SAAS7mD,KAAKw5B,EAAOtM,QAAQsG,QAAQD,EAAOrI,KAAKqI,EAAOpI,SAAU,OAAO,EAC7E,IAAI2+B,EAAY,IAAInE,EAAcz4B,EAASqG,EAAOrI,IAAKqI,EAAOpI,OAAS,GACvE,IAAKtqB,KAAKgpD,gBAAgBC,EAAUxD,mBAAqB,OAAQO,GAAwB,OAAO,EAIlG,OADApmD,EAAS4lD,cACF5lD,EAAS8lD,uBAAyBhzB,EAAOrI,KAAOrqB,KAAKgpD,gBAAgBppD,EAAS6lD,mBAAqB,OAAQQ,IAGpHgB,EAAgB+B,gBAAkB,SAAUjI,EAAOxd,GACjD,OAAOA,EAAMn9B,QAAQ26C,EAAMl4C,MAAQk4C,IAAU,GAG/CkG,EAAgBI,iBAAmB,SAAU1uB,EAAQtM,EAAS68B,GAC5D,IAAIx2B,EAASiG,EAAOmf,oBAChBtlB,EAAOnG,EAAQpU,IAAI0a,QAAQD,EAAOrI,KACjCrqB,KAAKwnD,sBAAsB90B,EAAQF,EAAMtlB,EAAQs5C,oBAAoB,MAAKt5C,EAAQo5C,qBAAuB,GAC9Gp5C,EAAQq5C,gBAAkB7zB,EAAOrI,IACjCnd,EAAQs5C,oBAAsB0C,EAAU12B,EAAK0kB,OAAOxkB,EAAOpI,QAC3Dpd,EAAQo5C,wBAGVW,EAAgBK,kBAAoB,SAAU3uB,EAAQtM,EAAS68B,GAC7D,IAAIx2B,EAASiG,EAAOmf,oBAChBtlB,EAAOnG,EAAQpU,IAAI0a,QAAQD,EAAOrI,KACjCrqB,KAAK0nD,uBAAuBh1B,EAAQF,KAAOtlB,EAAQu5C,sBAAwB,GAChFv5C,EAAQw5C,iBAAmBh0B,EAAOrI,IAClCnd,EAAQy5C,uBAAyBn0B,EAAK0kB,OAAO,EAAGxkB,EAAOpI,QAAU4+B,EACjEh8C,EAAQ05C,qBAAuBp0B,EAAK0kB,OAAOxkB,EAAOpI,QAClDpd,EAAQu5C,yBAGVQ,EAAgBO,sBAAwB,SAAU90B,EAAQF,EAAM02B,GAC9D,OAAOh8C,EAAQo5C,qBAAuB,GAAK5zB,EAAOrI,MAAQnd,EAAQq5C,iBAAmB2C,IAAYh8C,EAAQs5C,oBAAoB,IAAMh0B,EAAK0kB,OAAOxkB,EAAOpI,UAAYpd,EAAQs5C,qBAG5KS,EAAgBS,uBAAyB,SAAUh1B,EAAQF,GACzD,OAAOtlB,EAAQu5C,sBAAwB,GAAK/zB,EAAOrI,MAAQnd,EAAQw5C,kBAAoBl0B,EAAK0kB,OAAOxkB,EAAOpI,UAAYpd,EAAQ05C,sBAAwBp0B,EAAK0kB,OAAO,EAAGxkB,EAAOpI,SAAWpd,EAAQy5C,wBAGjMM,EAAgBQ,uBAAyB,WACvCv6C,EAAQs5C,oBAAsBt5C,EAAQs5C,oBAAoBtP,OAAO,GACjEhqC,EAAQo5C,wBAGVW,EAAgBU,0BAA4B,WACtCz6C,IACFA,EAAQu5C,sBAAwB,EAChCv5C,EAAQw5C,kBAAoB,IAIhCjqC,EAAIL,SAAS6qC,EAAiBzC,GAC9BpmD,EAAQ6oD,gBAAkBA,KAE5B1yC,IAAI9H,OAAO,cAAe,CAAC,UAAW,UAAW,WAAW,SAAUkH,EAASvV,EAASD,GACtF,aAMA,IAJA,IAAIgrD,EAAY,CAAC,GAAI,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,GAAI,GAAI,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,GAAI,EAAG,IAAK,EAAG,GAAI,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,IAAK,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,GAAI,EAAG,IAAK,EAAG,EAAG,EAAG,IAAK,GAAI,GAAI,EAAG,EAAG,EAAG,GAAI,GAAI,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,GAAI,GAAI,EAAG,GAAI,EAAG,EAAG,EAAG,IAAK,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,GAAI,GAAI,EAAG,IAAK,GAAI,GAAI,EAAG,EAAG,EAAG,GAAI,IAAK,GAAI,EAAG,GAAI,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,GAAI,GAAI,EAAG,GAAI,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,GAAI,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,GAAI,EAAG,GAAI,GAAI,EAAG,GAAI,EAAG,GAAI,GAAI,GAAI,EAAG,EAAG,EAAG,IAAK,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,GAAI,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,GAAI,GAAI,GAAI,GAAI,GAAI,IAAK,EAAG,GAAI,EAAG,GAAI,EAAG,GAAI,GAAI,GAAI,EAAG,EAAG,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,EAAG,EAAG,EAAG,EAAG,GAAI,GAAI,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,GAAI,EAAG,GAAI,GAAI,GAAI,EAAG,GAAI,EAAG,GAAI,GAAI,GAAI,EAAG,EAAG,GAAI,GAAI,EAAG,GAAI,EAAG,GAAI,GAAI,GAAI,EAAG,GAAI,EAAG,GAAI,EAAG,GAAI,EAAG,EAAG,GAAI,EAAG,GAAI,GAAI,EAAG,EAAG,GAAI,EAAG,GAAI,GAAI,EAAG,GAAI,GAAI,GAAI,EAAG,EAAG,EAAG,GAAI,GAAI,EAAG,EAAG,GAAI,GAAI,IAAK,GAAI,IAAK,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,GAAI,EAAG,GAAI,EAAG,GAAI,EAAG,GAAI,EAAG,GAAI,GAAI,EAAG,EAAG,EAAG,GAAI,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,KAAM,GAAI,EAAG,GAAI,EAAG,IAAK,EAAG,EAAG,GAAI,GAAI,GAAI,GAAI,GAAI,EAAG,GAAI,GAAI,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,GAAI,EAAG,IAAK,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,GAAI,EAAG,GAAI,GAAI,GAAI,GAAI,GAAI,IAAK,KAAM,GAAI,MAAO,GAAI,KAAM,GAAI,GAAI,EAAG,IAAK,EAAG,GAAI,GAAI,GAAI,EAAG,GAAI,GAAI,EAAG,EAAG,GAAI,EAAG,GAAI,GAAI,EAAG,GAAI,EAAG,EAAG,IAAK,EAAG,EAAG,IAAK,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,GAAI,EAAG,GAAI,GAAI,GAAI,EAAG,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,E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CA3CD,EAAOC,QAAU,IAA0B,uC,gBCA3CD,EAAOC,QAAU,IAA0B,uC,gBCA3CD,EAAOC,QAAU,IAA0B,uC,gBCA3CD,EAAOC,QAAU,IAA0B,uC,gBCA3CD,EAAOC,QAAU,IAA0B,uC,gBCA3CD,EAAOC,QAAU,IAA0B,uC,gBCA3CD,EAAOC,QAAU,IAA0B,uC,gBCA3CD,EAAOC,QAAU,IAA0B,uC,gBCA3CD,EAAOC,QAAU,IAA0B,uC,gBCA3CD,EAAOC,QAAU,IAA0B,uC,gBCA3CD,EAAOC,QAAU,IAA0B,uC,gBCA3CD,EAAOC,QAAU,IAA0B,uC,gBCA3CD,EAAOC,QAAU,IAA0B,uC,gBCA3CD,EAAOC,QAAU,IAA0B,uC,gBCA3CD,EAAOC,QAAU,IAA0B,uC,gBCA3CD,EAAOC,QAAU,IAA0B,uC,gBCA3CD,EAAOC,QAAU,IAA0B,uC,gBCA3CD,EAAOC,QAAU,IAA0B,uC,gBCA3CD,EAAOC,QAAU,IAA0B,uC,gBCA3CD,EAAOC,QAAU,IAA0B,uC,gBCA3CD,EAAOC,QAAU,IAA0B,uC,gBCA3CD,EAAOC,QAAU,IAA0B,uC,gBCA3CD,EAAOC,QAAU,IAA0B,uC,gBCA3CD,EAAOC,QAAU,IAA0B,uC,gBCA3CD,EAAOC,QAAU,IAA0B,uC,gBCA3CD,EAAOC,QAAU,IAA0B,uC,gBCA3CD,EAAOC,QAAU,IAA0B,uC,gBCA3CD,EAAOC,QAAU,IAA0B,uC,gBCA3CD,EAAOC,QAAU,IAA0B,uC,gBCA3CD,EAAOC,QAAU,IAA0B,uC,gBCA3CD,EAAOC,QAAU,IAA0B,uC,gBCA3CD,EAAOC,QAAU,IAA0B,uC,gBCA3CD,EAAOC,QAAU,IAA0B,uC,gBCA3CD,EAAOC,QAAU,IAA0B,uC,gBCA3CD,EAAOC,QAAU,IAA0B,uC,gBCA3CD,EAAOC,QAAU,IAA0B,uC,gBCA3CD,EAAOC,QAAU,IAA0B,uC,gBCA3CD,EAAOC,QAAU,IAA0B,uC,gBCA3CD,EAAOC,QAAU,IAA0B,uC,gBCA3CD,EAAOC,QAAU,IAA0B,uC,gBCA3CD,EAAOC,QAAU,IAA0B,uC,gBCA3CD,EAAOC,QAAU,IAA0B,uC,gBCA3CD,EAAOC,QAAU,IAA0B,uC,gBCA3CD,EAAOC,QAAU,IAA0B,uC,gBCA3CD,EAAOC,QAAU,IAA0B,uC,gBCA3CD,EAAOC,QAAU,IAA0B,uC,gBCA3CD,EAAOC,QAAU,IAA0B,uC,gBCA3CD,EAAOC,QAAU,IAA0B,uC,gBCA3CD,EAAOC,QAAU,IAA0B,uC,gBCA3CD,EAAOC,QAAU,IAA0B,uC,gBCA3CD,EAAOC,QAAU,IAA0B,uC,gBCA3CD,EAAOC,QAAU,IAA0B,uC,gBCA3CD,EAAOC,QAAU,IAA0B,uC,gBCA3CD,EAAOC,QAAU,IAA0B,uC,gBCA3CD,EAAOC,QAAU,IAA0B,uC,gBCA3CD,EAAOC,QAAU,IAA0B,uC,gBCA3CD,EAAOC,QAAU,IAA0B,uC,gBCA3CD,EAAOC,QAAU,IAA0B,uC,gBCA3CD,EAAOC,QAAU,IAA0B,uC,gBCA3CD,EAAOC,QAAU,IAA0B,uC,gBCA3CD,EAAOC,QAAU,IAA0B,uC,gBCA3CD,EAAOC,QAAU,IAA0B,uC,gBCA3CD,EAAOC,QAAU,IAA0B,uC,gBCA3CD,EAAOC,QAAU,IAA0B,uC,gBCA3CD,EAAOC,QAAU,IAA0B,uC,gBCA3CD,EAAOC,QAAU,IAA0B,uC,gBCA3CD,EAAOC,QAAU,IAA0B,uC,gBCA3CD,EAAOC,QAAU,IAA0B,uC,gBCA3CD,EAAOC,QAAU,IAA0B,uC,gBCA3CD,EAAOC,QAAU,IAA0B,uC,gBCA3CD,EAAOC,QAAU,IAA0B,uC,gBCA3CD,EAAOC,QAAU,IAA0B,uC,gBCA3CD,EAAOC,QAAU,IAA0B,uC,gBCA3CD,EAAOC,QAAU,IAA0B,uC,gBCA3CD,EAAOC,QAAU,IAA0B,uC,gBCA3CD,EAAOC,QAAU,IAA0B,uC,gBCA3CD,EAAOC,QAAU,IAA0B,uC,gBCA3CD,EAAOC,QAAU,IAA0B,uC,gBCA3CD,EAAOC,QAAU,IAA0B,uC,gBCA3CD,EAAOC,QAAU,IAA0B,uC,gBCA3CD,EAAOC,QAAU,IAA0B,uC,gBCA3CD,EAAOC,QAAU,IAA0B,uC,gBCA3CD,EAAOC,QAAU,IAA0B,uC,gBCA3CD,EAAOC,QAAU,IAA0B,uC,gBCA3CD,EAAOC,QAAU,IAA0B,uC,gBCA3CD,EAAOC,QAAU,IAA0B,uC,gBCA3CD,EAAOC,QAAU,IAA0B,uC,gBCA3CD,EAAOC,QAAU,IAA0B,uC,gBCA3CD,EAAOC,QAAU,IAA0B,uC,gBCA3CD,EAAOC,QAAU,IAA0B,uC,gBCA3CD,EAAOC,QAAU,IAA0B,uC,gBCA3CD,EAAOC,QAAU,IAA0B,uC,gBCA3CD,EAAOC,QAAU,IAA0B,uC,gBCA3CD,EAAOC,QAAU,IAA0B,uC,gBCA3CD,EAAOC,QAAU,IAA0B,uC,gBCA3CD,EAAOC,QAAU,IAA0B,uC,gBCA3CD,EAAOC,QAAU,IAA0B,uC,gBCA3CD,EAAOC,QAAU,IAA0B,uC,gBCA3CD,EAAOC,QAAU,IAA0B,uC,gBCA3CD,EAAOC,QAAU,IAA0B,uC,gBCA3CD,EAAOC,QAAU,IAA0B,uC,gBCA3CD,EAAOC,QAAU,IAA0B,uC,gBCA3CD,EAAOC,QAAU,IAA0B,uC,gBCA3CD,EAAOC,QAAU,IAA0B,uC,gBCA3CD,EAAOC,QAAU,IAA0B,uC,gBCA3CD,EAAOC,QAAU,IAA0B,uC,gBCA3CD,EAAOC,QAAU,IAA0B,uC,gBCA3CD,EAAOC,QAAU,IAA0B,uC,gBCA3CD,EAAOC,QAAU,IAA0B,uC,gBCA3CD,EAAOC,QAAU,IAA0B,uC,gBCA3CD,EAAOC,QAAU,IAA0B,uC,gBCA3CD,EAAOC,QAAU,IAA0B,uC,gBCA3CD,EAAOC,QAAU,IAA0B,uC,gBCA3CD,EAAOC,QAAU,IAA0B,uC,gBCA3CD,EAAOC,QAAU,IAA0B,uC,gBCA3CD,EAAOC,QAAU,IAA0B,uC,gBCA3CD,EAAOC,QAAU,IAA0B,uC,gBCA3CD,EAAOC,QAAU,IAA0B,uC,gBCA3CD,EAAOC,QAAU,IAA0B,uC,gBCA3CD,EAAOC,QAAU,IAA0B,uC,gBCA3CD,EAAOC,QAAU,IAA0B,uC,gBCA3CD,EAAOC,QAAU,IAA0B,uC,gBCA3CD,EAAOC,QAAU,IAA0B,uC,gBCA3CD,EAAOC,QAAU,IAA0B,uC,gBCA3CD,EAAOC,QAAU,IAA0B,uC,gBCA3CD,EAAOC,QAAU,IAA0B,uC,gBCA3CD,EAAOC,QAAU,IAA0B,uC,gBCA3CD,EAAOC,QAAU,IAA0B,uC,gBCA3CD,EAAOC,QAAU,IAA0B,uC,gBCA3CD,EAAOC,QAAU,IAA0B,uC,gBCA3CD,EAAOC,QAAU,IAA0B,uC,gBCA3CD,EAAOC,QAAU,IAA0B,uC,gBCA3CD,EAAOC,QAAU,IAA0B,uC,gBCA3CD,EAAOC,QAAU,IAA0B,uC,gBCA3CD,EAAOC,QAAU,IAA0B,uC,gBCA3CD,EAAOC,QAAU,IAA0B,uC,gBCA3CD,EAAOC,QAAU,IAA0B,uC,gBCA3CD,EAAOC,QAAU,IAA0B,uC,gBCA3CD,EAAOC,QAAU,IAA0B,uC,gBCA3CD,EAAOC,QAAU,IAA0B,uC,gBCA3CD,EAAOC,QAAU,IAA0B,uC,gBCA3CD,EAAOC,QAAU,IAA0B,uC,gBCA3CD,EAAOC,QAAU,IAA0B,uC,gBCA3CD,EAAOC,QAAU,IAA0B,uC,gBCA3CD,EAAOC,QAAU,IAA0B,uC,gBCA3CD,EAAOC,QAAU,IAA0B,uC,gBCA3CD,EAAOC,QAAU,IAA0B,uC,gBCA3CD,EAAOC,QAAU,IAA0B,uC,gBCA3CD,EAAOC,QAAU,IAA0B,uC,gBCA3CD,EAAOC,QAAU,IAA0B,uC,gBCA3CD,EAAOC,QAAU,IAA0B,uC,gBCA3CD,EAAOC,QAAU,IAA0B,uC,gBCA3CD,EAAOC,QAAU,IAA0B,uC,gBCA3CD,EAAOC,QAAU,IAA0B,uC,gBCA3CD,EAAOC,QAAU,IAA0B,uC,gBCA3CD,EAAOC,QAAU,IAA0B,uC,gBCA3CD,EAAOC,QAAU,IAA0B,uC,gBCA3CD,EAAOC,QAAU,IAA0B,uC,gBCA3CD,EAAOC,QAAU,IAA0B,uC,gBCA3CD,EAAOC,QAAU,IAA0B,uC,gBCA3CD,EAAOC,QAAU,IAA0B,uC,gBCA3CD,EAAOC,QAAU,IAA0B,uC,gBCA3CD,EAAOC,QAAU,IAA0B,uC,gBCA3CD,EAAOC,QAAU,IAA0B,uC,gBCA3CD,EAAOC,QAAU,IAA0B,uC,gBCA3CD,EAAOC,QAAU,IAA0B,uC,gBCA3CD,EAAOC,QAAU,IAA0B,uC,gBCA3CD,EAAOC,QAAU,IAA0B,uC,gBCA3CD,EAAOC,QAAU,IAA0B,uC,gBCA3CD,EAAOC,QAAU,IAA0B,uC,gBCA3CD,EAAOC,QAAU,IAA0B,uC,gBCA3CD,EAAOC,QAAU,IAA0B,uC,gBCA3CD,EAAOC,QAAU,IAA0B,uC,gBCA3CD,EAAOC,QAAU,IAA0B,uC,gBCA3CD,EAAOC,QAAU,IAA0B,uC,gBCA3CD,EAAOC,QAAU,IAA0B,uC,gBCA3CD,EAAOC,QAAU,IAA0B,uC,gBCA3CD,EAAOC,QAAU,IAA0B,uC,gBCA3CD,EAAOC,QAAU,IAA0B,uC,gBCA3CD,EAAOC,QAAU,IAA0B,uC,gBCA3CD,EAAOC,QAAU,IAA0B,uC,gBCA3CD,EAAOC,QAAU,IAA0B,uC,gBCA3CD,EAAOC,QAAU,IAA0B,uC,gBCA3CD,EAAOC,QAAU,IAA0B,uC,gBCA3CD,EAAOC,QAAU,IAA0B,uC,gBCA3CD,EAAOC,QAAU,IAA0B,uC,gBCA3CD,EAAOC,QAAU,IAA0B,uC,gBCA3CD,EAAOC,QAAU,IAA0B,uC,gBCA3CD,EAAOC,QAAU,IAA0B,uC,gBCA3CD,EAAOC,QAAU,IAA0B,uC,gBCA3CD,EAAOC,QAAU,IAA0B,uC,gBCA3CD,EAAOC,QAAU,IAA0B,uC,gBCA3CD,EAAOC,QAAU,IAA0B,uC,gBCA3CD,EAAOC,QAAU,IAA0B,uC,gBCA3CD,EAAOC,QAAU,IAA0B,uC,gBCA3CD,EAAOC,QAAU,IAA0B,uC,gBCA3CD,EAAOC,QAAU,IAA0B,uC,gBCA3CD,EAAOC,QAAU,IAA0B,uC,gBCA3CD,EAAOC,QAAU,IAA0B,uC,gBCA3CD,EAAOC,QAAU,IAA0B,uC,gBCA3CD,EAAOC,QAAU,IAA0B,uC,gBCA3CD,EAAOC,QAAU,IAA0B,uC,gBCA3CD,EAAOC,QAAU,IAA0B,uC,gBCA3CD,EAAOC,QAAU,IAA0B,uC,gBCA3CD,EAAOC,QAAU,IAA0B,uC,gBCA3CD,EAAOC,QAAU,IAA0B,uC,gBCA3CD,EAAOC,QAAU,IAA0B,uC,gBCA3CD,EAAOC,QAAU,IAA0B,uC,gBCA3CD,EAAOC,QAAU,IAA0B,uC,gBCA3CD,EAAOC,QAAU,IAA0B,uC,gBCA3CD,EAAOC,QAAU,IAA0B,uC,gBCA3CD,EAAOC,QAAU,IAA0B,uC,gBCA3CD,EAAOC,QAAU,IAA0B,uC,gBCA3CD,EAAOC,QAAU,IAA0B,uC,gBCA3CD,EAAOC,QAAU,IAA0B,uC,gBCA3CD,EAAOC,QAAU,IAA0B,uC,gBCA3CD,EAAOC,QAAU,IAA0B,uC,gBCA3CD,EAAOC,QAAU,IAA0B,uC,gBCA3CD,EAAOC,QAAU,IAA0B,uC,gBCA3CD,EAAOC,QAAU,IAA0B,uC,gBCA3CD,EAAOC,QAAU,IAA0B,uC,gBCA3CD,EAAOC,QAAU,IAA0B,uC,gBCA3CD,EAAOC,QAAU,IAA0B,uC,gBCA3CD,EAAOC,QAAU,IAA0B,uC,gBCA3CD,EAAOC,QAAU,IAA0B,uC,gBCA3CD,EAAOC,QAAU,IAA0B,uC,gBCA3CD,EAAOC,QAAU,IAA0B,uC,gBCA3CD,EAAOC,QAAU,IAA0B,uC,gBCA3CD,EAAOC,QAAU,IAA0B,uC,gBCA3CD,EAAOC,QAAU,IAA0B,uC,gBCA3CD,EAAOC,QAAU,IAA0B,uC,gBCA3CD,EAAOC,QAAU,IAA0B,uC,gBCA3CD,EAAOC,QAAU,IAA0B,uC,gBCA3CD,EAAOC,QAAU,IAA0B,uC,gBCA3CD,EAAOC,QAAU,IAA0B,uC,gBCA3CD,EAAOC,QAAU,IAA0B,uC,gBCA3CD,EAAOC,QAAU,IAA0B,uC,gBCA3CD,EAAOC,QAAU,IAA0B,uC,gBCA3CD,EAAOC,QAAU,IAA0B,uC,gBCA3CD,EAAOC,QAAU,IAA0B,uC,gBCA3CD,EAAOC,QAAU,IAA0B,uC,gBCA3CD,EAAOC,QAAU,IAA0B,uC,gBCA3CD,EAAOC,QAAU,IAA0B,uC,gBCA3CD,EAAOC,QAAU,IAA0B,uC,gBCA3CD,EAAOC,QAAU,IAA0B,uC,gBCA3CD,EAAOC,QAAU,IAA0B,uC,gBCA3CD,EAAOC,QAAU,IAA0B,uC,gBCA3CD,EAAOC,QAAU,IAA0B,uC,gBCA3CD,EAAOC,QAAU,IAA0B,uC,gBCA3CD,EAAOC,QAAU,IAA0B,uC,gBCA3CD,EAAOC,QAAU,IAA0B,uC,gBCA3CD,EAAOC,QAAU,IAA0B,uC,gBCA3CD,EAAOC,QAAU,IAA0B,uC,gBCA3CD,EAAOC,QAAU,IAA0B,uC,gBCA3CD,EAAOC,QAAU,IAA0B,uC,gBCA3CD,EAAOC,QAAU,IAA0B,uC,gBCA3CD,EAAOC,QAAU,IAA0B,uC,gBCA3CD,EAAOC,QAAU,IAA0B,uC,gBCA3CD,EAAOC,QAAU,IAA0B,uC,gBCA3CD,EAAOC,QAAU,IAA0B,uC,gBCA3CD,EAAOC,QAAU,IAA0B,uC,gBCA3CD,EAAOC,QAAU,IAA0B,uC,gBCA3CD,EAAOC,QAAU,IAA0B,uC,gBCA3CD,EAAOC,QAAU,IAA0B,uC,gBCA3CD,EAAOC,QAAU,IAA0B,uC,gBCA3CD,EAAOC,QAAU,IAA0B,uC,gBCA3CD,EAAOC,QAAU,IAA0B,uC,gBCA3CD,EAAOC,QAAU,IAA0B,uC,gBCA3CD,EAAOC,QAAU,IAA0B,uC,gBCA3CD,EAAOC,QAAU,IAA0B,uC,gBCA3CD,EAAOC,QAAU,IAA0B,uC,gBCA3CD,EAAOC,QAAU,IAA0B,uC,gBCA3CD,EAAOC,QAAU,IAA0B,uC,gBCA3CD,EAAOC,QAAU,IAA0B,uC,gBCA3CD,EAAOC,QAAU,IAA0B,uC,gBCA3CD,EAAOC,QAAU,IAA0B,uC,gBCA3CD,EAAOC,QAAU,IAA0B,uC,gBCA3CD,EAAOC,QAAU,IAA0B,uC,gBCA3CD,EAAOC,QAAU,IAA0B,uC,gBCA3CD,EAAOC,QAAU,IAA0B,uC,gBCA3CD,EAAOC,QAAU,IAA0B,uC,gBCA3CD,EAAOC,QAAU,IAA0B,uC,gBCA3CD,EAAOC,QAAU,IAA0B,uC,gBCA3CD,EAAOC,QAAU,IAA0B,uC,gBCA3CD,EAAOC,QAAU,IAA0B,uC,gBCA3CD,EAAOC,QAAU,IAA0B,uC,gBCA3CD,EAAOC,QAAU,IAA0B,uC,gBCA3CD,EAAOC,QAAU,IAA0B,uC,gBCA3CD,EAAOC,QAAU,IAA0B,uC,gBCA3CD,EAAOC,QAAU,IAA0B,uC,gBCA3CD,EAAOC,QAAU,IAA0B,uC,gBCA3CD,EAAOC,QAAU,IAA0B,uC,gBCA3CD,EAAOC,QAAU,IAA0B,uC,gBCA3CD,EAAOC,QAAU,IAA0B,uC,gBCA3CD,EAAOC,QAAU,IAA0B,uC,gBCA3CD,EAAOC,QAAU,IAA0B,uC,gBCA3CD,EAAOC,QAAU,IAA0B,uC,gBCA3CD,EAAOC,QAAU,IAA0B,uC,gBCA3CD,EAAOC,QAAU,IAA0B,uC,gBCA3CD,EAAOC,QAAU,IAA0B,uC,gBCA3CD,EAAOC,QAAU,IAA0B,uC,gBCA3CD,EAAOC,QAAU,IAA0B,uC,gBCA3CD,EAAOC,QAAU,IAA0B,uC,gBCA3CD,EAAOC,QAAU,IAA0B,uC,gBCA3CD,EAAOC,QAAU,IAA0B,uC,gBCA3CD,EAAOC,QAAU,IAA0B,uC,gBCA3CD,EAAOC,QAAU,IAA0B,uC,gBCA3CD,EAAOC,QAAU,IAA0B,uC,gBCA3CD,EAAOC,QAAU,IAA0B,uC,gBCA3CD,EAAOC,QAAU,IAA0B,uC,gBCA3CD,EAAOC,QAAU,IAA0B,uC,gBCA3CD,EAAOC,QAAU,IAA0B,uC,gBCA3CD,EAAOC,QAAU,IAA0B,uC,gBCA3CD,EAAOC,QAAU,IAA0B,uC,gBCA3CD,EAAOC,QAAU,IAA0B,uC,gBCA3CD,EAAOC,QAAU,IAA0B,uC,gBCA3CD,EAAOC,QAAU,IAA0B,uC,gBCA3CD,EAAOC,QAAU,IAA0B,uC,gBCA3CD,EAAOC,QAAU,IAA0B,uC,gBCA3CD,EAAOC,QAAU,IAA0B,uC,gBCA3CD,EAAOC,QAAU,IAA0B,uC,gBCA3CD,EAAOC,QAAU,IAA0B,uC,gBCA3CD,EAAOC,QAAU,IAA0B,uC,gBCA3CD,EAAOC,QAAU,IAA0B,uC,gBCA3CD,EAAOC,QAAU,IAA0B,uC,gBCA3CD,EAAOC,QAAU,IAA0B,uC,gBCA3CD,EAAOC,QAAU,IAA0B,uC,gBCA3CD,EAAOC,QAAU,IAA0B,uC,gBCA3CD,EAAOC,QAAU,IAA0B,uC,gBCA3CD,EAAOC,QAAU,IAA0B,uC,gBCA3CD,EAAOC,QAAU,IAA0B,uC,gBCA3CD,EAAOC,QAAU,IAA0B,uC,gBCA3CD,EAAOC,QAAU,IAA0B,uC,gBCA3CD,EAAOC,QAAU,IAA0B,uC,gBCA3CD,EAAOC,QAAU,IAA0B,uC,gBCA3CD,EAAOC,QAAU,IAA0B,uC,gBCA3CD,EAAOC,QAAU,IAA0B,uC,gBCA3CD,EAAOC,QAAU,IAA0B,uC,gBCA3CD,EAAOC,QAAU,IAA0B,uC,gBCA3CD,EAAOC,QAAU,IAA0B,uC,gBCA3CD,EAAOC,QAAU,IAA0B,uC,gBCA3CD,EAAOC,QAAU,IAA0B,uC,gBCA3CD,EAAOC,QAAU,IAA0B,uC,gBCA3CD,EAAOC,QAAU,IAA0B,uC,gBCA3CD,EAAOC,QAAU,IAA0B,uC,gBCA3CD,EAAOC,QAAU,IAA0B,uC,gBCA3CD,EAAOC,QAAU,IAA0B,uC,gBCA3CD,EAAOC,QAAU,IAA0B,uC,gBCA3CD,EAAOC,QAAU,IAA0B,uC,gBCA3CD,EAAOC,QAAU,IAA0B,uC,gBCA3CD,EAAOC,QAAU,IAA0B,uC,gBCA3CD,EAAOC,QAAU,IAA0B,uC,gBCA3CD,EAAOC,QAAU,IAA0B,uC,gBCA3CD,EAAOC,QAAU,IAA0B,uC,gBCA3CD,EAAOC,QAAU,IAA0B,uC,gBCA3CD,EAAOC,QAAU,IAA0B,uC,gBCA3CD,EAAOC,QAAU,IAA0B,uC,gBCA3CD,EAAOC,QAAU,IAA0B,uC,gBCA3CD,EAAOC,QAAU,IAA0B,uC,gBCA3CD,EAAOC,QAAU,IAA0B,uC,gBCA3CD,EAAOC,QAAU,IAA0B,uC,gBCA3CD,EAAOC,QAAU,IAA0B,uC,gBCA3CD,EAAOC,QAAU,IAA0B,uC,gBCA3CD,EAAOC,QAAU,IAA0B,uC,gBCA3CD,EAAOC,QAAU,IAA0B,uC,gBCA3CD,EAAOC,QAAU,IAA0B,uC,gBCA3CD,EAAOC,QAAU,IAA0B,uC,gBCA3CD,EAAOC,QAAU,IAA0B,uC,gBCA3CD,EAAOC,QAAU,IAA0B,uC,gBCA3CD,EAAOC,QAAU,IAA0B,uC,gBCA3CD,EAAOC,QAAU,IAA0B,uC,gBCA3CD,EAAOC,QAAU,IAA0B,uC,gBCA3CD,EAAOC,QAAU,IAA0B,uC,gBCA3CD,EAAOC,QAAU,IAA0B,uC,gBCA3CD,EAAOC,QAAU,IAA0B,uC,gBCA3CD,EAAOC,QAAU,IAA0B,uC,gBCA3CD,EAAOC,QAAU,IAA0B,uC,gBCA3CD,EAAOC,QAAU,IAA0B,uC,gBCA3CD,EAAOC,QAAU,IAA0B,uC,gBCA3CD,EAAOC,QAAU,IAA0B,uC,gBCA3CD,EAAOC,QAAU,IAA0B,uC,gBCA3CD,EAAOC,QAAU,IAA0B,uC,gBCA3CD,EAAOC,QAAU,IAA0B,uC,gBCA3CD,EAAOC,QAAU,IAA0B,uC,gBCA3CD,EAAOC,QAAU,IAA0B,uC,gBCA3CD,EAAOC,QAAU,IAA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","file":"js/590-7732df858486b779ad8a.chunk.js","sourcesContent":["module.exports = function (module) {\n if (!module.webpackPolyfill) {\n module.deprecate = function () {};\n\n module.paths = []; // module.parent = undefined by default\n\n if (!module.children) module.children = [];\n Object.defineProperty(module, \"loaded\", {\n enumerable: true,\n get: function get() {\n return module.l;\n }\n });\n Object.defineProperty(module, \"id\", {\n enumerable: true,\n get: function get() {\n return module.i;\n }\n });\n module.webpackPolyfill = 1;\n }\n\n return module;\n};","\"use strict\";\n\nmodule.exports = function (url, options) {\n if (!options) {\n // eslint-disable-next-line no-param-reassign\n options = {};\n } // eslint-disable-next-line no-underscore-dangle, no-param-reassign\n\n\n url = url && url.__esModule ? url.default : url;\n\n if (typeof url !== 'string') {\n return url;\n } // If url is already wrapped in quotes, remove them\n\n\n if (/^['\"].*['\"]$/.test(url)) {\n // eslint-disable-next-line no-param-reassign\n url = url.slice(1, -1);\n }\n\n if (options.hash) {\n // eslint-disable-next-line no-param-reassign\n url += options.hash;\n } // Should url be wrapped?\n // See https://drafts.csswg.org/css-values-3/#urls\n\n\n if (/[\"'() \\t\\n]/.test(url) || options.needQuotes) {\n return \"\\\"\".concat(url.replace(/\"/g, '\\\\\"').replace(/\\n/g, '\\\\n'), \"\\\"\");\n }\n\n return url;\n};","module.exports = require(\"regenerator-runtime\");\n","function _typeof(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\nvar g; // This works in non-strict mode\n\ng = function () {\n return this;\n}();\n\ntry {\n // This works if eval is allowed (see CSP)\n g = g || new Function(\"return this\")();\n} catch (e) {\n // This works if the window reference is available\n if ((typeof window === \"undefined\" ? \"undefined\" : _typeof(window)) === \"object\") g = window;\n} // g can still be undefined, but nothing to do about it...\n// We return undefined, instead of nothing here, so it's\n// easier to handle this case. if(!global) { ...}\n\n\nmodule.exports = g;","module.exports = function() {\n\tthrow new Error(\"define cannot be used indirect\");\n};\n","function _typeof2(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof2 = function _typeof2(obj) { return typeof obj; }; } else { _typeof2 = function _typeof2(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof2(obj); }\n\n(function (global, factory) {\n (typeof exports === \"undefined\" ? \"undefined\" : _typeof2(exports)) === \"object\" && typeof module !== \"undefined\" ? factory(exports) : typeof define === \"function\" && define.amd ? define([\"exports\"], factory) : factory(global.ActionCable = {});\n})(this, function (exports) {\n \"use strict\";\n\n var adapters = {\n logger: self.console,\n WebSocket: self.WebSocket\n };\n var logger = {\n log: function log() {\n if (this.enabled) {\n var _adapters$logger;\n\n for (var _len = arguments.length, messages = Array(_len), _key = 0; _key < _len; _key++) {\n messages[_key] = arguments[_key];\n }\n\n messages.push(Date.now());\n\n (_adapters$logger = adapters.logger).log.apply(_adapters$logger, [\"[ActionCable]\"].concat(messages));\n }\n }\n };\n\n var _typeof = typeof Symbol === \"function\" && _typeof2(Symbol.iterator) === \"symbol\" ? function (obj) {\n return _typeof2(obj);\n } : function (obj) {\n return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : _typeof2(obj);\n };\n\n var classCallCheck = function classCallCheck(instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError(\"Cannot call a class as a function\");\n }\n };\n\n var createClass = function () {\n function defineProperties(target, props) {\n for (var i = 0; i < props.length; i++) {\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n if (\"value\" in descriptor) descriptor.writable = true;\n Object.defineProperty(target, descriptor.key, descriptor);\n }\n }\n\n return function (Constructor, protoProps, staticProps) {\n if (protoProps) defineProperties(Constructor.prototype, protoProps);\n if (staticProps) defineProperties(Constructor, staticProps);\n return Constructor;\n };\n }();\n\n var now = function now() {\n return new Date().getTime();\n };\n\n var secondsSince = function secondsSince(time) {\n return (now() - time) / 1e3;\n };\n\n var clamp = function clamp(number, min, max) {\n return Math.max(min, Math.min(max, number));\n };\n\n var ConnectionMonitor = function () {\n function ConnectionMonitor(connection) {\n classCallCheck(this, ConnectionMonitor);\n this.visibilityDidChange = this.visibilityDidChange.bind(this);\n this.connection = connection;\n this.reconnectAttempts = 0;\n }\n\n ConnectionMonitor.prototype.start = function start() {\n if (!this.isRunning()) {\n this.startedAt = now();\n delete this.stoppedAt;\n this.startPolling();\n addEventListener(\"visibilitychange\", this.visibilityDidChange);\n logger.log(\"ConnectionMonitor started. pollInterval = \" + this.getPollInterval() + \" ms\");\n }\n };\n\n ConnectionMonitor.prototype.stop = function stop() {\n if (this.isRunning()) {\n this.stoppedAt = now();\n this.stopPolling();\n removeEventListener(\"visibilitychange\", this.visibilityDidChange);\n logger.log(\"ConnectionMonitor stopped\");\n }\n };\n\n ConnectionMonitor.prototype.isRunning = function isRunning() {\n return this.startedAt && !this.stoppedAt;\n };\n\n ConnectionMonitor.prototype.recordPing = function recordPing() {\n this.pingedAt = now();\n };\n\n ConnectionMonitor.prototype.recordConnect = function recordConnect() {\n this.reconnectAttempts = 0;\n this.recordPing();\n delete this.disconnectedAt;\n logger.log(\"ConnectionMonitor recorded connect\");\n };\n\n ConnectionMonitor.prototype.recordDisconnect = function recordDisconnect() {\n this.disconnectedAt = now();\n logger.log(\"ConnectionMonitor recorded disconnect\");\n };\n\n ConnectionMonitor.prototype.startPolling = function startPolling() {\n this.stopPolling();\n this.poll();\n };\n\n ConnectionMonitor.prototype.stopPolling = function stopPolling() {\n clearTimeout(this.pollTimeout);\n };\n\n ConnectionMonitor.prototype.poll = function poll() {\n var _this = this;\n\n this.pollTimeout = setTimeout(function () {\n _this.reconnectIfStale();\n\n _this.poll();\n }, this.getPollInterval());\n };\n\n ConnectionMonitor.prototype.getPollInterval = function getPollInterval() {\n var _constructor$pollInte = this.constructor.pollInterval,\n min = _constructor$pollInte.min,\n max = _constructor$pollInte.max,\n multiplier = _constructor$pollInte.multiplier;\n var interval = multiplier * Math.log(this.reconnectAttempts + 1);\n return Math.round(clamp(interval, min, max) * 1e3);\n };\n\n ConnectionMonitor.prototype.reconnectIfStale = function reconnectIfStale() {\n if (this.connectionIsStale()) {\n logger.log(\"ConnectionMonitor detected stale connection. reconnectAttempts = \" + this.reconnectAttempts + \", pollInterval = \" + this.getPollInterval() + \" ms, time disconnected = \" + secondsSince(this.disconnectedAt) + \" s, stale threshold = \" + this.constructor.staleThreshold + \" s\");\n this.reconnectAttempts++;\n\n if (this.disconnectedRecently()) {\n logger.log(\"ConnectionMonitor skipping reopening recent disconnect\");\n } else {\n logger.log(\"ConnectionMonitor reopening\");\n this.connection.reopen();\n }\n }\n };\n\n ConnectionMonitor.prototype.connectionIsStale = function connectionIsStale() {\n return secondsSince(this.pingedAt ? this.pingedAt : this.startedAt) > this.constructor.staleThreshold;\n };\n\n ConnectionMonitor.prototype.disconnectedRecently = function disconnectedRecently() {\n return this.disconnectedAt && secondsSince(this.disconnectedAt) < this.constructor.staleThreshold;\n };\n\n ConnectionMonitor.prototype.visibilityDidChange = function visibilityDidChange() {\n var _this2 = this;\n\n if (document.visibilityState === \"visible\") {\n setTimeout(function () {\n if (_this2.connectionIsStale() || !_this2.connection.isOpen()) {\n logger.log(\"ConnectionMonitor reopening stale connection on visibilitychange. visibilityState = \" + document.visibilityState);\n\n _this2.connection.reopen();\n }\n }, 200);\n }\n };\n\n return ConnectionMonitor;\n }();\n\n ConnectionMonitor.pollInterval = {\n min: 3,\n max: 30,\n multiplier: 5\n };\n ConnectionMonitor.staleThreshold = 6;\n var INTERNAL = {\n message_types: {\n welcome: \"welcome\",\n disconnect: \"disconnect\",\n ping: \"ping\",\n confirmation: \"confirm_subscription\",\n rejection: \"reject_subscription\"\n },\n disconnect_reasons: {\n unauthorized: \"unauthorized\",\n invalid_request: \"invalid_request\",\n server_restart: \"server_restart\"\n },\n default_mount_path: \"/cable\",\n protocols: [\"actioncable-v1-json\", \"actioncable-unsupported\"]\n };\n var message_types = INTERNAL.message_types,\n protocols = INTERNAL.protocols;\n var supportedProtocols = protocols.slice(0, protocols.length - 1);\n var indexOf = [].indexOf;\n\n var Connection = function () {\n function Connection(consumer) {\n classCallCheck(this, Connection);\n this.open = this.open.bind(this);\n this.consumer = consumer;\n this.subscriptions = this.consumer.subscriptions;\n this.monitor = new ConnectionMonitor(this);\n this.disconnected = true;\n }\n\n Connection.prototype.send = function send(data) {\n if (this.isOpen()) {\n this.webSocket.send(JSON.stringify(data));\n return true;\n } else {\n return false;\n }\n };\n\n Connection.prototype.open = function open() {\n if (this.isActive()) {\n logger.log(\"Attempted to open WebSocket, but existing socket is \" + this.getState());\n return false;\n } else {\n logger.log(\"Opening WebSocket, current state is \" + this.getState() + \", subprotocols: \" + protocols);\n\n if (this.webSocket) {\n this.uninstallEventHandlers();\n }\n\n this.webSocket = new adapters.WebSocket(this.consumer.url, protocols);\n this.installEventHandlers();\n this.monitor.start();\n return true;\n }\n };\n\n Connection.prototype.close = function close() {\n var _ref = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {\n allowReconnect: true\n },\n allowReconnect = _ref.allowReconnect;\n\n if (!allowReconnect) {\n this.monitor.stop();\n }\n\n if (this.isActive()) {\n return this.webSocket.close();\n }\n };\n\n Connection.prototype.reopen = function reopen() {\n logger.log(\"Reopening WebSocket, current state is \" + this.getState());\n\n if (this.isActive()) {\n try {\n return this.close();\n } catch (error) {\n logger.log(\"Failed to reopen WebSocket\", error);\n } finally {\n logger.log(\"Reopening WebSocket in \" + this.constructor.reopenDelay + \"ms\");\n setTimeout(this.open, this.constructor.reopenDelay);\n }\n } else {\n return this.open();\n }\n };\n\n Connection.prototype.getProtocol = function getProtocol() {\n if (this.webSocket) {\n return this.webSocket.protocol;\n }\n };\n\n Connection.prototype.isOpen = function isOpen() {\n return this.isState(\"open\");\n };\n\n Connection.prototype.isActive = function isActive() {\n return this.isState(\"open\", \"connecting\");\n };\n\n Connection.prototype.isProtocolSupported = function isProtocolSupported() {\n return indexOf.call(supportedProtocols, this.getProtocol()) >= 0;\n };\n\n Connection.prototype.isState = function isState() {\n for (var _len = arguments.length, states = Array(_len), _key = 0; _key < _len; _key++) {\n states[_key] = arguments[_key];\n }\n\n return indexOf.call(states, this.getState()) >= 0;\n };\n\n Connection.prototype.getState = function getState() {\n if (this.webSocket) {\n for (var state in adapters.WebSocket) {\n if (adapters.WebSocket[state] === this.webSocket.readyState) {\n return state.toLowerCase();\n }\n }\n }\n\n return null;\n };\n\n Connection.prototype.installEventHandlers = function installEventHandlers() {\n for (var eventName in this.events) {\n var handler = this.events[eventName].bind(this);\n this.webSocket[\"on\" + eventName] = handler;\n }\n };\n\n Connection.prototype.uninstallEventHandlers = function uninstallEventHandlers() {\n for (var eventName in this.events) {\n this.webSocket[\"on\" + eventName] = function () {};\n }\n };\n\n return Connection;\n }();\n\n Connection.reopenDelay = 500;\n Connection.prototype.events = {\n message: function message(event) {\n if (!this.isProtocolSupported()) {\n return;\n }\n\n var _JSON$parse = JSON.parse(event.data),\n identifier = _JSON$parse.identifier,\n message = _JSON$parse.message,\n reason = _JSON$parse.reason,\n reconnect = _JSON$parse.reconnect,\n type = _JSON$parse.type;\n\n switch (type) {\n case message_types.welcome:\n this.monitor.recordConnect();\n return this.subscriptions.reload();\n\n case message_types.disconnect:\n logger.log(\"Disconnecting. Reason: \" + reason);\n return this.close({\n allowReconnect: reconnect\n });\n\n case message_types.ping:\n return this.monitor.recordPing();\n\n case message_types.confirmation:\n return this.subscriptions.notify(identifier, \"connected\");\n\n case message_types.rejection:\n return this.subscriptions.reject(identifier);\n\n default:\n return this.subscriptions.notify(identifier, \"received\", message);\n }\n },\n open: function open() {\n logger.log(\"WebSocket onopen event, using '\" + this.getProtocol() + \"' subprotocol\");\n this.disconnected = false;\n\n if (!this.isProtocolSupported()) {\n logger.log(\"Protocol is unsupported. Stopping monitor and disconnecting.\");\n return this.close({\n allowReconnect: false\n });\n }\n },\n close: function close(event) {\n logger.log(\"WebSocket onclose event\");\n\n if (this.disconnected) {\n return;\n }\n\n this.disconnected = true;\n this.monitor.recordDisconnect();\n return this.subscriptions.notifyAll(\"disconnected\", {\n willAttemptReconnect: this.monitor.isRunning()\n });\n },\n error: function error() {\n logger.log(\"WebSocket onerror event\");\n }\n };\n\n var extend = function extend(object, properties) {\n if (properties != null) {\n for (var key in properties) {\n var value = properties[key];\n object[key] = value;\n }\n }\n\n return object;\n };\n\n var Subscription = function () {\n function Subscription(consumer) {\n var params = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n var mixin = arguments[2];\n classCallCheck(this, Subscription);\n this.consumer = consumer;\n this.identifier = JSON.stringify(params);\n extend(this, mixin);\n }\n\n Subscription.prototype.perform = function perform(action) {\n var data = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n data.action = action;\n return this.send(data);\n };\n\n Subscription.prototype.send = function send(data) {\n return this.consumer.send({\n command: \"message\",\n identifier: this.identifier,\n data: JSON.stringify(data)\n });\n };\n\n Subscription.prototype.unsubscribe = function unsubscribe() {\n return this.consumer.subscriptions.remove(this);\n };\n\n return Subscription;\n }();\n\n var Subscriptions = function () {\n function Subscriptions(consumer) {\n classCallCheck(this, Subscriptions);\n this.consumer = consumer;\n this.subscriptions = [];\n }\n\n Subscriptions.prototype.create = function create(channelName, mixin) {\n var channel = channelName;\n var params = (typeof channel === \"undefined\" ? \"undefined\" : _typeof(channel)) === \"object\" ? channel : {\n channel: channel\n };\n var subscription = new Subscription(this.consumer, params, mixin);\n return this.add(subscription);\n };\n\n Subscriptions.prototype.add = function add(subscription) {\n this.subscriptions.push(subscription);\n this.consumer.ensureActiveConnection();\n this.notify(subscription, \"initialized\");\n this.sendCommand(subscription, \"subscribe\");\n return subscription;\n };\n\n Subscriptions.prototype.remove = function remove(subscription) {\n this.forget(subscription);\n\n if (!this.findAll(subscription.identifier).length) {\n this.sendCommand(subscription, \"unsubscribe\");\n }\n\n return subscription;\n };\n\n Subscriptions.prototype.reject = function reject(identifier) {\n var _this = this;\n\n return this.findAll(identifier).map(function (subscription) {\n _this.forget(subscription);\n\n _this.notify(subscription, \"rejected\");\n\n return subscription;\n });\n };\n\n Subscriptions.prototype.forget = function forget(subscription) {\n this.subscriptions = this.subscriptions.filter(function (s) {\n return s !== subscription;\n });\n return subscription;\n };\n\n Subscriptions.prototype.findAll = function findAll(identifier) {\n return this.subscriptions.filter(function (s) {\n return s.identifier === identifier;\n });\n };\n\n Subscriptions.prototype.reload = function reload() {\n var _this2 = this;\n\n return this.subscriptions.map(function (subscription) {\n return _this2.sendCommand(subscription, \"subscribe\");\n });\n };\n\n Subscriptions.prototype.notifyAll = function notifyAll(callbackName) {\n var _this3 = this;\n\n for (var _len = arguments.length, args = Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n args[_key - 1] = arguments[_key];\n }\n\n return this.subscriptions.map(function (subscription) {\n return _this3.notify.apply(_this3, [subscription, callbackName].concat(args));\n });\n };\n\n Subscriptions.prototype.notify = function notify(subscription, callbackName) {\n for (var _len2 = arguments.length, args = Array(_len2 > 2 ? _len2 - 2 : 0), _key2 = 2; _key2 < _len2; _key2++) {\n args[_key2 - 2] = arguments[_key2];\n }\n\n var subscriptions = void 0;\n\n if (typeof subscription === \"string\") {\n subscriptions = this.findAll(subscription);\n } else {\n subscriptions = [subscription];\n }\n\n return subscriptions.map(function (subscription) {\n return typeof subscription[callbackName] === \"function\" ? subscription[callbackName].apply(subscription, args) : undefined;\n });\n };\n\n Subscriptions.prototype.sendCommand = function sendCommand(subscription, command) {\n var identifier = subscription.identifier;\n return this.consumer.send({\n command: command,\n identifier: identifier\n });\n };\n\n return Subscriptions;\n }();\n\n var Consumer = function () {\n function Consumer(url) {\n classCallCheck(this, Consumer);\n this._url = url;\n this.subscriptions = new Subscriptions(this);\n this.connection = new Connection(this);\n }\n\n Consumer.prototype.send = function send(data) {\n return this.connection.send(data);\n };\n\n Consumer.prototype.connect = function connect() {\n return this.connection.open();\n };\n\n Consumer.prototype.disconnect = function disconnect() {\n return this.connection.close({\n allowReconnect: false\n });\n };\n\n Consumer.prototype.ensureActiveConnection = function ensureActiveConnection() {\n if (!this.connection.isActive()) {\n return this.connection.open();\n }\n };\n\n createClass(Consumer, [{\n key: \"url\",\n get: function get$$1() {\n return createWebSocketURL(this._url);\n }\n }]);\n return Consumer;\n }();\n\n function createWebSocketURL(url) {\n if (typeof url === \"function\") {\n url = url();\n }\n\n if (url && !/^wss?:/i.test(url)) {\n var a = document.createElement(\"a\");\n a.href = url;\n a.href = a.href;\n a.protocol = a.protocol.replace(\"http\", \"ws\");\n return a.href;\n } else {\n return url;\n }\n }\n\n function createConsumer() {\n var url = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : getConfig(\"url\") || INTERNAL.default_mount_path;\n return new Consumer(url);\n }\n\n function getConfig(name) {\n var element = document.head.querySelector(\"meta[name='action-cable-\" + name + \"']\");\n\n if (element) {\n return element.getAttribute(\"content\");\n }\n }\n\n exports.Connection = Connection;\n exports.ConnectionMonitor = ConnectionMonitor;\n exports.Consumer = Consumer;\n exports.INTERNAL = INTERNAL;\n exports.Subscription = Subscription;\n exports.Subscriptions = Subscriptions;\n exports.adapters = adapters;\n exports.createWebSocketURL = createWebSocketURL;\n exports.logger = logger;\n exports.createConsumer = createConsumer;\n exports.getConfig = getConfig;\n Object.defineProperty(exports, \"__esModule\", {\n value: true\n });\n});","/**\n * Copyright (c) 2014-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\nvar runtime = (function (exports) {\n \"use strict\";\n\n var Op = Object.prototype;\n var hasOwn = Op.hasOwnProperty;\n var undefined; // More compressible than void 0.\n var $Symbol = typeof Symbol === \"function\" ? Symbol : {};\n var iteratorSymbol = $Symbol.iterator || \"@@iterator\";\n var asyncIteratorSymbol = $Symbol.asyncIterator || \"@@asyncIterator\";\n var toStringTagSymbol = $Symbol.toStringTag || \"@@toStringTag\";\n\n function define(obj, key, value) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n return obj[key];\n }\n try {\n // IE 8 has a broken Object.defineProperty that only works on DOM objects.\n define({}, \"\");\n } catch (err) {\n define = function(obj, key, value) {\n return obj[key] = value;\n };\n }\n\n function wrap(innerFn, outerFn, self, tryLocsList) {\n // If outerFn provided and outerFn.prototype is a Generator, then outerFn.prototype instanceof Generator.\n var protoGenerator = outerFn && outerFn.prototype instanceof Generator ? outerFn : Generator;\n var generator = Object.create(protoGenerator.prototype);\n var context = new Context(tryLocsList || []);\n\n // The ._invoke method unifies the implementations of the .next,\n // .throw, and .return methods.\n generator._invoke = makeInvokeMethod(innerFn, self, context);\n\n return generator;\n }\n exports.wrap = wrap;\n\n // Try/catch helper to minimize deoptimizations. Returns a completion\n // record like context.tryEntries[i].completion. This interface could\n // have been (and was previously) designed to take a closure to be\n // invoked without arguments, but in all the cases we care about we\n // already have an existing method we want to call, so there's no need\n // to create a new function object. We can even get away with assuming\n // the method takes exactly one argument, since that happens to be true\n // in every case, so we don't have to touch the arguments object. The\n // only additional allocation required is the completion record, which\n // has a stable shape and so hopefully should be cheap to allocate.\n function tryCatch(fn, obj, arg) {\n try {\n return { type: \"normal\", arg: fn.call(obj, arg) };\n } catch (err) {\n return { type: \"throw\", arg: err };\n }\n }\n\n var GenStateSuspendedStart = \"suspendedStart\";\n var GenStateSuspendedYield = \"suspendedYield\";\n var GenStateExecuting = \"executing\";\n var GenStateCompleted = \"completed\";\n\n // Returning this object from the innerFn has the same effect as\n // breaking out of the dispatch switch statement.\n var ContinueSentinel = {};\n\n // Dummy constructor functions that we use as the .constructor and\n // .constructor.prototype properties for functions that return Generator\n // objects. For full spec compliance, you may wish to configure your\n // minifier not to mangle the names of these two functions.\n function Generator() {}\n function GeneratorFunction() {}\n function GeneratorFunctionPrototype() {}\n\n // This is a polyfill for %IteratorPrototype% for environments that\n // don't natively support it.\n var IteratorPrototype = {};\n define(IteratorPrototype, iteratorSymbol, function () {\n return this;\n });\n\n var getProto = Object.getPrototypeOf;\n var NativeIteratorPrototype = getProto && getProto(getProto(values([])));\n if (NativeIteratorPrototype &&\n NativeIteratorPrototype !== Op &&\n hasOwn.call(NativeIteratorPrototype, iteratorSymbol)) {\n // This environment has a native %IteratorPrototype%; use it instead\n // of the polyfill.\n IteratorPrototype = NativeIteratorPrototype;\n }\n\n var Gp = GeneratorFunctionPrototype.prototype =\n Generator.prototype = Object.create(IteratorPrototype);\n GeneratorFunction.prototype = GeneratorFunctionPrototype;\n define(Gp, \"constructor\", GeneratorFunctionPrototype);\n define(GeneratorFunctionPrototype, \"constructor\", GeneratorFunction);\n GeneratorFunction.displayName = define(\n GeneratorFunctionPrototype,\n toStringTagSymbol,\n \"GeneratorFunction\"\n );\n\n // Helper for defining the .next, .throw, and .return methods of the\n // Iterator interface in terms of a single ._invoke method.\n function defineIteratorMethods(prototype) {\n [\"next\", \"throw\", \"return\"].forEach(function(method) {\n define(prototype, method, function(arg) {\n return this._invoke(method, arg);\n });\n });\n }\n\n exports.isGeneratorFunction = function(genFun) {\n var ctor = typeof genFun === \"function\" && genFun.constructor;\n return ctor\n ? ctor === GeneratorFunction ||\n // For the native GeneratorFunction constructor, the best we can\n // do is to check its .name property.\n (ctor.displayName || ctor.name) === \"GeneratorFunction\"\n : false;\n };\n\n exports.mark = function(genFun) {\n if (Object.setPrototypeOf) {\n Object.setPrototypeOf(genFun, GeneratorFunctionPrototype);\n } else {\n genFun.__proto__ = GeneratorFunctionPrototype;\n define(genFun, toStringTagSymbol, \"GeneratorFunction\");\n }\n genFun.prototype = Object.create(Gp);\n return genFun;\n };\n\n // Within the body of any async function, `await x` is transformed to\n // `yield regeneratorRuntime.awrap(x)`, so that the runtime can test\n // `hasOwn.call(value, \"__await\")` to determine if the yielded value is\n // meant to be awaited.\n exports.awrap = function(arg) {\n return { __await: arg };\n };\n\n function AsyncIterator(generator, PromiseImpl) {\n function invoke(method, arg, resolve, reject) {\n var record = tryCatch(generator[method], generator, arg);\n if (record.type === \"throw\") {\n reject(record.arg);\n } else {\n var result = record.arg;\n var value = result.value;\n if (value &&\n typeof value === \"object\" &&\n hasOwn.call(value, \"__await\")) {\n return PromiseImpl.resolve(value.__await).then(function(value) {\n invoke(\"next\", value, resolve, reject);\n }, function(err) {\n invoke(\"throw\", err, resolve, reject);\n });\n }\n\n return PromiseImpl.resolve(value).then(function(unwrapped) {\n // When a yielded Promise is resolved, its final value becomes\n // the .value of the Promise<{value,done}> result for the\n // current iteration.\n result.value = unwrapped;\n resolve(result);\n }, function(error) {\n // If a rejected Promise was yielded, throw the rejection back\n // into the async generator function so it can be handled there.\n return invoke(\"throw\", error, resolve, reject);\n });\n }\n }\n\n var previousPromise;\n\n function enqueue(method, arg) {\n function callInvokeWithMethodAndArg() {\n return new PromiseImpl(function(resolve, reject) {\n invoke(method, arg, resolve, reject);\n });\n }\n\n return previousPromise =\n // If enqueue has been called before, then we want to wait until\n // all previous Promises have been resolved before calling invoke,\n // so that results are always delivered in the correct order. If\n // enqueue has not been called before, then it is important to\n // call invoke immediately, without waiting on a callback to fire,\n // so that the async generator function has the opportunity to do\n // any necessary setup in a predictable way. This predictability\n // is why the Promise constructor synchronously invokes its\n // executor callback, and why async functions synchronously\n // execute code before the first await. Since we implement simple\n // async functions in terms of async generators, it is especially\n // important to get this right, even though it requires care.\n previousPromise ? previousPromise.then(\n callInvokeWithMethodAndArg,\n // Avoid propagating failures to Promises returned by later\n // invocations of the iterator.\n callInvokeWithMethodAndArg\n ) : callInvokeWithMethodAndArg();\n }\n\n // Define the unified helper method that is used to implement .next,\n // .throw, and .return (see defineIteratorMethods).\n this._invoke = enqueue;\n }\n\n defineIteratorMethods(AsyncIterator.prototype);\n define(AsyncIterator.prototype, asyncIteratorSymbol, function () {\n return this;\n });\n exports.AsyncIterator = AsyncIterator;\n\n // Note that simple async functions are implemented on top of\n // AsyncIterator objects; they just return a Promise for the value of\n // the final result produced by the iterator.\n exports.async = function(innerFn, outerFn, self, tryLocsList, PromiseImpl) {\n if (PromiseImpl === void 0) PromiseImpl = Promise;\n\n var iter = new AsyncIterator(\n wrap(innerFn, outerFn, self, tryLocsList),\n PromiseImpl\n );\n\n return exports.isGeneratorFunction(outerFn)\n ? iter // If outerFn is a generator, return the full iterator.\n : iter.next().then(function(result) {\n return result.done ? result.value : iter.next();\n });\n };\n\n function makeInvokeMethod(innerFn, self, context) {\n var state = GenStateSuspendedStart;\n\n return function invoke(method, arg) {\n if (state === GenStateExecuting) {\n throw new Error(\"Generator is already running\");\n }\n\n if (state === GenStateCompleted) {\n if (method === \"throw\") {\n throw arg;\n }\n\n // Be forgiving, per 25.3.3.3.3 of the spec:\n // https://people.mozilla.org/~jorendorff/es6-draft.html#sec-generatorresume\n return doneResult();\n }\n\n context.method = method;\n context.arg = arg;\n\n while (true) {\n var delegate = context.delegate;\n if (delegate) {\n var delegateResult = maybeInvokeDelegate(delegate, context);\n if (delegateResult) {\n if (delegateResult === ContinueSentinel) continue;\n return delegateResult;\n }\n }\n\n if (context.method === \"next\") {\n // Setting context._sent for legacy support of Babel's\n // function.sent implementation.\n context.sent = context._sent = context.arg;\n\n } else if (context.method === \"throw\") {\n if (state === GenStateSuspendedStart) {\n state = GenStateCompleted;\n throw context.arg;\n }\n\n context.dispatchException(context.arg);\n\n } else if (context.method === \"return\") {\n context.abrupt(\"return\", context.arg);\n }\n\n state = GenStateExecuting;\n\n var record = tryCatch(innerFn, self, context);\n if (record.type === \"normal\") {\n // If an exception is thrown from innerFn, we leave state ===\n // GenStateExecuting and loop back for another invocation.\n state = context.done\n ? GenStateCompleted\n : GenStateSuspendedYield;\n\n if (record.arg === ContinueSentinel) {\n continue;\n }\n\n return {\n value: record.arg,\n done: context.done\n };\n\n } else if (record.type === \"throw\") {\n state = GenStateCompleted;\n // Dispatch the exception by looping back around to the\n // context.dispatchException(context.arg) call above.\n context.method = \"throw\";\n context.arg = record.arg;\n }\n }\n };\n }\n\n // Call delegate.iterator[context.method](context.arg) and handle the\n // result, either by returning a { value, done } result from the\n // delegate iterator, or by modifying context.method and context.arg,\n // setting context.delegate to null, and returning the ContinueSentinel.\n function maybeInvokeDelegate(delegate, context) {\n var method = delegate.iterator[context.method];\n if (method === undefined) {\n // A .throw or .return when the delegate iterator has no .throw\n // method always terminates the yield* loop.\n context.delegate = null;\n\n if (context.method === \"throw\") {\n // Note: [\"return\"] must be used for ES3 parsing compatibility.\n if (delegate.iterator[\"return\"]) {\n // If the delegate iterator has a return method, give it a\n // chance to clean up.\n context.method = \"return\";\n context.arg = undefined;\n maybeInvokeDelegate(delegate, context);\n\n if (context.method === \"throw\") {\n // If maybeInvokeDelegate(context) changed context.method from\n // \"return\" to \"throw\", let that override the TypeError below.\n return ContinueSentinel;\n }\n }\n\n context.method = \"throw\";\n context.arg = new TypeError(\n \"The iterator does not provide a 'throw' method\");\n }\n\n return ContinueSentinel;\n }\n\n var record = tryCatch(method, delegate.iterator, context.arg);\n\n if (record.type === \"throw\") {\n context.method = \"throw\";\n context.arg = record.arg;\n context.delegate = null;\n return ContinueSentinel;\n }\n\n var info = record.arg;\n\n if (! info) {\n context.method = \"throw\";\n context.arg = new TypeError(\"iterator result is not an object\");\n context.delegate = null;\n return ContinueSentinel;\n }\n\n if (info.done) {\n // Assign the result of the finished delegate to the temporary\n // variable specified by delegate.resultName (see delegateYield).\n context[delegate.resultName] = info.value;\n\n // Resume execution at the desired location (see delegateYield).\n context.next = delegate.nextLoc;\n\n // If context.method was \"throw\" but the delegate handled the\n // exception, let the outer generator proceed normally. If\n // context.method was \"next\", forget context.arg since it has been\n // \"consumed\" by the delegate iterator. If context.method was\n // \"return\", allow the original .return call to continue in the\n // outer generator.\n if (context.method !== \"return\") {\n context.method = \"next\";\n context.arg = undefined;\n }\n\n } else {\n // Re-yield the result returned by the delegate method.\n return info;\n }\n\n // The delegate iterator is finished, so forget it and continue with\n // the outer generator.\n context.delegate = null;\n return ContinueSentinel;\n }\n\n // Define Generator.prototype.{next,throw,return} in terms of the\n // unified ._invoke helper method.\n defineIteratorMethods(Gp);\n\n define(Gp, toStringTagSymbol, \"Generator\");\n\n // A Generator should always return itself as the iterator object when the\n // @@iterator function is called on it. Some browsers' implementations of the\n // iterator prototype chain incorrectly implement this, causing the Generator\n // object to not be returned from this call. This ensures that doesn't happen.\n // See https://github.com/facebook/regenerator/issues/274 for more details.\n define(Gp, iteratorSymbol, function() {\n return this;\n });\n\n define(Gp, \"toString\", function() {\n return \"[object Generator]\";\n });\n\n function pushTryEntry(locs) {\n var entry = { tryLoc: locs[0] };\n\n if (1 in locs) {\n entry.catchLoc = locs[1];\n }\n\n if (2 in locs) {\n entry.finallyLoc = locs[2];\n entry.afterLoc = locs[3];\n }\n\n this.tryEntries.push(entry);\n }\n\n function resetTryEntry(entry) {\n var record = entry.completion || {};\n record.type = \"normal\";\n delete record.arg;\n entry.completion = record;\n }\n\n function Context(tryLocsList) {\n // The root entry object (effectively a try statement without a catch\n // or a finally block) gives us a place to store values thrown from\n // locations where there is no enclosing try statement.\n this.tryEntries = [{ tryLoc: \"root\" }];\n tryLocsList.forEach(pushTryEntry, this);\n this.reset(true);\n }\n\n exports.keys = function(object) {\n var keys = [];\n for (var key in object) {\n keys.push(key);\n }\n keys.reverse();\n\n // Rather than returning an object with a next method, we keep\n // things simple and return the next function itself.\n return function next() {\n while (keys.length) {\n var key = keys.pop();\n if (key in object) {\n next.value = key;\n next.done = false;\n return next;\n }\n }\n\n // To avoid creating an additional object, we just hang the .value\n // and .done properties off the next function object itself. This\n // also ensures that the minifier will not anonymize the function.\n next.done = true;\n return next;\n };\n };\n\n function values(iterable) {\n if (iterable) {\n var iteratorMethod = iterable[iteratorSymbol];\n if (iteratorMethod) {\n return iteratorMethod.call(iterable);\n }\n\n if (typeof iterable.next === \"function\") {\n return iterable;\n }\n\n if (!isNaN(iterable.length)) {\n var i = -1, next = function next() {\n while (++i < iterable.length) {\n if (hasOwn.call(iterable, i)) {\n next.value = iterable[i];\n next.done = false;\n return next;\n }\n }\n\n next.value = undefined;\n next.done = true;\n\n return next;\n };\n\n return next.next = next;\n }\n }\n\n // Return an iterator with no values.\n return { next: doneResult };\n }\n exports.values = values;\n\n function doneResult() {\n return { value: undefined, done: true };\n }\n\n Context.prototype = {\n constructor: Context,\n\n reset: function(skipTempReset) {\n this.prev = 0;\n this.next = 0;\n // Resetting context._sent for legacy support of Babel's\n // function.sent implementation.\n this.sent = this._sent = undefined;\n this.done = false;\n this.delegate = null;\n\n this.method = \"next\";\n this.arg = undefined;\n\n this.tryEntries.forEach(resetTryEntry);\n\n if (!skipTempReset) {\n for (var name in this) {\n // Not sure about the optimal order of these conditions:\n if (name.charAt(0) === \"t\" &&\n hasOwn.call(this, name) &&\n !isNaN(+name.slice(1))) {\n this[name] = undefined;\n }\n }\n }\n },\n\n stop: function() {\n this.done = true;\n\n var rootEntry = this.tryEntries[0];\n var rootRecord = rootEntry.completion;\n if (rootRecord.type === \"throw\") {\n throw rootRecord.arg;\n }\n\n return this.rval;\n },\n\n dispatchException: function(exception) {\n if (this.done) {\n throw exception;\n }\n\n var context = this;\n function handle(loc, caught) {\n record.type = \"throw\";\n record.arg = exception;\n context.next = loc;\n\n if (caught) {\n // If the dispatched exception was caught by a catch block,\n // then let that catch block handle the exception normally.\n context.method = \"next\";\n context.arg = undefined;\n }\n\n return !! caught;\n }\n\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n var record = entry.completion;\n\n if (entry.tryLoc === \"root\") {\n // Exception thrown outside of any try block that could handle\n // it, so set the completion value of the entire function to\n // throw the exception.\n return handle(\"end\");\n }\n\n if (entry.tryLoc <= this.prev) {\n var hasCatch = hasOwn.call(entry, \"catchLoc\");\n var hasFinally = hasOwn.call(entry, \"finallyLoc\");\n\n if (hasCatch && hasFinally) {\n if (this.prev < entry.catchLoc) {\n return handle(entry.catchLoc, true);\n } else if (this.prev < entry.finallyLoc) {\n return handle(entry.finallyLoc);\n }\n\n } else if (hasCatch) {\n if (this.prev < entry.catchLoc) {\n return handle(entry.catchLoc, true);\n }\n\n } else if (hasFinally) {\n if (this.prev < entry.finallyLoc) {\n return handle(entry.finallyLoc);\n }\n\n } else {\n throw new Error(\"try statement without catch or finally\");\n }\n }\n }\n },\n\n abrupt: function(type, arg) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n if (entry.tryLoc <= this.prev &&\n hasOwn.call(entry, \"finallyLoc\") &&\n this.prev < entry.finallyLoc) {\n var finallyEntry = entry;\n break;\n }\n }\n\n if (finallyEntry &&\n (type === \"break\" ||\n type === \"continue\") &&\n finallyEntry.tryLoc <= arg &&\n arg <= finallyEntry.finallyLoc) {\n // Ignore the finally entry if control is not jumping to a\n // location outside the try/catch block.\n finallyEntry = null;\n }\n\n var record = finallyEntry ? finallyEntry.completion : {};\n record.type = type;\n record.arg = arg;\n\n if (finallyEntry) {\n this.method = \"next\";\n this.next = finallyEntry.finallyLoc;\n return ContinueSentinel;\n }\n\n return this.complete(record);\n },\n\n complete: function(record, afterLoc) {\n if (record.type === \"throw\") {\n throw record.arg;\n }\n\n if (record.type === \"break\" ||\n record.type === \"continue\") {\n this.next = record.arg;\n } else if (record.type === \"return\") {\n this.rval = this.arg = record.arg;\n this.method = \"return\";\n this.next = \"end\";\n } else if (record.type === \"normal\" && afterLoc) {\n this.next = afterLoc;\n }\n\n return ContinueSentinel;\n },\n\n finish: function(finallyLoc) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n if (entry.finallyLoc === finallyLoc) {\n this.complete(entry.completion, entry.afterLoc);\n resetTryEntry(entry);\n return ContinueSentinel;\n }\n }\n },\n\n \"catch\": function(tryLoc) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n if (entry.tryLoc === tryLoc) {\n var record = entry.completion;\n if (record.type === \"throw\") {\n var thrown = record.arg;\n resetTryEntry(entry);\n }\n return thrown;\n }\n }\n\n // The context.catch method must only be called with a location\n // argument that corresponds to a known catch block.\n throw new Error(\"illegal catch attempt\");\n },\n\n delegateYield: function(iterable, resultName, nextLoc) {\n this.delegate = {\n iterator: values(iterable),\n resultName: resultName,\n nextLoc: nextLoc\n };\n\n if (this.method === \"next\") {\n // Deliberately forget the last sent value so that we don't\n // accidentally pass it on to the delegate.\n this.arg = undefined;\n }\n\n return ContinueSentinel;\n }\n };\n\n // Regardless of whether this script is executing as a CommonJS module\n // or not, return the runtime object so that we can declare the variable\n // regeneratorRuntime in the outer scope, which allows this module to be\n // injected easily by `bin/regenerator --include-runtime script.js`.\n return exports;\n\n}(\n // If this script is executing as a CommonJS module, use module.exports\n // as the regeneratorRuntime namespace. Otherwise create a new empty\n // object. Either way, the resulting object will be used to initialize\n // the regeneratorRuntime variable at the top of this file.\n typeof module === \"object\" ? module.exports : {}\n));\n\ntry {\n regeneratorRuntime = runtime;\n} catch (accidentalStrictMode) {\n // This module should not be running in strict mode, so the above\n // assignment should always work unless something is misconfigured. Just\n // in case runtime.js accidentally runs in strict mode, in modern engines\n // we can explicitly access globalThis. In older engines we can escape\n // strict mode using a global Function call. This could conceivably fail\n // if a Content Security Policy forbids using Function, but in that case\n // the proper solution is to fix the accidental strict mode problem. If\n // you've misconfigured your bundler to force strict mode and applied a\n // CSP to forbid Function, and you're not willing to fix either of those\n // problems, please detail your unique predicament in a GitHub issue.\n if (typeof globalThis === \"object\") {\n globalThis.regeneratorRuntime = runtime;\n } else {\n Function(\"r\", \"regeneratorRuntime = r\")(runtime);\n }\n}\n","function _typeof(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\n/* ***** BEGIN LICENSE BLOCK *****\n * Distributed under the BSD license:\n *\n * Copyright (c) 2010, Ajax.org B.V.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n * * Redistributions of source code must retain the above copyright\n * notice, this list of conditions and the following disclaimer.\n * * Redistributions in binary form must reproduce the above copyright\n * notice, this list of conditions and the following disclaimer in the\n * documentation and/or other materials provided with the distribution.\n * * Neither the name of Ajax.org B.V. nor the\n * names of its contributors may be used to endorse or promote products\n * derived from this software without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * ***** END LICENSE BLOCK ***** */\n\n/**\n * Define a module along with a payload\n * @param module a name for the payload\n * @param payload a function to call with (require, exports, module) params\n */\n(function () {\n var ACE_NAMESPACE = \"ace\";\n\n var global = function () {\n return this;\n }();\n\n if (!global && typeof window != \"undefined\") global = window; // strict mode\n\n if (!ACE_NAMESPACE && typeof requirejs !== \"undefined\") return;\n\n var define = function define(module, deps, payload) {\n if (typeof module !== \"string\") {\n if (define.original) define.original.apply(this, arguments);else {\n console.error(\"dropping module because define wasn\\'t a string.\");\n console.trace();\n }\n return;\n }\n\n if (arguments.length == 2) payload = deps;\n\n if (!define.modules[module]) {\n define.payloads[module] = payload;\n define.modules[module] = null;\n }\n };\n\n define.modules = {};\n define.payloads = {};\n /**\n * Get at functionality define()ed using the function above\n */\n\n var _require = function _require(parentId, module, callback) {\n if (typeof module === \"string\") {\n var payload = lookup(parentId, module);\n\n if (payload != undefined) {\n callback && callback();\n return payload;\n }\n } else if (Object.prototype.toString.call(module) === \"[object Array]\") {\n var params = [];\n\n for (var i = 0, l = module.length; i < l; ++i) {\n var dep = lookup(parentId, module[i]);\n if (dep == undefined && require.original) return;\n params.push(dep);\n }\n\n return callback && callback.apply(null, params) || true;\n }\n };\n\n var require = function require(module, callback) {\n var packagedModule = _require(\"\", module, callback);\n\n if (packagedModule == undefined && require.original) return require.original.apply(this, arguments);\n return packagedModule;\n };\n\n var normalizeModule = function normalizeModule(parentId, moduleName) {\n // normalize plugin requires\n if (moduleName.indexOf(\"!\") !== -1) {\n var chunks = moduleName.split(\"!\");\n return normalizeModule(parentId, chunks[0]) + \"!\" + normalizeModule(parentId, chunks[1]);\n } // normalize relative requires\n\n\n if (moduleName.charAt(0) == \".\") {\n var base = parentId.split(\"/\").slice(0, -1).join(\"/\");\n moduleName = base + \"/\" + moduleName;\n\n while (moduleName.indexOf(\".\") !== -1 && previous != moduleName) {\n var previous = moduleName;\n moduleName = moduleName.replace(/\\/\\.\\//, \"/\").replace(/[^\\/]+\\/\\.\\.\\//, \"\");\n }\n }\n\n return moduleName;\n };\n /**\n * Internal function to lookup moduleNames and resolve them by calling the\n * definition function if needed.\n */\n\n\n var lookup = function lookup(parentId, moduleName) {\n moduleName = normalizeModule(parentId, moduleName);\n var module = define.modules[moduleName];\n\n if (!module) {\n module = define.payloads[moduleName];\n\n if (typeof module === 'function') {\n var exports = {};\n var mod = {\n id: moduleName,\n uri: '',\n exports: exports,\n packaged: true\n };\n\n var req = function req(module, callback) {\n return _require(moduleName, module, callback);\n };\n\n var returnValue = module(req, exports, mod);\n exports = returnValue || mod.exports;\n define.modules[moduleName] = exports;\n delete define.payloads[moduleName];\n }\n\n module = define.modules[moduleName] = exports || module;\n }\n\n return module;\n };\n\n function exportAce(ns) {\n var root = global;\n\n if (ns) {\n if (!global[ns]) global[ns] = {};\n root = global[ns];\n }\n\n if (!root.define || !root.define.packaged) {\n define.original = root.define;\n root.define = define;\n root.define.packaged = true;\n }\n\n if (!root.require || !root.require.packaged) {\n require.original = root.require;\n root.require = require;\n root.require.packaged = true;\n }\n }\n\n exportAce(ACE_NAMESPACE);\n})();\n\nace.define(\"ace/lib/fixoldbrowsers\", [\"require\", \"exports\", \"module\"], function (require, exports, module) {\n \"use strict\";\n\n if (typeof Element != \"undefined\" && !Element.prototype.remove) {\n Object.defineProperty(Element.prototype, \"remove\", {\n enumerable: false,\n writable: true,\n configurable: true,\n value: function value() {\n this.parentNode && this.parentNode.removeChild(this);\n }\n });\n }\n});\nace.define(\"ace/lib/useragent\", [\"require\", \"exports\", \"module\"], function (require, exports, module) {\n \"use strict\";\n\n exports.OS = {\n LINUX: \"LINUX\",\n MAC: \"MAC\",\n WINDOWS: \"WINDOWS\"\n };\n\n exports.getOS = function () {\n if (exports.isMac) {\n return exports.OS.MAC;\n } else if (exports.isLinux) {\n return exports.OS.LINUX;\n } else {\n return exports.OS.WINDOWS;\n }\n };\n\n var _navigator = (typeof navigator === \"undefined\" ? \"undefined\" : _typeof(navigator)) == \"object\" ? navigator : {};\n\n var os = (/mac|win|linux/i.exec(_navigator.platform) || [\"other\"])[0].toLowerCase();\n var ua = _navigator.userAgent || \"\";\n var appName = _navigator.appName || \"\";\n exports.isWin = os == \"win\";\n exports.isMac = os == \"mac\";\n exports.isLinux = os == \"linux\";\n exports.isIE = appName == \"Microsoft Internet Explorer\" || appName.indexOf(\"MSAppHost\") >= 0 ? parseFloat((ua.match(/(?:MSIE |Trident\\/[0-9]+[\\.0-9]+;.*rv:)([0-9]+[\\.0-9]+)/) || [])[1]) : parseFloat((ua.match(/(?:Trident\\/[0-9]+[\\.0-9]+;.*rv:)([0-9]+[\\.0-9]+)/) || [])[1]); // for ie\n\n exports.isOldIE = exports.isIE && exports.isIE < 9;\n exports.isGecko = exports.isMozilla = ua.match(/ Gecko\\/\\d+/);\n exports.isOpera = (typeof opera === \"undefined\" ? \"undefined\" : _typeof(opera)) == \"object\" && Object.prototype.toString.call(window.opera) == \"[object Opera]\";\n exports.isWebKit = parseFloat(ua.split(\"WebKit/\")[1]) || undefined;\n exports.isChrome = parseFloat(ua.split(\" Chrome/\")[1]) || undefined;\n exports.isEdge = parseFloat(ua.split(\" Edge/\")[1]) || undefined;\n exports.isAIR = ua.indexOf(\"AdobeAIR\") >= 0;\n exports.isAndroid = ua.indexOf(\"Android\") >= 0;\n exports.isChromeOS = ua.indexOf(\" CrOS \") >= 0;\n exports.isIOS = /iPad|iPhone|iPod/.test(ua) && !window.MSStream;\n if (exports.isIOS) exports.isMac = true;\n exports.isMobile = exports.isIOS || exports.isAndroid;\n});\nace.define(\"ace/lib/dom\", [\"require\", \"exports\", \"module\", \"ace/lib/useragent\"], function (require, exports, module) {\n \"use strict\";\n\n var useragent = require(\"./useragent\");\n\n var XHTML_NS = \"http://www.w3.org/1999/xhtml\";\n\n exports.buildDom = function buildDom(arr, parent, refs) {\n if (typeof arr == \"string\" && arr) {\n var txt = document.createTextNode(arr);\n if (parent) parent.appendChild(txt);\n return txt;\n }\n\n if (!Array.isArray(arr)) {\n if (arr && arr.appendChild && parent) parent.appendChild(arr);\n return arr;\n }\n\n if (typeof arr[0] != \"string\" || !arr[0]) {\n var els = [];\n\n for (var i = 0; i < arr.length; i++) {\n var ch = buildDom(arr[i], parent, refs);\n ch && els.push(ch);\n }\n\n return els;\n }\n\n var el = document.createElement(arr[0]);\n var options = arr[1];\n var childIndex = 1;\n if (options && _typeof(options) == \"object\" && !Array.isArray(options)) childIndex = 2;\n\n for (var i = childIndex; i < arr.length; i++) {\n buildDom(arr[i], el, refs);\n }\n\n if (childIndex == 2) {\n Object.keys(options).forEach(function (n) {\n var val = options[n];\n\n if (n === \"class\") {\n el.className = Array.isArray(val) ? val.join(\" \") : val;\n } else if (typeof val == \"function\" || n == \"value\" || n[0] == \"$\") {\n el[n] = val;\n } else if (n === \"ref\") {\n if (refs) refs[val] = el;\n } else if (n === \"style\") {\n if (typeof val == \"string\") el.style.cssText = val;\n } else if (val != null) {\n el.setAttribute(n, val);\n }\n });\n }\n\n if (parent) parent.appendChild(el);\n return el;\n };\n\n exports.getDocumentHead = function (doc) {\n if (!doc) doc = document;\n return doc.head || doc.getElementsByTagName(\"head\")[0] || doc.documentElement;\n };\n\n exports.createElement = function (tag, ns) {\n return document.createElementNS ? document.createElementNS(ns || XHTML_NS, tag) : document.createElement(tag);\n };\n\n exports.removeChildren = function (element) {\n element.innerHTML = \"\";\n };\n\n exports.createTextNode = function (textContent, element) {\n var doc = element ? element.ownerDocument : document;\n return doc.createTextNode(textContent);\n };\n\n exports.createFragment = function (element) {\n var doc = element ? element.ownerDocument : document;\n return doc.createDocumentFragment();\n };\n\n exports.hasCssClass = function (el, name) {\n var classes = (el.className + \"\").split(/\\s+/g);\n return classes.indexOf(name) !== -1;\n };\n\n exports.addCssClass = function (el, name) {\n if (!exports.hasCssClass(el, name)) {\n el.className += \" \" + name;\n }\n };\n\n exports.removeCssClass = function (el, name) {\n var classes = el.className.split(/\\s+/g);\n\n while (true) {\n var index = classes.indexOf(name);\n\n if (index == -1) {\n break;\n }\n\n classes.splice(index, 1);\n }\n\n el.className = classes.join(\" \");\n };\n\n exports.toggleCssClass = function (el, name) {\n var classes = el.className.split(/\\s+/g),\n add = true;\n\n while (true) {\n var index = classes.indexOf(name);\n\n if (index == -1) {\n break;\n }\n\n add = false;\n classes.splice(index, 1);\n }\n\n if (add) classes.push(name);\n el.className = classes.join(\" \");\n return add;\n };\n\n exports.setCssClass = function (node, className, include) {\n if (include) {\n exports.addCssClass(node, className);\n } else {\n exports.removeCssClass(node, className);\n }\n };\n\n exports.hasCssString = function (id, doc) {\n var index = 0,\n sheets;\n doc = doc || document;\n\n if (sheets = doc.querySelectorAll(\"style\")) {\n while (index < sheets.length) {\n if (sheets[index++].id === id) return true;\n }\n }\n };\n\n var strictCSP;\n var cssCache = [];\n\n exports.useStrictCSP = function (value) {\n strictCSP = value;\n if (value == false) insertPendingStyles();else if (!cssCache) cssCache = [];\n };\n\n function insertPendingStyles() {\n var cache = cssCache;\n cssCache = null;\n cache && cache.forEach(function (item) {\n importCssString(item[0], item[1]);\n });\n }\n\n function importCssString(cssText, id, target) {\n if (typeof document == \"undefined\") return;\n\n if (cssCache) {\n if (target) {\n insertPendingStyles();\n } else if (target === false) {\n return cssCache.push([cssText, id]);\n }\n }\n\n if (strictCSP) return;\n var container = target;\n\n if (!target || !target.getRootNode) {\n container = document;\n } else {\n container = target.getRootNode();\n if (!container || container == target) container = document;\n }\n\n var doc = container.ownerDocument || container;\n if (id && exports.hasCssString(id, container)) return null;\n if (id) cssText += \"\\n/*# sourceURL=ace/css/\" + id + \" */\";\n var style = exports.createElement(\"style\");\n style.appendChild(doc.createTextNode(cssText));\n if (id) style.id = id;\n if (container == doc) container = exports.getDocumentHead(doc);\n container.insertBefore(style, container.firstChild);\n }\n\n exports.importCssString = importCssString;\n\n exports.importCssStylsheet = function (uri, doc) {\n exports.buildDom([\"link\", {\n rel: \"stylesheet\",\n href: uri\n }], exports.getDocumentHead(doc));\n };\n\n exports.scrollbarWidth = function (document) {\n var inner = exports.createElement(\"ace_inner\");\n inner.style.width = \"100%\";\n inner.style.minWidth = \"0px\";\n inner.style.height = \"200px\";\n inner.style.display = \"block\";\n var outer = exports.createElement(\"ace_outer\");\n var style = outer.style;\n style.position = \"absolute\";\n style.left = \"-10000px\";\n style.overflow = \"hidden\";\n style.width = \"200px\";\n style.minWidth = \"0px\";\n style.height = \"150px\";\n style.display = \"block\";\n outer.appendChild(inner);\n var body = document.documentElement;\n body.appendChild(outer);\n var noScrollbar = inner.offsetWidth;\n style.overflow = \"scroll\";\n var withScrollbar = inner.offsetWidth;\n\n if (noScrollbar == withScrollbar) {\n withScrollbar = outer.clientWidth;\n }\n\n body.removeChild(outer);\n return noScrollbar - withScrollbar;\n };\n\n exports.computedStyle = function (element, style) {\n return window.getComputedStyle(element, \"\") || {};\n };\n\n exports.setStyle = function (styles, property, value) {\n if (styles[property] !== value) {\n styles[property] = value;\n }\n };\n\n exports.HAS_CSS_ANIMATION = false;\n exports.HAS_CSS_TRANSFORMS = false;\n exports.HI_DPI = useragent.isWin ? typeof window !== \"undefined\" && window.devicePixelRatio >= 1.5 : true;\n if (useragent.isChromeOS) exports.HI_DPI = false;\n\n if (typeof document !== \"undefined\") {\n var div = document.createElement(\"div\");\n if (exports.HI_DPI && div.style.transform !== undefined) exports.HAS_CSS_TRANSFORMS = true;\n if (!useragent.isEdge && typeof div.style.animationName !== \"undefined\") exports.HAS_CSS_ANIMATION = true;\n div = null;\n }\n\n if (exports.HAS_CSS_TRANSFORMS) {\n exports.translate = function (element, tx, ty) {\n element.style.transform = \"translate(\" + Math.round(tx) + \"px, \" + Math.round(ty) + \"px)\";\n };\n } else {\n exports.translate = function (element, tx, ty) {\n element.style.top = Math.round(ty) + \"px\";\n element.style.left = Math.round(tx) + \"px\";\n };\n }\n});\nace.define(\"ace/lib/oop\", [\"require\", \"exports\", \"module\"], function (require, exports, module) {\n \"use strict\";\n\n exports.inherits = function (ctor, superCtor) {\n ctor.super_ = superCtor;\n ctor.prototype = Object.create(superCtor.prototype, {\n constructor: {\n value: ctor,\n enumerable: false,\n writable: true,\n configurable: true\n }\n });\n };\n\n exports.mixin = function (obj, mixin) {\n for (var key in mixin) {\n obj[key] = mixin[key];\n }\n\n return obj;\n };\n\n exports.implement = function (proto, mixin) {\n exports.mixin(proto, mixin);\n };\n});\nace.define(\"ace/lib/keys\", [\"require\", \"exports\", \"module\", \"ace/lib/oop\"], function (require, exports, module) {\n \"use strict\";\n\n var oop = require(\"./oop\");\n\n var Keys = function () {\n var ret = {\n MODIFIER_KEYS: {\n 16: 'Shift',\n 17: 'Ctrl',\n 18: 'Alt',\n 224: 'Meta',\n 91: 'MetaLeft',\n 92: 'MetaRight',\n 93: 'ContextMenu'\n },\n KEY_MODS: {\n \"ctrl\": 1,\n \"alt\": 2,\n \"option\": 2,\n \"shift\": 4,\n \"super\": 8,\n \"meta\": 8,\n \"command\": 8,\n \"cmd\": 8,\n \"control\": 1\n },\n FUNCTION_KEYS: {\n 8: \"Backspace\",\n 9: \"Tab\",\n 13: \"Return\",\n 19: \"Pause\",\n 27: \"Esc\",\n 32: \"Space\",\n 33: \"PageUp\",\n 34: \"PageDown\",\n 35: \"End\",\n 36: \"Home\",\n 37: \"Left\",\n 38: \"Up\",\n 39: \"Right\",\n 40: \"Down\",\n 44: \"Print\",\n 45: \"Insert\",\n 46: \"Delete\",\n 96: \"Numpad0\",\n 97: \"Numpad1\",\n 98: \"Numpad2\",\n 99: \"Numpad3\",\n 100: \"Numpad4\",\n 101: \"Numpad5\",\n 102: \"Numpad6\",\n 103: \"Numpad7\",\n 104: \"Numpad8\",\n 105: \"Numpad9\",\n '-13': \"NumpadEnter\",\n 112: \"F1\",\n 113: \"F2\",\n 114: \"F3\",\n 115: \"F4\",\n 116: \"F5\",\n 117: \"F6\",\n 118: \"F7\",\n 119: \"F8\",\n 120: \"F9\",\n 121: \"F10\",\n 122: \"F11\",\n 123: \"F12\",\n 144: \"Numlock\",\n 145: \"Scrolllock\"\n },\n PRINTABLE_KEYS: {\n 32: ' ',\n 48: '0',\n 49: '1',\n 50: '2',\n 51: '3',\n 52: '4',\n 53: '5',\n 54: '6',\n 55: '7',\n 56: '8',\n 57: '9',\n 59: ';',\n 61: '=',\n 65: 'a',\n 66: 'b',\n 67: 'c',\n 68: 'd',\n 69: 'e',\n 70: 'f',\n 71: 'g',\n 72: 'h',\n 73: 'i',\n 74: 'j',\n 75: 'k',\n 76: 'l',\n 77: 'm',\n 78: 'n',\n 79: 'o',\n 80: 'p',\n 81: 'q',\n 82: 'r',\n 83: 's',\n 84: 't',\n 85: 'u',\n 86: 'v',\n 87: 'w',\n 88: 'x',\n 89: 'y',\n 90: 'z',\n 107: '+',\n 109: '-',\n 110: '.',\n 186: ';',\n 187: '=',\n 188: ',',\n 189: '-',\n 190: '.',\n 191: '/',\n 192: '`',\n 219: '[',\n 220: '\\\\',\n 221: ']',\n 222: \"'\",\n 111: '/',\n 106: '*'\n }\n };\n var name, i;\n\n for (i in ret.FUNCTION_KEYS) {\n name = ret.FUNCTION_KEYS[i].toLowerCase();\n ret[name] = parseInt(i, 10);\n }\n\n for (i in ret.PRINTABLE_KEYS) {\n name = ret.PRINTABLE_KEYS[i].toLowerCase();\n ret[name] = parseInt(i, 10);\n }\n\n oop.mixin(ret, ret.MODIFIER_KEYS);\n oop.mixin(ret, ret.PRINTABLE_KEYS);\n oop.mixin(ret, ret.FUNCTION_KEYS);\n ret.enter = ret[\"return\"];\n ret.escape = ret.esc;\n ret.del = ret[\"delete\"];\n ret[173] = '-';\n\n (function () {\n var mods = [\"cmd\", \"ctrl\", \"alt\", \"shift\"];\n\n for (var i = Math.pow(2, mods.length); i--;) {\n ret.KEY_MODS[i] = mods.filter(function (x) {\n return i & ret.KEY_MODS[x];\n }).join(\"-\") + \"-\";\n }\n })();\n\n ret.KEY_MODS[0] = \"\";\n ret.KEY_MODS[-1] = \"input-\";\n return ret;\n }();\n\n oop.mixin(exports, Keys);\n\n exports.keyCodeToString = function (keyCode) {\n var keyString = Keys[keyCode];\n if (typeof keyString != \"string\") keyString = String.fromCharCode(keyCode);\n return keyString.toLowerCase();\n };\n});\nace.define(\"ace/lib/event\", [\"require\", \"exports\", \"module\", \"ace/lib/keys\", \"ace/lib/useragent\"], function (require, exports, module) {\n \"use strict\";\n\n var keys = require(\"./keys\");\n\n var useragent = require(\"./useragent\");\n\n var pressedKeys = null;\n var ts = 0;\n var activeListenerOptions;\n\n function detectListenerOptionsSupport() {\n activeListenerOptions = false;\n\n try {\n document.createComment(\"\").addEventListener(\"test\", function () {}, {\n get passive() {\n activeListenerOptions = {\n passive: false\n };\n }\n\n });\n } catch (e) {}\n }\n\n function getListenerOptions() {\n if (activeListenerOptions == undefined) detectListenerOptionsSupport();\n return activeListenerOptions;\n }\n\n function EventListener(elem, type, callback) {\n this.elem = elem;\n this.type = type;\n this.callback = callback;\n }\n\n EventListener.prototype.destroy = function () {\n removeListener(this.elem, this.type, this.callback);\n this.elem = this.type = this.callback = undefined;\n };\n\n var addListener = exports.addListener = function (elem, type, callback, destroyer) {\n elem.addEventListener(type, callback, getListenerOptions());\n if (destroyer) destroyer.$toDestroy.push(new EventListener(elem, type, callback));\n };\n\n var removeListener = exports.removeListener = function (elem, type, callback) {\n elem.removeEventListener(type, callback, getListenerOptions());\n };\n\n exports.stopEvent = function (e) {\n exports.stopPropagation(e);\n exports.preventDefault(e);\n return false;\n };\n\n exports.stopPropagation = function (e) {\n if (e.stopPropagation) e.stopPropagation();\n };\n\n exports.preventDefault = function (e) {\n if (e.preventDefault) e.preventDefault();\n };\n\n exports.getButton = function (e) {\n if (e.type == \"dblclick\") return 0;\n if (e.type == \"contextmenu\" || useragent.isMac && e.ctrlKey && !e.altKey && !e.shiftKey) return 2;\n return e.button;\n };\n\n exports.capture = function (el, eventHandler, releaseCaptureHandler) {\n var ownerDocument = el && el.ownerDocument || document;\n\n function onMouseUp(e) {\n eventHandler && eventHandler(e);\n releaseCaptureHandler && releaseCaptureHandler(e);\n removeListener(ownerDocument, \"mousemove\", eventHandler);\n removeListener(ownerDocument, \"mouseup\", onMouseUp);\n removeListener(ownerDocument, \"dragstart\", onMouseUp);\n }\n\n addListener(ownerDocument, \"mousemove\", eventHandler);\n addListener(ownerDocument, \"mouseup\", onMouseUp);\n addListener(ownerDocument, \"dragstart\", onMouseUp);\n return onMouseUp;\n };\n\n exports.addMouseWheelListener = function (el, callback, destroyer) {\n if (\"onmousewheel\" in el) {\n addListener(el, \"mousewheel\", function (e) {\n var factor = 8;\n\n if (e.wheelDeltaX !== undefined) {\n e.wheelX = -e.wheelDeltaX / factor;\n e.wheelY = -e.wheelDeltaY / factor;\n } else {\n e.wheelX = 0;\n e.wheelY = -e.wheelDelta / factor;\n }\n\n callback(e);\n }, destroyer);\n } else if (\"onwheel\" in el) {\n addListener(el, \"wheel\", function (e) {\n var factor = 0.35;\n\n switch (e.deltaMode) {\n case e.DOM_DELTA_PIXEL:\n e.wheelX = e.deltaX * factor || 0;\n e.wheelY = e.deltaY * factor || 0;\n break;\n\n case e.DOM_DELTA_LINE:\n case e.DOM_DELTA_PAGE:\n e.wheelX = (e.deltaX || 0) * 5;\n e.wheelY = (e.deltaY || 0) * 5;\n break;\n }\n\n callback(e);\n }, destroyer);\n } else {\n addListener(el, \"DOMMouseScroll\", function (e) {\n if (e.axis && e.axis == e.HORIZONTAL_AXIS) {\n e.wheelX = (e.detail || 0) * 5;\n e.wheelY = 0;\n } else {\n e.wheelX = 0;\n e.wheelY = (e.detail || 0) * 5;\n }\n\n callback(e);\n }, destroyer);\n }\n };\n\n exports.addMultiMouseDownListener = function (elements, timeouts, eventHandler, callbackName, destroyer) {\n var clicks = 0;\n var startX, startY, timer;\n var eventNames = {\n 2: \"dblclick\",\n 3: \"tripleclick\",\n 4: \"quadclick\"\n };\n\n function onMousedown(e) {\n if (exports.getButton(e) !== 0) {\n clicks = 0;\n } else if (e.detail > 1) {\n clicks++;\n if (clicks > 4) clicks = 1;\n } else {\n clicks = 1;\n }\n\n if (useragent.isIE) {\n var isNewClick = Math.abs(e.clientX - startX) > 5 || Math.abs(e.clientY - startY) > 5;\n if (!timer || isNewClick) clicks = 1;\n if (timer) clearTimeout(timer);\n timer = setTimeout(function () {\n timer = null;\n }, timeouts[clicks - 1] || 600);\n\n if (clicks == 1) {\n startX = e.clientX;\n startY = e.clientY;\n }\n }\n\n e._clicks = clicks;\n eventHandler[callbackName](\"mousedown\", e);\n if (clicks > 4) clicks = 0;else if (clicks > 1) return eventHandler[callbackName](eventNames[clicks], e);\n }\n\n if (!Array.isArray(elements)) elements = [elements];\n elements.forEach(function (el) {\n addListener(el, \"mousedown\", onMousedown, destroyer);\n });\n };\n\n var getModifierHash = function getModifierHash(e) {\n return 0 | (e.ctrlKey ? 1 : 0) | (e.altKey ? 2 : 0) | (e.shiftKey ? 4 : 0) | (e.metaKey ? 8 : 0);\n };\n\n exports.getModifierString = function (e) {\n return keys.KEY_MODS[getModifierHash(e)];\n };\n\n function normalizeCommandKeys(callback, e, keyCode) {\n var hashId = getModifierHash(e);\n\n if (!useragent.isMac && pressedKeys) {\n if (e.getModifierState && (e.getModifierState(\"OS\") || e.getModifierState(\"Win\"))) hashId |= 8;\n\n if (pressedKeys.altGr) {\n if ((3 & hashId) != 3) pressedKeys.altGr = 0;else return;\n }\n\n if (keyCode === 18 || keyCode === 17) {\n var location = \"location\" in e ? e.location : e.keyLocation;\n\n if (keyCode === 17 && location === 1) {\n if (pressedKeys[keyCode] == 1) ts = e.timeStamp;\n } else if (keyCode === 18 && hashId === 3 && location === 2) {\n var dt = e.timeStamp - ts;\n if (dt < 50) pressedKeys.altGr = true;\n }\n }\n }\n\n if (keyCode in keys.MODIFIER_KEYS) {\n keyCode = -1;\n }\n\n if (!hashId && keyCode === 13) {\n var location = \"location\" in e ? e.location : e.keyLocation;\n\n if (location === 3) {\n callback(e, hashId, -keyCode);\n if (e.defaultPrevented) return;\n }\n }\n\n if (useragent.isChromeOS && hashId & 8) {\n callback(e, hashId, keyCode);\n if (e.defaultPrevented) return;else hashId &= ~8;\n }\n\n if (!hashId && !(keyCode in keys.FUNCTION_KEYS) && !(keyCode in keys.PRINTABLE_KEYS)) {\n return false;\n }\n\n return callback(e, hashId, keyCode);\n }\n\n exports.addCommandKeyListener = function (el, callback, destroyer) {\n if (useragent.isOldGecko || useragent.isOpera && !(\"KeyboardEvent\" in window)) {\n var lastKeyDownKeyCode = null;\n addListener(el, \"keydown\", function (e) {\n lastKeyDownKeyCode = e.keyCode;\n }, destroyer);\n addListener(el, \"keypress\", function (e) {\n return normalizeCommandKeys(callback, e, lastKeyDownKeyCode);\n }, destroyer);\n } else {\n var lastDefaultPrevented = null;\n addListener(el, \"keydown\", function (e) {\n pressedKeys[e.keyCode] = (pressedKeys[e.keyCode] || 0) + 1;\n var result = normalizeCommandKeys(callback, e, e.keyCode);\n lastDefaultPrevented = e.defaultPrevented;\n return result;\n }, destroyer);\n addListener(el, \"keypress\", function (e) {\n if (lastDefaultPrevented && (e.ctrlKey || e.altKey || e.shiftKey || e.metaKey)) {\n exports.stopEvent(e);\n lastDefaultPrevented = null;\n }\n }, destroyer);\n addListener(el, \"keyup\", function (e) {\n pressedKeys[e.keyCode] = null;\n }, destroyer);\n\n if (!pressedKeys) {\n resetPressedKeys();\n addListener(window, \"focus\", resetPressedKeys);\n }\n }\n };\n\n function resetPressedKeys() {\n pressedKeys = Object.create(null);\n }\n\n if ((typeof window === \"undefined\" ? \"undefined\" : _typeof(window)) == \"object\" && window.postMessage && !useragent.isOldIE) {\n var postMessageId = 1;\n\n exports.nextTick = function (callback, win) {\n win = win || window;\n var messageName = \"zero-timeout-message-\" + postMessageId++;\n\n var listener = function listener(e) {\n if (e.data == messageName) {\n exports.stopPropagation(e);\n removeListener(win, \"message\", listener);\n callback();\n }\n };\n\n addListener(win, \"message\", listener);\n win.postMessage(messageName, \"*\");\n };\n }\n\n exports.$idleBlocked = false;\n\n exports.onIdle = function (cb, timeout) {\n return setTimeout(function handler() {\n if (!exports.$idleBlocked) {\n cb();\n } else {\n setTimeout(handler, 100);\n }\n }, timeout);\n };\n\n exports.$idleBlockId = null;\n\n exports.blockIdle = function (delay) {\n if (exports.$idleBlockId) clearTimeout(exports.$idleBlockId);\n exports.$idleBlocked = true;\n exports.$idleBlockId = setTimeout(function () {\n exports.$idleBlocked = false;\n }, delay || 100);\n };\n\n exports.nextFrame = (typeof window === \"undefined\" ? \"undefined\" : _typeof(window)) == \"object\" && (window.requestAnimationFrame || window.mozRequestAnimationFrame || window.webkitRequestAnimationFrame || window.msRequestAnimationFrame || window.oRequestAnimationFrame);\n if (exports.nextFrame) exports.nextFrame = exports.nextFrame.bind(window);else exports.nextFrame = function (callback) {\n setTimeout(callback, 17);\n };\n});\nace.define(\"ace/range\", [\"require\", \"exports\", \"module\"], function (require, exports, module) {\n \"use strict\";\n\n var comparePoints = function comparePoints(p1, p2) {\n return p1.row - p2.row || p1.column - p2.column;\n };\n\n var Range = function Range(startRow, startColumn, endRow, endColumn) {\n this.start = {\n row: startRow,\n column: startColumn\n };\n this.end = {\n row: endRow,\n column: endColumn\n };\n };\n\n (function () {\n this.isEqual = function (range) {\n return this.start.row === range.start.row && this.end.row === range.end.row && this.start.column === range.start.column && this.end.column === range.end.column;\n };\n\n this.toString = function () {\n return \"Range: [\" + this.start.row + \"/\" + this.start.column + \"] -> [\" + this.end.row + \"/\" + this.end.column + \"]\";\n };\n\n this.contains = function (row, column) {\n return this.compare(row, column) == 0;\n };\n\n this.compareRange = function (range) {\n var cmp,\n end = range.end,\n start = range.start;\n cmp = this.compare(end.row, end.column);\n\n if (cmp == 1) {\n cmp = this.compare(start.row, start.column);\n\n if (cmp == 1) {\n return 2;\n } else if (cmp == 0) {\n return 1;\n } else {\n return 0;\n }\n } else if (cmp == -1) {\n return -2;\n } else {\n cmp = this.compare(start.row, start.column);\n\n if (cmp == -1) {\n return -1;\n } else if (cmp == 1) {\n return 42;\n } else {\n return 0;\n }\n }\n };\n\n this.comparePoint = function (p) {\n return this.compare(p.row, p.column);\n };\n\n this.containsRange = function (range) {\n return this.comparePoint(range.start) == 0 && this.comparePoint(range.end) == 0;\n };\n\n this.intersects = function (range) {\n var cmp = this.compareRange(range);\n return cmp == -1 || cmp == 0 || cmp == 1;\n };\n\n this.isEnd = function (row, column) {\n return this.end.row == row && this.end.column == column;\n };\n\n this.isStart = function (row, column) {\n return this.start.row == row && this.start.column == column;\n };\n\n this.setStart = function (row, column) {\n if (_typeof(row) == \"object\") {\n this.start.column = row.column;\n this.start.row = row.row;\n } else {\n this.start.row = row;\n this.start.column = column;\n }\n };\n\n this.setEnd = function (row, column) {\n if (_typeof(row) == \"object\") {\n this.end.column = row.column;\n this.end.row = row.row;\n } else {\n this.end.row = row;\n this.end.column = column;\n }\n };\n\n this.inside = function (row, column) {\n if (this.compare(row, column) == 0) {\n if (this.isEnd(row, column) || this.isStart(row, column)) {\n return false;\n } else {\n return true;\n }\n }\n\n return false;\n };\n\n this.insideStart = function (row, column) {\n if (this.compare(row, column) == 0) {\n if (this.isEnd(row, column)) {\n return false;\n } else {\n return true;\n }\n }\n\n return false;\n };\n\n this.insideEnd = function (row, column) {\n if (this.compare(row, column) == 0) {\n if (this.isStart(row, column)) {\n return false;\n } else {\n return true;\n }\n }\n\n return false;\n };\n\n this.compare = function (row, column) {\n if (!this.isMultiLine()) {\n if (row === this.start.row) {\n return column < this.start.column ? -1 : column > this.end.column ? 1 : 0;\n }\n }\n\n if (row < this.start.row) return -1;\n if (row > this.end.row) return 1;\n if (this.start.row === row) return column >= this.start.column ? 0 : -1;\n if (this.end.row === row) return column <= this.end.column ? 0 : 1;\n return 0;\n };\n\n this.compareStart = function (row, column) {\n if (this.start.row == row && this.start.column == column) {\n return -1;\n } else {\n return this.compare(row, column);\n }\n };\n\n this.compareEnd = function (row, column) {\n if (this.end.row == row && this.end.column == column) {\n return 1;\n } else {\n return this.compare(row, column);\n }\n };\n\n this.compareInside = function (row, column) {\n if (this.end.row == row && this.end.column == column) {\n return 1;\n } else if (this.start.row == row && this.start.column == column) {\n return -1;\n } else {\n return this.compare(row, column);\n }\n };\n\n this.clipRows = function (firstRow, lastRow) {\n if (this.end.row > lastRow) var end = {\n row: lastRow + 1,\n column: 0\n };else if (this.end.row < firstRow) var end = {\n row: firstRow,\n column: 0\n };\n if (this.start.row > lastRow) var start = {\n row: lastRow + 1,\n column: 0\n };else if (this.start.row < firstRow) var start = {\n row: firstRow,\n column: 0\n };\n return Range.fromPoints(start || this.start, end || this.end);\n };\n\n this.extend = function (row, column) {\n var cmp = this.compare(row, column);\n if (cmp == 0) return this;else if (cmp == -1) var start = {\n row: row,\n column: column\n };else var end = {\n row: row,\n column: column\n };\n return Range.fromPoints(start || this.start, end || this.end);\n };\n\n this.isEmpty = function () {\n return this.start.row === this.end.row && this.start.column === this.end.column;\n };\n\n this.isMultiLine = function () {\n return this.start.row !== this.end.row;\n };\n\n this.clone = function () {\n return Range.fromPoints(this.start, this.end);\n };\n\n this.collapseRows = function () {\n if (this.end.column == 0) return new Range(this.start.row, 0, Math.max(this.start.row, this.end.row - 1), 0);else return new Range(this.start.row, 0, this.end.row, 0);\n };\n\n this.toScreenRange = function (session) {\n var screenPosStart = session.documentToScreenPosition(this.start);\n var screenPosEnd = session.documentToScreenPosition(this.end);\n return new Range(screenPosStart.row, screenPosStart.column, screenPosEnd.row, screenPosEnd.column);\n };\n\n this.moveBy = function (row, column) {\n this.start.row += row;\n this.start.column += column;\n this.end.row += row;\n this.end.column += column;\n };\n }).call(Range.prototype);\n\n Range.fromPoints = function (start, end) {\n return new Range(start.row, start.column, end.row, end.column);\n };\n\n Range.comparePoints = comparePoints;\n\n Range.comparePoints = function (p1, p2) {\n return p1.row - p2.row || p1.column - p2.column;\n };\n\n exports.Range = Range;\n});\nace.define(\"ace/lib/lang\", [\"require\", \"exports\", \"module\"], function (require, exports, module) {\n \"use strict\";\n\n exports.last = function (a) {\n return a[a.length - 1];\n };\n\n exports.stringReverse = function (string) {\n return string.split(\"\").reverse().join(\"\");\n };\n\n exports.stringRepeat = function (string, count) {\n var result = '';\n\n while (count > 0) {\n if (count & 1) result += string;\n if (count >>= 1) string += string;\n }\n\n return result;\n };\n\n var trimBeginRegexp = /^\\s\\s*/;\n var trimEndRegexp = /\\s\\s*$/;\n\n exports.stringTrimLeft = function (string) {\n return string.replace(trimBeginRegexp, '');\n };\n\n exports.stringTrimRight = function (string) {\n return string.replace(trimEndRegexp, '');\n };\n\n exports.copyObject = function (obj) {\n var copy = {};\n\n for (var key in obj) {\n copy[key] = obj[key];\n }\n\n return copy;\n };\n\n exports.copyArray = function (array) {\n var copy = [];\n\n for (var i = 0, l = array.length; i < l; i++) {\n if (array[i] && _typeof(array[i]) == \"object\") copy[i] = this.copyObject(array[i]);else copy[i] = array[i];\n }\n\n return copy;\n };\n\n exports.deepCopy = function deepCopy(obj) {\n if (_typeof(obj) !== \"object\" || !obj) return obj;\n var copy;\n\n if (Array.isArray(obj)) {\n copy = [];\n\n for (var key = 0; key < obj.length; key++) {\n copy[key] = deepCopy(obj[key]);\n }\n\n return copy;\n }\n\n if (Object.prototype.toString.call(obj) !== \"[object Object]\") return obj;\n copy = {};\n\n for (var key in obj) {\n copy[key] = deepCopy(obj[key]);\n }\n\n return copy;\n };\n\n exports.arrayToMap = function (arr) {\n var map = {};\n\n for (var i = 0; i < arr.length; i++) {\n map[arr[i]] = 1;\n }\n\n return map;\n };\n\n exports.createMap = function (props) {\n var map = Object.create(null);\n\n for (var i in props) {\n map[i] = props[i];\n }\n\n return map;\n };\n\n exports.arrayRemove = function (array, value) {\n for (var i = 0; i <= array.length; i++) {\n if (value === array[i]) {\n array.splice(i, 1);\n }\n }\n };\n\n exports.escapeRegExp = function (str) {\n return str.replace(/([.*+?^${}()|[\\]\\/\\\\])/g, '\\\\$1');\n };\n\n exports.escapeHTML = function (str) {\n return (\"\" + str).replace(/&/g, \"&\").replace(/\"/g, \""\").replace(/'/g, \"'\").replace(/ Date.now() - 50) return true;\n return $cancelT = false;\n },\n cancel: function cancel() {\n $cancelT = Date.now();\n }\n };\n});\nace.define(\"ace/keyboard/textinput\", [\"require\", \"exports\", \"module\", \"ace/lib/event\", \"ace/lib/useragent\", \"ace/lib/dom\", \"ace/lib/lang\", \"ace/clipboard\", \"ace/lib/keys\"], function (require, exports, module) {\n \"use strict\";\n\n var event = require(\"../lib/event\");\n\n var useragent = require(\"../lib/useragent\");\n\n var dom = require(\"../lib/dom\");\n\n var lang = require(\"../lib/lang\");\n\n var clipboard = require(\"../clipboard\");\n\n var BROKEN_SETDATA = useragent.isChrome < 18;\n var USE_IE_MIME_TYPE = useragent.isIE;\n var HAS_FOCUS_ARGS = useragent.isChrome > 63;\n var MAX_LINE_LENGTH = 400;\n\n var KEYS = require(\"../lib/keys\");\n\n var MODS = KEYS.KEY_MODS;\n var isIOS = useragent.isIOS;\n var valueResetRegex = isIOS ? /\\s/ : /\\n/;\n var isMobile = useragent.isMobile;\n\n var TextInput = function TextInput(parentNode, host) {\n var text = dom.createElement(\"textarea\");\n text.className = \"ace_text-input\";\n text.setAttribute(\"wrap\", \"off\");\n text.setAttribute(\"autocorrect\", \"off\");\n text.setAttribute(\"autocapitalize\", \"off\");\n text.setAttribute(\"spellcheck\", false);\n text.style.opacity = \"0\";\n parentNode.insertBefore(text, parentNode.firstChild);\n var copied = false;\n var pasted = false;\n var inComposition = false;\n var sendingText = false;\n var tempStyle = '';\n if (!isMobile) text.style.fontSize = \"1px\";\n var commandMode = false;\n var ignoreFocusEvents = false;\n var lastValue = \"\";\n var lastSelectionStart = 0;\n var lastSelectionEnd = 0;\n var lastRestoreEnd = 0;\n\n try {\n var isFocused = document.activeElement === text;\n } catch (e) {}\n\n event.addListener(text, \"blur\", function (e) {\n if (ignoreFocusEvents) return;\n host.onBlur(e);\n isFocused = false;\n }, host);\n event.addListener(text, \"focus\", function (e) {\n if (ignoreFocusEvents) return;\n isFocused = true;\n\n if (useragent.isEdge) {\n try {\n if (!document.hasFocus()) return;\n } catch (e) {}\n }\n\n host.onFocus(e);\n if (useragent.isEdge) setTimeout(resetSelection);else resetSelection();\n }, host);\n this.$focusScroll = false;\n\n this.focus = function () {\n if (tempStyle || HAS_FOCUS_ARGS || this.$focusScroll == \"browser\") return text.focus({\n preventScroll: true\n });\n var top = text.style.top;\n text.style.position = \"fixed\";\n text.style.top = \"0px\";\n\n try {\n var isTransformed = text.getBoundingClientRect().top != 0;\n } catch (e) {\n return;\n }\n\n var ancestors = [];\n\n if (isTransformed) {\n var t = text.parentElement;\n\n while (t && t.nodeType == 1) {\n ancestors.push(t);\n t.setAttribute(\"ace_nocontext\", true);\n if (!t.parentElement && t.getRootNode) t = t.getRootNode().host;else t = t.parentElement;\n }\n }\n\n text.focus({\n preventScroll: true\n });\n\n if (isTransformed) {\n ancestors.forEach(function (p) {\n p.removeAttribute(\"ace_nocontext\");\n });\n }\n\n setTimeout(function () {\n text.style.position = \"\";\n if (text.style.top == \"0px\") text.style.top = top;\n }, 0);\n };\n\n this.blur = function () {\n text.blur();\n };\n\n this.isFocused = function () {\n return isFocused;\n };\n\n host.on(\"beforeEndOperation\", function () {\n var curOp = host.curOp;\n var commandName = curOp && curOp.command && curOp.command.name;\n if (commandName == \"insertstring\") return;\n var isUserAction = commandName && (curOp.docChanged || curOp.selectionChanged);\n\n if (inComposition && isUserAction) {\n lastValue = text.value = \"\";\n onCompositionEnd();\n }\n\n resetSelection();\n });\n var resetSelection = isIOS ? function (value) {\n if (!isFocused || copied && !value || sendingText) return;\n if (!value) value = \"\";\n var newValue = \"\\n ab\" + value + \"cde fg\\n\";\n if (newValue != text.value) text.value = lastValue = newValue;\n var selectionStart = 4;\n var selectionEnd = 4 + (value.length || (host.selection.isEmpty() ? 0 : 1));\n\n if (lastSelectionStart != selectionStart || lastSelectionEnd != selectionEnd) {\n text.setSelectionRange(selectionStart, selectionEnd);\n }\n\n lastSelectionStart = selectionStart;\n lastSelectionEnd = selectionEnd;\n } : function () {\n if (inComposition || sendingText) return;\n if (!isFocused && !afterContextMenu) return;\n inComposition = true;\n var selectionStart = 0;\n var selectionEnd = 0;\n var line = \"\";\n\n if (host.session) {\n var selection = host.selection;\n var range = selection.getRange();\n var row = selection.cursor.row;\n selectionStart = range.start.column;\n selectionEnd = range.end.column;\n line = host.session.getLine(row);\n\n if (range.start.row != row) {\n var prevLine = host.session.getLine(row - 1);\n selectionStart = range.start.row < row - 1 ? 0 : selectionStart;\n selectionEnd += prevLine.length + 1;\n line = prevLine + \"\\n\" + line;\n } else if (range.end.row != row) {\n var nextLine = host.session.getLine(row + 1);\n selectionEnd = range.end.row > row + 1 ? nextLine.length : selectionEnd;\n selectionEnd += line.length + 1;\n line = line + \"\\n\" + nextLine;\n } else if (isMobile && row > 0) {\n line = \"\\n\" + line;\n selectionEnd += 1;\n selectionStart += 1;\n }\n\n if (line.length > MAX_LINE_LENGTH) {\n if (selectionStart < MAX_LINE_LENGTH && selectionEnd < MAX_LINE_LENGTH) {\n line = line.slice(0, MAX_LINE_LENGTH);\n } else {\n line = \"\\n\";\n\n if (selectionStart == selectionEnd) {\n selectionStart = selectionEnd = 0;\n } else {\n selectionStart = 0;\n selectionEnd = 1;\n }\n }\n }\n }\n\n var newValue = line + \"\\n\\n\";\n\n if (newValue != lastValue) {\n text.value = lastValue = newValue;\n lastSelectionStart = lastSelectionEnd = newValue.length;\n }\n\n if (afterContextMenu) {\n lastSelectionStart = text.selectionStart;\n lastSelectionEnd = text.selectionEnd;\n }\n\n if (lastSelectionEnd != selectionEnd || lastSelectionStart != selectionStart || text.selectionEnd != lastSelectionEnd // on ie edge selectionEnd changes silently after the initialization\n ) {\n try {\n text.setSelectionRange(selectionStart, selectionEnd);\n lastSelectionStart = selectionStart;\n lastSelectionEnd = selectionEnd;\n } catch (e) {}\n }\n\n inComposition = false;\n };\n this.resetSelection = resetSelection;\n if (isFocused) host.onFocus();\n\n var isAllSelected = function isAllSelected(text) {\n return text.selectionStart === 0 && text.selectionEnd >= lastValue.length && text.value === lastValue && lastValue && text.selectionEnd !== lastSelectionEnd;\n };\n\n var onSelect = function onSelect(e) {\n if (inComposition) return;\n\n if (copied) {\n copied = false;\n } else if (isAllSelected(text)) {\n host.selectAll();\n resetSelection();\n } else if (isMobile && text.selectionStart != lastSelectionStart) {\n resetSelection();\n }\n };\n\n var inputHandler = null;\n\n this.setInputHandler = function (cb) {\n inputHandler = cb;\n };\n\n this.getInputHandler = function () {\n return inputHandler;\n };\n\n var afterContextMenu = false;\n\n var sendText = function sendText(value, fromInput) {\n if (afterContextMenu) afterContextMenu = false;\n\n if (pasted) {\n resetSelection();\n if (value) host.onPaste(value);\n pasted = false;\n return \"\";\n } else {\n var selectionStart = text.selectionStart;\n var selectionEnd = text.selectionEnd;\n var extendLeft = lastSelectionStart;\n var extendRight = lastValue.length - lastSelectionEnd;\n var inserted = value;\n var restoreStart = value.length - selectionStart;\n var restoreEnd = value.length - selectionEnd;\n var i = 0;\n\n while (extendLeft > 0 && lastValue[i] == value[i]) {\n i++;\n extendLeft--;\n }\n\n inserted = inserted.slice(i);\n i = 1;\n\n while (extendRight > 0 && lastValue.length - i > lastSelectionStart - 1 && lastValue[lastValue.length - i] == value[value.length - i]) {\n i++;\n extendRight--;\n }\n\n restoreStart -= i - 1;\n restoreEnd -= i - 1;\n var endIndex = inserted.length - i + 1;\n\n if (endIndex < 0) {\n extendLeft = -endIndex;\n endIndex = 0;\n }\n\n inserted = inserted.slice(0, endIndex);\n if (!fromInput && !inserted && !restoreStart && !extendLeft && !extendRight && !restoreEnd) return \"\";\n sendingText = true;\n var shouldReset = false;\n\n if (useragent.isAndroid && inserted == \". \") {\n inserted = \" \";\n shouldReset = true;\n }\n\n if (inserted && !extendLeft && !extendRight && !restoreStart && !restoreEnd || commandMode) {\n host.onTextInput(inserted);\n } else {\n host.onTextInput(inserted, {\n extendLeft: extendLeft,\n extendRight: extendRight,\n restoreStart: restoreStart,\n restoreEnd: restoreEnd\n });\n }\n\n sendingText = false;\n lastValue = value;\n lastSelectionStart = selectionStart;\n lastSelectionEnd = selectionEnd;\n lastRestoreEnd = restoreEnd;\n return shouldReset ? \"\\n\" : inserted;\n }\n };\n\n var onInput = function onInput(e) {\n if (inComposition) return onCompositionUpdate();\n\n if (e && e.inputType) {\n if (e.inputType == \"historyUndo\") return host.execCommand(\"undo\");\n if (e.inputType == \"historyRedo\") return host.execCommand(\"redo\");\n }\n\n var data = text.value;\n var inserted = sendText(data, true);\n\n if (data.length > MAX_LINE_LENGTH + 100 || valueResetRegex.test(inserted) || isMobile && lastSelectionStart < 1 && lastSelectionStart == lastSelectionEnd) {\n resetSelection();\n }\n };\n\n var handleClipboardData = function handleClipboardData(e, data, forceIEMime) {\n var clipboardData = e.clipboardData || window.clipboardData;\n if (!clipboardData || BROKEN_SETDATA) return;\n var mime = USE_IE_MIME_TYPE || forceIEMime ? \"Text\" : \"text/plain\";\n\n try {\n if (data) {\n return clipboardData.setData(mime, data) !== false;\n } else {\n return clipboardData.getData(mime);\n }\n } catch (e) {\n if (!forceIEMime) return handleClipboardData(e, data, true);\n }\n };\n\n var doCopy = function doCopy(e, isCut) {\n var data = host.getCopyText();\n if (!data) return event.preventDefault(e);\n\n if (handleClipboardData(e, data)) {\n if (isIOS) {\n resetSelection(data);\n copied = data;\n setTimeout(function () {\n copied = false;\n }, 10);\n }\n\n isCut ? host.onCut() : host.onCopy();\n event.preventDefault(e);\n } else {\n copied = true;\n text.value = data;\n text.select();\n setTimeout(function () {\n copied = false;\n resetSelection();\n isCut ? host.onCut() : host.onCopy();\n });\n }\n };\n\n var onCut = function onCut(e) {\n doCopy(e, true);\n };\n\n var onCopy = function onCopy(e) {\n doCopy(e, false);\n };\n\n var onPaste = function onPaste(e) {\n var data = handleClipboardData(e);\n if (clipboard.pasteCancelled()) return;\n\n if (typeof data == \"string\") {\n if (data) host.onPaste(data, e);\n if (useragent.isIE) setTimeout(resetSelection);\n event.preventDefault(e);\n } else {\n text.value = \"\";\n pasted = true;\n }\n };\n\n event.addCommandKeyListener(text, host.onCommandKey.bind(host), host);\n event.addListener(text, \"select\", onSelect, host);\n event.addListener(text, \"input\", onInput, host);\n event.addListener(text, \"cut\", onCut, host);\n event.addListener(text, \"copy\", onCopy, host);\n event.addListener(text, \"paste\", onPaste, host);\n\n if (!('oncut' in text) || !('oncopy' in text) || !('onpaste' in text)) {\n event.addListener(parentNode, \"keydown\", function (e) {\n if (useragent.isMac && !e.metaKey || !e.ctrlKey) return;\n\n switch (e.keyCode) {\n case 67:\n onCopy(e);\n break;\n\n case 86:\n onPaste(e);\n break;\n\n case 88:\n onCut(e);\n break;\n }\n }, host);\n }\n\n var onCompositionStart = function onCompositionStart(e) {\n if (inComposition || !host.onCompositionStart || host.$readOnly) return;\n inComposition = {};\n if (commandMode) return;\n if (e.data) inComposition.useTextareaForIME = false;\n setTimeout(onCompositionUpdate, 0);\n\n host._signal(\"compositionStart\");\n\n host.on(\"mousedown\", cancelComposition);\n var range = host.getSelectionRange();\n range.end.row = range.start.row;\n range.end.column = range.start.column;\n inComposition.markerRange = range;\n inComposition.selectionStart = lastSelectionStart;\n host.onCompositionStart(inComposition);\n\n if (inComposition.useTextareaForIME) {\n lastValue = text.value = \"\";\n lastSelectionStart = 0;\n lastSelectionEnd = 0;\n } else {\n if (text.msGetInputContext) inComposition.context = text.msGetInputContext();\n if (text.getInputContext) inComposition.context = text.getInputContext();\n }\n };\n\n var onCompositionUpdate = function onCompositionUpdate() {\n if (!inComposition || !host.onCompositionUpdate || host.$readOnly) return;\n if (commandMode) return cancelComposition();\n\n if (inComposition.useTextareaForIME) {\n host.onCompositionUpdate(text.value);\n } else {\n var data = text.value;\n sendText(data);\n\n if (inComposition.markerRange) {\n if (inComposition.context) {\n inComposition.markerRange.start.column = inComposition.selectionStart = inComposition.context.compositionStartOffset;\n }\n\n inComposition.markerRange.end.column = inComposition.markerRange.start.column + lastSelectionEnd - inComposition.selectionStart + lastRestoreEnd;\n }\n }\n };\n\n var onCompositionEnd = function onCompositionEnd(e) {\n if (!host.onCompositionEnd || host.$readOnly) return;\n inComposition = false;\n host.onCompositionEnd();\n host.off(\"mousedown\", cancelComposition);\n if (e) onInput();\n };\n\n function cancelComposition() {\n ignoreFocusEvents = true;\n text.blur();\n text.focus();\n ignoreFocusEvents = false;\n }\n\n var syncComposition = lang.delayedCall(onCompositionUpdate, 50).schedule.bind(null, null);\n\n function onKeyup(e) {\n if (e.keyCode == 27 && text.value.length < text.selectionStart) {\n if (!inComposition) lastValue = text.value;\n lastSelectionStart = lastSelectionEnd = -1;\n resetSelection();\n }\n\n syncComposition();\n }\n\n event.addListener(text, \"compositionstart\", onCompositionStart, host);\n event.addListener(text, \"compositionupdate\", onCompositionUpdate, host);\n event.addListener(text, \"keyup\", onKeyup, host);\n event.addListener(text, \"keydown\", syncComposition, host);\n event.addListener(text, \"compositionend\", onCompositionEnd, host);\n\n this.getElement = function () {\n return text;\n };\n\n this.setCommandMode = function (value) {\n commandMode = value;\n text.readOnly = false;\n };\n\n this.setReadOnly = function (readOnly) {\n if (!commandMode) text.readOnly = readOnly;\n };\n\n this.setCopyWithEmptySelection = function (value) {};\n\n this.onContextMenu = function (e) {\n afterContextMenu = true;\n resetSelection();\n\n host._emit(\"nativecontextmenu\", {\n target: host,\n domEvent: e\n });\n\n this.moveToMouse(e, true);\n };\n\n this.moveToMouse = function (e, bringToFront) {\n if (!tempStyle) tempStyle = text.style.cssText;\n text.style.cssText = (bringToFront ? \"z-index:100000;\" : \"\") + (useragent.isIE ? \"opacity:0.1;\" : \"\") + \"text-indent: -\" + (lastSelectionStart + lastSelectionEnd) * host.renderer.characterWidth * 0.5 + \"px;\";\n var rect = host.container.getBoundingClientRect();\n var style = dom.computedStyle(host.container);\n var top = rect.top + (parseInt(style.borderTopWidth) || 0);\n var left = rect.left + (parseInt(rect.borderLeftWidth) || 0);\n var maxTop = rect.bottom - top - text.clientHeight - 2;\n\n var move = function move(e) {\n dom.translate(text, e.clientX - left - 2, Math.min(e.clientY - top - 2, maxTop));\n };\n\n move(e);\n if (e.type != \"mousedown\") return;\n host.renderer.$isMousePressed = true;\n clearTimeout(closeTimeout);\n if (useragent.isWin) event.capture(host.container, move, onContextMenuClose);\n };\n\n this.onContextMenuClose = onContextMenuClose;\n var closeTimeout;\n\n function onContextMenuClose() {\n clearTimeout(closeTimeout);\n closeTimeout = setTimeout(function () {\n if (tempStyle) {\n text.style.cssText = tempStyle;\n tempStyle = '';\n }\n\n host.renderer.$isMousePressed = false;\n if (host.renderer.$keepTextAreaAtCursor) host.renderer.$moveTextAreaToCursor();\n }, 0);\n }\n\n var onContextMenu = function onContextMenu(e) {\n host.textInput.onContextMenu(e);\n onContextMenuClose();\n };\n\n event.addListener(text, \"mouseup\", onContextMenu, host);\n event.addListener(text, \"mousedown\", function (e) {\n e.preventDefault();\n onContextMenuClose();\n }, host);\n event.addListener(host.renderer.scroller, \"contextmenu\", onContextMenu, host);\n event.addListener(text, \"contextmenu\", onContextMenu, host);\n if (isIOS) addIosSelectionHandler(parentNode, host, text);\n\n function addIosSelectionHandler(parentNode, host, text) {\n var typingResetTimeout = null;\n var typing = false;\n text.addEventListener(\"keydown\", function (e) {\n if (typingResetTimeout) clearTimeout(typingResetTimeout);\n typing = true;\n }, true);\n text.addEventListener(\"keyup\", function (e) {\n typingResetTimeout = setTimeout(function () {\n typing = false;\n }, 100);\n }, true);\n\n var detectArrowKeys = function detectArrowKeys(e) {\n if (document.activeElement !== text) return;\n if (typing || inComposition || host.$mouseHandler.isMousePressed) return;\n\n if (copied) {\n return;\n }\n\n var selectionStart = text.selectionStart;\n var selectionEnd = text.selectionEnd;\n var key = null;\n var modifier = 0;\n\n if (selectionStart == 0) {\n key = KEYS.up;\n } else if (selectionStart == 1) {\n key = KEYS.home;\n } else if (selectionEnd > lastSelectionEnd && lastValue[selectionEnd] == \"\\n\") {\n key = KEYS.end;\n } else if (selectionStart < lastSelectionStart && lastValue[selectionStart - 1] == \" \") {\n key = KEYS.left;\n modifier = MODS.option;\n } else if (selectionStart < lastSelectionStart || selectionStart == lastSelectionStart && lastSelectionEnd != lastSelectionStart && selectionStart == selectionEnd) {\n key = KEYS.left;\n } else if (selectionEnd > lastSelectionEnd && lastValue.slice(0, selectionEnd).split(\"\\n\").length > 2) {\n key = KEYS.down;\n } else if (selectionEnd > lastSelectionEnd && lastValue[selectionEnd - 1] == \" \") {\n key = KEYS.right;\n modifier = MODS.option;\n } else if (selectionEnd > lastSelectionEnd || selectionEnd == lastSelectionEnd && lastSelectionEnd != lastSelectionStart && selectionStart == selectionEnd) {\n key = KEYS.right;\n }\n\n if (selectionStart !== selectionEnd) modifier |= MODS.shift;\n\n if (key) {\n var result = host.onCommandKey({}, modifier, key);\n\n if (!result && host.commands) {\n key = KEYS.keyCodeToString(key);\n var command = host.commands.findKeyCommand(modifier, key);\n if (command) host.execCommand(command);\n }\n\n lastSelectionStart = selectionStart;\n lastSelectionEnd = selectionEnd;\n resetSelection(\"\");\n }\n };\n\n document.addEventListener(\"selectionchange\", detectArrowKeys);\n host.on(\"destroy\", function () {\n document.removeEventListener(\"selectionchange\", detectArrowKeys);\n });\n }\n };\n\n exports.TextInput = TextInput;\n\n exports.$setUserAgentForTests = function (_isMobile, _isIOS) {\n isMobile = _isMobile;\n isIOS = _isIOS;\n };\n});\nace.define(\"ace/mouse/default_handlers\", [\"require\", \"exports\", \"module\", \"ace/lib/useragent\"], function (require, exports, module) {\n \"use strict\";\n\n var useragent = require(\"../lib/useragent\");\n\n var DRAG_OFFSET = 0; // pixels\n\n var SCROLL_COOLDOWN_T = 550; // milliseconds\n\n function DefaultHandlers(mouseHandler) {\n mouseHandler.$clickSelection = null;\n var editor = mouseHandler.editor;\n editor.setDefaultHandler(\"mousedown\", this.onMouseDown.bind(mouseHandler));\n editor.setDefaultHandler(\"dblclick\", this.onDoubleClick.bind(mouseHandler));\n editor.setDefaultHandler(\"tripleclick\", this.onTripleClick.bind(mouseHandler));\n editor.setDefaultHandler(\"quadclick\", this.onQuadClick.bind(mouseHandler));\n editor.setDefaultHandler(\"mousewheel\", this.onMouseWheel.bind(mouseHandler));\n var exports = [\"select\", \"startSelect\", \"selectEnd\", \"selectAllEnd\", \"selectByWordsEnd\", \"selectByLinesEnd\", \"dragWait\", \"dragWaitEnd\", \"focusWait\"];\n exports.forEach(function (x) {\n mouseHandler[x] = this[x];\n }, this);\n mouseHandler.selectByLines = this.extendSelectionBy.bind(mouseHandler, \"getLineRange\");\n mouseHandler.selectByWords = this.extendSelectionBy.bind(mouseHandler, \"getWordRange\");\n }\n\n (function () {\n this.onMouseDown = function (ev) {\n var inSelection = ev.inSelection();\n var pos = ev.getDocumentPosition();\n this.mousedownEvent = ev;\n var editor = this.editor;\n var button = ev.getButton();\n\n if (button !== 0) {\n var selectionRange = editor.getSelectionRange();\n var selectionEmpty = selectionRange.isEmpty();\n if (selectionEmpty || button == 1) editor.selection.moveToPosition(pos);\n\n if (button == 2) {\n editor.textInput.onContextMenu(ev.domEvent);\n if (!useragent.isMozilla) ev.preventDefault();\n }\n\n return;\n }\n\n this.mousedownEvent.time = Date.now();\n\n if (inSelection && !editor.isFocused()) {\n editor.focus();\n\n if (this.$focusTimeout && !this.$clickSelection && !editor.inMultiSelectMode) {\n this.setState(\"focusWait\");\n this.captureMouse(ev);\n return;\n }\n }\n\n this.captureMouse(ev);\n this.startSelect(pos, ev.domEvent._clicks > 1);\n return ev.preventDefault();\n };\n\n this.startSelect = function (pos, waitForClickSelection) {\n pos = pos || this.editor.renderer.screenToTextCoordinates(this.x, this.y);\n var editor = this.editor;\n if (!this.mousedownEvent) return;\n if (this.mousedownEvent.getShiftKey()) editor.selection.selectToPosition(pos);else if (!waitForClickSelection) editor.selection.moveToPosition(pos);\n if (!waitForClickSelection) this.select();\n\n if (editor.renderer.scroller.setCapture) {\n editor.renderer.scroller.setCapture();\n }\n\n editor.setStyle(\"ace_selecting\");\n this.setState(\"select\");\n };\n\n this.select = function () {\n var anchor,\n editor = this.editor;\n var cursor = editor.renderer.screenToTextCoordinates(this.x, this.y);\n\n if (this.$clickSelection) {\n var cmp = this.$clickSelection.comparePoint(cursor);\n\n if (cmp == -1) {\n anchor = this.$clickSelection.end;\n } else if (cmp == 1) {\n anchor = this.$clickSelection.start;\n } else {\n var orientedRange = calcRangeOrientation(this.$clickSelection, cursor);\n cursor = orientedRange.cursor;\n anchor = orientedRange.anchor;\n }\n\n editor.selection.setSelectionAnchor(anchor.row, anchor.column);\n }\n\n editor.selection.selectToPosition(cursor);\n editor.renderer.scrollCursorIntoView();\n };\n\n this.extendSelectionBy = function (unitName) {\n var anchor,\n editor = this.editor;\n var cursor = editor.renderer.screenToTextCoordinates(this.x, this.y);\n var range = editor.selection[unitName](cursor.row, cursor.column);\n\n if (this.$clickSelection) {\n var cmpStart = this.$clickSelection.comparePoint(range.start);\n var cmpEnd = this.$clickSelection.comparePoint(range.end);\n\n if (cmpStart == -1 && cmpEnd <= 0) {\n anchor = this.$clickSelection.end;\n if (range.end.row != cursor.row || range.end.column != cursor.column) cursor = range.start;\n } else if (cmpEnd == 1 && cmpStart >= 0) {\n anchor = this.$clickSelection.start;\n if (range.start.row != cursor.row || range.start.column != cursor.column) cursor = range.end;\n } else if (cmpStart == -1 && cmpEnd == 1) {\n cursor = range.end;\n anchor = range.start;\n } else {\n var orientedRange = calcRangeOrientation(this.$clickSelection, cursor);\n cursor = orientedRange.cursor;\n anchor = orientedRange.anchor;\n }\n\n editor.selection.setSelectionAnchor(anchor.row, anchor.column);\n }\n\n editor.selection.selectToPosition(cursor);\n editor.renderer.scrollCursorIntoView();\n };\n\n this.selectEnd = this.selectAllEnd = this.selectByWordsEnd = this.selectByLinesEnd = function () {\n this.$clickSelection = null;\n this.editor.unsetStyle(\"ace_selecting\");\n\n if (this.editor.renderer.scroller.releaseCapture) {\n this.editor.renderer.scroller.releaseCapture();\n }\n };\n\n this.focusWait = function () {\n var distance = calcDistance(this.mousedownEvent.x, this.mousedownEvent.y, this.x, this.y);\n var time = Date.now();\n if (distance > DRAG_OFFSET || time - this.mousedownEvent.time > this.$focusTimeout) this.startSelect(this.mousedownEvent.getDocumentPosition());\n };\n\n this.onDoubleClick = function (ev) {\n var pos = ev.getDocumentPosition();\n var editor = this.editor;\n var session = editor.session;\n var range = session.getBracketRange(pos);\n\n if (range) {\n if (range.isEmpty()) {\n range.start.column--;\n range.end.column++;\n }\n\n this.setState(\"select\");\n } else {\n range = editor.selection.getWordRange(pos.row, pos.column);\n this.setState(\"selectByWords\");\n }\n\n this.$clickSelection = range;\n this.select();\n };\n\n this.onTripleClick = function (ev) {\n var pos = ev.getDocumentPosition();\n var editor = this.editor;\n this.setState(\"selectByLines\");\n var range = editor.getSelectionRange();\n\n if (range.isMultiLine() && range.contains(pos.row, pos.column)) {\n this.$clickSelection = editor.selection.getLineRange(range.start.row);\n this.$clickSelection.end = editor.selection.getLineRange(range.end.row).end;\n } else {\n this.$clickSelection = editor.selection.getLineRange(pos.row);\n }\n\n this.select();\n };\n\n this.onQuadClick = function (ev) {\n var editor = this.editor;\n editor.selectAll();\n this.$clickSelection = editor.getSelectionRange();\n this.setState(\"selectAll\");\n };\n\n this.onMouseWheel = function (ev) {\n if (ev.getAccelKey()) return;\n\n if (ev.getShiftKey() && ev.wheelY && !ev.wheelX) {\n ev.wheelX = ev.wheelY;\n ev.wheelY = 0;\n }\n\n var editor = this.editor;\n if (!this.$lastScroll) this.$lastScroll = {\n t: 0,\n vx: 0,\n vy: 0,\n allowed: 0\n };\n var prevScroll = this.$lastScroll;\n var t = ev.domEvent.timeStamp;\n var dt = t - prevScroll.t;\n var vx = dt ? ev.wheelX / dt : prevScroll.vx;\n var vy = dt ? ev.wheelY / dt : prevScroll.vy;\n\n if (dt < SCROLL_COOLDOWN_T) {\n vx = (vx + prevScroll.vx) / 2;\n vy = (vy + prevScroll.vy) / 2;\n }\n\n var direction = Math.abs(vx / vy);\n var canScroll = false;\n if (direction >= 1 && editor.renderer.isScrollableBy(ev.wheelX * ev.speed, 0)) canScroll = true;\n if (direction <= 1 && editor.renderer.isScrollableBy(0, ev.wheelY * ev.speed)) canScroll = true;\n\n if (canScroll) {\n prevScroll.allowed = t;\n } else if (t - prevScroll.allowed < SCROLL_COOLDOWN_T) {\n var isSlower = Math.abs(vx) <= 1.5 * Math.abs(prevScroll.vx) && Math.abs(vy) <= 1.5 * Math.abs(prevScroll.vy);\n\n if (isSlower) {\n canScroll = true;\n prevScroll.allowed = t;\n } else {\n prevScroll.allowed = 0;\n }\n }\n\n prevScroll.t = t;\n prevScroll.vx = vx;\n prevScroll.vy = vy;\n\n if (canScroll) {\n editor.renderer.scrollBy(ev.wheelX * ev.speed, ev.wheelY * ev.speed);\n return ev.stop();\n }\n };\n }).call(DefaultHandlers.prototype);\n exports.DefaultHandlers = DefaultHandlers;\n\n function calcDistance(ax, ay, bx, by) {\n return Math.sqrt(Math.pow(bx - ax, 2) + Math.pow(by - ay, 2));\n }\n\n function calcRangeOrientation(range, cursor) {\n if (range.start.row == range.end.row) var cmp = 2 * cursor.column - range.start.column - range.end.column;else if (range.start.row == range.end.row - 1 && !range.start.column && !range.end.column) var cmp = cursor.column - 4;else var cmp = 2 * cursor.row - range.start.row - range.end.row;\n if (cmp < 0) return {\n cursor: range.start,\n anchor: range.end\n };else return {\n cursor: range.end,\n anchor: range.start\n };\n }\n});\nace.define(\"ace/tooltip\", [\"require\", \"exports\", \"module\", \"ace/lib/oop\", \"ace/lib/dom\"], function (require, exports, module) {\n \"use strict\";\n\n var oop = require(\"./lib/oop\");\n\n var dom = require(\"./lib/dom\");\n\n function Tooltip(parentNode) {\n this.isOpen = false;\n this.$element = null;\n this.$parentNode = parentNode;\n }\n\n (function () {\n this.$init = function () {\n this.$element = dom.createElement(\"div\");\n this.$element.className = \"ace_tooltip\";\n this.$element.style.display = \"none\";\n this.$parentNode.appendChild(this.$element);\n return this.$element;\n };\n\n this.getElement = function () {\n return this.$element || this.$init();\n };\n\n this.setText = function (text) {\n this.getElement().textContent = text;\n };\n\n this.setHtml = function (html) {\n this.getElement().innerHTML = html;\n };\n\n this.setPosition = function (x, y) {\n this.getElement().style.left = x + \"px\";\n this.getElement().style.top = y + \"px\";\n };\n\n this.setClassName = function (className) {\n dom.addCssClass(this.getElement(), className);\n };\n\n this.show = function (text, x, y) {\n if (text != null) this.setText(text);\n if (x != null && y != null) this.setPosition(x, y);\n\n if (!this.isOpen) {\n this.getElement().style.display = \"block\";\n this.isOpen = true;\n }\n };\n\n this.hide = function () {\n if (this.isOpen) {\n this.getElement().style.display = \"none\";\n this.isOpen = false;\n }\n };\n\n this.getHeight = function () {\n return this.getElement().offsetHeight;\n };\n\n this.getWidth = function () {\n return this.getElement().offsetWidth;\n };\n\n this.destroy = function () {\n this.isOpen = false;\n\n if (this.$element && this.$element.parentNode) {\n this.$element.parentNode.removeChild(this.$element);\n }\n };\n }).call(Tooltip.prototype);\n exports.Tooltip = Tooltip;\n});\nace.define(\"ace/mouse/default_gutter_handler\", [\"require\", \"exports\", \"module\", \"ace/lib/dom\", \"ace/lib/oop\", \"ace/lib/event\", \"ace/tooltip\"], function (require, exports, module) {\n \"use strict\";\n\n var dom = require(\"../lib/dom\");\n\n var oop = require(\"../lib/oop\");\n\n var event = require(\"../lib/event\");\n\n var Tooltip = require(\"../tooltip\").Tooltip;\n\n function GutterHandler(mouseHandler) {\n var editor = mouseHandler.editor;\n var gutter = editor.renderer.$gutterLayer;\n var tooltip = new GutterTooltip(editor.container);\n mouseHandler.editor.setDefaultHandler(\"guttermousedown\", function (e) {\n if (!editor.isFocused() || e.getButton() != 0) return;\n var gutterRegion = gutter.getRegion(e);\n if (gutterRegion == \"foldWidgets\") return;\n var row = e.getDocumentPosition().row;\n var selection = editor.session.selection;\n if (e.getShiftKey()) selection.selectTo(row, 0);else {\n if (e.domEvent.detail == 2) {\n editor.selectAll();\n return e.preventDefault();\n }\n\n mouseHandler.$clickSelection = editor.selection.getLineRange(row);\n }\n mouseHandler.setState(\"selectByLines\");\n mouseHandler.captureMouse(e);\n return e.preventDefault();\n });\n var tooltipTimeout, mouseEvent, tooltipAnnotation;\n\n function showTooltip() {\n var row = mouseEvent.getDocumentPosition().row;\n var annotation = gutter.$annotations[row];\n if (!annotation) return hideTooltip();\n var maxRow = editor.session.getLength();\n\n if (row == maxRow) {\n var screenRow = editor.renderer.pixelToScreenCoordinates(0, mouseEvent.y).row;\n var pos = mouseEvent.$pos;\n if (screenRow > editor.session.documentToScreenRow(pos.row, pos.column)) return hideTooltip();\n }\n\n if (tooltipAnnotation == annotation) return;\n tooltipAnnotation = annotation.text.join(\"
\");\n tooltip.setHtml(tooltipAnnotation);\n tooltip.show();\n\n editor._signal(\"showGutterTooltip\", tooltip);\n\n editor.on(\"mousewheel\", hideTooltip);\n\n if (mouseHandler.$tooltipFollowsMouse) {\n moveTooltip(mouseEvent);\n } else {\n var gutterElement = mouseEvent.domEvent.target;\n var rect = gutterElement.getBoundingClientRect();\n var style = tooltip.getElement().style;\n style.left = rect.right + \"px\";\n style.top = rect.bottom + \"px\";\n }\n }\n\n function hideTooltip() {\n if (tooltipTimeout) tooltipTimeout = clearTimeout(tooltipTimeout);\n\n if (tooltipAnnotation) {\n tooltip.hide();\n tooltipAnnotation = null;\n\n editor._signal(\"hideGutterTooltip\", tooltip);\n\n editor.off(\"mousewheel\", hideTooltip);\n }\n }\n\n function moveTooltip(e) {\n tooltip.setPosition(e.x, e.y);\n }\n\n mouseHandler.editor.setDefaultHandler(\"guttermousemove\", function (e) {\n var target = e.domEvent.target || e.domEvent.srcElement;\n if (dom.hasCssClass(target, \"ace_fold-widget\")) return hideTooltip();\n if (tooltipAnnotation && mouseHandler.$tooltipFollowsMouse) moveTooltip(e);\n mouseEvent = e;\n if (tooltipTimeout) return;\n tooltipTimeout = setTimeout(function () {\n tooltipTimeout = null;\n if (mouseEvent && !mouseHandler.isMousePressed) showTooltip();else hideTooltip();\n }, 50);\n });\n event.addListener(editor.renderer.$gutter, \"mouseout\", function (e) {\n mouseEvent = null;\n if (!tooltipAnnotation || tooltipTimeout) return;\n tooltipTimeout = setTimeout(function () {\n tooltipTimeout = null;\n hideTooltip();\n }, 50);\n }, editor);\n editor.on(\"changeSession\", hideTooltip);\n }\n\n function GutterTooltip(parentNode) {\n Tooltip.call(this, parentNode);\n }\n\n oop.inherits(GutterTooltip, Tooltip);\n (function () {\n this.setPosition = function (x, y) {\n var windowWidth = window.innerWidth || document.documentElement.clientWidth;\n var windowHeight = window.innerHeight || document.documentElement.clientHeight;\n var width = this.getWidth();\n var height = this.getHeight();\n x += 15;\n y += 15;\n\n if (x + width > windowWidth) {\n x -= x + width - windowWidth;\n }\n\n if (y + height > windowHeight) {\n y -= 20 + height;\n }\n\n Tooltip.prototype.setPosition.call(this, x, y);\n };\n }).call(GutterTooltip.prototype);\n exports.GutterHandler = GutterHandler;\n});\nace.define(\"ace/mouse/mouse_event\", [\"require\", \"exports\", \"module\", \"ace/lib/event\", \"ace/lib/useragent\"], function (require, exports, module) {\n \"use strict\";\n\n var event = require(\"../lib/event\");\n\n var useragent = require(\"../lib/useragent\");\n\n var MouseEvent = exports.MouseEvent = function (domEvent, editor) {\n this.domEvent = domEvent;\n this.editor = editor;\n this.x = this.clientX = domEvent.clientX;\n this.y = this.clientY = domEvent.clientY;\n this.$pos = null;\n this.$inSelection = null;\n this.propagationStopped = false;\n this.defaultPrevented = false;\n };\n\n (function () {\n this.stopPropagation = function () {\n event.stopPropagation(this.domEvent);\n this.propagationStopped = true;\n };\n\n this.preventDefault = function () {\n event.preventDefault(this.domEvent);\n this.defaultPrevented = true;\n };\n\n this.stop = function () {\n this.stopPropagation();\n this.preventDefault();\n };\n\n this.getDocumentPosition = function () {\n if (this.$pos) return this.$pos;\n this.$pos = this.editor.renderer.screenToTextCoordinates(this.clientX, this.clientY);\n return this.$pos;\n };\n\n this.inSelection = function () {\n if (this.$inSelection !== null) return this.$inSelection;\n var editor = this.editor;\n var selectionRange = editor.getSelectionRange();\n if (selectionRange.isEmpty()) this.$inSelection = false;else {\n var pos = this.getDocumentPosition();\n this.$inSelection = selectionRange.contains(pos.row, pos.column);\n }\n return this.$inSelection;\n };\n\n this.getButton = function () {\n return event.getButton(this.domEvent);\n };\n\n this.getShiftKey = function () {\n return this.domEvent.shiftKey;\n };\n\n this.getAccelKey = useragent.isMac ? function () {\n return this.domEvent.metaKey;\n } : function () {\n return this.domEvent.ctrlKey;\n };\n }).call(MouseEvent.prototype);\n});\nace.define(\"ace/mouse/dragdrop_handler\", [\"require\", \"exports\", \"module\", \"ace/lib/dom\", \"ace/lib/event\", \"ace/lib/useragent\"], function (require, exports, module) {\n \"use strict\";\n\n var dom = require(\"../lib/dom\");\n\n var event = require(\"../lib/event\");\n\n var useragent = require(\"../lib/useragent\");\n\n var AUTOSCROLL_DELAY = 200;\n var SCROLL_CURSOR_DELAY = 200;\n var SCROLL_CURSOR_HYSTERESIS = 5;\n\n function DragdropHandler(mouseHandler) {\n var editor = mouseHandler.editor;\n var dragImage = dom.createElement(\"div\");\n dragImage.style.cssText = \"top:-100px;position:absolute;z-index:2147483647;opacity:0.5\";\n dragImage.textContent = \"\\xa0\";\n var exports = [\"dragWait\", \"dragWaitEnd\", \"startDrag\", \"dragReadyEnd\", \"onMouseDrag\"];\n exports.forEach(function (x) {\n mouseHandler[x] = this[x];\n }, this);\n editor.on(\"mousedown\", this.onMouseDown.bind(mouseHandler));\n var mouseTarget = editor.container;\n var dragSelectionMarker, x, y;\n var timerId, range;\n var dragCursor,\n counter = 0;\n var dragOperation;\n var isInternal;\n var autoScrollStartTime;\n var cursorMovedTime;\n var cursorPointOnCaretMoved;\n\n this.onDragStart = function (e) {\n if (this.cancelDrag || !mouseTarget.draggable) {\n var self = this;\n setTimeout(function () {\n self.startSelect();\n self.captureMouse(e);\n }, 0);\n return e.preventDefault();\n }\n\n range = editor.getSelectionRange();\n var dataTransfer = e.dataTransfer;\n dataTransfer.effectAllowed = editor.getReadOnly() ? \"copy\" : \"copyMove\";\n editor.container.appendChild(dragImage);\n dataTransfer.setDragImage && dataTransfer.setDragImage(dragImage, 0, 0);\n setTimeout(function () {\n editor.container.removeChild(dragImage);\n });\n dataTransfer.clearData();\n dataTransfer.setData(\"Text\", editor.session.getTextRange());\n isInternal = true;\n this.setState(\"drag\");\n };\n\n this.onDragEnd = function (e) {\n mouseTarget.draggable = false;\n isInternal = false;\n this.setState(null);\n\n if (!editor.getReadOnly()) {\n var dropEffect = e.dataTransfer.dropEffect;\n if (!dragOperation && dropEffect == \"move\") editor.session.remove(editor.getSelectionRange());\n editor.$resetCursorStyle();\n }\n\n this.editor.unsetStyle(\"ace_dragging\");\n this.editor.renderer.setCursorStyle(\"\");\n };\n\n this.onDragEnter = function (e) {\n if (editor.getReadOnly() || !canAccept(e.dataTransfer)) return;\n x = e.clientX;\n y = e.clientY;\n if (!dragSelectionMarker) addDragMarker();\n counter++;\n e.dataTransfer.dropEffect = dragOperation = getDropEffect(e);\n return event.preventDefault(e);\n };\n\n this.onDragOver = function (e) {\n if (editor.getReadOnly() || !canAccept(e.dataTransfer)) return;\n x = e.clientX;\n y = e.clientY;\n\n if (!dragSelectionMarker) {\n addDragMarker();\n counter++;\n }\n\n if (onMouseMoveTimer !== null) onMouseMoveTimer = null;\n e.dataTransfer.dropEffect = dragOperation = getDropEffect(e);\n return event.preventDefault(e);\n };\n\n this.onDragLeave = function (e) {\n counter--;\n\n if (counter <= 0 && dragSelectionMarker) {\n clearDragMarker();\n dragOperation = null;\n return event.preventDefault(e);\n }\n };\n\n this.onDrop = function (e) {\n if (!dragCursor) return;\n var dataTransfer = e.dataTransfer;\n\n if (isInternal) {\n switch (dragOperation) {\n case \"move\":\n if (range.contains(dragCursor.row, dragCursor.column)) {\n range = {\n start: dragCursor,\n end: dragCursor\n };\n } else {\n range = editor.moveText(range, dragCursor);\n }\n\n break;\n\n case \"copy\":\n range = editor.moveText(range, dragCursor, true);\n break;\n }\n } else {\n var dropData = dataTransfer.getData('Text');\n range = {\n start: dragCursor,\n end: editor.session.insert(dragCursor, dropData)\n };\n editor.focus();\n dragOperation = null;\n }\n\n clearDragMarker();\n return event.preventDefault(e);\n };\n\n event.addListener(mouseTarget, \"dragstart\", this.onDragStart.bind(mouseHandler), editor);\n event.addListener(mouseTarget, \"dragend\", this.onDragEnd.bind(mouseHandler), editor);\n event.addListener(mouseTarget, \"dragenter\", this.onDragEnter.bind(mouseHandler), editor);\n event.addListener(mouseTarget, \"dragover\", this.onDragOver.bind(mouseHandler), editor);\n event.addListener(mouseTarget, \"dragleave\", this.onDragLeave.bind(mouseHandler), editor);\n event.addListener(mouseTarget, \"drop\", this.onDrop.bind(mouseHandler), editor);\n\n function scrollCursorIntoView(cursor, prevCursor) {\n var now = Date.now();\n var vMovement = !prevCursor || cursor.row != prevCursor.row;\n var hMovement = !prevCursor || cursor.column != prevCursor.column;\n\n if (!cursorMovedTime || vMovement || hMovement) {\n editor.moveCursorToPosition(cursor);\n cursorMovedTime = now;\n cursorPointOnCaretMoved = {\n x: x,\n y: y\n };\n } else {\n var distance = calcDistance(cursorPointOnCaretMoved.x, cursorPointOnCaretMoved.y, x, y);\n\n if (distance > SCROLL_CURSOR_HYSTERESIS) {\n cursorMovedTime = null;\n } else if (now - cursorMovedTime >= SCROLL_CURSOR_DELAY) {\n editor.renderer.scrollCursorIntoView();\n cursorMovedTime = null;\n }\n }\n }\n\n function autoScroll(cursor, prevCursor) {\n var now = Date.now();\n var lineHeight = editor.renderer.layerConfig.lineHeight;\n var characterWidth = editor.renderer.layerConfig.characterWidth;\n var editorRect = editor.renderer.scroller.getBoundingClientRect();\n var offsets = {\n x: {\n left: x - editorRect.left,\n right: editorRect.right - x\n },\n y: {\n top: y - editorRect.top,\n bottom: editorRect.bottom - y\n }\n };\n var nearestXOffset = Math.min(offsets.x.left, offsets.x.right);\n var nearestYOffset = Math.min(offsets.y.top, offsets.y.bottom);\n var scrollCursor = {\n row: cursor.row,\n column: cursor.column\n };\n\n if (nearestXOffset / characterWidth <= 2) {\n scrollCursor.column += offsets.x.left < offsets.x.right ? -3 : +2;\n }\n\n if (nearestYOffset / lineHeight <= 1) {\n scrollCursor.row += offsets.y.top < offsets.y.bottom ? -1 : +1;\n }\n\n var vScroll = cursor.row != scrollCursor.row;\n var hScroll = cursor.column != scrollCursor.column;\n var vMovement = !prevCursor || cursor.row != prevCursor.row;\n\n if (vScroll || hScroll && !vMovement) {\n if (!autoScrollStartTime) autoScrollStartTime = now;else if (now - autoScrollStartTime >= AUTOSCROLL_DELAY) editor.renderer.scrollCursorIntoView(scrollCursor);\n } else {\n autoScrollStartTime = null;\n }\n }\n\n function onDragInterval() {\n var prevCursor = dragCursor;\n dragCursor = editor.renderer.screenToTextCoordinates(x, y);\n scrollCursorIntoView(dragCursor, prevCursor);\n autoScroll(dragCursor, prevCursor);\n }\n\n function addDragMarker() {\n range = editor.selection.toOrientedRange();\n dragSelectionMarker = editor.session.addMarker(range, \"ace_selection\", editor.getSelectionStyle());\n editor.clearSelection();\n if (editor.isFocused()) editor.renderer.$cursorLayer.setBlinking(false);\n clearInterval(timerId);\n onDragInterval();\n timerId = setInterval(onDragInterval, 20);\n counter = 0;\n event.addListener(document, \"mousemove\", onMouseMove);\n }\n\n function clearDragMarker() {\n clearInterval(timerId);\n editor.session.removeMarker(dragSelectionMarker);\n dragSelectionMarker = null;\n editor.selection.fromOrientedRange(range);\n if (editor.isFocused() && !isInternal) editor.$resetCursorStyle();\n range = null;\n dragCursor = null;\n counter = 0;\n autoScrollStartTime = null;\n cursorMovedTime = null;\n event.removeListener(document, \"mousemove\", onMouseMove);\n }\n\n var onMouseMoveTimer = null;\n\n function onMouseMove() {\n if (onMouseMoveTimer == null) {\n onMouseMoveTimer = setTimeout(function () {\n if (onMouseMoveTimer != null && dragSelectionMarker) clearDragMarker();\n }, 20);\n }\n }\n\n function canAccept(dataTransfer) {\n var types = dataTransfer.types;\n return !types || Array.prototype.some.call(types, function (type) {\n return type == 'text/plain' || type == 'Text';\n });\n }\n\n function getDropEffect(e) {\n var copyAllowed = ['copy', 'copymove', 'all', 'uninitialized'];\n var moveAllowed = ['move', 'copymove', 'linkmove', 'all', 'uninitialized'];\n var copyModifierState = useragent.isMac ? e.altKey : e.ctrlKey;\n var effectAllowed = \"uninitialized\";\n\n try {\n effectAllowed = e.dataTransfer.effectAllowed.toLowerCase();\n } catch (e) {}\n\n var dropEffect = \"none\";\n if (copyModifierState && copyAllowed.indexOf(effectAllowed) >= 0) dropEffect = \"copy\";else if (moveAllowed.indexOf(effectAllowed) >= 0) dropEffect = \"move\";else if (copyAllowed.indexOf(effectAllowed) >= 0) dropEffect = \"copy\";\n return dropEffect;\n }\n }\n\n (function () {\n this.dragWait = function () {\n var interval = Date.now() - this.mousedownEvent.time;\n if (interval > this.editor.getDragDelay()) this.startDrag();\n };\n\n this.dragWaitEnd = function () {\n var target = this.editor.container;\n target.draggable = false;\n this.startSelect(this.mousedownEvent.getDocumentPosition());\n this.selectEnd();\n };\n\n this.dragReadyEnd = function (e) {\n this.editor.$resetCursorStyle();\n this.editor.unsetStyle(\"ace_dragging\");\n this.editor.renderer.setCursorStyle(\"\");\n this.dragWaitEnd();\n };\n\n this.startDrag = function () {\n this.cancelDrag = false;\n var editor = this.editor;\n var target = editor.container;\n target.draggable = true;\n editor.renderer.$cursorLayer.setBlinking(false);\n editor.setStyle(\"ace_dragging\");\n var cursorStyle = useragent.isWin ? \"default\" : \"move\";\n editor.renderer.setCursorStyle(cursorStyle);\n this.setState(\"dragReady\");\n };\n\n this.onMouseDrag = function (e) {\n var target = this.editor.container;\n\n if (useragent.isIE && this.state == \"dragReady\") {\n var distance = calcDistance(this.mousedownEvent.x, this.mousedownEvent.y, this.x, this.y);\n if (distance > 3) target.dragDrop();\n }\n\n if (this.state === \"dragWait\") {\n var distance = calcDistance(this.mousedownEvent.x, this.mousedownEvent.y, this.x, this.y);\n\n if (distance > 0) {\n target.draggable = false;\n this.startSelect(this.mousedownEvent.getDocumentPosition());\n }\n }\n };\n\n this.onMouseDown = function (e) {\n if (!this.$dragEnabled) return;\n this.mousedownEvent = e;\n var editor = this.editor;\n var inSelection = e.inSelection();\n var button = e.getButton();\n var clickCount = e.domEvent.detail || 1;\n\n if (clickCount === 1 && button === 0 && inSelection) {\n if (e.editor.inMultiSelectMode && (e.getAccelKey() || e.getShiftKey())) return;\n this.mousedownEvent.time = Date.now();\n var eventTarget = e.domEvent.target || e.domEvent.srcElement;\n if (\"unselectable\" in eventTarget) eventTarget.unselectable = \"on\";\n\n if (editor.getDragDelay()) {\n if (useragent.isWebKit) {\n this.cancelDrag = true;\n var mouseTarget = editor.container;\n mouseTarget.draggable = true;\n }\n\n this.setState(\"dragWait\");\n } else {\n this.startDrag();\n }\n\n this.captureMouse(e, this.onMouseDrag.bind(this));\n e.defaultPrevented = true;\n }\n };\n }).call(DragdropHandler.prototype);\n\n function calcDistance(ax, ay, bx, by) {\n return Math.sqrt(Math.pow(bx - ax, 2) + Math.pow(by - ay, 2));\n }\n\n exports.DragdropHandler = DragdropHandler;\n});\nace.define(\"ace/mouse/touch_handler\", [\"require\", \"exports\", \"module\", \"ace/mouse/mouse_event\", \"ace/lib/event\", \"ace/lib/dom\"], function (require, exports, module) {\n \"use strict\";\n\n var MouseEvent = require(\"./mouse_event\").MouseEvent;\n\n var event = require(\"../lib/event\");\n\n var dom = require(\"../lib/dom\");\n\n exports.addTouchListeners = function (el, editor) {\n var mode = \"scroll\";\n var startX;\n var startY;\n var touchStartT;\n var lastT;\n var longTouchTimer;\n var animationTimer;\n var animationSteps = 0;\n var pos;\n var clickCount = 0;\n var vX = 0;\n var vY = 0;\n var pressed;\n var contextMenu;\n\n function createContextMenu() {\n var clipboard = window.navigator && window.navigator.clipboard;\n var isOpen = false;\n\n var updateMenu = function updateMenu() {\n var selected = editor.getCopyText();\n var hasUndo = editor.session.getUndoManager().hasUndo();\n contextMenu.replaceChild(dom.buildDom(isOpen ? [\"span\", !selected && [\"span\", {\n class: \"ace_mobile-button\",\n action: \"selectall\"\n }, \"Select All\"], selected && [\"span\", {\n class: \"ace_mobile-button\",\n action: \"copy\"\n }, \"Copy\"], selected && [\"span\", {\n class: \"ace_mobile-button\",\n action: \"cut\"\n }, \"Cut\"], clipboard && [\"span\", {\n class: \"ace_mobile-button\",\n action: \"paste\"\n }, \"Paste\"], hasUndo && [\"span\", {\n class: \"ace_mobile-button\",\n action: \"undo\"\n }, \"Undo\"], [\"span\", {\n class: \"ace_mobile-button\",\n action: \"find\"\n }, \"Find\"], [\"span\", {\n class: \"ace_mobile-button\",\n action: \"openCommandPallete\"\n }, \"Pallete\"]] : [\"span\"]), contextMenu.firstChild);\n };\n\n var handleClick = function handleClick(e) {\n var action = e.target.getAttribute(\"action\");\n\n if (action == \"more\" || !isOpen) {\n isOpen = !isOpen;\n return updateMenu();\n }\n\n if (action == \"paste\") {\n clipboard.readText().then(function (text) {\n editor.execCommand(action, text);\n });\n } else if (action) {\n if (action == \"cut\" || action == \"copy\") {\n if (clipboard) clipboard.writeText(editor.getCopyText());else document.execCommand(\"copy\");\n }\n\n editor.execCommand(action);\n }\n\n contextMenu.firstChild.style.display = \"none\";\n isOpen = false;\n if (action != \"openCommandPallete\") editor.focus();\n };\n\n contextMenu = dom.buildDom([\"div\", {\n class: \"ace_mobile-menu\",\n ontouchstart: function ontouchstart(e) {\n mode = \"menu\";\n e.stopPropagation();\n e.preventDefault();\n editor.textInput.focus();\n },\n ontouchend: function ontouchend(e) {\n e.stopPropagation();\n e.preventDefault();\n handleClick(e);\n },\n onclick: handleClick\n }, [\"span\"], [\"span\", {\n class: \"ace_mobile-button\",\n action: \"more\"\n }, \"...\"]], editor.container);\n }\n\n function showContextMenu() {\n if (!contextMenu) createContextMenu();\n var cursor = editor.selection.cursor;\n var pagePos = editor.renderer.textToScreenCoordinates(cursor.row, cursor.column);\n var leftOffset = editor.renderer.textToScreenCoordinates(0, 0).pageX;\n var scrollLeft = editor.renderer.scrollLeft;\n var rect = editor.container.getBoundingClientRect();\n contextMenu.style.top = pagePos.pageY - rect.top - 3 + \"px\";\n\n if (pagePos.pageX - rect.left < rect.width - 70) {\n contextMenu.style.left = \"\";\n contextMenu.style.right = \"10px\";\n } else {\n contextMenu.style.right = \"\";\n contextMenu.style.left = leftOffset + scrollLeft - rect.left + \"px\";\n }\n\n contextMenu.style.display = \"\";\n contextMenu.firstChild.style.display = \"none\";\n editor.on(\"input\", hideContextMenu);\n }\n\n function hideContextMenu(e) {\n if (contextMenu) contextMenu.style.display = \"none\";\n editor.off(\"input\", hideContextMenu);\n }\n\n function handleLongTap() {\n longTouchTimer = null;\n clearTimeout(longTouchTimer);\n var range = editor.selection.getRange();\n var inSelection = range.contains(pos.row, pos.column);\n\n if (range.isEmpty() || !inSelection) {\n editor.selection.moveToPosition(pos);\n editor.selection.selectWord();\n }\n\n mode = \"wait\";\n showContextMenu();\n }\n\n function switchToSelectionMode() {\n longTouchTimer = null;\n clearTimeout(longTouchTimer);\n editor.selection.moveToPosition(pos);\n var range = clickCount >= 2 ? editor.selection.getLineRange(pos.row) : editor.session.getBracketRange(pos);\n\n if (range && !range.isEmpty()) {\n editor.selection.setRange(range);\n } else {\n editor.selection.selectWord();\n }\n\n mode = \"wait\";\n }\n\n event.addListener(el, \"contextmenu\", function (e) {\n if (!pressed) return;\n var textarea = editor.textInput.getElement();\n textarea.focus();\n }, editor);\n event.addListener(el, \"touchstart\", function (e) {\n var touches = e.touches;\n\n if (longTouchTimer || touches.length > 1) {\n clearTimeout(longTouchTimer);\n longTouchTimer = null;\n touchStartT = -1;\n mode = \"zoom\";\n return;\n }\n\n pressed = editor.$mouseHandler.isMousePressed = true;\n var h = editor.renderer.layerConfig.lineHeight;\n var w = editor.renderer.layerConfig.lineHeight;\n var t = e.timeStamp;\n lastT = t;\n var touchObj = touches[0];\n var x = touchObj.clientX;\n var y = touchObj.clientY;\n if (Math.abs(startX - x) + Math.abs(startY - y) > h) touchStartT = -1;\n startX = e.clientX = x;\n startY = e.clientY = y;\n vX = vY = 0;\n var ev = new MouseEvent(e, editor);\n pos = ev.getDocumentPosition();\n\n if (t - touchStartT < 500 && touches.length == 1 && !animationSteps) {\n clickCount++;\n e.preventDefault();\n e.button = 0;\n switchToSelectionMode();\n } else {\n clickCount = 0;\n var cursor = editor.selection.cursor;\n var anchor = editor.selection.isEmpty() ? cursor : editor.selection.anchor;\n var cursorPos = editor.renderer.$cursorLayer.getPixelPosition(cursor, true);\n var anchorPos = editor.renderer.$cursorLayer.getPixelPosition(anchor, true);\n var rect = editor.renderer.scroller.getBoundingClientRect();\n var offsetTop = editor.renderer.layerConfig.offset;\n var offsetLeft = editor.renderer.scrollLeft;\n\n var weightedDistance = function weightedDistance(x, y) {\n x = x / w;\n y = y / h - 0.75;\n return x * x + y * y;\n };\n\n if (e.clientX < rect.left) {\n mode = \"zoom\";\n return;\n }\n\n var diff1 = weightedDistance(e.clientX - rect.left - cursorPos.left + offsetLeft, e.clientY - rect.top - cursorPos.top + offsetTop);\n var diff2 = weightedDistance(e.clientX - rect.left - anchorPos.left + offsetLeft, e.clientY - rect.top - anchorPos.top + offsetTop);\n if (diff1 < 3.5 && diff2 < 3.5) mode = diff1 > diff2 ? \"cursor\" : \"anchor\";\n if (diff2 < 3.5) mode = \"anchor\";else if (diff1 < 3.5) mode = \"cursor\";else mode = \"scroll\";\n longTouchTimer = setTimeout(handleLongTap, 450);\n }\n\n touchStartT = t;\n }, editor);\n event.addListener(el, \"touchend\", function (e) {\n pressed = editor.$mouseHandler.isMousePressed = false;\n if (animationTimer) clearInterval(animationTimer);\n\n if (mode == \"zoom\") {\n mode = \"\";\n animationSteps = 0;\n } else if (longTouchTimer) {\n editor.selection.moveToPosition(pos);\n animationSteps = 0;\n showContextMenu();\n } else if (mode == \"scroll\") {\n animate();\n hideContextMenu();\n } else {\n showContextMenu();\n }\n\n clearTimeout(longTouchTimer);\n longTouchTimer = null;\n }, editor);\n event.addListener(el, \"touchmove\", function (e) {\n if (longTouchTimer) {\n clearTimeout(longTouchTimer);\n longTouchTimer = null;\n }\n\n var touches = e.touches;\n if (touches.length > 1 || mode == \"zoom\") return;\n var touchObj = touches[0];\n var wheelX = startX - touchObj.clientX;\n var wheelY = startY - touchObj.clientY;\n\n if (mode == \"wait\") {\n if (wheelX * wheelX + wheelY * wheelY > 4) mode = \"cursor\";else return e.preventDefault();\n }\n\n startX = touchObj.clientX;\n startY = touchObj.clientY;\n e.clientX = touchObj.clientX;\n e.clientY = touchObj.clientY;\n var t = e.timeStamp;\n var dt = t - lastT;\n lastT = t;\n\n if (mode == \"scroll\") {\n var mouseEvent = new MouseEvent(e, editor);\n mouseEvent.speed = 1;\n mouseEvent.wheelX = wheelX;\n mouseEvent.wheelY = wheelY;\n if (10 * Math.abs(wheelX) < Math.abs(wheelY)) wheelX = 0;\n if (10 * Math.abs(wheelY) < Math.abs(wheelX)) wheelY = 0;\n\n if (dt != 0) {\n vX = wheelX / dt;\n vY = wheelY / dt;\n }\n\n editor._emit(\"mousewheel\", mouseEvent);\n\n if (!mouseEvent.propagationStopped) {\n vX = vY = 0;\n }\n } else {\n var ev = new MouseEvent(e, editor);\n var pos = ev.getDocumentPosition();\n if (mode == \"cursor\") editor.selection.moveCursorToPosition(pos);else if (mode == \"anchor\") editor.selection.setSelectionAnchor(pos.row, pos.column);\n editor.renderer.scrollCursorIntoView(pos);\n e.preventDefault();\n }\n }, editor);\n\n function animate() {\n animationSteps += 60;\n animationTimer = setInterval(function () {\n if (animationSteps-- <= 0) {\n clearInterval(animationTimer);\n animationTimer = null;\n }\n\n if (Math.abs(vX) < 0.01) vX = 0;\n if (Math.abs(vY) < 0.01) vY = 0;\n if (animationSteps < 20) vX = 0.9 * vX;\n if (animationSteps < 20) vY = 0.9 * vY;\n var oldScrollTop = editor.session.getScrollTop();\n editor.renderer.scrollBy(10 * vX, 10 * vY);\n if (oldScrollTop == editor.session.getScrollTop()) animationSteps = 0;\n }, 10);\n }\n };\n});\nace.define(\"ace/lib/net\", [\"require\", \"exports\", \"module\", \"ace/lib/dom\"], function (require, exports, module) {\n \"use strict\";\n\n var dom = require(\"./dom\");\n\n exports.get = function (url, callback) {\n var xhr = new XMLHttpRequest();\n xhr.open('GET', url, true);\n\n xhr.onreadystatechange = function () {\n if (xhr.readyState === 4) {\n callback(xhr.responseText);\n }\n };\n\n xhr.send(null);\n };\n\n exports.loadScript = function (path, callback) {\n var head = dom.getDocumentHead();\n var s = document.createElement('script');\n s.src = path;\n head.appendChild(s);\n\n s.onload = s.onreadystatechange = function (_, isAbort) {\n if (isAbort || !s.readyState || s.readyState == \"loaded\" || s.readyState == \"complete\") {\n s = s.onload = s.onreadystatechange = null;\n if (!isAbort) callback();\n }\n };\n };\n\n exports.qualifyURL = function (url) {\n var a = document.createElement('a');\n a.href = url;\n return a.href;\n };\n});\nace.define(\"ace/lib/event_emitter\", [\"require\", \"exports\", \"module\"], function (require, exports, module) {\n \"use strict\";\n\n var EventEmitter = {};\n\n var stopPropagation = function stopPropagation() {\n this.propagationStopped = true;\n };\n\n var preventDefault = function preventDefault() {\n this.defaultPrevented = true;\n };\n\n EventEmitter._emit = EventEmitter._dispatchEvent = function (eventName, e) {\n this._eventRegistry || (this._eventRegistry = {});\n this._defaultHandlers || (this._defaultHandlers = {});\n var listeners = this._eventRegistry[eventName] || [];\n var defaultHandler = this._defaultHandlers[eventName];\n if (!listeners.length && !defaultHandler) return;\n if (_typeof(e) != \"object\" || !e) e = {};\n if (!e.type) e.type = eventName;\n if (!e.stopPropagation) e.stopPropagation = stopPropagation;\n if (!e.preventDefault) e.preventDefault = preventDefault;\n listeners = listeners.slice();\n\n for (var i = 0; i < listeners.length; i++) {\n listeners[i](e, this);\n if (e.propagationStopped) break;\n }\n\n if (defaultHandler && !e.defaultPrevented) return defaultHandler(e, this);\n };\n\n EventEmitter._signal = function (eventName, e) {\n var listeners = (this._eventRegistry || {})[eventName];\n if (!listeners) return;\n listeners = listeners.slice();\n\n for (var i = 0; i < listeners.length; i++) {\n listeners[i](e, this);\n }\n };\n\n EventEmitter.once = function (eventName, callback) {\n var _self = this;\n\n this.on(eventName, function newCallback() {\n _self.off(eventName, newCallback);\n\n callback.apply(null, arguments);\n });\n\n if (!callback) {\n return new Promise(function (resolve) {\n callback = resolve;\n });\n }\n };\n\n EventEmitter.setDefaultHandler = function (eventName, callback) {\n var handlers = this._defaultHandlers;\n if (!handlers) handlers = this._defaultHandlers = {\n _disabled_: {}\n };\n\n if (handlers[eventName]) {\n var old = handlers[eventName];\n var disabled = handlers._disabled_[eventName];\n if (!disabled) handlers._disabled_[eventName] = disabled = [];\n disabled.push(old);\n var i = disabled.indexOf(callback);\n if (i != -1) disabled.splice(i, 1);\n }\n\n handlers[eventName] = callback;\n };\n\n EventEmitter.removeDefaultHandler = function (eventName, callback) {\n var handlers = this._defaultHandlers;\n if (!handlers) return;\n var disabled = handlers._disabled_[eventName];\n\n if (handlers[eventName] == callback) {\n if (disabled) this.setDefaultHandler(eventName, disabled.pop());\n } else if (disabled) {\n var i = disabled.indexOf(callback);\n if (i != -1) disabled.splice(i, 1);\n }\n };\n\n EventEmitter.on = EventEmitter.addEventListener = function (eventName, callback, capturing) {\n this._eventRegistry = this._eventRegistry || {};\n var listeners = this._eventRegistry[eventName];\n if (!listeners) listeners = this._eventRegistry[eventName] = [];\n if (listeners.indexOf(callback) == -1) listeners[capturing ? \"unshift\" : \"push\"](callback);\n return callback;\n };\n\n EventEmitter.off = EventEmitter.removeListener = EventEmitter.removeEventListener = function (eventName, callback) {\n this._eventRegistry = this._eventRegistry || {};\n var listeners = this._eventRegistry[eventName];\n if (!listeners) return;\n var index = listeners.indexOf(callback);\n if (index !== -1) listeners.splice(index, 1);\n };\n\n EventEmitter.removeAllListeners = function (eventName) {\n if (!eventName) this._eventRegistry = this._defaultHandlers = undefined;\n if (this._eventRegistry) this._eventRegistry[eventName] = undefined;\n if (this._defaultHandlers) this._defaultHandlers[eventName] = undefined;\n };\n\n exports.EventEmitter = EventEmitter;\n});\nace.define(\"ace/lib/app_config\", [\"require\", \"exports\", \"module\", \"ace/lib/oop\", \"ace/lib/event_emitter\"], function (require, exports, module) {\n \"no use strict\";\n\n var oop = require(\"./oop\");\n\n var EventEmitter = require(\"./event_emitter\").EventEmitter;\n\n var optionsProvider = {\n setOptions: function setOptions(optList) {\n Object.keys(optList).forEach(function (key) {\n this.setOption(key, optList[key]);\n }, this);\n },\n getOptions: function getOptions(optionNames) {\n var result = {};\n\n if (!optionNames) {\n var options = this.$options;\n optionNames = Object.keys(options).filter(function (key) {\n return !options[key].hidden;\n });\n } else if (!Array.isArray(optionNames)) {\n result = optionNames;\n optionNames = Object.keys(result);\n }\n\n optionNames.forEach(function (key) {\n result[key] = this.getOption(key);\n }, this);\n return result;\n },\n setOption: function setOption(name, value) {\n if (this[\"$\" + name] === value) return;\n var opt = this.$options[name];\n\n if (!opt) {\n return warn('misspelled option \"' + name + '\"');\n }\n\n if (opt.forwardTo) return this[opt.forwardTo] && this[opt.forwardTo].setOption(name, value);\n if (!opt.handlesSet) this[\"$\" + name] = value;\n if (opt && opt.set) opt.set.call(this, value);\n },\n getOption: function getOption(name) {\n var opt = this.$options[name];\n\n if (!opt) {\n return warn('misspelled option \"' + name + '\"');\n }\n\n if (opt.forwardTo) return this[opt.forwardTo] && this[opt.forwardTo].getOption(name);\n return opt && opt.get ? opt.get.call(this) : this[\"$\" + name];\n }\n };\n\n function warn(message) {\n if (typeof console != \"undefined\" && console.warn) console.warn.apply(console, arguments);\n }\n\n function reportError(msg, data) {\n var e = new Error(msg);\n e.data = data;\n if ((typeof console === \"undefined\" ? \"undefined\" : _typeof(console)) == \"object\" && console.error) console.error(e);\n setTimeout(function () {\n throw e;\n });\n }\n\n var AppConfig = function AppConfig() {\n this.$defaultOptions = {};\n };\n\n (function () {\n oop.implement(this, EventEmitter);\n\n this.defineOptions = function (obj, path, options) {\n if (!obj.$options) this.$defaultOptions[path] = obj.$options = {};\n Object.keys(options).forEach(function (key) {\n var opt = options[key];\n if (typeof opt == \"string\") opt = {\n forwardTo: opt\n };\n opt.name || (opt.name = key);\n obj.$options[opt.name] = opt;\n if (\"initialValue\" in opt) obj[\"$\" + opt.name] = opt.initialValue;\n });\n oop.implement(obj, optionsProvider);\n return this;\n };\n\n this.resetOptions = function (obj) {\n Object.keys(obj.$options).forEach(function (key) {\n var opt = obj.$options[key];\n if (\"value\" in opt) obj.setOption(key, opt.value);\n });\n };\n\n this.setDefaultValue = function (path, name, value) {\n if (!path) {\n for (path in this.$defaultOptions) {\n if (this.$defaultOptions[path][name]) break;\n }\n\n if (!this.$defaultOptions[path][name]) return false;\n }\n\n var opts = this.$defaultOptions[path] || (this.$defaultOptions[path] = {});\n\n if (opts[name]) {\n if (opts.forwardTo) this.setDefaultValue(opts.forwardTo, name, value);else opts[name].value = value;\n }\n };\n\n this.setDefaultValues = function (path, optionHash) {\n Object.keys(optionHash).forEach(function (key) {\n this.setDefaultValue(path, key, optionHash[key]);\n }, this);\n };\n\n this.warn = warn;\n this.reportError = reportError;\n }).call(AppConfig.prototype);\n exports.AppConfig = AppConfig;\n});\nace.define(\"ace/config\", [\"require\", \"exports\", \"module\", \"ace/lib/lang\", \"ace/lib/oop\", \"ace/lib/net\", \"ace/lib/dom\", \"ace/lib/app_config\"], function (require, exports, module) {\n \"no use strict\";\n\n var lang = require(\"./lib/lang\");\n\n var oop = require(\"./lib/oop\");\n\n var net = require(\"./lib/net\");\n\n var dom = require(\"./lib/dom\");\n\n var AppConfig = require(\"./lib/app_config\").AppConfig;\n\n module.exports = exports = new AppConfig();\n\n var global = function () {\n return this || typeof window != \"undefined\" && window;\n }();\n\n var options = {\n packaged: false,\n workerPath: null,\n modePath: null,\n themePath: null,\n basePath: \"\",\n suffix: \".js\",\n $moduleUrls: {},\n loadWorkerFromBlob: true,\n sharedPopups: false,\n useStrictCSP: null\n };\n\n exports.get = function (key) {\n if (!options.hasOwnProperty(key)) throw new Error(\"Unknown config key: \" + key);\n return options[key];\n };\n\n exports.set = function (key, value) {\n if (options.hasOwnProperty(key)) options[key] = value;else if (this.setDefaultValue(\"\", key, value) == false) throw new Error(\"Unknown config key: \" + key);\n if (key == \"useStrictCSP\") dom.useStrictCSP(value);\n };\n\n exports.all = function () {\n return lang.copyObject(options);\n };\n\n exports.$modes = {};\n\n exports.moduleUrl = function (name, component) {\n if (options.$moduleUrls[name]) return options.$moduleUrls[name];\n var parts = name.split(\"/\");\n component = component || parts[parts.length - 2] || \"\";\n var sep = component == \"snippets\" ? \"/\" : \"-\";\n var base = parts[parts.length - 1];\n\n if (component == \"worker\" && sep == \"-\") {\n var re = new RegExp(\"^\" + component + \"[\\\\-_]|[\\\\-_]\" + component + \"$\", \"g\");\n base = base.replace(re, \"\");\n }\n\n if ((!base || base == component) && parts.length > 1) base = parts[parts.length - 2];\n var path = options[component + \"Path\"];\n\n if (path == null) {\n path = options.basePath;\n } else if (sep == \"/\") {\n component = sep = \"\";\n }\n\n if (path && path.slice(-1) != \"/\") path += \"/\";\n return path + component + sep + base + this.get(\"suffix\");\n };\n\n exports.setModuleUrl = function (name, subst) {\n return options.$moduleUrls[name] = subst;\n };\n\n exports.$loading = {};\n\n exports.loadModule = function (moduleName, onLoad) {\n var module, moduleType;\n\n if (Array.isArray(moduleName)) {\n moduleType = moduleName[0];\n moduleName = moduleName[1];\n }\n\n try {\n module = require(moduleName);\n } catch (e) {}\n\n if (module && !exports.$loading[moduleName]) return onLoad && onLoad(module);\n if (!exports.$loading[moduleName]) exports.$loading[moduleName] = [];\n exports.$loading[moduleName].push(onLoad);\n if (exports.$loading[moduleName].length > 1) return;\n\n var afterLoad = function afterLoad() {\n require([moduleName], function (module) {\n exports._emit(\"load.module\", {\n name: moduleName,\n module: module\n });\n\n var listeners = exports.$loading[moduleName];\n exports.$loading[moduleName] = null;\n listeners.forEach(function (onLoad) {\n onLoad && onLoad(module);\n });\n });\n };\n\n if (!exports.get(\"packaged\")) return afterLoad();\n net.loadScript(exports.moduleUrl(moduleName, moduleType), afterLoad);\n\n _reportErrorIfPathIsNotConfigured();\n };\n\n var _reportErrorIfPathIsNotConfigured = function reportErrorIfPathIsNotConfigured() {\n if (!options.basePath && !options.workerPath && !options.modePath && !options.themePath && !Object.keys(options.$moduleUrls).length) {\n console.error(\"Unable to infer path to ace from script src,\", \"use ace.config.set('basePath', 'path') to enable dynamic loading of modes and themes\", \"or with webpack use ace/webpack-resolver\");\n\n _reportErrorIfPathIsNotConfigured = function reportErrorIfPathIsNotConfigured() {};\n }\n };\n\n init(true);\n\n function init(packaged) {\n if (!global || !global.document) return;\n options.packaged = packaged || require.packaged || module.packaged || global.define && define.packaged;\n var scriptOptions = {};\n var scriptUrl = \"\";\n var currentScript = document.currentScript || document._currentScript; // native or polyfill\n\n var currentDocument = currentScript && currentScript.ownerDocument || document;\n var scripts = currentDocument.getElementsByTagName(\"script\");\n\n for (var i = 0; i < scripts.length; i++) {\n var script = scripts[i];\n var src = script.src || script.getAttribute(\"src\");\n if (!src) continue;\n var attributes = script.attributes;\n\n for (var j = 0, l = attributes.length; j < l; j++) {\n var attr = attributes[j];\n\n if (attr.name.indexOf(\"data-ace-\") === 0) {\n scriptOptions[deHyphenate(attr.name.replace(/^data-ace-/, \"\"))] = attr.value;\n }\n }\n\n var m = src.match(/^(.*)\\/ace(\\-\\w+)?\\.js(\\?|$)/);\n if (m) scriptUrl = m[1];\n }\n\n if (scriptUrl) {\n scriptOptions.base = scriptOptions.base || scriptUrl;\n scriptOptions.packaged = true;\n }\n\n scriptOptions.basePath = scriptOptions.base;\n scriptOptions.workerPath = scriptOptions.workerPath || scriptOptions.base;\n scriptOptions.modePath = scriptOptions.modePath || scriptOptions.base;\n scriptOptions.themePath = scriptOptions.themePath || scriptOptions.base;\n delete scriptOptions.base;\n\n for (var key in scriptOptions) {\n if (typeof scriptOptions[key] !== \"undefined\") exports.set(key, scriptOptions[key]);\n }\n }\n\n exports.init = init;\n\n function deHyphenate(str) {\n return str.replace(/-(.)/g, function (m, m1) {\n return m1.toUpperCase();\n });\n }\n\n exports.version = \"1.4.13\";\n});\nace.define(\"ace/mouse/mouse_handler\", [\"require\", \"exports\", \"module\", \"ace/lib/event\", \"ace/lib/useragent\", \"ace/mouse/default_handlers\", \"ace/mouse/default_gutter_handler\", \"ace/mouse/mouse_event\", \"ace/mouse/dragdrop_handler\", \"ace/mouse/touch_handler\", \"ace/config\"], function (require, exports, module) {\n \"use strict\";\n\n var event = require(\"../lib/event\");\n\n var useragent = require(\"../lib/useragent\");\n\n var DefaultHandlers = require(\"./default_handlers\").DefaultHandlers;\n\n var DefaultGutterHandler = require(\"./default_gutter_handler\").GutterHandler;\n\n var MouseEvent = require(\"./mouse_event\").MouseEvent;\n\n var DragdropHandler = require(\"./dragdrop_handler\").DragdropHandler;\n\n var addTouchListeners = require(\"./touch_handler\").addTouchListeners;\n\n var config = require(\"../config\");\n\n var MouseHandler = function MouseHandler(editor) {\n var _self = this;\n\n this.editor = editor;\n new DefaultHandlers(this);\n new DefaultGutterHandler(this);\n new DragdropHandler(this);\n\n var focusEditor = function focusEditor(e) {\n var windowBlurred = !document.hasFocus || !document.hasFocus() || !editor.isFocused() && document.activeElement == (editor.textInput && editor.textInput.getElement());\n if (windowBlurred) window.focus();\n editor.focus();\n };\n\n var mouseTarget = editor.renderer.getMouseEventTarget();\n event.addListener(mouseTarget, \"click\", this.onMouseEvent.bind(this, \"click\"), editor);\n event.addListener(mouseTarget, \"mousemove\", this.onMouseMove.bind(this, \"mousemove\"), editor);\n event.addMultiMouseDownListener([mouseTarget, editor.renderer.scrollBarV && editor.renderer.scrollBarV.inner, editor.renderer.scrollBarH && editor.renderer.scrollBarH.inner, editor.textInput && editor.textInput.getElement()].filter(Boolean), [400, 300, 250], this, \"onMouseEvent\", editor);\n event.addMouseWheelListener(editor.container, this.onMouseWheel.bind(this, \"mousewheel\"), editor);\n addTouchListeners(editor.container, editor);\n var gutterEl = editor.renderer.$gutter;\n event.addListener(gutterEl, \"mousedown\", this.onMouseEvent.bind(this, \"guttermousedown\"), editor);\n event.addListener(gutterEl, \"click\", this.onMouseEvent.bind(this, \"gutterclick\"), editor);\n event.addListener(gutterEl, \"dblclick\", this.onMouseEvent.bind(this, \"gutterdblclick\"), editor);\n event.addListener(gutterEl, \"mousemove\", this.onMouseEvent.bind(this, \"guttermousemove\"), editor);\n event.addListener(mouseTarget, \"mousedown\", focusEditor, editor);\n event.addListener(gutterEl, \"mousedown\", focusEditor, editor);\n\n if (useragent.isIE && editor.renderer.scrollBarV) {\n event.addListener(editor.renderer.scrollBarV.element, \"mousedown\", focusEditor, editor);\n event.addListener(editor.renderer.scrollBarH.element, \"mousedown\", focusEditor, editor);\n }\n\n editor.on(\"mousemove\", function (e) {\n if (_self.state || _self.$dragDelay || !_self.$dragEnabled) return;\n var character = editor.renderer.screenToTextCoordinates(e.x, e.y);\n var range = editor.session.selection.getRange();\n var renderer = editor.renderer;\n\n if (!range.isEmpty() && range.insideStart(character.row, character.column)) {\n renderer.setCursorStyle(\"default\");\n } else {\n renderer.setCursorStyle(\"\");\n }\n }, editor);\n };\n\n (function () {\n this.onMouseEvent = function (name, e) {\n if (!this.editor.session) return;\n\n this.editor._emit(name, new MouseEvent(e, this.editor));\n };\n\n this.onMouseMove = function (name, e) {\n var listeners = this.editor._eventRegistry && this.editor._eventRegistry.mousemove;\n if (!listeners || !listeners.length) return;\n\n this.editor._emit(name, new MouseEvent(e, this.editor));\n };\n\n this.onMouseWheel = function (name, e) {\n var mouseEvent = new MouseEvent(e, this.editor);\n mouseEvent.speed = this.$scrollSpeed * 2;\n mouseEvent.wheelX = e.wheelX;\n mouseEvent.wheelY = e.wheelY;\n\n this.editor._emit(name, mouseEvent);\n };\n\n this.setState = function (state) {\n this.state = state;\n };\n\n this.captureMouse = function (ev, mouseMoveHandler) {\n this.x = ev.x;\n this.y = ev.y;\n this.isMousePressed = true;\n var editor = this.editor;\n var renderer = this.editor.renderer;\n renderer.$isMousePressed = true;\n var self = this;\n\n var onMouseMove = function onMouseMove(e) {\n if (!e) return;\n if (useragent.isWebKit && !e.which && self.releaseMouse) return self.releaseMouse();\n self.x = e.clientX;\n self.y = e.clientY;\n mouseMoveHandler && mouseMoveHandler(e);\n self.mouseEvent = new MouseEvent(e, self.editor);\n self.$mouseMoved = true;\n };\n\n var onCaptureEnd = function onCaptureEnd(e) {\n editor.off(\"beforeEndOperation\", onOperationEnd);\n clearInterval(timerId);\n if (editor.session) onCaptureInterval();\n self[self.state + \"End\"] && self[self.state + \"End\"](e);\n self.state = \"\";\n self.isMousePressed = renderer.$isMousePressed = false;\n if (renderer.$keepTextAreaAtCursor) renderer.$moveTextAreaToCursor();\n self.$onCaptureMouseMove = self.releaseMouse = null;\n e && self.onMouseEvent(\"mouseup\", e);\n editor.endOperation();\n };\n\n var onCaptureInterval = function onCaptureInterval() {\n self[self.state] && self[self.state]();\n self.$mouseMoved = false;\n };\n\n if (useragent.isOldIE && ev.domEvent.type == \"dblclick\") {\n return setTimeout(function () {\n onCaptureEnd(ev);\n });\n }\n\n var onOperationEnd = function onOperationEnd(e) {\n if (!self.releaseMouse) return;\n\n if (editor.curOp.command.name && editor.curOp.selectionChanged) {\n self[self.state + \"End\"] && self[self.state + \"End\"]();\n self.state = \"\";\n self.releaseMouse();\n }\n };\n\n editor.on(\"beforeEndOperation\", onOperationEnd);\n editor.startOperation({\n command: {\n name: \"mouse\"\n }\n });\n self.$onCaptureMouseMove = onMouseMove;\n self.releaseMouse = event.capture(this.editor.container, onMouseMove, onCaptureEnd);\n var timerId = setInterval(onCaptureInterval, 20);\n };\n\n this.releaseMouse = null;\n\n this.cancelContextMenu = function () {\n var stop = function (e) {\n if (e && e.domEvent && e.domEvent.type != \"contextmenu\") return;\n this.editor.off(\"nativecontextmenu\", stop);\n if (e && e.domEvent) event.stopEvent(e.domEvent);\n }.bind(this);\n\n setTimeout(stop, 10);\n this.editor.on(\"nativecontextmenu\", stop);\n };\n\n this.destroy = function () {\n if (this.releaseMouse) this.releaseMouse();\n };\n }).call(MouseHandler.prototype);\n config.defineOptions(MouseHandler.prototype, \"mouseHandler\", {\n scrollSpeed: {\n initialValue: 2\n },\n dragDelay: {\n initialValue: useragent.isMac ? 150 : 0\n },\n dragEnabled: {\n initialValue: true\n },\n focusTimeout: {\n initialValue: 0\n },\n tooltipFollowsMouse: {\n initialValue: true\n }\n });\n exports.MouseHandler = MouseHandler;\n});\nace.define(\"ace/mouse/fold_handler\", [\"require\", \"exports\", \"module\", \"ace/lib/dom\"], function (require, exports, module) {\n \"use strict\";\n\n var dom = require(\"../lib/dom\");\n\n function FoldHandler(editor) {\n editor.on(\"click\", function (e) {\n var position = e.getDocumentPosition();\n var session = editor.session;\n var fold = session.getFoldAt(position.row, position.column, 1);\n\n if (fold) {\n if (e.getAccelKey()) session.removeFold(fold);else session.expandFold(fold);\n e.stop();\n }\n\n var target = e.domEvent && e.domEvent.target;\n\n if (target && dom.hasCssClass(target, \"ace_inline_button\")) {\n if (dom.hasCssClass(target, \"ace_toggle_wrap\")) {\n session.setOption(\"wrap\", !session.getUseWrapMode());\n editor.renderer.scrollCursorIntoView();\n }\n }\n });\n editor.on(\"gutterclick\", function (e) {\n var gutterRegion = editor.renderer.$gutterLayer.getRegion(e);\n\n if (gutterRegion == \"foldWidgets\") {\n var row = e.getDocumentPosition().row;\n var session = editor.session;\n if (session.foldWidgets && session.foldWidgets[row]) editor.session.onFoldWidgetClick(row, e);\n if (!editor.isFocused()) editor.focus();\n e.stop();\n }\n });\n editor.on(\"gutterdblclick\", function (e) {\n var gutterRegion = editor.renderer.$gutterLayer.getRegion(e);\n\n if (gutterRegion == \"foldWidgets\") {\n var row = e.getDocumentPosition().row;\n var session = editor.session;\n var data = session.getParentFoldRangeData(row, true);\n var range = data.range || data.firstRange;\n\n if (range) {\n row = range.start.row;\n var fold = session.getFoldAt(row, session.getLine(row).length, 1);\n\n if (fold) {\n session.removeFold(fold);\n } else {\n session.addFold(\"...\", range);\n editor.renderer.scrollCursorIntoView({\n row: range.start.row,\n column: 0\n });\n }\n }\n\n e.stop();\n }\n });\n }\n\n exports.FoldHandler = FoldHandler;\n});\nace.define(\"ace/keyboard/keybinding\", [\"require\", \"exports\", \"module\", \"ace/lib/keys\", \"ace/lib/event\"], function (require, exports, module) {\n \"use strict\";\n\n var keyUtil = require(\"../lib/keys\");\n\n var event = require(\"../lib/event\");\n\n var KeyBinding = function KeyBinding(editor) {\n this.$editor = editor;\n this.$data = {\n editor: editor\n };\n this.$handlers = [];\n this.setDefaultHandler(editor.commands);\n };\n\n (function () {\n this.setDefaultHandler = function (kb) {\n this.removeKeyboardHandler(this.$defaultHandler);\n this.$defaultHandler = kb;\n this.addKeyboardHandler(kb, 0);\n };\n\n this.setKeyboardHandler = function (kb) {\n var h = this.$handlers;\n if (h[h.length - 1] == kb) return;\n\n while (h[h.length - 1] && h[h.length - 1] != this.$defaultHandler) {\n this.removeKeyboardHandler(h[h.length - 1]);\n }\n\n this.addKeyboardHandler(kb, 1);\n };\n\n this.addKeyboardHandler = function (kb, pos) {\n if (!kb) return;\n if (typeof kb == \"function\" && !kb.handleKeyboard) kb.handleKeyboard = kb;\n var i = this.$handlers.indexOf(kb);\n if (i != -1) this.$handlers.splice(i, 1);\n if (pos == undefined) this.$handlers.push(kb);else this.$handlers.splice(pos, 0, kb);\n if (i == -1 && kb.attach) kb.attach(this.$editor);\n };\n\n this.removeKeyboardHandler = function (kb) {\n var i = this.$handlers.indexOf(kb);\n if (i == -1) return false;\n this.$handlers.splice(i, 1);\n kb.detach && kb.detach(this.$editor);\n return true;\n };\n\n this.getKeyboardHandler = function () {\n return this.$handlers[this.$handlers.length - 1];\n };\n\n this.getStatusText = function () {\n var data = this.$data;\n var editor = data.editor;\n return this.$handlers.map(function (h) {\n return h.getStatusText && h.getStatusText(editor, data) || \"\";\n }).filter(Boolean).join(\" \");\n };\n\n this.$callKeyboardHandlers = function (hashId, keyString, keyCode, e) {\n var toExecute;\n var success = false;\n var commands = this.$editor.commands;\n\n for (var i = this.$handlers.length; i--;) {\n toExecute = this.$handlers[i].handleKeyboard(this.$data, hashId, keyString, keyCode, e);\n if (!toExecute || !toExecute.command) continue;\n\n if (toExecute.command == \"null\") {\n success = true;\n } else {\n success = commands.exec(toExecute.command, this.$editor, toExecute.args, e);\n }\n\n if (success && e && hashId != -1 && toExecute.passEvent != true && toExecute.command.passEvent != true) {\n event.stopEvent(e);\n }\n\n if (success) break;\n }\n\n if (!success && hashId == -1) {\n toExecute = {\n command: \"insertstring\"\n };\n success = commands.exec(\"insertstring\", this.$editor, keyString);\n }\n\n if (success && this.$editor._signal) this.$editor._signal(\"keyboardActivity\", toExecute);\n return success;\n };\n\n this.onCommandKey = function (e, hashId, keyCode) {\n var keyString = keyUtil.keyCodeToString(keyCode);\n return this.$callKeyboardHandlers(hashId, keyString, keyCode, e);\n };\n\n this.onTextInput = function (text) {\n return this.$callKeyboardHandlers(-1, text);\n };\n }).call(KeyBinding.prototype);\n exports.KeyBinding = KeyBinding;\n});\nace.define(\"ace/lib/bidiutil\", [\"require\", \"exports\", \"module\"], function (require, exports, module) {\n \"use strict\";\n\n var ArabicAlefBetIntervalsBegine = [\"\\u0621\", \"\\u0641\"];\n var ArabicAlefBetIntervalsEnd = [\"\\u063A\", \"\\u064A\"];\n var dir = 0,\n hiLevel = 0;\n var lastArabic = false,\n hasUBAT_AL = false,\n hasUBAT_B = false,\n hasUBAT_S = false,\n hasBlockSep = false,\n hasSegSep = false;\n var impTab_LTR = [[0, 3, 0, 1, 0, 0, 0], [0, 3, 0, 1, 2, 2, 0], [0, 3, 0, 0x11, 2, 0, 1], [0, 3, 5, 5, 4, 1, 0], [0, 3, 0x15, 0x15, 4, 0, 1], [0, 3, 5, 5, 4, 2, 0]];\n var impTab_RTL = [[2, 0, 1, 1, 0, 1, 0], [2, 0, 1, 1, 0, 2, 0], [2, 0, 2, 1, 3, 2, 0], [2, 0, 2, 0x21, 3, 1, 1]];\n var LTR = 0,\n RTL = 1;\n var L = 0;\n var R = 1;\n var EN = 2;\n var AN = 3;\n var ON = 4;\n var B = 5;\n var S = 6;\n var AL = 7;\n var WS = 8;\n var CS = 9;\n var ES = 10;\n var ET = 11;\n var NSM = 12;\n var LRE = 13;\n var RLE = 14;\n var PDF = 15;\n var LRO = 16;\n var RLO = 17;\n var BN = 18;\n var UnicodeTBL00 = [BN, BN, BN, BN, BN, BN, BN, BN, BN, S, B, S, WS, B, BN, BN, BN, BN, BN, BN, BN, BN, BN, BN, BN, BN, BN, BN, B, B, B, S, WS, ON, ON, ET, ET, ET, ON, ON, ON, ON, ON, ES, CS, ES, CS, CS, EN, EN, EN, EN, EN, EN, EN, EN, EN, EN, CS, ON, ON, ON, ON, ON, ON, L, L, L, L, L, L, L, L, L, L, L, L, L, L, L, L, L, L, L, L, L, L, L, L, L, L, ON, ON, ON, ON, ON, ON, L, L, L, L, L, L, L, L, L, L, L, L, L, L, L, L, L, L, L, L, L, L, L, L, L, L, ON, ON, ON, ON, BN, BN, BN, BN, BN, BN, B, BN, BN, BN, BN, BN, BN, BN, BN, BN, BN, BN, BN, BN, BN, BN, BN, BN, BN, BN, BN, BN, BN, BN, BN, BN, BN, CS, ON, ET, ET, ET, ET, ON, ON, ON, ON, L, ON, ON, BN, ON, ON, ET, ET, EN, EN, ON, L, ON, ON, ON, EN, L, ON, ON, ON, ON, ON];\n var UnicodeTBL20 = [WS, WS, WS, WS, WS, WS, WS, WS, WS, WS, WS, BN, BN, BN, L, R, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, WS, B, LRE, RLE, PDF, LRO, RLO, CS, ET, ET, ET, ET, ET, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, CS, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, WS];\n\n function _computeLevels(chars, levels, len, charTypes) {\n var impTab = dir ? impTab_RTL : impTab_LTR,\n prevState = null,\n newClass = null,\n newLevel = null,\n newState = 0,\n action = null,\n cond = null,\n condPos = -1,\n i = null,\n ix = null,\n classes = [];\n\n if (!charTypes) {\n for (i = 0, charTypes = []; i < len; i++) {\n charTypes[i] = _getCharacterType(chars[i]);\n }\n }\n\n hiLevel = dir;\n lastArabic = false;\n hasUBAT_AL = false;\n hasUBAT_B = false;\n hasUBAT_S = false;\n\n for (ix = 0; ix < len; ix++) {\n prevState = newState;\n classes[ix] = newClass = _getCharClass(chars, charTypes, classes, ix);\n newState = impTab[prevState][newClass];\n action = newState & 0xF0;\n newState &= 0x0F;\n levels[ix] = newLevel = impTab[newState][5];\n\n if (action > 0) {\n if (action == 0x10) {\n for (i = condPos; i < ix; i++) {\n levels[i] = 1;\n }\n\n condPos = -1;\n } else {\n condPos = -1;\n }\n }\n\n cond = impTab[newState][6];\n\n if (cond) {\n if (condPos == -1) {\n condPos = ix;\n }\n } else {\n if (condPos > -1) {\n for (i = condPos; i < ix; i++) {\n levels[i] = newLevel;\n }\n\n condPos = -1;\n }\n }\n\n if (charTypes[ix] == B) {\n levels[ix] = 0;\n }\n\n hiLevel |= newLevel;\n }\n\n if (hasUBAT_S) {\n for (i = 0; i < len; i++) {\n if (charTypes[i] == S) {\n levels[i] = dir;\n\n for (var j = i - 1; j >= 0; j--) {\n if (charTypes[j] == WS) {\n levels[j] = dir;\n } else {\n break;\n }\n }\n }\n }\n }\n }\n\n function _invertLevel(lev, levels, _array) {\n if (hiLevel < lev) {\n return;\n }\n\n if (lev == 1 && dir == RTL && !hasUBAT_B) {\n _array.reverse();\n\n return;\n }\n\n var len = _array.length,\n start = 0,\n end,\n lo,\n hi,\n tmp;\n\n while (start < len) {\n if (levels[start] >= lev) {\n end = start + 1;\n\n while (end < len && levels[end] >= lev) {\n end++;\n }\n\n for (lo = start, hi = end - 1; lo < hi; lo++, hi--) {\n tmp = _array[lo];\n _array[lo] = _array[hi];\n _array[hi] = tmp;\n }\n\n start = end;\n }\n\n start++;\n }\n }\n\n function _getCharClass(chars, types, classes, ix) {\n var cType = types[ix],\n wType,\n nType,\n len,\n i;\n\n switch (cType) {\n case L:\n case R:\n lastArabic = false;\n\n case ON:\n case AN:\n return cType;\n\n case EN:\n return lastArabic ? AN : EN;\n\n case AL:\n lastArabic = true;\n hasUBAT_AL = true;\n return R;\n\n case WS:\n return ON;\n\n case CS:\n if (ix < 1 || ix + 1 >= types.length || (wType = classes[ix - 1]) != EN && wType != AN || (nType = types[ix + 1]) != EN && nType != AN) {\n return ON;\n }\n\n if (lastArabic) {\n nType = AN;\n }\n\n return nType == wType ? nType : ON;\n\n case ES:\n wType = ix > 0 ? classes[ix - 1] : B;\n\n if (wType == EN && ix + 1 < types.length && types[ix + 1] == EN) {\n return EN;\n }\n\n return ON;\n\n case ET:\n if (ix > 0 && classes[ix - 1] == EN) {\n return EN;\n }\n\n if (lastArabic) {\n return ON;\n }\n\n i = ix + 1;\n len = types.length;\n\n while (i < len && types[i] == ET) {\n i++;\n }\n\n if (i < len && types[i] == EN) {\n return EN;\n }\n\n return ON;\n\n case NSM:\n len = types.length;\n i = ix + 1;\n\n while (i < len && types[i] == NSM) {\n i++;\n }\n\n if (i < len) {\n var c = chars[ix],\n rtlCandidate = c >= 0x0591 && c <= 0x08FF || c == 0xFB1E;\n wType = types[i];\n\n if (rtlCandidate && (wType == R || wType == AL)) {\n return R;\n }\n }\n\n if (ix < 1 || (wType = types[ix - 1]) == B) {\n return ON;\n }\n\n return classes[ix - 1];\n\n case B:\n lastArabic = false;\n hasUBAT_B = true;\n return dir;\n\n case S:\n hasUBAT_S = true;\n return ON;\n\n case LRE:\n case RLE:\n case LRO:\n case RLO:\n case PDF:\n lastArabic = false;\n\n case BN:\n return ON;\n }\n }\n\n function _getCharacterType(ch) {\n var uc = ch.charCodeAt(0),\n hi = uc >> 8;\n\n if (hi == 0) {\n return uc > 0x00BF ? L : UnicodeTBL00[uc];\n } else if (hi == 5) {\n return /[\\u0591-\\u05f4]/.test(ch) ? R : L;\n } else if (hi == 6) {\n if (/[\\u0610-\\u061a\\u064b-\\u065f\\u06d6-\\u06e4\\u06e7-\\u06ed]/.test(ch)) return NSM;else if (/[\\u0660-\\u0669\\u066b-\\u066c]/.test(ch)) return AN;else if (uc == 0x066A) return ET;else if (/[\\u06f0-\\u06f9]/.test(ch)) return EN;else return AL;\n } else if (hi == 0x20 && uc <= 0x205F) {\n return UnicodeTBL20[uc & 0xFF];\n } else if (hi == 0xFE) {\n return uc >= 0xFE70 ? AL : ON;\n }\n\n return ON;\n }\n\n function _isArabicDiacritics(ch) {\n return ch >= \"\\u064B\" && ch <= \"\\u0655\";\n }\n\n exports.L = L;\n exports.R = R;\n exports.EN = EN;\n exports.ON_R = 3;\n exports.AN = 4;\n exports.R_H = 5;\n exports.B = 6;\n exports.RLE = 7;\n exports.DOT = \"\\xB7\";\n\n exports.doBidiReorder = function (text, textCharTypes, isRtl) {\n if (text.length < 2) return {};\n var chars = text.split(\"\"),\n logicalFromVisual = new Array(chars.length),\n bidiLevels = new Array(chars.length),\n levels = [];\n dir = isRtl ? RTL : LTR;\n\n _computeLevels(chars, levels, chars.length, textCharTypes);\n\n for (var i = 0; i < logicalFromVisual.length; logicalFromVisual[i] = i, i++) {\n ;\n }\n\n _invertLevel(2, levels, logicalFromVisual);\n\n _invertLevel(1, levels, logicalFromVisual);\n\n for (var i = 0; i < logicalFromVisual.length - 1; i++) {\n //fix levels to reflect character width\n if (textCharTypes[i] === AN) {\n levels[i] = exports.AN;\n } else if (levels[i] === R && (textCharTypes[i] > AL && textCharTypes[i] < LRE || textCharTypes[i] === ON || textCharTypes[i] === BN)) {\n levels[i] = exports.ON_R;\n } else if (i > 0 && chars[i - 1] === \"\\u0644\" && /\\u0622|\\u0623|\\u0625|\\u0627/.test(chars[i])) {\n levels[i - 1] = levels[i] = exports.R_H;\n i++;\n }\n }\n\n if (chars[chars.length - 1] === exports.DOT) levels[chars.length - 1] = exports.B;\n if (chars[0] === \"\\u202B\") levels[0] = exports.RLE;\n\n for (var i = 0; i < logicalFromVisual.length; i++) {\n bidiLevels[i] = levels[logicalFromVisual[i]];\n }\n\n return {\n 'logicalFromVisual': logicalFromVisual,\n 'bidiLevels': bidiLevels\n };\n };\n\n exports.hasBidiCharacters = function (text, textCharTypes) {\n var ret = false;\n\n for (var i = 0; i < text.length; i++) {\n textCharTypes[i] = _getCharacterType(text.charAt(i));\n if (!ret && (textCharTypes[i] == R || textCharTypes[i] == AL || textCharTypes[i] == AN)) ret = true;\n }\n\n return ret;\n };\n\n exports.getVisualFromLogicalIdx = function (logIdx, rowMap) {\n for (var i = 0; i < rowMap.logicalFromVisual.length; i++) {\n if (rowMap.logicalFromVisual[i] == logIdx) return i;\n }\n\n return 0;\n };\n});\nace.define(\"ace/bidihandler\", [\"require\", \"exports\", \"module\", \"ace/lib/bidiutil\", \"ace/lib/lang\"], function (require, exports, module) {\n \"use strict\";\n\n var bidiUtil = require(\"./lib/bidiutil\");\n\n var lang = require(\"./lib/lang\");\n\n var bidiRE = /[\\u0590-\\u05f4\\u0600-\\u06ff\\u0700-\\u08ac\\u202B]/;\n\n var BidiHandler = function BidiHandler(session) {\n this.session = session;\n this.bidiMap = {};\n this.currentRow = null;\n this.bidiUtil = bidiUtil;\n this.charWidths = [];\n this.EOL = \"\\xAC\";\n this.showInvisibles = true;\n this.isRtlDir = false;\n this.$isRtl = false;\n this.line = \"\";\n this.wrapIndent = 0;\n this.EOF = \"\\xB6\";\n this.RLE = \"\\u202B\";\n this.contentWidth = 0;\n this.fontMetrics = null;\n this.rtlLineOffset = 0;\n this.wrapOffset = 0;\n this.isMoveLeftOperation = false;\n this.seenBidi = bidiRE.test(session.getValue());\n };\n\n (function () {\n this.isBidiRow = function (screenRow, docRow, splitIndex) {\n if (!this.seenBidi) return false;\n\n if (screenRow !== this.currentRow) {\n this.currentRow = screenRow;\n this.updateRowLine(docRow, splitIndex);\n this.updateBidiMap();\n }\n\n return this.bidiMap.bidiLevels;\n };\n\n this.onChange = function (delta) {\n if (!this.seenBidi) {\n if (delta.action == \"insert\" && bidiRE.test(delta.lines.join(\"\\n\"))) {\n this.seenBidi = true;\n this.currentRow = null;\n }\n } else {\n this.currentRow = null;\n }\n };\n\n this.getDocumentRow = function () {\n var docRow = 0;\n var rowCache = this.session.$screenRowCache;\n\n if (rowCache.length) {\n var index = this.session.$getRowCacheIndex(rowCache, this.currentRow);\n if (index >= 0) docRow = this.session.$docRowCache[index];\n }\n\n return docRow;\n };\n\n this.getSplitIndex = function () {\n var splitIndex = 0;\n var rowCache = this.session.$screenRowCache;\n\n if (rowCache.length) {\n var currentIndex,\n prevIndex = this.session.$getRowCacheIndex(rowCache, this.currentRow);\n\n while (this.currentRow - splitIndex > 0) {\n currentIndex = this.session.$getRowCacheIndex(rowCache, this.currentRow - splitIndex - 1);\n if (currentIndex !== prevIndex) break;\n prevIndex = currentIndex;\n splitIndex++;\n }\n } else {\n splitIndex = this.currentRow;\n }\n\n return splitIndex;\n };\n\n this.updateRowLine = function (docRow, splitIndex) {\n if (docRow === undefined) docRow = this.getDocumentRow();\n var isLastRow = docRow === this.session.getLength() - 1,\n endOfLine = isLastRow ? this.EOF : this.EOL;\n this.wrapIndent = 0;\n this.line = this.session.getLine(docRow);\n this.isRtlDir = this.$isRtl || this.line.charAt(0) === this.RLE;\n\n if (this.session.$useWrapMode) {\n var splits = this.session.$wrapData[docRow];\n\n if (splits) {\n if (splitIndex === undefined) splitIndex = this.getSplitIndex();\n\n if (splitIndex > 0 && splits.length) {\n this.wrapIndent = splits.indent;\n this.wrapOffset = this.wrapIndent * this.charWidths[bidiUtil.L];\n this.line = splitIndex < splits.length ? this.line.substring(splits[splitIndex - 1], splits[splitIndex]) : this.line.substring(splits[splits.length - 1]);\n } else {\n this.line = this.line.substring(0, splits[splitIndex]);\n }\n }\n\n if (splitIndex == splits.length) this.line += this.showInvisibles ? endOfLine : bidiUtil.DOT;\n } else {\n this.line += this.showInvisibles ? endOfLine : bidiUtil.DOT;\n }\n\n var session = this.session,\n shift = 0,\n size;\n this.line = this.line.replace(/\\t|[\\u1100-\\u2029, \\u202F-\\uFFE6]/g, function (ch, i) {\n if (ch === '\\t' || session.isFullWidth(ch.charCodeAt(0))) {\n size = ch === '\\t' ? session.getScreenTabSize(i + shift) : 2;\n shift += size - 1;\n return lang.stringRepeat(bidiUtil.DOT, size);\n }\n\n return ch;\n });\n\n if (this.isRtlDir) {\n this.fontMetrics.$main.textContent = this.line.charAt(this.line.length - 1) == bidiUtil.DOT ? this.line.substr(0, this.line.length - 1) : this.line;\n this.rtlLineOffset = this.contentWidth - this.fontMetrics.$main.getBoundingClientRect().width;\n }\n };\n\n this.updateBidiMap = function () {\n var textCharTypes = [];\n\n if (bidiUtil.hasBidiCharacters(this.line, textCharTypes) || this.isRtlDir) {\n this.bidiMap = bidiUtil.doBidiReorder(this.line, textCharTypes, this.isRtlDir);\n } else {\n this.bidiMap = {};\n }\n };\n\n this.markAsDirty = function () {\n this.currentRow = null;\n };\n\n this.updateCharacterWidths = function (fontMetrics) {\n if (this.characterWidth === fontMetrics.$characterSize.width) return;\n this.fontMetrics = fontMetrics;\n var characterWidth = this.characterWidth = fontMetrics.$characterSize.width;\n var bidiCharWidth = fontMetrics.$measureCharWidth(\"\\u05D4\");\n this.charWidths[bidiUtil.L] = this.charWidths[bidiUtil.EN] = this.charWidths[bidiUtil.ON_R] = characterWidth;\n this.charWidths[bidiUtil.R] = this.charWidths[bidiUtil.AN] = bidiCharWidth;\n this.charWidths[bidiUtil.R_H] = bidiCharWidth * 0.45;\n this.charWidths[bidiUtil.B] = this.charWidths[bidiUtil.RLE] = 0;\n this.currentRow = null;\n };\n\n this.setShowInvisibles = function (showInvisibles) {\n this.showInvisibles = showInvisibles;\n this.currentRow = null;\n };\n\n this.setEolChar = function (eolChar) {\n this.EOL = eolChar;\n };\n\n this.setContentWidth = function (width) {\n this.contentWidth = width;\n };\n\n this.isRtlLine = function (row) {\n if (this.$isRtl) return true;\n if (row != undefined) return this.session.getLine(row).charAt(0) == this.RLE;else return this.isRtlDir;\n };\n\n this.setRtlDirection = function (editor, isRtlDir) {\n var cursor = editor.getCursorPosition();\n\n for (var row = editor.selection.getSelectionAnchor().row; row <= cursor.row; row++) {\n if (!isRtlDir && editor.session.getLine(row).charAt(0) === editor.session.$bidiHandler.RLE) editor.session.doc.removeInLine(row, 0, 1);else if (isRtlDir && editor.session.getLine(row).charAt(0) !== editor.session.$bidiHandler.RLE) editor.session.doc.insert({\n column: 0,\n row: row\n }, editor.session.$bidiHandler.RLE);\n }\n };\n\n this.getPosLeft = function (col) {\n col -= this.wrapIndent;\n var leftBoundary = this.line.charAt(0) === this.RLE ? 1 : 0;\n var logicalIdx = col > leftBoundary ? this.session.getOverwrite() ? col : col - 1 : leftBoundary;\n var visualIdx = bidiUtil.getVisualFromLogicalIdx(logicalIdx, this.bidiMap),\n levels = this.bidiMap.bidiLevels,\n left = 0;\n if (!this.session.getOverwrite() && col <= leftBoundary && levels[visualIdx] % 2 !== 0) visualIdx++;\n\n for (var i = 0; i < visualIdx; i++) {\n left += this.charWidths[levels[i]];\n }\n\n if (!this.session.getOverwrite() && col > leftBoundary && levels[visualIdx] % 2 === 0) left += this.charWidths[levels[visualIdx]];\n if (this.wrapIndent) left += this.isRtlDir ? -1 * this.wrapOffset : this.wrapOffset;\n if (this.isRtlDir) left += this.rtlLineOffset;\n return left;\n };\n\n this.getSelections = function (startCol, endCol) {\n var map = this.bidiMap,\n levels = map.bidiLevels,\n level,\n selections = [],\n offset = 0,\n selColMin = Math.min(startCol, endCol) - this.wrapIndent,\n selColMax = Math.max(startCol, endCol) - this.wrapIndent,\n isSelected = false,\n isSelectedPrev = false,\n selectionStart = 0;\n if (this.wrapIndent) offset += this.isRtlDir ? -1 * this.wrapOffset : this.wrapOffset;\n\n for (var logIdx, visIdx = 0; visIdx < levels.length; visIdx++) {\n logIdx = map.logicalFromVisual[visIdx];\n level = levels[visIdx];\n isSelected = logIdx >= selColMin && logIdx < selColMax;\n\n if (isSelected && !isSelectedPrev) {\n selectionStart = offset;\n } else if (!isSelected && isSelectedPrev) {\n selections.push({\n left: selectionStart,\n width: offset - selectionStart\n });\n }\n\n offset += this.charWidths[level];\n isSelectedPrev = isSelected;\n }\n\n if (isSelected && visIdx === levels.length) {\n selections.push({\n left: selectionStart,\n width: offset - selectionStart\n });\n }\n\n if (this.isRtlDir) {\n for (var i = 0; i < selections.length; i++) {\n selections[i].left += this.rtlLineOffset;\n }\n }\n\n return selections;\n };\n\n this.offsetToCol = function (posX) {\n if (this.isRtlDir) posX -= this.rtlLineOffset;\n var logicalIdx = 0,\n posX = Math.max(posX, 0),\n offset = 0,\n visualIdx = 0,\n levels = this.bidiMap.bidiLevels,\n charWidth = this.charWidths[levels[visualIdx]];\n if (this.wrapIndent) posX -= this.isRtlDir ? -1 * this.wrapOffset : this.wrapOffset;\n\n while (posX > offset + charWidth / 2) {\n offset += charWidth;\n\n if (visualIdx === levels.length - 1) {\n charWidth = 0;\n break;\n }\n\n charWidth = this.charWidths[levels[++visualIdx]];\n }\n\n if (visualIdx > 0 && levels[visualIdx - 1] % 2 !== 0 && levels[visualIdx] % 2 === 0) {\n if (posX < offset) visualIdx--;\n logicalIdx = this.bidiMap.logicalFromVisual[visualIdx];\n } else if (visualIdx > 0 && levels[visualIdx - 1] % 2 === 0 && levels[visualIdx] % 2 !== 0) {\n logicalIdx = 1 + (posX > offset ? this.bidiMap.logicalFromVisual[visualIdx] : this.bidiMap.logicalFromVisual[visualIdx - 1]);\n } else if (this.isRtlDir && visualIdx === levels.length - 1 && charWidth === 0 && levels[visualIdx - 1] % 2 === 0 || !this.isRtlDir && visualIdx === 0 && levels[visualIdx] % 2 !== 0) {\n logicalIdx = 1 + this.bidiMap.logicalFromVisual[visualIdx];\n } else {\n if (visualIdx > 0 && levels[visualIdx - 1] % 2 !== 0 && charWidth !== 0) visualIdx--;\n logicalIdx = this.bidiMap.logicalFromVisual[visualIdx];\n }\n\n if (logicalIdx === 0 && this.isRtlDir) logicalIdx++;\n return logicalIdx + this.wrapIndent;\n };\n }).call(BidiHandler.prototype);\n exports.BidiHandler = BidiHandler;\n});\nace.define(\"ace/selection\", [\"require\", \"exports\", \"module\", \"ace/lib/oop\", \"ace/lib/lang\", \"ace/lib/event_emitter\", \"ace/range\"], function (require, exports, module) {\n \"use strict\";\n\n var oop = require(\"./lib/oop\");\n\n var lang = require(\"./lib/lang\");\n\n var EventEmitter = require(\"./lib/event_emitter\").EventEmitter;\n\n var Range = require(\"./range\").Range;\n\n var Selection = function Selection(session) {\n this.session = session;\n this.doc = session.getDocument();\n this.clearSelection();\n this.cursor = this.lead = this.doc.createAnchor(0, 0);\n this.anchor = this.doc.createAnchor(0, 0);\n this.$silent = false;\n var self = this;\n this.cursor.on(\"change\", function (e) {\n self.$cursorChanged = true;\n if (!self.$silent) self._emit(\"changeCursor\");\n if (!self.$isEmpty && !self.$silent) self._emit(\"changeSelection\");\n if (!self.$keepDesiredColumnOnChange && e.old.column != e.value.column) self.$desiredColumn = null;\n });\n this.anchor.on(\"change\", function () {\n self.$anchorChanged = true;\n if (!self.$isEmpty && !self.$silent) self._emit(\"changeSelection\");\n });\n };\n\n (function () {\n oop.implement(this, EventEmitter);\n\n this.isEmpty = function () {\n return this.$isEmpty || this.anchor.row == this.lead.row && this.anchor.column == this.lead.column;\n };\n\n this.isMultiLine = function () {\n return !this.$isEmpty && this.anchor.row != this.cursor.row;\n };\n\n this.getCursor = function () {\n return this.lead.getPosition();\n };\n\n this.setSelectionAnchor = function (row, column) {\n this.$isEmpty = false;\n this.anchor.setPosition(row, column);\n };\n\n this.getAnchor = this.getSelectionAnchor = function () {\n if (this.$isEmpty) return this.getSelectionLead();\n return this.anchor.getPosition();\n };\n\n this.getSelectionLead = function () {\n return this.lead.getPosition();\n };\n\n this.isBackwards = function () {\n var anchor = this.anchor;\n var lead = this.lead;\n return anchor.row > lead.row || anchor.row == lead.row && anchor.column > lead.column;\n };\n\n this.getRange = function () {\n var anchor = this.anchor;\n var lead = this.lead;\n if (this.$isEmpty) return Range.fromPoints(lead, lead);\n return this.isBackwards() ? Range.fromPoints(lead, anchor) : Range.fromPoints(anchor, lead);\n };\n\n this.clearSelection = function () {\n if (!this.$isEmpty) {\n this.$isEmpty = true;\n\n this._emit(\"changeSelection\");\n }\n };\n\n this.selectAll = function () {\n this.$setSelection(0, 0, Number.MAX_VALUE, Number.MAX_VALUE);\n };\n\n this.setRange = this.setSelectionRange = function (range, reverse) {\n var start = reverse ? range.end : range.start;\n var end = reverse ? range.start : range.end;\n this.$setSelection(start.row, start.column, end.row, end.column);\n };\n\n this.$setSelection = function (anchorRow, anchorColumn, cursorRow, cursorColumn) {\n if (this.$silent) return;\n var wasEmpty = this.$isEmpty;\n var wasMultiselect = this.inMultiSelectMode;\n this.$silent = true;\n this.$cursorChanged = this.$anchorChanged = false;\n this.anchor.setPosition(anchorRow, anchorColumn);\n this.cursor.setPosition(cursorRow, cursorColumn);\n this.$isEmpty = !Range.comparePoints(this.anchor, this.cursor);\n this.$silent = false;\n if (this.$cursorChanged) this._emit(\"changeCursor\");\n if (this.$cursorChanged || this.$anchorChanged || wasEmpty != this.$isEmpty || wasMultiselect) this._emit(\"changeSelection\");\n };\n\n this.$moveSelection = function (mover) {\n var lead = this.lead;\n if (this.$isEmpty) this.setSelectionAnchor(lead.row, lead.column);\n mover.call(this);\n };\n\n this.selectTo = function (row, column) {\n this.$moveSelection(function () {\n this.moveCursorTo(row, column);\n });\n };\n\n this.selectToPosition = function (pos) {\n this.$moveSelection(function () {\n this.moveCursorToPosition(pos);\n });\n };\n\n this.moveTo = function (row, column) {\n this.clearSelection();\n this.moveCursorTo(row, column);\n };\n\n this.moveToPosition = function (pos) {\n this.clearSelection();\n this.moveCursorToPosition(pos);\n };\n\n this.selectUp = function () {\n this.$moveSelection(this.moveCursorUp);\n };\n\n this.selectDown = function () {\n this.$moveSelection(this.moveCursorDown);\n };\n\n this.selectRight = function () {\n this.$moveSelection(this.moveCursorRight);\n };\n\n this.selectLeft = function () {\n this.$moveSelection(this.moveCursorLeft);\n };\n\n this.selectLineStart = function () {\n this.$moveSelection(this.moveCursorLineStart);\n };\n\n this.selectLineEnd = function () {\n this.$moveSelection(this.moveCursorLineEnd);\n };\n\n this.selectFileEnd = function () {\n this.$moveSelection(this.moveCursorFileEnd);\n };\n\n this.selectFileStart = function () {\n this.$moveSelection(this.moveCursorFileStart);\n };\n\n this.selectWordRight = function () {\n this.$moveSelection(this.moveCursorWordRight);\n };\n\n this.selectWordLeft = function () {\n this.$moveSelection(this.moveCursorWordLeft);\n };\n\n this.getWordRange = function (row, column) {\n if (typeof column == \"undefined\") {\n var cursor = row || this.lead;\n row = cursor.row;\n column = cursor.column;\n }\n\n return this.session.getWordRange(row, column);\n };\n\n this.selectWord = function () {\n this.setSelectionRange(this.getWordRange());\n };\n\n this.selectAWord = function () {\n var cursor = this.getCursor();\n var range = this.session.getAWordRange(cursor.row, cursor.column);\n this.setSelectionRange(range);\n };\n\n this.getLineRange = function (row, excludeLastChar) {\n var rowStart = typeof row == \"number\" ? row : this.lead.row;\n var rowEnd;\n var foldLine = this.session.getFoldLine(rowStart);\n\n if (foldLine) {\n rowStart = foldLine.start.row;\n rowEnd = foldLine.end.row;\n } else {\n rowEnd = rowStart;\n }\n\n if (excludeLastChar === true) return new Range(rowStart, 0, rowEnd, this.session.getLine(rowEnd).length);else return new Range(rowStart, 0, rowEnd + 1, 0);\n };\n\n this.selectLine = function () {\n this.setSelectionRange(this.getLineRange());\n };\n\n this.moveCursorUp = function () {\n this.moveCursorBy(-1, 0);\n };\n\n this.moveCursorDown = function () {\n this.moveCursorBy(1, 0);\n };\n\n this.wouldMoveIntoSoftTab = function (cursor, tabSize, direction) {\n var start = cursor.column;\n var end = cursor.column + tabSize;\n\n if (direction < 0) {\n start = cursor.column - tabSize;\n end = cursor.column;\n }\n\n return this.session.isTabStop(cursor) && this.doc.getLine(cursor.row).slice(start, end).split(\" \").length - 1 == tabSize;\n };\n\n this.moveCursorLeft = function () {\n var cursor = this.lead.getPosition(),\n fold;\n\n if (fold = this.session.getFoldAt(cursor.row, cursor.column, -1)) {\n this.moveCursorTo(fold.start.row, fold.start.column);\n } else if (cursor.column === 0) {\n if (cursor.row > 0) {\n this.moveCursorTo(cursor.row - 1, this.doc.getLine(cursor.row - 1).length);\n }\n } else {\n var tabSize = this.session.getTabSize();\n\n if (this.wouldMoveIntoSoftTab(cursor, tabSize, -1) && !this.session.getNavigateWithinSoftTabs()) {\n this.moveCursorBy(0, -tabSize);\n } else {\n this.moveCursorBy(0, -1);\n }\n }\n };\n\n this.moveCursorRight = function () {\n var cursor = this.lead.getPosition(),\n fold;\n\n if (fold = this.session.getFoldAt(cursor.row, cursor.column, 1)) {\n this.moveCursorTo(fold.end.row, fold.end.column);\n } else if (this.lead.column == this.doc.getLine(this.lead.row).length) {\n if (this.lead.row < this.doc.getLength() - 1) {\n this.moveCursorTo(this.lead.row + 1, 0);\n }\n } else {\n var tabSize = this.session.getTabSize();\n var cursor = this.lead;\n\n if (this.wouldMoveIntoSoftTab(cursor, tabSize, 1) && !this.session.getNavigateWithinSoftTabs()) {\n this.moveCursorBy(0, tabSize);\n } else {\n this.moveCursorBy(0, 1);\n }\n }\n };\n\n this.moveCursorLineStart = function () {\n var row = this.lead.row;\n var column = this.lead.column;\n var screenRow = this.session.documentToScreenRow(row, column);\n var firstColumnPosition = this.session.screenToDocumentPosition(screenRow, 0);\n var beforeCursor = this.session.getDisplayLine(row, null, firstColumnPosition.row, firstColumnPosition.column);\n var leadingSpace = beforeCursor.match(/^\\s*/);\n if (leadingSpace[0].length != column && !this.session.$useEmacsStyleLineStart) firstColumnPosition.column += leadingSpace[0].length;\n this.moveCursorToPosition(firstColumnPosition);\n };\n\n this.moveCursorLineEnd = function () {\n var lead = this.lead;\n var lineEnd = this.session.getDocumentLastRowColumnPosition(lead.row, lead.column);\n\n if (this.lead.column == lineEnd.column) {\n var line = this.session.getLine(lineEnd.row);\n\n if (lineEnd.column == line.length) {\n var textEnd = line.search(/\\s+$/);\n if (textEnd > 0) lineEnd.column = textEnd;\n }\n }\n\n this.moveCursorTo(lineEnd.row, lineEnd.column);\n };\n\n this.moveCursorFileEnd = function () {\n var row = this.doc.getLength() - 1;\n var column = this.doc.getLine(row).length;\n this.moveCursorTo(row, column);\n };\n\n this.moveCursorFileStart = function () {\n this.moveCursorTo(0, 0);\n };\n\n this.moveCursorLongWordRight = function () {\n var row = this.lead.row;\n var column = this.lead.column;\n var line = this.doc.getLine(row);\n var rightOfCursor = line.substring(column);\n this.session.nonTokenRe.lastIndex = 0;\n this.session.tokenRe.lastIndex = 0;\n var fold = this.session.getFoldAt(row, column, 1);\n\n if (fold) {\n this.moveCursorTo(fold.end.row, fold.end.column);\n return;\n }\n\n if (this.session.nonTokenRe.exec(rightOfCursor)) {\n column += this.session.nonTokenRe.lastIndex;\n this.session.nonTokenRe.lastIndex = 0;\n rightOfCursor = line.substring(column);\n }\n\n if (column >= line.length) {\n this.moveCursorTo(row, line.length);\n this.moveCursorRight();\n if (row < this.doc.getLength() - 1) this.moveCursorWordRight();\n return;\n }\n\n if (this.session.tokenRe.exec(rightOfCursor)) {\n column += this.session.tokenRe.lastIndex;\n this.session.tokenRe.lastIndex = 0;\n }\n\n this.moveCursorTo(row, column);\n };\n\n this.moveCursorLongWordLeft = function () {\n var row = this.lead.row;\n var column = this.lead.column;\n var fold;\n\n if (fold = this.session.getFoldAt(row, column, -1)) {\n this.moveCursorTo(fold.start.row, fold.start.column);\n return;\n }\n\n var str = this.session.getFoldStringAt(row, column, -1);\n\n if (str == null) {\n str = this.doc.getLine(row).substring(0, column);\n }\n\n var leftOfCursor = lang.stringReverse(str);\n this.session.nonTokenRe.lastIndex = 0;\n this.session.tokenRe.lastIndex = 0;\n\n if (this.session.nonTokenRe.exec(leftOfCursor)) {\n column -= this.session.nonTokenRe.lastIndex;\n leftOfCursor = leftOfCursor.slice(this.session.nonTokenRe.lastIndex);\n this.session.nonTokenRe.lastIndex = 0;\n }\n\n if (column <= 0) {\n this.moveCursorTo(row, 0);\n this.moveCursorLeft();\n if (row > 0) this.moveCursorWordLeft();\n return;\n }\n\n if (this.session.tokenRe.exec(leftOfCursor)) {\n column -= this.session.tokenRe.lastIndex;\n this.session.tokenRe.lastIndex = 0;\n }\n\n this.moveCursorTo(row, column);\n };\n\n this.$shortWordEndIndex = function (rightOfCursor) {\n var index = 0,\n ch;\n var whitespaceRe = /\\s/;\n var tokenRe = this.session.tokenRe;\n tokenRe.lastIndex = 0;\n\n if (this.session.tokenRe.exec(rightOfCursor)) {\n index = this.session.tokenRe.lastIndex;\n } else {\n while ((ch = rightOfCursor[index]) && whitespaceRe.test(ch)) {\n index++;\n }\n\n if (index < 1) {\n tokenRe.lastIndex = 0;\n\n while ((ch = rightOfCursor[index]) && !tokenRe.test(ch)) {\n tokenRe.lastIndex = 0;\n index++;\n\n if (whitespaceRe.test(ch)) {\n if (index > 2) {\n index--;\n break;\n } else {\n while ((ch = rightOfCursor[index]) && whitespaceRe.test(ch)) {\n index++;\n }\n\n if (index > 2) break;\n }\n }\n }\n }\n }\n\n tokenRe.lastIndex = 0;\n return index;\n };\n\n this.moveCursorShortWordRight = function () {\n var row = this.lead.row;\n var column = this.lead.column;\n var line = this.doc.getLine(row);\n var rightOfCursor = line.substring(column);\n var fold = this.session.getFoldAt(row, column, 1);\n if (fold) return this.moveCursorTo(fold.end.row, fold.end.column);\n\n if (column == line.length) {\n var l = this.doc.getLength();\n\n do {\n row++;\n rightOfCursor = this.doc.getLine(row);\n } while (row < l && /^\\s*$/.test(rightOfCursor));\n\n if (!/^\\s+/.test(rightOfCursor)) rightOfCursor = \"\";\n column = 0;\n }\n\n var index = this.$shortWordEndIndex(rightOfCursor);\n this.moveCursorTo(row, column + index);\n };\n\n this.moveCursorShortWordLeft = function () {\n var row = this.lead.row;\n var column = this.lead.column;\n var fold;\n if (fold = this.session.getFoldAt(row, column, -1)) return this.moveCursorTo(fold.start.row, fold.start.column);\n var line = this.session.getLine(row).substring(0, column);\n\n if (column === 0) {\n do {\n row--;\n line = this.doc.getLine(row);\n } while (row > 0 && /^\\s*$/.test(line));\n\n column = line.length;\n if (!/\\s+$/.test(line)) line = \"\";\n }\n\n var leftOfCursor = lang.stringReverse(line);\n var index = this.$shortWordEndIndex(leftOfCursor);\n return this.moveCursorTo(row, column - index);\n };\n\n this.moveCursorWordRight = function () {\n if (this.session.$selectLongWords) this.moveCursorLongWordRight();else this.moveCursorShortWordRight();\n };\n\n this.moveCursorWordLeft = function () {\n if (this.session.$selectLongWords) this.moveCursorLongWordLeft();else this.moveCursorShortWordLeft();\n };\n\n this.moveCursorBy = function (rows, chars) {\n var screenPos = this.session.documentToScreenPosition(this.lead.row, this.lead.column);\n var offsetX;\n\n if (chars === 0) {\n if (rows !== 0) {\n if (this.session.$bidiHandler.isBidiRow(screenPos.row, this.lead.row)) {\n offsetX = this.session.$bidiHandler.getPosLeft(screenPos.column);\n screenPos.column = Math.round(offsetX / this.session.$bidiHandler.charWidths[0]);\n } else {\n offsetX = screenPos.column * this.session.$bidiHandler.charWidths[0];\n }\n }\n\n if (this.$desiredColumn) screenPos.column = this.$desiredColumn;else this.$desiredColumn = screenPos.column;\n }\n\n if (rows != 0 && this.session.lineWidgets && this.session.lineWidgets[this.lead.row]) {\n var widget = this.session.lineWidgets[this.lead.row];\n if (rows < 0) rows -= widget.rowsAbove || 0;else if (rows > 0) rows += widget.rowCount - (widget.rowsAbove || 0);\n }\n\n var docPos = this.session.screenToDocumentPosition(screenPos.row + rows, screenPos.column, offsetX);\n\n if (rows !== 0 && chars === 0 && docPos.row === this.lead.row && docPos.column === this.lead.column) {}\n\n this.moveCursorTo(docPos.row, docPos.column + chars, chars === 0);\n };\n\n this.moveCursorToPosition = function (position) {\n this.moveCursorTo(position.row, position.column);\n };\n\n this.moveCursorTo = function (row, column, keepDesiredColumn) {\n var fold = this.session.getFoldAt(row, column, 1);\n\n if (fold) {\n row = fold.start.row;\n column = fold.start.column;\n }\n\n this.$keepDesiredColumnOnChange = true;\n var line = this.session.getLine(row);\n\n if (/[\\uDC00-\\uDFFF]/.test(line.charAt(column)) && line.charAt(column - 1)) {\n if (this.lead.row == row && this.lead.column == column + 1) column = column - 1;else column = column + 1;\n }\n\n this.lead.setPosition(row, column);\n this.$keepDesiredColumnOnChange = false;\n if (!keepDesiredColumn) this.$desiredColumn = null;\n };\n\n this.moveCursorToScreen = function (row, column, keepDesiredColumn) {\n var pos = this.session.screenToDocumentPosition(row, column);\n this.moveCursorTo(pos.row, pos.column, keepDesiredColumn);\n };\n\n this.detach = function () {\n this.lead.detach();\n this.anchor.detach();\n };\n\n this.fromOrientedRange = function (range) {\n this.setSelectionRange(range, range.cursor == range.start);\n this.$desiredColumn = range.desiredColumn || this.$desiredColumn;\n };\n\n this.toOrientedRange = function (range) {\n var r = this.getRange();\n\n if (range) {\n range.start.column = r.start.column;\n range.start.row = r.start.row;\n range.end.column = r.end.column;\n range.end.row = r.end.row;\n } else {\n range = r;\n }\n\n range.cursor = this.isBackwards() ? range.start : range.end;\n range.desiredColumn = this.$desiredColumn;\n return range;\n };\n\n this.getRangeOfMovements = function (func) {\n var start = this.getCursor();\n\n try {\n func(this);\n var end = this.getCursor();\n return Range.fromPoints(start, end);\n } catch (e) {\n return Range.fromPoints(start, start);\n } finally {\n this.moveCursorToPosition(start);\n }\n };\n\n this.toJSON = function () {\n if (this.rangeCount) {\n var data = this.ranges.map(function (r) {\n var r1 = r.clone();\n r1.isBackwards = r.cursor == r.start;\n return r1;\n });\n } else {\n var data = this.getRange();\n data.isBackwards = this.isBackwards();\n }\n\n return data;\n };\n\n this.fromJSON = function (data) {\n if (data.start == undefined) {\n if (this.rangeList && data.length > 1) {\n this.toSingleRange(data[0]);\n\n for (var i = data.length; i--;) {\n var r = Range.fromPoints(data[i].start, data[i].end);\n if (data[i].isBackwards) r.cursor = r.start;\n this.addRange(r, true);\n }\n\n return;\n } else {\n data = data[0];\n }\n }\n\n if (this.rangeList) this.toSingleRange(data);\n this.setSelectionRange(data, data.isBackwards);\n };\n\n this.isEqual = function (data) {\n if ((data.length || this.rangeCount) && data.length != this.rangeCount) return false;\n if (!data.length || !this.ranges) return this.getRange().isEqual(data);\n\n for (var i = this.ranges.length; i--;) {\n if (!this.ranges[i].isEqual(data[i])) return false;\n }\n\n return true;\n };\n }).call(Selection.prototype);\n exports.Selection = Selection;\n});\nace.define(\"ace/tokenizer\", [\"require\", \"exports\", \"module\", \"ace/config\"], function (require, exports, module) {\n \"use strict\";\n\n var config = require(\"./config\");\n\n var MAX_TOKEN_COUNT = 2000;\n\n var Tokenizer = function Tokenizer(rules) {\n this.states = rules;\n this.regExps = {};\n this.matchMappings = {};\n\n for (var key in this.states) {\n var state = this.states[key];\n var ruleRegExps = [];\n var matchTotal = 0;\n var mapping = this.matchMappings[key] = {\n defaultToken: \"text\"\n };\n var flag = \"g\";\n var splitterRurles = [];\n\n for (var i = 0; i < state.length; i++) {\n var rule = state[i];\n if (rule.defaultToken) mapping.defaultToken = rule.defaultToken;\n if (rule.caseInsensitive) flag = \"gi\";\n if (rule.regex == null) continue;\n if (rule.regex instanceof RegExp) rule.regex = rule.regex.toString().slice(1, -1);\n var adjustedregex = rule.regex;\n var matchcount = new RegExp(\"(?:(\" + adjustedregex + \")|(.))\").exec(\"a\").length - 2;\n\n if (Array.isArray(rule.token)) {\n if (rule.token.length == 1 || matchcount == 1) {\n rule.token = rule.token[0];\n } else if (matchcount - 1 != rule.token.length) {\n this.reportError(\"number of classes and regexp groups doesn't match\", {\n rule: rule,\n groupCount: matchcount - 1\n });\n rule.token = rule.token[0];\n } else {\n rule.tokenArray = rule.token;\n rule.token = null;\n rule.onMatch = this.$arrayTokens;\n }\n } else if (typeof rule.token == \"function\" && !rule.onMatch) {\n if (matchcount > 1) rule.onMatch = this.$applyToken;else rule.onMatch = rule.token;\n }\n\n if (matchcount > 1) {\n if (/\\\\\\d/.test(rule.regex)) {\n adjustedregex = rule.regex.replace(/\\\\([0-9]+)/g, function (match, digit) {\n return \"\\\\\" + (parseInt(digit, 10) + matchTotal + 1);\n });\n } else {\n matchcount = 1;\n adjustedregex = this.removeCapturingGroups(rule.regex);\n }\n\n if (!rule.splitRegex && typeof rule.token != \"string\") splitterRurles.push(rule); // flag will be known only at the very end\n }\n\n mapping[matchTotal] = i;\n matchTotal += matchcount;\n ruleRegExps.push(adjustedregex);\n if (!rule.onMatch) rule.onMatch = null;\n }\n\n if (!ruleRegExps.length) {\n mapping[0] = 0;\n ruleRegExps.push(\"$\");\n }\n\n splitterRurles.forEach(function (rule) {\n rule.splitRegex = this.createSplitterRegexp(rule.regex, flag);\n }, this);\n this.regExps[key] = new RegExp(\"(\" + ruleRegExps.join(\")|(\") + \")|($)\", flag);\n }\n };\n\n (function () {\n this.$setMaxTokenCount = function (m) {\n MAX_TOKEN_COUNT = m | 0;\n };\n\n this.$applyToken = function (str) {\n var values = this.splitRegex.exec(str).slice(1);\n var types = this.token.apply(this, values);\n if (typeof types === \"string\") return [{\n type: types,\n value: str\n }];\n var tokens = [];\n\n for (var i = 0, l = types.length; i < l; i++) {\n if (values[i]) tokens[tokens.length] = {\n type: types[i],\n value: values[i]\n };\n }\n\n return tokens;\n };\n\n this.$arrayTokens = function (str) {\n if (!str) return [];\n var values = this.splitRegex.exec(str);\n if (!values) return \"text\";\n var tokens = [];\n var types = this.tokenArray;\n\n for (var i = 0, l = types.length; i < l; i++) {\n if (values[i + 1]) tokens[tokens.length] = {\n type: types[i],\n value: values[i + 1]\n };\n }\n\n return tokens;\n };\n\n this.removeCapturingGroups = function (src) {\n var r = src.replace(/\\\\.|\\[(?:\\\\.|[^\\\\\\]])*|\\(\\?[:=!<]|(\\()/g, function (x, y) {\n return y ? \"(?:\" : x;\n });\n return r;\n };\n\n this.createSplitterRegexp = function (src, flag) {\n if (src.indexOf(\"(?=\") != -1) {\n var stack = 0;\n var inChClass = false;\n var lastCapture = {};\n src.replace(/(\\\\.)|(\\((?:\\?[=!])?)|(\\))|([\\[\\]])/g, function (m, esc, parenOpen, parenClose, square, index) {\n if (inChClass) {\n inChClass = square != \"]\";\n } else if (square) {\n inChClass = true;\n } else if (parenClose) {\n if (stack == lastCapture.stack) {\n lastCapture.end = index + 1;\n lastCapture.stack = -1;\n }\n\n stack--;\n } else if (parenOpen) {\n stack++;\n\n if (parenOpen.length != 1) {\n lastCapture.stack = stack;\n lastCapture.start = index;\n }\n }\n\n return m;\n });\n if (lastCapture.end != null && /^\\)*$/.test(src.substr(lastCapture.end))) src = src.substring(0, lastCapture.start) + src.substr(lastCapture.end);\n }\n\n if (src.charAt(0) != \"^\") src = \"^\" + src;\n if (src.charAt(src.length - 1) != \"$\") src += \"$\";\n return new RegExp(src, (flag || \"\").replace(\"g\", \"\"));\n };\n\n this.getLineTokens = function (line, startState) {\n if (startState && typeof startState != \"string\") {\n var stack = startState.slice(0);\n startState = stack[0];\n\n if (startState === \"#tmp\") {\n stack.shift();\n startState = stack.shift();\n }\n } else var stack = [];\n\n var currentState = startState || \"start\";\n var state = this.states[currentState];\n\n if (!state) {\n currentState = \"start\";\n state = this.states[currentState];\n }\n\n var mapping = this.matchMappings[currentState];\n var re = this.regExps[currentState];\n re.lastIndex = 0;\n var match,\n tokens = [];\n var lastIndex = 0;\n var matchAttempts = 0;\n var token = {\n type: null,\n value: \"\"\n };\n\n while (match = re.exec(line)) {\n var type = mapping.defaultToken;\n var rule = null;\n var value = match[0];\n var index = re.lastIndex;\n\n if (index - value.length > lastIndex) {\n var skipped = line.substring(lastIndex, index - value.length);\n\n if (token.type == type) {\n token.value += skipped;\n } else {\n if (token.type) tokens.push(token);\n token = {\n type: type,\n value: skipped\n };\n }\n }\n\n for (var i = 0; i < match.length - 2; i++) {\n if (match[i + 1] === undefined) continue;\n rule = state[mapping[i]];\n if (rule.onMatch) type = rule.onMatch(value, currentState, stack, line);else type = rule.token;\n\n if (rule.next) {\n if (typeof rule.next == \"string\") {\n currentState = rule.next;\n } else {\n currentState = rule.next(currentState, stack);\n }\n\n state = this.states[currentState];\n\n if (!state) {\n this.reportError(\"state doesn't exist\", currentState);\n currentState = \"start\";\n state = this.states[currentState];\n }\n\n mapping = this.matchMappings[currentState];\n lastIndex = index;\n re = this.regExps[currentState];\n re.lastIndex = index;\n }\n\n if (rule.consumeLineEnd) lastIndex = index;\n break;\n }\n\n if (value) {\n if (typeof type === \"string\") {\n if ((!rule || rule.merge !== false) && token.type === type) {\n token.value += value;\n } else {\n if (token.type) tokens.push(token);\n token = {\n type: type,\n value: value\n };\n }\n } else if (type) {\n if (token.type) tokens.push(token);\n token = {\n type: null,\n value: \"\"\n };\n\n for (var i = 0; i < type.length; i++) {\n tokens.push(type[i]);\n }\n }\n }\n\n if (lastIndex == line.length) break;\n lastIndex = index;\n\n if (matchAttempts++ > MAX_TOKEN_COUNT) {\n if (matchAttempts > 2 * line.length) {\n this.reportError(\"infinite loop with in ace tokenizer\", {\n startState: startState,\n line: line\n });\n }\n\n while (lastIndex < line.length) {\n if (token.type) tokens.push(token);\n token = {\n value: line.substring(lastIndex, lastIndex += 500),\n type: \"overflow\"\n };\n }\n\n currentState = \"start\";\n stack = [];\n break;\n }\n }\n\n if (token.type) tokens.push(token);\n\n if (stack.length > 1) {\n if (stack[0] !== currentState) stack.unshift(\"#tmp\", currentState);\n }\n\n return {\n tokens: tokens,\n state: stack.length ? stack : currentState\n };\n };\n\n this.reportError = config.reportError;\n }).call(Tokenizer.prototype);\n exports.Tokenizer = Tokenizer;\n});\nace.define(\"ace/mode/text_highlight_rules\", [\"require\", \"exports\", \"module\", \"ace/lib/lang\"], function (require, exports, module) {\n \"use strict\";\n\n var lang = require(\"../lib/lang\");\n\n var TextHighlightRules = function TextHighlightRules() {\n this.$rules = {\n \"start\": [{\n token: \"empty_line\",\n regex: '^$'\n }, {\n defaultToken: \"text\"\n }]\n };\n };\n\n (function () {\n this.addRules = function (rules, prefix) {\n if (!prefix) {\n for (var key in rules) {\n this.$rules[key] = rules[key];\n }\n\n return;\n }\n\n for (var key in rules) {\n var state = rules[key];\n\n for (var i = 0; i < state.length; i++) {\n var rule = state[i];\n\n if (rule.next || rule.onMatch) {\n if (typeof rule.next == \"string\") {\n if (rule.next.indexOf(prefix) !== 0) rule.next = prefix + rule.next;\n }\n\n if (rule.nextState && rule.nextState.indexOf(prefix) !== 0) rule.nextState = prefix + rule.nextState;\n }\n }\n\n this.$rules[prefix + key] = state;\n }\n };\n\n this.getRules = function () {\n return this.$rules;\n };\n\n this.embedRules = function (HighlightRules, prefix, escapeRules, states, append) {\n var embedRules = typeof HighlightRules == \"function\" ? new HighlightRules().getRules() : HighlightRules;\n\n if (states) {\n for (var i = 0; i < states.length; i++) {\n states[i] = prefix + states[i];\n }\n } else {\n states = [];\n\n for (var key in embedRules) {\n states.push(prefix + key);\n }\n }\n\n this.addRules(embedRules, prefix);\n\n if (escapeRules) {\n var addRules = Array.prototype[append ? \"push\" : \"unshift\"];\n\n for (var i = 0; i < states.length; i++) {\n addRules.apply(this.$rules[states[i]], lang.deepCopy(escapeRules));\n }\n }\n\n if (!this.$embeds) this.$embeds = [];\n this.$embeds.push(prefix);\n };\n\n this.getEmbeds = function () {\n return this.$embeds;\n };\n\n var pushState = function pushState(currentState, stack) {\n if (currentState != \"start\" || stack.length) stack.unshift(this.nextState, currentState);\n return this.nextState;\n };\n\n var popState = function popState(currentState, stack) {\n stack.shift();\n return stack.shift() || \"start\";\n };\n\n this.normalizeRules = function () {\n var id = 0;\n var rules = this.$rules;\n\n function processState(key) {\n var state = rules[key];\n state.processed = true;\n\n for (var i = 0; i < state.length; i++) {\n var rule = state[i];\n var toInsert = null;\n\n if (Array.isArray(rule)) {\n toInsert = rule;\n rule = {};\n }\n\n if (!rule.regex && rule.start) {\n rule.regex = rule.start;\n if (!rule.next) rule.next = [];\n rule.next.push({\n defaultToken: rule.token\n }, {\n token: rule.token + \".end\",\n regex: rule.end || rule.start,\n next: \"pop\"\n });\n rule.token = rule.token + \".start\";\n rule.push = true;\n }\n\n var next = rule.next || rule.push;\n\n if (next && Array.isArray(next)) {\n var stateName = rule.stateName;\n\n if (!stateName) {\n stateName = rule.token;\n if (typeof stateName != \"string\") stateName = stateName[0] || \"\";\n if (rules[stateName]) stateName += id++;\n }\n\n rules[stateName] = next;\n rule.next = stateName;\n processState(stateName);\n } else if (next == \"pop\") {\n rule.next = popState;\n }\n\n if (rule.push) {\n rule.nextState = rule.next || rule.push;\n rule.next = pushState;\n delete rule.push;\n }\n\n if (rule.rules) {\n for (var r in rule.rules) {\n if (rules[r]) {\n if (rules[r].push) rules[r].push.apply(rules[r], rule.rules[r]);\n } else {\n rules[r] = rule.rules[r];\n }\n }\n }\n\n var includeName = typeof rule == \"string\" ? rule : rule.include;\n\n if (includeName) {\n if (Array.isArray(includeName)) toInsert = includeName.map(function (x) {\n return rules[x];\n });else toInsert = rules[includeName];\n }\n\n if (toInsert) {\n var args = [i, 1].concat(toInsert);\n if (rule.noEscape) args = args.filter(function (x) {\n return !x.next;\n });\n state.splice.apply(state, args);\n i--;\n }\n\n if (rule.keywordMap) {\n rule.token = this.createKeywordMapper(rule.keywordMap, rule.defaultToken || \"text\", rule.caseInsensitive);\n delete rule.defaultToken;\n }\n }\n }\n\n Object.keys(rules).forEach(processState, this);\n };\n\n this.createKeywordMapper = function (map, defaultToken, ignoreCase, splitChar) {\n var keywords = Object.create(null);\n this.$keywordList = [];\n Object.keys(map).forEach(function (className) {\n var a = map[className];\n var list = a.split(splitChar || \"|\");\n\n for (var i = list.length; i--;) {\n var word = list[i];\n this.$keywordList.push(word);\n if (ignoreCase) word = word.toLowerCase();\n keywords[word] = className;\n }\n }, this);\n map = null;\n return ignoreCase ? function (value) {\n return keywords[value.toLowerCase()] || defaultToken;\n } : function (value) {\n return keywords[value] || defaultToken;\n };\n };\n\n this.getKeywords = function () {\n return this.$keywords;\n };\n }).call(TextHighlightRules.prototype);\n exports.TextHighlightRules = TextHighlightRules;\n});\nace.define(\"ace/mode/behaviour\", [\"require\", \"exports\", \"module\"], function (require, exports, module) {\n \"use strict\";\n\n var Behaviour = function Behaviour() {\n this.$behaviours = {};\n };\n\n (function () {\n this.add = function (name, action, callback) {\n switch (undefined) {\n case this.$behaviours:\n this.$behaviours = {};\n\n case this.$behaviours[name]:\n this.$behaviours[name] = {};\n }\n\n this.$behaviours[name][action] = callback;\n };\n\n this.addBehaviours = function (behaviours) {\n for (var key in behaviours) {\n for (var action in behaviours[key]) {\n this.add(key, action, behaviours[key][action]);\n }\n }\n };\n\n this.remove = function (name) {\n if (this.$behaviours && this.$behaviours[name]) {\n delete this.$behaviours[name];\n }\n };\n\n this.inherit = function (mode, filter) {\n if (typeof mode === \"function\") {\n var behaviours = new mode().getBehaviours(filter);\n } else {\n var behaviours = mode.getBehaviours(filter);\n }\n\n this.addBehaviours(behaviours);\n };\n\n this.getBehaviours = function (filter) {\n if (!filter) {\n return this.$behaviours;\n } else {\n var ret = {};\n\n for (var i = 0; i < filter.length; i++) {\n if (this.$behaviours[filter[i]]) {\n ret[filter[i]] = this.$behaviours[filter[i]];\n }\n }\n\n return ret;\n }\n };\n }).call(Behaviour.prototype);\n exports.Behaviour = Behaviour;\n});\nace.define(\"ace/token_iterator\", [\"require\", \"exports\", \"module\", \"ace/range\"], function (require, exports, module) {\n \"use strict\";\n\n var Range = require(\"./range\").Range;\n\n var TokenIterator = function TokenIterator(session, initialRow, initialColumn) {\n this.$session = session;\n this.$row = initialRow;\n this.$rowTokens = session.getTokens(initialRow);\n var token = session.getTokenAt(initialRow, initialColumn);\n this.$tokenIndex = token ? token.index : -1;\n };\n\n (function () {\n this.stepBackward = function () {\n this.$tokenIndex -= 1;\n\n while (this.$tokenIndex < 0) {\n this.$row -= 1;\n\n if (this.$row < 0) {\n this.$row = 0;\n return null;\n }\n\n this.$rowTokens = this.$session.getTokens(this.$row);\n this.$tokenIndex = this.$rowTokens.length - 1;\n }\n\n return this.$rowTokens[this.$tokenIndex];\n };\n\n this.stepForward = function () {\n this.$tokenIndex += 1;\n var rowCount;\n\n while (this.$tokenIndex >= this.$rowTokens.length) {\n this.$row += 1;\n if (!rowCount) rowCount = this.$session.getLength();\n\n if (this.$row >= rowCount) {\n this.$row = rowCount - 1;\n return null;\n }\n\n this.$rowTokens = this.$session.getTokens(this.$row);\n this.$tokenIndex = 0;\n }\n\n return this.$rowTokens[this.$tokenIndex];\n };\n\n this.getCurrentToken = function () {\n return this.$rowTokens[this.$tokenIndex];\n };\n\n this.getCurrentTokenRow = function () {\n return this.$row;\n };\n\n this.getCurrentTokenColumn = function () {\n var rowTokens = this.$rowTokens;\n var tokenIndex = this.$tokenIndex;\n var column = rowTokens[tokenIndex].start;\n if (column !== undefined) return column;\n column = 0;\n\n while (tokenIndex > 0) {\n tokenIndex -= 1;\n column += rowTokens[tokenIndex].value.length;\n }\n\n return column;\n };\n\n this.getCurrentTokenPosition = function () {\n return {\n row: this.$row,\n column: this.getCurrentTokenColumn()\n };\n };\n\n this.getCurrentTokenRange = function () {\n var token = this.$rowTokens[this.$tokenIndex];\n var column = this.getCurrentTokenColumn();\n return new Range(this.$row, column, this.$row, column + token.value.length);\n };\n }).call(TokenIterator.prototype);\n exports.TokenIterator = TokenIterator;\n});\nace.define(\"ace/mode/behaviour/cstyle\", [\"require\", \"exports\", \"module\", \"ace/lib/oop\", \"ace/mode/behaviour\", \"ace/token_iterator\", \"ace/lib/lang\"], function (require, exports, module) {\n \"use strict\";\n\n var oop = require(\"../../lib/oop\");\n\n var Behaviour = require(\"../behaviour\").Behaviour;\n\n var TokenIterator = require(\"../../token_iterator\").TokenIterator;\n\n var lang = require(\"../../lib/lang\");\n\n var SAFE_INSERT_IN_TOKENS = [\"text\", \"paren.rparen\", \"rparen\", \"paren\", \"punctuation.operator\"];\n var SAFE_INSERT_BEFORE_TOKENS = [\"text\", \"paren.rparen\", \"rparen\", \"paren\", \"punctuation.operator\", \"comment\"];\n var context;\n var contextCache = {};\n var defaultQuotes = {\n '\"': '\"',\n \"'\": \"'\"\n };\n\n var initContext = function initContext(editor) {\n var id = -1;\n\n if (editor.multiSelect) {\n id = editor.selection.index;\n if (contextCache.rangeCount != editor.multiSelect.rangeCount) contextCache = {\n rangeCount: editor.multiSelect.rangeCount\n };\n }\n\n if (contextCache[id]) return context = contextCache[id];\n context = contextCache[id] = {\n autoInsertedBrackets: 0,\n autoInsertedRow: -1,\n autoInsertedLineEnd: \"\",\n maybeInsertedBrackets: 0,\n maybeInsertedRow: -1,\n maybeInsertedLineStart: \"\",\n maybeInsertedLineEnd: \"\"\n };\n };\n\n var getWrapped = function getWrapped(selection, selected, opening, closing) {\n var rowDiff = selection.end.row - selection.start.row;\n return {\n text: opening + selected + closing,\n selection: [0, selection.start.column + 1, rowDiff, selection.end.column + (rowDiff ? 0 : 1)]\n };\n };\n\n var CstyleBehaviour = function CstyleBehaviour(options) {\n this.add(\"braces\", \"insertion\", function (state, action, editor, session, text) {\n var cursor = editor.getCursorPosition();\n var line = session.doc.getLine(cursor.row);\n\n if (text == '{') {\n initContext(editor);\n var selection = editor.getSelectionRange();\n var selected = session.doc.getTextRange(selection);\n\n if (selected !== \"\" && selected !== \"{\" && editor.getWrapBehavioursEnabled()) {\n return getWrapped(selection, selected, '{', '}');\n } else if (CstyleBehaviour.isSaneInsertion(editor, session)) {\n if (/[\\]\\}\\)]/.test(line[cursor.column]) || editor.inMultiSelectMode || options && options.braces) {\n CstyleBehaviour.recordAutoInsert(editor, session, \"}\");\n return {\n text: '{}',\n selection: [1, 1]\n };\n } else {\n CstyleBehaviour.recordMaybeInsert(editor, session, \"{\");\n return {\n text: '{',\n selection: [1, 1]\n };\n }\n }\n } else if (text == '}') {\n initContext(editor);\n var rightChar = line.substring(cursor.column, cursor.column + 1);\n\n if (rightChar == '}') {\n var matching = session.$findOpeningBracket('}', {\n column: cursor.column + 1,\n row: cursor.row\n });\n\n if (matching !== null && CstyleBehaviour.isAutoInsertedClosing(cursor, line, text)) {\n CstyleBehaviour.popAutoInsertedClosing();\n return {\n text: '',\n selection: [1, 1]\n };\n }\n }\n } else if (text == \"\\n\" || text == \"\\r\\n\") {\n initContext(editor);\n var closing = \"\";\n\n if (CstyleBehaviour.isMaybeInsertedClosing(cursor, line)) {\n closing = lang.stringRepeat(\"}\", context.maybeInsertedBrackets);\n CstyleBehaviour.clearMaybeInsertedClosing();\n }\n\n var rightChar = line.substring(cursor.column, cursor.column + 1);\n\n if (rightChar === '}') {\n var openBracePos = session.findMatchingBracket({\n row: cursor.row,\n column: cursor.column + 1\n }, '}');\n if (!openBracePos) return null;\n var next_indent = this.$getIndent(session.getLine(openBracePos.row));\n } else if (closing) {\n var next_indent = this.$getIndent(line);\n } else {\n CstyleBehaviour.clearMaybeInsertedClosing();\n return;\n }\n\n var indent = next_indent + session.getTabString();\n return {\n text: '\\n' + indent + '\\n' + next_indent + closing,\n selection: [1, indent.length, 1, indent.length]\n };\n } else {\n CstyleBehaviour.clearMaybeInsertedClosing();\n }\n });\n this.add(\"braces\", \"deletion\", function (state, action, editor, session, range) {\n var selected = session.doc.getTextRange(range);\n\n if (!range.isMultiLine() && selected == '{') {\n initContext(editor);\n var line = session.doc.getLine(range.start.row);\n var rightChar = line.substring(range.end.column, range.end.column + 1);\n\n if (rightChar == '}') {\n range.end.column++;\n return range;\n } else {\n context.maybeInsertedBrackets--;\n }\n }\n });\n this.add(\"parens\", \"insertion\", function (state, action, editor, session, text) {\n if (text == '(') {\n initContext(editor);\n var selection = editor.getSelectionRange();\n var selected = session.doc.getTextRange(selection);\n\n if (selected !== \"\" && editor.getWrapBehavioursEnabled()) {\n return getWrapped(selection, selected, '(', ')');\n } else if (CstyleBehaviour.isSaneInsertion(editor, session)) {\n CstyleBehaviour.recordAutoInsert(editor, session, \")\");\n return {\n text: '()',\n selection: [1, 1]\n };\n }\n } else if (text == ')') {\n initContext(editor);\n var cursor = editor.getCursorPosition();\n var line = session.doc.getLine(cursor.row);\n var rightChar = line.substring(cursor.column, cursor.column + 1);\n\n if (rightChar == ')') {\n var matching = session.$findOpeningBracket(')', {\n column: cursor.column + 1,\n row: cursor.row\n });\n\n if (matching !== null && CstyleBehaviour.isAutoInsertedClosing(cursor, line, text)) {\n CstyleBehaviour.popAutoInsertedClosing();\n return {\n text: '',\n selection: [1, 1]\n };\n }\n }\n }\n });\n this.add(\"parens\", \"deletion\", function (state, action, editor, session, range) {\n var selected = session.doc.getTextRange(range);\n\n if (!range.isMultiLine() && selected == '(') {\n initContext(editor);\n var line = session.doc.getLine(range.start.row);\n var rightChar = line.substring(range.start.column + 1, range.start.column + 2);\n\n if (rightChar == ')') {\n range.end.column++;\n return range;\n }\n }\n });\n this.add(\"brackets\", \"insertion\", function (state, action, editor, session, text) {\n if (text == '[') {\n initContext(editor);\n var selection = editor.getSelectionRange();\n var selected = session.doc.getTextRange(selection);\n\n if (selected !== \"\" && editor.getWrapBehavioursEnabled()) {\n return getWrapped(selection, selected, '[', ']');\n } else if (CstyleBehaviour.isSaneInsertion(editor, session)) {\n CstyleBehaviour.recordAutoInsert(editor, session, \"]\");\n return {\n text: '[]',\n selection: [1, 1]\n };\n }\n } else if (text == ']') {\n initContext(editor);\n var cursor = editor.getCursorPosition();\n var line = session.doc.getLine(cursor.row);\n var rightChar = line.substring(cursor.column, cursor.column + 1);\n\n if (rightChar == ']') {\n var matching = session.$findOpeningBracket(']', {\n column: cursor.column + 1,\n row: cursor.row\n });\n\n if (matching !== null && CstyleBehaviour.isAutoInsertedClosing(cursor, line, text)) {\n CstyleBehaviour.popAutoInsertedClosing();\n return {\n text: '',\n selection: [1, 1]\n };\n }\n }\n }\n });\n this.add(\"brackets\", \"deletion\", function (state, action, editor, session, range) {\n var selected = session.doc.getTextRange(range);\n\n if (!range.isMultiLine() && selected == '[') {\n initContext(editor);\n var line = session.doc.getLine(range.start.row);\n var rightChar = line.substring(range.start.column + 1, range.start.column + 2);\n\n if (rightChar == ']') {\n range.end.column++;\n return range;\n }\n }\n });\n this.add(\"string_dquotes\", \"insertion\", function (state, action, editor, session, text) {\n var quotes = session.$mode.$quotes || defaultQuotes;\n\n if (text.length == 1 && quotes[text]) {\n if (this.lineCommentStart && this.lineCommentStart.indexOf(text) != -1) return;\n initContext(editor);\n var quote = text;\n var selection = editor.getSelectionRange();\n var selected = session.doc.getTextRange(selection);\n\n if (selected !== \"\" && (selected.length != 1 || !quotes[selected]) && editor.getWrapBehavioursEnabled()) {\n return getWrapped(selection, selected, quote, quote);\n } else if (!selected) {\n var cursor = editor.getCursorPosition();\n var line = session.doc.getLine(cursor.row);\n var leftChar = line.substring(cursor.column - 1, cursor.column);\n var rightChar = line.substring(cursor.column, cursor.column + 1);\n var token = session.getTokenAt(cursor.row, cursor.column);\n var rightToken = session.getTokenAt(cursor.row, cursor.column + 1);\n if (leftChar == \"\\\\\" && token && /escape/.test(token.type)) return null;\n var stringBefore = token && /string|escape/.test(token.type);\n var stringAfter = !rightToken || /string|escape/.test(rightToken.type);\n var pair;\n\n if (rightChar == quote) {\n pair = stringBefore !== stringAfter;\n if (pair && /string\\.end/.test(rightToken.type)) pair = false;\n } else {\n if (stringBefore && !stringAfter) return null; // wrap string with different quote\n\n if (stringBefore && stringAfter) return null; // do not pair quotes inside strings\n\n var wordRe = session.$mode.tokenRe;\n wordRe.lastIndex = 0;\n var isWordBefore = wordRe.test(leftChar);\n wordRe.lastIndex = 0;\n var isWordAfter = wordRe.test(leftChar);\n if (isWordBefore || isWordAfter) return null; // before or after alphanumeric\n\n if (rightChar && !/[\\s;,.})\\]\\\\]/.test(rightChar)) return null; // there is rightChar and it isn't closing\n\n var charBefore = line[cursor.column - 2];\n if (leftChar == quote && (charBefore == quote || wordRe.test(charBefore))) return null;\n pair = true;\n }\n\n return {\n text: pair ? quote + quote : \"\",\n selection: [1, 1]\n };\n }\n }\n });\n this.add(\"string_dquotes\", \"deletion\", function (state, action, editor, session, range) {\n var quotes = session.$mode.$quotes || defaultQuotes;\n var selected = session.doc.getTextRange(range);\n\n if (!range.isMultiLine() && quotes.hasOwnProperty(selected)) {\n initContext(editor);\n var line = session.doc.getLine(range.start.row);\n var rightChar = line.substring(range.start.column + 1, range.start.column + 2);\n\n if (rightChar == selected) {\n range.end.column++;\n return range;\n }\n }\n });\n };\n\n CstyleBehaviour.isSaneInsertion = function (editor, session) {\n var cursor = editor.getCursorPosition();\n var iterator = new TokenIterator(session, cursor.row, cursor.column);\n\n if (!this.$matchTokenType(iterator.getCurrentToken() || \"text\", SAFE_INSERT_IN_TOKENS)) {\n if (/[)}\\]]/.test(editor.session.getLine(cursor.row)[cursor.column])) return true;\n var iterator2 = new TokenIterator(session, cursor.row, cursor.column + 1);\n if (!this.$matchTokenType(iterator2.getCurrentToken() || \"text\", SAFE_INSERT_IN_TOKENS)) return false;\n }\n\n iterator.stepForward();\n return iterator.getCurrentTokenRow() !== cursor.row || this.$matchTokenType(iterator.getCurrentToken() || \"text\", SAFE_INSERT_BEFORE_TOKENS);\n };\n\n CstyleBehaviour.$matchTokenType = function (token, types) {\n return types.indexOf(token.type || token) > -1;\n };\n\n CstyleBehaviour.recordAutoInsert = function (editor, session, bracket) {\n var cursor = editor.getCursorPosition();\n var line = session.doc.getLine(cursor.row);\n if (!this.isAutoInsertedClosing(cursor, line, context.autoInsertedLineEnd[0])) context.autoInsertedBrackets = 0;\n context.autoInsertedRow = cursor.row;\n context.autoInsertedLineEnd = bracket + line.substr(cursor.column);\n context.autoInsertedBrackets++;\n };\n\n CstyleBehaviour.recordMaybeInsert = function (editor, session, bracket) {\n var cursor = editor.getCursorPosition();\n var line = session.doc.getLine(cursor.row);\n if (!this.isMaybeInsertedClosing(cursor, line)) context.maybeInsertedBrackets = 0;\n context.maybeInsertedRow = cursor.row;\n context.maybeInsertedLineStart = line.substr(0, cursor.column) + bracket;\n context.maybeInsertedLineEnd = line.substr(cursor.column);\n context.maybeInsertedBrackets++;\n };\n\n CstyleBehaviour.isAutoInsertedClosing = function (cursor, line, bracket) {\n return context.autoInsertedBrackets > 0 && cursor.row === context.autoInsertedRow && bracket === context.autoInsertedLineEnd[0] && line.substr(cursor.column) === context.autoInsertedLineEnd;\n };\n\n CstyleBehaviour.isMaybeInsertedClosing = function (cursor, line) {\n return context.maybeInsertedBrackets > 0 && cursor.row === context.maybeInsertedRow && line.substr(cursor.column) === context.maybeInsertedLineEnd && line.substr(0, cursor.column) == context.maybeInsertedLineStart;\n };\n\n CstyleBehaviour.popAutoInsertedClosing = function () {\n context.autoInsertedLineEnd = context.autoInsertedLineEnd.substr(1);\n context.autoInsertedBrackets--;\n };\n\n CstyleBehaviour.clearMaybeInsertedClosing = function () {\n if (context) {\n context.maybeInsertedBrackets = 0;\n context.maybeInsertedRow = -1;\n }\n };\n\n oop.inherits(CstyleBehaviour, Behaviour);\n exports.CstyleBehaviour = CstyleBehaviour;\n});\nace.define(\"ace/unicode\", [\"require\", \"exports\", \"module\"], function (require, exports, module) {\n \"use strict\";\n\n var wordChars = [48, 9, 8, 25, 5, 0, 2, 25, 48, 0, 11, 0, 5, 0, 6, 22, 2, 30, 2, 457, 5, 11, 15, 4, 8, 0, 2, 0, 18, 116, 2, 1, 3, 3, 9, 0, 2, 2, 2, 0, 2, 19, 2, 82, 2, 138, 2, 4, 3, 155, 12, 37, 3, 0, 8, 38, 10, 44, 2, 0, 2, 1, 2, 1, 2, 0, 9, 26, 6, 2, 30, 10, 7, 61, 2, 9, 5, 101, 2, 7, 3, 9, 2, 18, 3, 0, 17, 58, 3, 100, 15, 53, 5, 0, 6, 45, 211, 57, 3, 18, 2, 5, 3, 11, 3, 9, 2, 1, 7, 6, 2, 2, 2, 7, 3, 1, 3, 21, 2, 6, 2, 0, 4, 3, 3, 8, 3, 1, 3, 3, 9, 0, 5, 1, 2, 4, 3, 11, 16, 2, 2, 5, 5, 1, 3, 21, 2, 6, 2, 1, 2, 1, 2, 1, 3, 0, 2, 4, 5, 1, 3, 2, 4, 0, 8, 3, 2, 0, 8, 15, 12, 2, 2, 8, 2, 2, 2, 21, 2, 6, 2, 1, 2, 4, 3, 9, 2, 2, 2, 2, 3, 0, 16, 3, 3, 9, 18, 2, 2, 7, 3, 1, 3, 21, 2, 6, 2, 1, 2, 4, 3, 8, 3, 1, 3, 2, 9, 1, 5, 1, 2, 4, 3, 9, 2, 0, 17, 1, 2, 5, 4, 2, 2, 3, 4, 1, 2, 0, 2, 1, 4, 1, 4, 2, 4, 11, 5, 4, 4, 2, 2, 3, 3, 0, 7, 0, 15, 9, 18, 2, 2, 7, 2, 2, 2, 22, 2, 9, 2, 4, 4, 7, 2, 2, 2, 3, 8, 1, 2, 1, 7, 3, 3, 9, 19, 1, 2, 7, 2, 2, 2, 22, 2, 9, 2, 4, 3, 8, 2, 2, 2, 3, 8, 1, 8, 0, 2, 3, 3, 9, 19, 1, 2, 7, 2, 2, 2, 22, 2, 15, 4, 7, 2, 2, 2, 3, 10, 0, 9, 3, 3, 9, 11, 5, 3, 1, 2, 17, 4, 23, 2, 8, 2, 0, 3, 6, 4, 0, 5, 5, 2, 0, 2, 7, 19, 1, 14, 57, 6, 14, 2, 9, 40, 1, 2, 0, 3, 1, 2, 0, 3, 0, 7, 3, 2, 6, 2, 2, 2, 0, 2, 0, 3, 1, 2, 12, 2, 2, 3, 4, 2, 0, 2, 5, 3, 9, 3, 1, 35, 0, 24, 1, 7, 9, 12, 0, 2, 0, 2, 0, 5, 9, 2, 35, 5, 19, 2, 5, 5, 7, 2, 35, 10, 0, 58, 73, 7, 77, 3, 37, 11, 42, 2, 0, 4, 328, 2, 3, 3, 6, 2, 0, 2, 3, 3, 40, 2, 3, 3, 32, 2, 3, 3, 6, 2, 0, 2, 3, 3, 14, 2, 56, 2, 3, 3, 66, 5, 0, 33, 15, 17, 84, 13, 619, 3, 16, 2, 25, 6, 74, 22, 12, 2, 6, 12, 20, 12, 19, 13, 12, 2, 2, 2, 1, 13, 51, 3, 29, 4, 0, 5, 1, 3, 9, 34, 2, 3, 9, 7, 87, 9, 42, 6, 69, 11, 28, 4, 11, 5, 11, 11, 39, 3, 4, 12, 43, 5, 25, 7, 10, 38, 27, 5, 62, 2, 28, 3, 10, 7, 9, 14, 0, 89, 75, 5, 9, 18, 8, 13, 42, 4, 11, 71, 55, 9, 9, 4, 48, 83, 2, 2, 30, 14, 230, 23, 280, 3, 5, 3, 37, 3, 5, 3, 7, 2, 0, 2, 0, 2, 0, 2, 30, 3, 52, 2, 6, 2, 0, 4, 2, 2, 6, 4, 3, 3, 5, 5, 12, 6, 2, 2, 6, 67, 1, 20, 0, 29, 0, 14, 0, 17, 4, 60, 12, 5, 0, 4, 11, 18, 0, 5, 0, 3, 9, 2, 0, 4, 4, 7, 0, 2, 0, 2, 0, 2, 3, 2, 10, 3, 3, 6, 4, 5, 0, 53, 1, 2684, 46, 2, 46, 2, 132, 7, 6, 15, 37, 11, 53, 10, 0, 17, 22, 10, 6, 2, 6, 2, 6, 2, 6, 2, 6, 2, 6, 2, 6, 2, 6, 2, 31, 48, 0, 470, 1, 36, 5, 2, 4, 6, 1, 5, 85, 3, 1, 3, 2, 2, 89, 2, 3, 6, 40, 4, 93, 18, 23, 57, 15, 513, 6581, 75, 20939, 53, 1164, 68, 45, 3, 268, 4, 27, 21, 31, 3, 13, 13, 1, 2, 24, 9, 69, 11, 1, 38, 8, 3, 102, 3, 1, 111, 44, 25, 51, 13, 68, 12, 9, 7, 23, 4, 0, 5, 45, 3, 35, 13, 28, 4, 64, 15, 10, 39, 54, 10, 13, 3, 9, 7, 22, 4, 1, 5, 66, 25, 2, 227, 42, 2, 1, 3, 9, 7, 11171, 13, 22, 5, 48, 8453, 301, 3, 61, 3, 105, 39, 6, 13, 4, 6, 11, 2, 12, 2, 4, 2, 0, 2, 1, 2, 1, 2, 107, 34, 362, 19, 63, 3, 53, 41, 11, 5, 15, 17, 6, 13, 1, 25, 2, 33, 4, 2, 134, 20, 9, 8, 25, 5, 0, 2, 25, 12, 88, 4, 5, 3, 5, 3, 5, 3, 2];\n var code = 0;\n var str = [];\n\n for (var i = 0; i < wordChars.length; i += 2) {\n str.push(code += wordChars[i]);\n if (wordChars[i + 1]) str.push(45, code += wordChars[i + 1]);\n }\n\n exports.wordChars = String.fromCharCode.apply(null, str);\n});\nace.define(\"ace/mode/text\", [\"require\", \"exports\", \"module\", \"ace/config\", \"ace/tokenizer\", \"ace/mode/text_highlight_rules\", \"ace/mode/behaviour/cstyle\", \"ace/unicode\", \"ace/lib/lang\", \"ace/token_iterator\", \"ace/range\"], function (require, exports, module) {\n \"use strict\";\n\n var config = require(\"../config\");\n\n var Tokenizer = require(\"../tokenizer\").Tokenizer;\n\n var TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\n\n var CstyleBehaviour = require(\"./behaviour/cstyle\").CstyleBehaviour;\n\n var unicode = require(\"../unicode\");\n\n var lang = require(\"../lib/lang\");\n\n var TokenIterator = require(\"../token_iterator\").TokenIterator;\n\n var Range = require(\"../range\").Range;\n\n var Mode = function Mode() {\n this.HighlightRules = TextHighlightRules;\n };\n\n (function () {\n this.$defaultBehaviour = new CstyleBehaviour();\n this.tokenRe = new RegExp(\"^[\" + unicode.wordChars + \"\\\\$_]+\", \"g\");\n this.nonTokenRe = new RegExp(\"^(?:[^\" + unicode.wordChars + \"\\\\$_]|\\\\s])+\", \"g\");\n\n this.getTokenizer = function () {\n if (!this.$tokenizer) {\n this.$highlightRules = this.$highlightRules || new this.HighlightRules(this.$highlightRuleConfig);\n this.$tokenizer = new Tokenizer(this.$highlightRules.getRules());\n }\n\n return this.$tokenizer;\n };\n\n this.lineCommentStart = \"\";\n this.blockComment = \"\";\n\n this.toggleCommentLines = function (state, session, startRow, endRow) {\n var doc = session.doc;\n var ignoreBlankLines = true;\n var shouldRemove = true;\n var minIndent = Infinity;\n var tabSize = session.getTabSize();\n var insertAtTabStop = false;\n\n if (!this.lineCommentStart) {\n if (!this.blockComment) return false;\n var lineCommentStart = this.blockComment.start;\n var lineCommentEnd = this.blockComment.end;\n var regexpStart = new RegExp(\"^(\\\\s*)(?:\" + lang.escapeRegExp(lineCommentStart) + \")\");\n var regexpEnd = new RegExp(\"(?:\" + lang.escapeRegExp(lineCommentEnd) + \")\\\\s*$\");\n\n var comment = function comment(line, i) {\n if (testRemove(line, i)) return;\n\n if (!ignoreBlankLines || /\\S/.test(line)) {\n doc.insertInLine({\n row: i,\n column: line.length\n }, lineCommentEnd);\n doc.insertInLine({\n row: i,\n column: minIndent\n }, lineCommentStart);\n }\n };\n\n var uncomment = function uncomment(line, i) {\n var m;\n if (m = line.match(regexpEnd)) doc.removeInLine(i, line.length - m[0].length, line.length);\n if (m = line.match(regexpStart)) doc.removeInLine(i, m[1].length, m[0].length);\n };\n\n var testRemove = function testRemove(line, row) {\n if (regexpStart.test(line)) return true;\n var tokens = session.getTokens(row);\n\n for (var i = 0; i < tokens.length; i++) {\n if (tokens[i].type === \"comment\") return true;\n }\n };\n } else {\n if (Array.isArray(this.lineCommentStart)) {\n var regexpStart = this.lineCommentStart.map(lang.escapeRegExp).join(\"|\");\n var lineCommentStart = this.lineCommentStart[0];\n } else {\n var regexpStart = lang.escapeRegExp(this.lineCommentStart);\n var lineCommentStart = this.lineCommentStart;\n }\n\n regexpStart = new RegExp(\"^(\\\\s*)(?:\" + regexpStart + \") ?\");\n insertAtTabStop = session.getUseSoftTabs();\n\n var uncomment = function uncomment(line, i) {\n var m = line.match(regexpStart);\n if (!m) return;\n var start = m[1].length,\n end = m[0].length;\n if (!shouldInsertSpace(line, start, end) && m[0][end - 1] == \" \") end--;\n doc.removeInLine(i, start, end);\n };\n\n var commentWithSpace = lineCommentStart + \" \";\n\n var comment = function comment(line, i) {\n if (!ignoreBlankLines || /\\S/.test(line)) {\n if (shouldInsertSpace(line, minIndent, minIndent)) doc.insertInLine({\n row: i,\n column: minIndent\n }, commentWithSpace);else doc.insertInLine({\n row: i,\n column: minIndent\n }, lineCommentStart);\n }\n };\n\n var testRemove = function testRemove(line, i) {\n return regexpStart.test(line);\n };\n\n var shouldInsertSpace = function shouldInsertSpace(line, before, after) {\n var spaces = 0;\n\n while (before-- && line.charAt(before) == \" \") {\n spaces++;\n }\n\n if (spaces % tabSize != 0) return false;\n var spaces = 0;\n\n while (line.charAt(after++) == \" \") {\n spaces++;\n }\n\n if (tabSize > 2) return spaces % tabSize != tabSize - 1;else return spaces % tabSize == 0;\n };\n }\n\n function iter(fun) {\n for (var i = startRow; i <= endRow; i++) {\n fun(doc.getLine(i), i);\n }\n }\n\n var minEmptyLength = Infinity;\n iter(function (line, i) {\n var indent = line.search(/\\S/);\n\n if (indent !== -1) {\n if (indent < minIndent) minIndent = indent;\n if (shouldRemove && !testRemove(line, i)) shouldRemove = false;\n } else if (minEmptyLength > line.length) {\n minEmptyLength = line.length;\n }\n });\n\n if (minIndent == Infinity) {\n minIndent = minEmptyLength;\n ignoreBlankLines = false;\n shouldRemove = false;\n }\n\n if (insertAtTabStop && minIndent % tabSize != 0) minIndent = Math.floor(minIndent / tabSize) * tabSize;\n iter(shouldRemove ? uncomment : comment);\n };\n\n this.toggleBlockComment = function (state, session, range, cursor) {\n var comment = this.blockComment;\n if (!comment) return;\n if (!comment.start && comment[0]) comment = comment[0];\n var iterator = new TokenIterator(session, cursor.row, cursor.column);\n var token = iterator.getCurrentToken();\n var sel = session.selection;\n var initialRange = session.selection.toOrientedRange();\n var startRow, colDiff;\n\n if (token && /comment/.test(token.type)) {\n var startRange, endRange;\n\n while (token && /comment/.test(token.type)) {\n var i = token.value.indexOf(comment.start);\n\n if (i != -1) {\n var row = iterator.getCurrentTokenRow();\n var column = iterator.getCurrentTokenColumn() + i;\n startRange = new Range(row, column, row, column + comment.start.length);\n break;\n }\n\n token = iterator.stepBackward();\n }\n\n var iterator = new TokenIterator(session, cursor.row, cursor.column);\n var token = iterator.getCurrentToken();\n\n while (token && /comment/.test(token.type)) {\n var i = token.value.indexOf(comment.end);\n\n if (i != -1) {\n var row = iterator.getCurrentTokenRow();\n var column = iterator.getCurrentTokenColumn() + i;\n endRange = new Range(row, column, row, column + comment.end.length);\n break;\n }\n\n token = iterator.stepForward();\n }\n\n if (endRange) session.remove(endRange);\n\n if (startRange) {\n session.remove(startRange);\n startRow = startRange.start.row;\n colDiff = -comment.start.length;\n }\n } else {\n colDiff = comment.start.length;\n startRow = range.start.row;\n session.insert(range.end, comment.end);\n session.insert(range.start, comment.start);\n }\n\n if (initialRange.start.row == startRow) initialRange.start.column += colDiff;\n if (initialRange.end.row == startRow) initialRange.end.column += colDiff;\n session.selection.fromOrientedRange(initialRange);\n };\n\n this.getNextLineIndent = function (state, line, tab) {\n return this.$getIndent(line);\n };\n\n this.checkOutdent = function (state, line, input) {\n return false;\n };\n\n this.autoOutdent = function (state, doc, row) {};\n\n this.$getIndent = function (line) {\n return line.match(/^\\s*/)[0];\n };\n\n this.createWorker = function (session) {\n return null;\n };\n\n this.createModeDelegates = function (mapping) {\n this.$embeds = [];\n this.$modes = {};\n\n for (var i in mapping) {\n if (mapping[i]) {\n var Mode = mapping[i];\n var id = Mode.prototype.$id;\n var mode = config.$modes[id];\n if (!mode) config.$modes[id] = mode = new Mode();\n if (!config.$modes[i]) config.$modes[i] = mode;\n this.$embeds.push(i);\n this.$modes[i] = mode;\n }\n }\n\n var delegations = [\"toggleBlockComment\", \"toggleCommentLines\", \"getNextLineIndent\", \"checkOutdent\", \"autoOutdent\", \"transformAction\", \"getCompletions\"];\n\n for (var i = 0; i < delegations.length; i++) {\n (function (scope) {\n var functionName = delegations[i];\n var defaultHandler = scope[functionName];\n\n scope[delegations[i]] = function () {\n return this.$delegator(functionName, arguments, defaultHandler);\n };\n })(this);\n }\n };\n\n this.$delegator = function (method, args, defaultHandler) {\n var state = args[0] || \"start\";\n\n if (typeof state != \"string\") {\n if (Array.isArray(state[2])) {\n var language = state[2][state[2].length - 1];\n var mode = this.$modes[language];\n if (mode) return mode[method].apply(mode, [state[1]].concat([].slice.call(args, 1)));\n }\n\n state = state[0] || \"start\";\n }\n\n for (var i = 0; i < this.$embeds.length; i++) {\n if (!this.$modes[this.$embeds[i]]) continue;\n var split = state.split(this.$embeds[i]);\n\n if (!split[0] && split[1]) {\n args[0] = split[1];\n var mode = this.$modes[this.$embeds[i]];\n return mode[method].apply(mode, args);\n }\n }\n\n var ret = defaultHandler.apply(this, args);\n return defaultHandler ? ret : undefined;\n };\n\n this.transformAction = function (state, action, editor, session, param) {\n if (this.$behaviour) {\n var behaviours = this.$behaviour.getBehaviours();\n\n for (var key in behaviours) {\n if (behaviours[key][action]) {\n var ret = behaviours[key][action].apply(this, arguments);\n\n if (ret) {\n return ret;\n }\n }\n }\n }\n };\n\n this.getKeywords = function (append) {\n if (!this.completionKeywords) {\n var rules = this.$tokenizer.rules;\n var completionKeywords = [];\n\n for (var rule in rules) {\n var ruleItr = rules[rule];\n\n for (var r = 0, l = ruleItr.length; r < l; r++) {\n if (typeof ruleItr[r].token === \"string\") {\n if (/keyword|support|storage/.test(ruleItr[r].token)) completionKeywords.push(ruleItr[r].regex);\n } else if (_typeof(ruleItr[r].token) === \"object\") {\n for (var a = 0, aLength = ruleItr[r].token.length; a < aLength; a++) {\n if (/keyword|support|storage/.test(ruleItr[r].token[a])) {\n var rule = ruleItr[r].regex.match(/\\(.+?\\)/g)[a];\n completionKeywords.push(rule.substr(1, rule.length - 2));\n }\n }\n }\n }\n }\n\n this.completionKeywords = completionKeywords;\n }\n\n if (!append) return this.$keywordList;\n return completionKeywords.concat(this.$keywordList || []);\n };\n\n this.$createKeywordList = function () {\n if (!this.$highlightRules) this.getTokenizer();\n return this.$keywordList = this.$highlightRules.$keywordList || [];\n };\n\n this.getCompletions = function (state, session, pos, prefix) {\n var keywords = this.$keywordList || this.$createKeywordList();\n return keywords.map(function (word) {\n return {\n name: word,\n value: word,\n score: 0,\n meta: \"keyword\"\n };\n });\n };\n\n this.$id = \"ace/mode/text\";\n }).call(Mode.prototype);\n exports.Mode = Mode;\n});\nace.define(\"ace/apply_delta\", [\"require\", \"exports\", \"module\"], function (require, exports, module) {\n \"use strict\";\n\n function throwDeltaError(delta, errorText) {\n console.log(\"Invalid Delta:\", delta);\n throw \"Invalid Delta: \" + errorText;\n }\n\n function positionInDocument(docLines, position) {\n return position.row >= 0 && position.row < docLines.length && position.column >= 0 && position.column <= docLines[position.row].length;\n }\n\n function validateDelta(docLines, delta) {\n if (delta.action != \"insert\" && delta.action != \"remove\") throwDeltaError(delta, \"delta.action must be 'insert' or 'remove'\");\n if (!(delta.lines instanceof Array)) throwDeltaError(delta, \"delta.lines must be an Array\");\n if (!delta.start || !delta.end) throwDeltaError(delta, \"delta.start/end must be an present\");\n var start = delta.start;\n if (!positionInDocument(docLines, delta.start)) throwDeltaError(delta, \"delta.start must be contained in document\");\n var end = delta.end;\n if (delta.action == \"remove\" && !positionInDocument(docLines, end)) throwDeltaError(delta, \"delta.end must contained in document for 'remove' actions\");\n var numRangeRows = end.row - start.row;\n var numRangeLastLineChars = end.column - (numRangeRows == 0 ? start.column : 0);\n if (numRangeRows != delta.lines.length - 1 || delta.lines[numRangeRows].length != numRangeLastLineChars) throwDeltaError(delta, \"delta.range must match delta lines\");\n }\n\n exports.applyDelta = function (docLines, delta, doNotValidate) {\n var row = delta.start.row;\n var startColumn = delta.start.column;\n var line = docLines[row] || \"\";\n\n switch (delta.action) {\n case \"insert\":\n var lines = delta.lines;\n\n if (lines.length === 1) {\n docLines[row] = line.substring(0, startColumn) + delta.lines[0] + line.substring(startColumn);\n } else {\n var args = [row, 1].concat(delta.lines);\n docLines.splice.apply(docLines, args);\n docLines[row] = line.substring(0, startColumn) + docLines[row];\n docLines[row + delta.lines.length - 1] += line.substring(startColumn);\n }\n\n break;\n\n case \"remove\":\n var endColumn = delta.end.column;\n var endRow = delta.end.row;\n\n if (row === endRow) {\n docLines[row] = line.substring(0, startColumn) + line.substring(endColumn);\n } else {\n docLines.splice(row, endRow - row + 1, line.substring(0, startColumn) + docLines[endRow].substring(endColumn));\n }\n\n break;\n }\n };\n});\nace.define(\"ace/anchor\", [\"require\", \"exports\", \"module\", \"ace/lib/oop\", \"ace/lib/event_emitter\"], function (require, exports, module) {\n \"use strict\";\n\n var oop = require(\"./lib/oop\");\n\n var EventEmitter = require(\"./lib/event_emitter\").EventEmitter;\n\n var Anchor = exports.Anchor = function (doc, row, column) {\n this.$onChange = this.onChange.bind(this);\n this.attach(doc);\n if (typeof column == \"undefined\") this.setPosition(row.row, row.column);else this.setPosition(row, column);\n };\n\n (function () {\n oop.implement(this, EventEmitter);\n\n this.getPosition = function () {\n return this.$clipPositionToDocument(this.row, this.column);\n };\n\n this.getDocument = function () {\n return this.document;\n };\n\n this.$insertRight = false;\n\n this.onChange = function (delta) {\n if (delta.start.row == delta.end.row && delta.start.row != this.row) return;\n if (delta.start.row > this.row) return;\n var point = $getTransformedPoint(delta, {\n row: this.row,\n column: this.column\n }, this.$insertRight);\n this.setPosition(point.row, point.column, true);\n };\n\n function $pointsInOrder(point1, point2, equalPointsInOrder) {\n var bColIsAfter = equalPointsInOrder ? point1.column <= point2.column : point1.column < point2.column;\n return point1.row < point2.row || point1.row == point2.row && bColIsAfter;\n }\n\n function $getTransformedPoint(delta, point, moveIfEqual) {\n var deltaIsInsert = delta.action == \"insert\";\n var deltaRowShift = (deltaIsInsert ? 1 : -1) * (delta.end.row - delta.start.row);\n var deltaColShift = (deltaIsInsert ? 1 : -1) * (delta.end.column - delta.start.column);\n var deltaStart = delta.start;\n var deltaEnd = deltaIsInsert ? deltaStart : delta.end; // Collapse insert range.\n\n if ($pointsInOrder(point, deltaStart, moveIfEqual)) {\n return {\n row: point.row,\n column: point.column\n };\n }\n\n if ($pointsInOrder(deltaEnd, point, !moveIfEqual)) {\n return {\n row: point.row + deltaRowShift,\n column: point.column + (point.row == deltaEnd.row ? deltaColShift : 0)\n };\n }\n\n return {\n row: deltaStart.row,\n column: deltaStart.column\n };\n }\n\n this.setPosition = function (row, column, noClip) {\n var pos;\n\n if (noClip) {\n pos = {\n row: row,\n column: column\n };\n } else {\n pos = this.$clipPositionToDocument(row, column);\n }\n\n if (this.row == pos.row && this.column == pos.column) return;\n var old = {\n row: this.row,\n column: this.column\n };\n this.row = pos.row;\n this.column = pos.column;\n\n this._signal(\"change\", {\n old: old,\n value: pos\n });\n };\n\n this.detach = function () {\n this.document.off(\"change\", this.$onChange);\n };\n\n this.attach = function (doc) {\n this.document = doc || this.document;\n this.document.on(\"change\", this.$onChange);\n };\n\n this.$clipPositionToDocument = function (row, column) {\n var pos = {};\n\n if (row >= this.document.getLength()) {\n pos.row = Math.max(0, this.document.getLength() - 1);\n pos.column = this.document.getLine(pos.row).length;\n } else if (row < 0) {\n pos.row = 0;\n pos.column = 0;\n } else {\n pos.row = row;\n pos.column = Math.min(this.document.getLine(pos.row).length, Math.max(0, column));\n }\n\n if (column < 0) pos.column = 0;\n return pos;\n };\n }).call(Anchor.prototype);\n});\nace.define(\"ace/document\", [\"require\", \"exports\", \"module\", \"ace/lib/oop\", \"ace/apply_delta\", \"ace/lib/event_emitter\", \"ace/range\", \"ace/anchor\"], function (require, exports, module) {\n \"use strict\";\n\n var oop = require(\"./lib/oop\");\n\n var applyDelta = require(\"./apply_delta\").applyDelta;\n\n var EventEmitter = require(\"./lib/event_emitter\").EventEmitter;\n\n var Range = require(\"./range\").Range;\n\n var Anchor = require(\"./anchor\").Anchor;\n\n var Document = function Document(textOrLines) {\n this.$lines = [\"\"];\n\n if (textOrLines.length === 0) {\n this.$lines = [\"\"];\n } else if (Array.isArray(textOrLines)) {\n this.insertMergedLines({\n row: 0,\n column: 0\n }, textOrLines);\n } else {\n this.insert({\n row: 0,\n column: 0\n }, textOrLines);\n }\n };\n\n (function () {\n oop.implement(this, EventEmitter);\n\n this.setValue = function (text) {\n var len = this.getLength() - 1;\n this.remove(new Range(0, 0, len, this.getLine(len).length));\n this.insert({\n row: 0,\n column: 0\n }, text);\n };\n\n this.getValue = function () {\n return this.getAllLines().join(this.getNewLineCharacter());\n };\n\n this.createAnchor = function (row, column) {\n return new Anchor(this, row, column);\n };\n\n if (\"aaa\".split(/a/).length === 0) {\n this.$split = function (text) {\n return text.replace(/\\r\\n|\\r/g, \"\\n\").split(\"\\n\");\n };\n } else {\n this.$split = function (text) {\n return text.split(/\\r\\n|\\r|\\n/);\n };\n }\n\n this.$detectNewLine = function (text) {\n var match = text.match(/^.*?(\\r\\n|\\r|\\n)/m);\n this.$autoNewLine = match ? match[1] : \"\\n\";\n\n this._signal(\"changeNewLineMode\");\n };\n\n this.getNewLineCharacter = function () {\n switch (this.$newLineMode) {\n case \"windows\":\n return \"\\r\\n\";\n\n case \"unix\":\n return \"\\n\";\n\n default:\n return this.$autoNewLine || \"\\n\";\n }\n };\n\n this.$autoNewLine = \"\";\n this.$newLineMode = \"auto\";\n\n this.setNewLineMode = function (newLineMode) {\n if (this.$newLineMode === newLineMode) return;\n this.$newLineMode = newLineMode;\n\n this._signal(\"changeNewLineMode\");\n };\n\n this.getNewLineMode = function () {\n return this.$newLineMode;\n };\n\n this.isNewLine = function (text) {\n return text == \"\\r\\n\" || text == \"\\r\" || text == \"\\n\";\n };\n\n this.getLine = function (row) {\n return this.$lines[row] || \"\";\n };\n\n this.getLines = function (firstRow, lastRow) {\n return this.$lines.slice(firstRow, lastRow + 1);\n };\n\n this.getAllLines = function () {\n return this.getLines(0, this.getLength());\n };\n\n this.getLength = function () {\n return this.$lines.length;\n };\n\n this.getTextRange = function (range) {\n return this.getLinesForRange(range).join(this.getNewLineCharacter());\n };\n\n this.getLinesForRange = function (range) {\n var lines;\n\n if (range.start.row === range.end.row) {\n lines = [this.getLine(range.start.row).substring(range.start.column, range.end.column)];\n } else {\n lines = this.getLines(range.start.row, range.end.row);\n lines[0] = (lines[0] || \"\").substring(range.start.column);\n var l = lines.length - 1;\n if (range.end.row - range.start.row == l) lines[l] = lines[l].substring(0, range.end.column);\n }\n\n return lines;\n };\n\n this.insertLines = function (row, lines) {\n console.warn(\"Use of document.insertLines is deprecated. Use the insertFullLines method instead.\");\n return this.insertFullLines(row, lines);\n };\n\n this.removeLines = function (firstRow, lastRow) {\n console.warn(\"Use of document.removeLines is deprecated. Use the removeFullLines method instead.\");\n return this.removeFullLines(firstRow, lastRow);\n };\n\n this.insertNewLine = function (position) {\n console.warn(\"Use of document.insertNewLine is deprecated. Use insertMergedLines(position, ['', '']) instead.\");\n return this.insertMergedLines(position, [\"\", \"\"]);\n };\n\n this.insert = function (position, text) {\n if (this.getLength() <= 1) this.$detectNewLine(text);\n return this.insertMergedLines(position, this.$split(text));\n };\n\n this.insertInLine = function (position, text) {\n var start = this.clippedPos(position.row, position.column);\n var end = this.pos(position.row, position.column + text.length);\n this.applyDelta({\n start: start,\n end: end,\n action: \"insert\",\n lines: [text]\n }, true);\n return this.clonePos(end);\n };\n\n this.clippedPos = function (row, column) {\n var length = this.getLength();\n\n if (row === undefined) {\n row = length;\n } else if (row < 0) {\n row = 0;\n } else if (row >= length) {\n row = length - 1;\n column = undefined;\n }\n\n var line = this.getLine(row);\n if (column == undefined) column = line.length;\n column = Math.min(Math.max(column, 0), line.length);\n return {\n row: row,\n column: column\n };\n };\n\n this.clonePos = function (pos) {\n return {\n row: pos.row,\n column: pos.column\n };\n };\n\n this.pos = function (row, column) {\n return {\n row: row,\n column: column\n };\n };\n\n this.$clipPosition = function (position) {\n var length = this.getLength();\n\n if (position.row >= length) {\n position.row = Math.max(0, length - 1);\n position.column = this.getLine(length - 1).length;\n } else {\n position.row = Math.max(0, position.row);\n position.column = Math.min(Math.max(position.column, 0), this.getLine(position.row).length);\n }\n\n return position;\n };\n\n this.insertFullLines = function (row, lines) {\n row = Math.min(Math.max(row, 0), this.getLength());\n var column = 0;\n\n if (row < this.getLength()) {\n lines = lines.concat([\"\"]);\n column = 0;\n } else {\n lines = [\"\"].concat(lines);\n row--;\n column = this.$lines[row].length;\n }\n\n this.insertMergedLines({\n row: row,\n column: column\n }, lines);\n };\n\n this.insertMergedLines = function (position, lines) {\n var start = this.clippedPos(position.row, position.column);\n var end = {\n row: start.row + lines.length - 1,\n column: (lines.length == 1 ? start.column : 0) + lines[lines.length - 1].length\n };\n this.applyDelta({\n start: start,\n end: end,\n action: \"insert\",\n lines: lines\n });\n return this.clonePos(end);\n };\n\n this.remove = function (range) {\n var start = this.clippedPos(range.start.row, range.start.column);\n var end = this.clippedPos(range.end.row, range.end.column);\n this.applyDelta({\n start: start,\n end: end,\n action: \"remove\",\n lines: this.getLinesForRange({\n start: start,\n end: end\n })\n });\n return this.clonePos(start);\n };\n\n this.removeInLine = function (row, startColumn, endColumn) {\n var start = this.clippedPos(row, startColumn);\n var end = this.clippedPos(row, endColumn);\n this.applyDelta({\n start: start,\n end: end,\n action: \"remove\",\n lines: this.getLinesForRange({\n start: start,\n end: end\n })\n }, true);\n return this.clonePos(start);\n };\n\n this.removeFullLines = function (firstRow, lastRow) {\n firstRow = Math.min(Math.max(0, firstRow), this.getLength() - 1);\n lastRow = Math.min(Math.max(0, lastRow), this.getLength() - 1);\n var deleteFirstNewLine = lastRow == this.getLength() - 1 && firstRow > 0;\n var deleteLastNewLine = lastRow < this.getLength() - 1;\n var startRow = deleteFirstNewLine ? firstRow - 1 : firstRow;\n var startCol = deleteFirstNewLine ? this.getLine(startRow).length : 0;\n var endRow = deleteLastNewLine ? lastRow + 1 : lastRow;\n var endCol = deleteLastNewLine ? 0 : this.getLine(endRow).length;\n var range = new Range(startRow, startCol, endRow, endCol);\n var deletedLines = this.$lines.slice(firstRow, lastRow + 1);\n this.applyDelta({\n start: range.start,\n end: range.end,\n action: \"remove\",\n lines: this.getLinesForRange(range)\n });\n return deletedLines;\n };\n\n this.removeNewLine = function (row) {\n if (row < this.getLength() - 1 && row >= 0) {\n this.applyDelta({\n start: this.pos(row, this.getLine(row).length),\n end: this.pos(row + 1, 0),\n action: \"remove\",\n lines: [\"\", \"\"]\n });\n }\n };\n\n this.replace = function (range, text) {\n if (!(range instanceof Range)) range = Range.fromPoints(range.start, range.end);\n if (text.length === 0 && range.isEmpty()) return range.start;\n if (text == this.getTextRange(range)) return range.end;\n this.remove(range);\n var end;\n\n if (text) {\n end = this.insert(range.start, text);\n } else {\n end = range.start;\n }\n\n return end;\n };\n\n this.applyDeltas = function (deltas) {\n for (var i = 0; i < deltas.length; i++) {\n this.applyDelta(deltas[i]);\n }\n };\n\n this.revertDeltas = function (deltas) {\n for (var i = deltas.length - 1; i >= 0; i--) {\n this.revertDelta(deltas[i]);\n }\n };\n\n this.applyDelta = function (delta, doNotValidate) {\n var isInsert = delta.action == \"insert\";\n\n if (isInsert ? delta.lines.length <= 1 && !delta.lines[0] : !Range.comparePoints(delta.start, delta.end)) {\n return;\n }\n\n if (isInsert && delta.lines.length > 20000) {\n this.$splitAndapplyLargeDelta(delta, 20000);\n } else {\n applyDelta(this.$lines, delta, doNotValidate);\n\n this._signal(\"change\", delta);\n }\n };\n\n this.$safeApplyDelta = function (delta) {\n var docLength = this.$lines.length;\n\n if (delta.action == \"remove\" && delta.start.row < docLength && delta.end.row < docLength || delta.action == \"insert\" && delta.start.row <= docLength) {\n this.applyDelta(delta);\n }\n };\n\n this.$splitAndapplyLargeDelta = function (delta, MAX) {\n var lines = delta.lines;\n var l = lines.length - MAX + 1;\n var row = delta.start.row;\n var column = delta.start.column;\n\n for (var from = 0, to = 0; from < l; from = to) {\n to += MAX - 1;\n var chunk = lines.slice(from, to);\n chunk.push(\"\");\n this.applyDelta({\n start: this.pos(row + from, column),\n end: this.pos(row + to, column = 0),\n action: delta.action,\n lines: chunk\n }, true);\n }\n\n delta.lines = lines.slice(from);\n delta.start.row = row + from;\n delta.start.column = column;\n this.applyDelta(delta, true);\n };\n\n this.revertDelta = function (delta) {\n this.$safeApplyDelta({\n start: this.clonePos(delta.start),\n end: this.clonePos(delta.end),\n action: delta.action == \"insert\" ? \"remove\" : \"insert\",\n lines: delta.lines.slice()\n });\n };\n\n this.indexToPosition = function (index, startRow) {\n var lines = this.$lines || this.getAllLines();\n var newlineLength = this.getNewLineCharacter().length;\n\n for (var i = startRow || 0, l = lines.length; i < l; i++) {\n index -= lines[i].length + newlineLength;\n if (index < 0) return {\n row: i,\n column: index + lines[i].length + newlineLength\n };\n }\n\n return {\n row: l - 1,\n column: index + lines[l - 1].length + newlineLength\n };\n };\n\n this.positionToIndex = function (pos, startRow) {\n var lines = this.$lines || this.getAllLines();\n var newlineLength = this.getNewLineCharacter().length;\n var index = 0;\n var row = Math.min(pos.row, lines.length);\n\n for (var i = startRow || 0; i < row; ++i) {\n index += lines[i].length + newlineLength;\n }\n\n return index + pos.column;\n };\n }).call(Document.prototype);\n exports.Document = Document;\n});\nace.define(\"ace/background_tokenizer\", [\"require\", \"exports\", \"module\", \"ace/lib/oop\", \"ace/lib/event_emitter\"], function (require, exports, module) {\n \"use strict\";\n\n var oop = require(\"./lib/oop\");\n\n var EventEmitter = require(\"./lib/event_emitter\").EventEmitter;\n\n var BackgroundTokenizer = function BackgroundTokenizer(tokenizer, editor) {\n this.running = false;\n this.lines = [];\n this.states = [];\n this.currentLine = 0;\n this.tokenizer = tokenizer;\n var self = this;\n\n this.$worker = function () {\n if (!self.running) {\n return;\n }\n\n var workerStart = new Date();\n var currentLine = self.currentLine;\n var endLine = -1;\n var doc = self.doc;\n var startLine = currentLine;\n\n while (self.lines[currentLine]) {\n currentLine++;\n }\n\n var len = doc.getLength();\n var processedLines = 0;\n self.running = false;\n\n while (currentLine < len) {\n self.$tokenizeRow(currentLine);\n endLine = currentLine;\n\n do {\n currentLine++;\n } while (self.lines[currentLine]);\n\n processedLines++;\n\n if (processedLines % 5 === 0 && new Date() - workerStart > 20) {\n self.running = setTimeout(self.$worker, 20);\n break;\n }\n }\n\n self.currentLine = currentLine;\n if (endLine == -1) endLine = currentLine;\n if (startLine <= endLine) self.fireUpdateEvent(startLine, endLine);\n };\n };\n\n (function () {\n oop.implement(this, EventEmitter);\n\n this.setTokenizer = function (tokenizer) {\n this.tokenizer = tokenizer;\n this.lines = [];\n this.states = [];\n this.start(0);\n };\n\n this.setDocument = function (doc) {\n this.doc = doc;\n this.lines = [];\n this.states = [];\n this.stop();\n };\n\n this.fireUpdateEvent = function (firstRow, lastRow) {\n var data = {\n first: firstRow,\n last: lastRow\n };\n\n this._signal(\"update\", {\n data: data\n });\n };\n\n this.start = function (startRow) {\n this.currentLine = Math.min(startRow || 0, this.currentLine, this.doc.getLength());\n this.lines.splice(this.currentLine, this.lines.length);\n this.states.splice(this.currentLine, this.states.length);\n this.stop();\n this.running = setTimeout(this.$worker, 700);\n };\n\n this.scheduleStart = function () {\n if (!this.running) this.running = setTimeout(this.$worker, 700);\n };\n\n this.$updateOnChange = function (delta) {\n var startRow = delta.start.row;\n var len = delta.end.row - startRow;\n\n if (len === 0) {\n this.lines[startRow] = null;\n } else if (delta.action == \"remove\") {\n this.lines.splice(startRow, len + 1, null);\n this.states.splice(startRow, len + 1, null);\n } else {\n var args = Array(len + 1);\n args.unshift(startRow, 1);\n this.lines.splice.apply(this.lines, args);\n this.states.splice.apply(this.states, args);\n }\n\n this.currentLine = Math.min(startRow, this.currentLine, this.doc.getLength());\n this.stop();\n };\n\n this.stop = function () {\n if (this.running) clearTimeout(this.running);\n this.running = false;\n };\n\n this.getTokens = function (row) {\n return this.lines[row] || this.$tokenizeRow(row);\n };\n\n this.getState = function (row) {\n if (this.currentLine == row) this.$tokenizeRow(row);\n return this.states[row] || \"start\";\n };\n\n this.$tokenizeRow = function (row) {\n var line = this.doc.getLine(row);\n var state = this.states[row - 1];\n var data = this.tokenizer.getLineTokens(line, state, row);\n\n if (this.states[row] + \"\" !== data.state + \"\") {\n this.states[row] = data.state;\n this.lines[row + 1] = null;\n if (this.currentLine > row + 1) this.currentLine = row + 1;\n } else if (this.currentLine == row) {\n this.currentLine = row + 1;\n }\n\n return this.lines[row] = data.tokens;\n };\n }).call(BackgroundTokenizer.prototype);\n exports.BackgroundTokenizer = BackgroundTokenizer;\n});\nace.define(\"ace/search_highlight\", [\"require\", \"exports\", \"module\", \"ace/lib/lang\", \"ace/lib/oop\", \"ace/range\"], function (require, exports, module) {\n \"use strict\";\n\n var lang = require(\"./lib/lang\");\n\n var oop = require(\"./lib/oop\");\n\n var Range = require(\"./range\").Range;\n\n var SearchHighlight = function SearchHighlight(regExp, clazz, type) {\n this.setRegexp(regExp);\n this.clazz = clazz;\n this.type = type || \"text\";\n };\n\n (function () {\n this.MAX_RANGES = 500;\n\n this.setRegexp = function (regExp) {\n if (this.regExp + \"\" == regExp + \"\") return;\n this.regExp = regExp;\n this.cache = [];\n };\n\n this.update = function (html, markerLayer, session, config) {\n if (!this.regExp) return;\n var start = config.firstRow,\n end = config.lastRow;\n\n for (var i = start; i <= end; i++) {\n var ranges = this.cache[i];\n\n if (ranges == null) {\n ranges = lang.getMatchOffsets(session.getLine(i), this.regExp);\n if (ranges.length > this.MAX_RANGES) ranges = ranges.slice(0, this.MAX_RANGES);\n ranges = ranges.map(function (match) {\n return new Range(i, match.offset, i, match.offset + match.length);\n });\n this.cache[i] = ranges.length ? ranges : \"\";\n }\n\n for (var j = ranges.length; j--;) {\n markerLayer.drawSingleLineMarker(html, ranges[j].toScreenRange(session), this.clazz, config);\n }\n }\n };\n }).call(SearchHighlight.prototype);\n exports.SearchHighlight = SearchHighlight;\n});\nace.define(\"ace/edit_session/fold_line\", [\"require\", \"exports\", \"module\", \"ace/range\"], function (require, exports, module) {\n \"use strict\";\n\n var Range = require(\"../range\").Range;\n\n function FoldLine(foldData, folds) {\n this.foldData = foldData;\n\n if (Array.isArray(folds)) {\n this.folds = folds;\n } else {\n folds = this.folds = [folds];\n }\n\n var last = folds[folds.length - 1];\n this.range = new Range(folds[0].start.row, folds[0].start.column, last.end.row, last.end.column);\n this.start = this.range.start;\n this.end = this.range.end;\n this.folds.forEach(function (fold) {\n fold.setFoldLine(this);\n }, this);\n }\n\n (function () {\n this.shiftRow = function (shift) {\n this.start.row += shift;\n this.end.row += shift;\n this.folds.forEach(function (fold) {\n fold.start.row += shift;\n fold.end.row += shift;\n });\n };\n\n this.addFold = function (fold) {\n if (fold.sameRow) {\n if (fold.start.row < this.startRow || fold.endRow > this.endRow) {\n throw new Error(\"Can't add a fold to this FoldLine as it has no connection\");\n }\n\n this.folds.push(fold);\n this.folds.sort(function (a, b) {\n return -a.range.compareEnd(b.start.row, b.start.column);\n });\n\n if (this.range.compareEnd(fold.start.row, fold.start.column) > 0) {\n this.end.row = fold.end.row;\n this.end.column = fold.end.column;\n } else if (this.range.compareStart(fold.end.row, fold.end.column) < 0) {\n this.start.row = fold.start.row;\n this.start.column = fold.start.column;\n }\n } else if (fold.start.row == this.end.row) {\n this.folds.push(fold);\n this.end.row = fold.end.row;\n this.end.column = fold.end.column;\n } else if (fold.end.row == this.start.row) {\n this.folds.unshift(fold);\n this.start.row = fold.start.row;\n this.start.column = fold.start.column;\n } else {\n throw new Error(\"Trying to add fold to FoldRow that doesn't have a matching row\");\n }\n\n fold.foldLine = this;\n };\n\n this.containsRow = function (row) {\n return row >= this.start.row && row <= this.end.row;\n };\n\n this.walk = function (callback, endRow, endColumn) {\n var lastEnd = 0,\n folds = this.folds,\n fold,\n cmp,\n stop,\n isNewRow = true;\n\n if (endRow == null) {\n endRow = this.end.row;\n endColumn = this.end.column;\n }\n\n for (var i = 0; i < folds.length; i++) {\n fold = folds[i];\n cmp = fold.range.compareStart(endRow, endColumn);\n\n if (cmp == -1) {\n callback(null, endRow, endColumn, lastEnd, isNewRow);\n return;\n }\n\n stop = callback(null, fold.start.row, fold.start.column, lastEnd, isNewRow);\n stop = !stop && callback(fold.placeholder, fold.start.row, fold.start.column, lastEnd);\n\n if (stop || cmp === 0) {\n return;\n }\n\n isNewRow = !fold.sameRow;\n lastEnd = fold.end.column;\n }\n\n callback(null, endRow, endColumn, lastEnd, isNewRow);\n };\n\n this.getNextFoldTo = function (row, column) {\n var fold, cmp;\n\n for (var i = 0; i < this.folds.length; i++) {\n fold = this.folds[i];\n cmp = fold.range.compareEnd(row, column);\n\n if (cmp == -1) {\n return {\n fold: fold,\n kind: \"after\"\n };\n } else if (cmp === 0) {\n return {\n fold: fold,\n kind: \"inside\"\n };\n }\n }\n\n return null;\n };\n\n this.addRemoveChars = function (row, column, len) {\n var ret = this.getNextFoldTo(row, column),\n fold,\n folds;\n\n if (ret) {\n fold = ret.fold;\n\n if (ret.kind == \"inside\" && fold.start.column != column && fold.start.row != row) {\n window.console && window.console.log(row, column, fold);\n } else if (fold.start.row == row) {\n folds = this.folds;\n var i = folds.indexOf(fold);\n\n if (i === 0) {\n this.start.column += len;\n }\n\n for (i; i < folds.length; i++) {\n fold = folds[i];\n fold.start.column += len;\n\n if (!fold.sameRow) {\n return;\n }\n\n fold.end.column += len;\n }\n\n this.end.column += len;\n }\n }\n };\n\n this.split = function (row, column) {\n var pos = this.getNextFoldTo(row, column);\n if (!pos || pos.kind == \"inside\") return null;\n var fold = pos.fold;\n var folds = this.folds;\n var foldData = this.foldData;\n var i = folds.indexOf(fold);\n var foldBefore = folds[i - 1];\n this.end.row = foldBefore.end.row;\n this.end.column = foldBefore.end.column;\n folds = folds.splice(i, folds.length - i);\n var newFoldLine = new FoldLine(foldData, folds);\n foldData.splice(foldData.indexOf(this) + 1, 0, newFoldLine);\n return newFoldLine;\n };\n\n this.merge = function (foldLineNext) {\n var folds = foldLineNext.folds;\n\n for (var i = 0; i < folds.length; i++) {\n this.addFold(folds[i]);\n }\n\n var foldData = this.foldData;\n foldData.splice(foldData.indexOf(foldLineNext), 1);\n };\n\n this.toString = function () {\n var ret = [this.range.toString() + \": [\"];\n this.folds.forEach(function (fold) {\n ret.push(\" \" + fold.toString());\n });\n ret.push(\"]\");\n return ret.join(\"\\n\");\n };\n\n this.idxToPosition = function (idx) {\n var lastFoldEndColumn = 0;\n\n for (var i = 0; i < this.folds.length; i++) {\n var fold = this.folds[i];\n idx -= fold.start.column - lastFoldEndColumn;\n\n if (idx < 0) {\n return {\n row: fold.start.row,\n column: fold.start.column + idx\n };\n }\n\n idx -= fold.placeholder.length;\n\n if (idx < 0) {\n return fold.start;\n }\n\n lastFoldEndColumn = fold.end.column;\n }\n\n return {\n row: this.end.row,\n column: this.end.column + idx\n };\n };\n }).call(FoldLine.prototype);\n exports.FoldLine = FoldLine;\n});\nace.define(\"ace/range_list\", [\"require\", \"exports\", \"module\", \"ace/range\"], function (require, exports, module) {\n \"use strict\";\n\n var Range = require(\"./range\").Range;\n\n var comparePoints = Range.comparePoints;\n\n var RangeList = function RangeList() {\n this.ranges = [];\n this.$bias = 1;\n };\n\n (function () {\n this.comparePoints = comparePoints;\n\n this.pointIndex = function (pos, excludeEdges, startIndex) {\n var list = this.ranges;\n\n for (var i = startIndex || 0; i < list.length; i++) {\n var range = list[i];\n var cmpEnd = comparePoints(pos, range.end);\n if (cmpEnd > 0) continue;\n var cmpStart = comparePoints(pos, range.start);\n if (cmpEnd === 0) return excludeEdges && cmpStart !== 0 ? -i - 2 : i;\n if (cmpStart > 0 || cmpStart === 0 && !excludeEdges) return i;\n return -i - 1;\n }\n\n return -i - 1;\n };\n\n this.add = function (range) {\n var excludeEdges = !range.isEmpty();\n var startIndex = this.pointIndex(range.start, excludeEdges);\n if (startIndex < 0) startIndex = -startIndex - 1;\n var endIndex = this.pointIndex(range.end, excludeEdges, startIndex);\n if (endIndex < 0) endIndex = -endIndex - 1;else endIndex++;\n return this.ranges.splice(startIndex, endIndex - startIndex, range);\n };\n\n this.addList = function (list) {\n var removed = [];\n\n for (var i = list.length; i--;) {\n removed.push.apply(removed, this.add(list[i]));\n }\n\n return removed;\n };\n\n this.substractPoint = function (pos) {\n var i = this.pointIndex(pos);\n if (i >= 0) return this.ranges.splice(i, 1);\n };\n\n this.merge = function () {\n var removed = [];\n var list = this.ranges;\n list = list.sort(function (a, b) {\n return comparePoints(a.start, b.start);\n });\n var next = list[0],\n range;\n\n for (var i = 1; i < list.length; i++) {\n range = next;\n next = list[i];\n var cmp = comparePoints(range.end, next.start);\n if (cmp < 0) continue;\n if (cmp == 0 && !range.isEmpty() && !next.isEmpty()) continue;\n\n if (comparePoints(range.end, next.end) < 0) {\n range.end.row = next.end.row;\n range.end.column = next.end.column;\n }\n\n list.splice(i, 1);\n removed.push(next);\n next = range;\n i--;\n }\n\n this.ranges = list;\n return removed;\n };\n\n this.contains = function (row, column) {\n return this.pointIndex({\n row: row,\n column: column\n }) >= 0;\n };\n\n this.containsPoint = function (pos) {\n return this.pointIndex(pos) >= 0;\n };\n\n this.rangeAtPoint = function (pos) {\n var i = this.pointIndex(pos);\n if (i >= 0) return this.ranges[i];\n };\n\n this.clipRows = function (startRow, endRow) {\n var list = this.ranges;\n if (list[0].start.row > endRow || list[list.length - 1].start.row < startRow) return [];\n var startIndex = this.pointIndex({\n row: startRow,\n column: 0\n });\n if (startIndex < 0) startIndex = -startIndex - 1;\n var endIndex = this.pointIndex({\n row: endRow,\n column: 0\n }, startIndex);\n if (endIndex < 0) endIndex = -endIndex - 1;\n var clipped = [];\n\n for (var i = startIndex; i < endIndex; i++) {\n clipped.push(list[i]);\n }\n\n return clipped;\n };\n\n this.removeAll = function () {\n return this.ranges.splice(0, this.ranges.length);\n };\n\n this.attach = function (session) {\n if (this.session) this.detach();\n this.session = session;\n this.onChange = this.$onChange.bind(this);\n this.session.on('change', this.onChange);\n };\n\n this.detach = function () {\n if (!this.session) return;\n this.session.removeListener('change', this.onChange);\n this.session = null;\n };\n\n this.$onChange = function (delta) {\n var start = delta.start;\n var end = delta.end;\n var startRow = start.row;\n var endRow = end.row;\n var ranges = this.ranges;\n\n for (var i = 0, n = ranges.length; i < n; i++) {\n var r = ranges[i];\n if (r.end.row >= startRow) break;\n }\n\n if (delta.action == \"insert\") {\n var lineDif = endRow - startRow;\n var colDiff = -start.column + end.column;\n\n for (; i < n; i++) {\n var r = ranges[i];\n if (r.start.row > startRow) break;\n\n if (r.start.row == startRow && r.start.column >= start.column) {\n if (r.start.column == start.column && this.$bias <= 0) {} else {\n r.start.column += colDiff;\n r.start.row += lineDif;\n }\n }\n\n if (r.end.row == startRow && r.end.column >= start.column) {\n if (r.end.column == start.column && this.$bias < 0) {\n continue;\n }\n\n if (r.end.column == start.column && colDiff > 0 && i < n - 1) {\n if (r.end.column > r.start.column && r.end.column == ranges[i + 1].start.column) r.end.column -= colDiff;\n }\n\n r.end.column += colDiff;\n r.end.row += lineDif;\n }\n }\n } else {\n var lineDif = startRow - endRow;\n var colDiff = start.column - end.column;\n\n for (; i < n; i++) {\n var r = ranges[i];\n if (r.start.row > endRow) break;\n\n if (r.end.row < endRow && (startRow < r.end.row || startRow == r.end.row && start.column < r.end.column)) {\n r.end.row = startRow;\n r.end.column = start.column;\n } else if (r.end.row == endRow) {\n if (r.end.column <= end.column) {\n if (lineDif || r.end.column > start.column) {\n r.end.column = start.column;\n r.end.row = start.row;\n }\n } else {\n r.end.column += colDiff;\n r.end.row += lineDif;\n }\n } else if (r.end.row > endRow) {\n r.end.row += lineDif;\n }\n\n if (r.start.row < endRow && (startRow < r.start.row || startRow == r.start.row && start.column < r.start.column)) {\n r.start.row = startRow;\n r.start.column = start.column;\n } else if (r.start.row == endRow) {\n if (r.start.column <= end.column) {\n if (lineDif || r.start.column > start.column) {\n r.start.column = start.column;\n r.start.row = start.row;\n }\n } else {\n r.start.column += colDiff;\n r.start.row += lineDif;\n }\n } else if (r.start.row > endRow) {\n r.start.row += lineDif;\n }\n }\n }\n\n if (lineDif != 0 && i < n) {\n for (; i < n; i++) {\n var r = ranges[i];\n r.start.row += lineDif;\n r.end.row += lineDif;\n }\n }\n };\n }).call(RangeList.prototype);\n exports.RangeList = RangeList;\n});\nace.define(\"ace/edit_session/fold\", [\"require\", \"exports\", \"module\", \"ace/range_list\", \"ace/lib/oop\"], function (require, exports, module) {\n \"use strict\";\n\n var RangeList = require(\"../range_list\").RangeList;\n\n var oop = require(\"../lib/oop\");\n\n var Fold = exports.Fold = function (range, placeholder) {\n this.foldLine = null;\n this.placeholder = placeholder;\n this.range = range;\n this.start = range.start;\n this.end = range.end;\n this.sameRow = range.start.row == range.end.row;\n this.subFolds = this.ranges = [];\n };\n\n oop.inherits(Fold, RangeList);\n (function () {\n this.toString = function () {\n return '\"' + this.placeholder + '\" ' + this.range.toString();\n };\n\n this.setFoldLine = function (foldLine) {\n this.foldLine = foldLine;\n this.subFolds.forEach(function (fold) {\n fold.setFoldLine(foldLine);\n });\n };\n\n this.clone = function () {\n var range = this.range.clone();\n var fold = new Fold(range, this.placeholder);\n this.subFolds.forEach(function (subFold) {\n fold.subFolds.push(subFold.clone());\n });\n fold.collapseChildren = this.collapseChildren;\n return fold;\n };\n\n this.addSubFold = function (fold) {\n if (this.range.isEqual(fold)) return;\n consumeRange(fold, this.start);\n var row = fold.start.row,\n column = fold.start.column;\n\n for (var i = 0, cmp = -1; i < this.subFolds.length; i++) {\n cmp = this.subFolds[i].range.compare(row, column);\n if (cmp != 1) break;\n }\n\n var afterStart = this.subFolds[i];\n var firstConsumed = 0;\n\n if (cmp == 0) {\n if (afterStart.range.containsRange(fold)) return afterStart.addSubFold(fold);else firstConsumed = 1;\n }\n\n var row = fold.range.end.row,\n column = fold.range.end.column;\n\n for (var j = i, cmp = -1; j < this.subFolds.length; j++) {\n cmp = this.subFolds[j].range.compare(row, column);\n if (cmp != 1) break;\n }\n\n if (cmp == 0) j++;\n var consumedFolds = this.subFolds.splice(i, j - i, fold);\n var last = cmp == 0 ? consumedFolds.length - 1 : consumedFolds.length;\n\n for (var k = firstConsumed; k < last; k++) {\n fold.addSubFold(consumedFolds[k]);\n }\n\n fold.setFoldLine(this.foldLine);\n return fold;\n };\n\n this.restoreRange = function (range) {\n return restoreRange(range, this.start);\n };\n }).call(Fold.prototype);\n\n function consumePoint(point, anchor) {\n point.row -= anchor.row;\n if (point.row == 0) point.column -= anchor.column;\n }\n\n function consumeRange(range, anchor) {\n consumePoint(range.start, anchor);\n consumePoint(range.end, anchor);\n }\n\n function restorePoint(point, anchor) {\n if (point.row == 0) point.column += anchor.column;\n point.row += anchor.row;\n }\n\n function restoreRange(range, anchor) {\n restorePoint(range.start, anchor);\n restorePoint(range.end, anchor);\n }\n});\nace.define(\"ace/edit_session/folding\", [\"require\", \"exports\", \"module\", \"ace/range\", \"ace/edit_session/fold_line\", \"ace/edit_session/fold\", \"ace/token_iterator\"], function (require, exports, module) {\n \"use strict\";\n\n var Range = require(\"../range\").Range;\n\n var FoldLine = require(\"./fold_line\").FoldLine;\n\n var Fold = require(\"./fold\").Fold;\n\n var TokenIterator = require(\"../token_iterator\").TokenIterator;\n\n function Folding() {\n this.getFoldAt = function (row, column, side) {\n var foldLine = this.getFoldLine(row);\n if (!foldLine) return null;\n var folds = foldLine.folds;\n\n for (var i = 0; i < folds.length; i++) {\n var range = folds[i].range;\n\n if (range.contains(row, column)) {\n if (side == 1 && range.isEnd(row, column) && !range.isEmpty()) {\n continue;\n } else if (side == -1 && range.isStart(row, column) && !range.isEmpty()) {\n continue;\n }\n\n return folds[i];\n }\n }\n };\n\n this.getFoldsInRange = function (range) {\n var start = range.start;\n var end = range.end;\n var foldLines = this.$foldData;\n var foundFolds = [];\n start.column += 1;\n end.column -= 1;\n\n for (var i = 0; i < foldLines.length; i++) {\n var cmp = foldLines[i].range.compareRange(range);\n\n if (cmp == 2) {\n continue;\n } else if (cmp == -2) {\n break;\n }\n\n var folds = foldLines[i].folds;\n\n for (var j = 0; j < folds.length; j++) {\n var fold = folds[j];\n cmp = fold.range.compareRange(range);\n\n if (cmp == -2) {\n break;\n } else if (cmp == 2) {\n continue;\n } else if (cmp == 42) {\n break;\n }\n\n foundFolds.push(fold);\n }\n }\n\n start.column -= 1;\n end.column += 1;\n return foundFolds;\n };\n\n this.getFoldsInRangeList = function (ranges) {\n if (Array.isArray(ranges)) {\n var folds = [];\n ranges.forEach(function (range) {\n folds = folds.concat(this.getFoldsInRange(range));\n }, this);\n } else {\n var folds = this.getFoldsInRange(ranges);\n }\n\n return folds;\n };\n\n this.getAllFolds = function () {\n var folds = [];\n var foldLines = this.$foldData;\n\n for (var i = 0; i < foldLines.length; i++) {\n for (var j = 0; j < foldLines[i].folds.length; j++) {\n folds.push(foldLines[i].folds[j]);\n }\n }\n\n return folds;\n };\n\n this.getFoldStringAt = function (row, column, trim, foldLine) {\n foldLine = foldLine || this.getFoldLine(row);\n if (!foldLine) return null;\n var lastFold = {\n end: {\n column: 0\n }\n };\n var str, fold;\n\n for (var i = 0; i < foldLine.folds.length; i++) {\n fold = foldLine.folds[i];\n var cmp = fold.range.compareEnd(row, column);\n\n if (cmp == -1) {\n str = this.getLine(fold.start.row).substring(lastFold.end.column, fold.start.column);\n break;\n } else if (cmp === 0) {\n return null;\n }\n\n lastFold = fold;\n }\n\n if (!str) str = this.getLine(fold.start.row).substring(lastFold.end.column);\n if (trim == -1) return str.substring(0, column - lastFold.end.column);else if (trim == 1) return str.substring(column - lastFold.end.column);else return str;\n };\n\n this.getFoldLine = function (docRow, startFoldLine) {\n var foldData = this.$foldData;\n var i = 0;\n if (startFoldLine) i = foldData.indexOf(startFoldLine);\n if (i == -1) i = 0;\n\n for (i; i < foldData.length; i++) {\n var foldLine = foldData[i];\n\n if (foldLine.start.row <= docRow && foldLine.end.row >= docRow) {\n return foldLine;\n } else if (foldLine.end.row > docRow) {\n return null;\n }\n }\n\n return null;\n };\n\n this.getNextFoldLine = function (docRow, startFoldLine) {\n var foldData = this.$foldData;\n var i = 0;\n if (startFoldLine) i = foldData.indexOf(startFoldLine);\n if (i == -1) i = 0;\n\n for (i; i < foldData.length; i++) {\n var foldLine = foldData[i];\n\n if (foldLine.end.row >= docRow) {\n return foldLine;\n }\n }\n\n return null;\n };\n\n this.getFoldedRowCount = function (first, last) {\n var foldData = this.$foldData,\n rowCount = last - first + 1;\n\n for (var i = 0; i < foldData.length; i++) {\n var foldLine = foldData[i],\n end = foldLine.end.row,\n start = foldLine.start.row;\n\n if (end >= last) {\n if (start < last) {\n if (start >= first) rowCount -= last - start;else rowCount = 0; // in one fold\n }\n\n break;\n } else if (end >= first) {\n if (start >= first) // fold inside range\n rowCount -= end - start;else rowCount -= end - first + 1;\n }\n }\n\n return rowCount;\n };\n\n this.$addFoldLine = function (foldLine) {\n this.$foldData.push(foldLine);\n this.$foldData.sort(function (a, b) {\n return a.start.row - b.start.row;\n });\n return foldLine;\n };\n\n this.addFold = function (placeholder, range) {\n var foldData = this.$foldData;\n var added = false;\n var fold;\n if (placeholder instanceof Fold) fold = placeholder;else {\n fold = new Fold(range, placeholder);\n fold.collapseChildren = range.collapseChildren;\n }\n this.$clipRangeToDocument(fold.range);\n var startRow = fold.start.row;\n var startColumn = fold.start.column;\n var endRow = fold.end.row;\n var endColumn = fold.end.column;\n var startFold = this.getFoldAt(startRow, startColumn, 1);\n var endFold = this.getFoldAt(endRow, endColumn, -1);\n if (startFold && endFold == startFold) return startFold.addSubFold(fold);\n if (startFold && !startFold.range.isStart(startRow, startColumn)) this.removeFold(startFold);\n if (endFold && !endFold.range.isEnd(endRow, endColumn)) this.removeFold(endFold);\n var folds = this.getFoldsInRange(fold.range);\n\n if (folds.length > 0) {\n this.removeFolds(folds);\n\n if (!fold.collapseChildren) {\n folds.forEach(function (subFold) {\n fold.addSubFold(subFold);\n });\n }\n }\n\n for (var i = 0; i < foldData.length; i++) {\n var foldLine = foldData[i];\n\n if (endRow == foldLine.start.row) {\n foldLine.addFold(fold);\n added = true;\n break;\n } else if (startRow == foldLine.end.row) {\n foldLine.addFold(fold);\n added = true;\n\n if (!fold.sameRow) {\n var foldLineNext = foldData[i + 1];\n\n if (foldLineNext && foldLineNext.start.row == endRow) {\n foldLine.merge(foldLineNext);\n break;\n }\n }\n\n break;\n } else if (endRow <= foldLine.start.row) {\n break;\n }\n }\n\n if (!added) foldLine = this.$addFoldLine(new FoldLine(this.$foldData, fold));\n if (this.$useWrapMode) this.$updateWrapData(foldLine.start.row, foldLine.start.row);else this.$updateRowLengthCache(foldLine.start.row, foldLine.start.row);\n this.$modified = true;\n\n this._signal(\"changeFold\", {\n data: fold,\n action: \"add\"\n });\n\n return fold;\n };\n\n this.addFolds = function (folds) {\n folds.forEach(function (fold) {\n this.addFold(fold);\n }, this);\n };\n\n this.removeFold = function (fold) {\n var foldLine = fold.foldLine;\n var startRow = foldLine.start.row;\n var endRow = foldLine.end.row;\n var foldLines = this.$foldData;\n var folds = foldLine.folds;\n\n if (folds.length == 1) {\n foldLines.splice(foldLines.indexOf(foldLine), 1);\n } else if (foldLine.range.isEnd(fold.end.row, fold.end.column)) {\n folds.pop();\n foldLine.end.row = folds[folds.length - 1].end.row;\n foldLine.end.column = folds[folds.length - 1].end.column;\n } else if (foldLine.range.isStart(fold.start.row, fold.start.column)) {\n folds.shift();\n foldLine.start.row = folds[0].start.row;\n foldLine.start.column = folds[0].start.column;\n } else if (fold.sameRow) {\n folds.splice(folds.indexOf(fold), 1);\n } else {\n var newFoldLine = foldLine.split(fold.start.row, fold.start.column);\n folds = newFoldLine.folds;\n folds.shift();\n newFoldLine.start.row = folds[0].start.row;\n newFoldLine.start.column = folds[0].start.column;\n }\n\n if (!this.$updating) {\n if (this.$useWrapMode) this.$updateWrapData(startRow, endRow);else this.$updateRowLengthCache(startRow, endRow);\n }\n\n this.$modified = true;\n\n this._signal(\"changeFold\", {\n data: fold,\n action: \"remove\"\n });\n };\n\n this.removeFolds = function (folds) {\n var cloneFolds = [];\n\n for (var i = 0; i < folds.length; i++) {\n cloneFolds.push(folds[i]);\n }\n\n cloneFolds.forEach(function (fold) {\n this.removeFold(fold);\n }, this);\n this.$modified = true;\n };\n\n this.expandFold = function (fold) {\n this.removeFold(fold);\n fold.subFolds.forEach(function (subFold) {\n fold.restoreRange(subFold);\n this.addFold(subFold);\n }, this);\n\n if (fold.collapseChildren > 0) {\n this.foldAll(fold.start.row + 1, fold.end.row, fold.collapseChildren - 1);\n }\n\n fold.subFolds = [];\n };\n\n this.expandFolds = function (folds) {\n folds.forEach(function (fold) {\n this.expandFold(fold);\n }, this);\n };\n\n this.unfold = function (location, expandInner) {\n var range, folds;\n\n if (location == null) {\n range = new Range(0, 0, this.getLength(), 0);\n if (expandInner == null) expandInner = true;\n } else if (typeof location == \"number\") {\n range = new Range(location, 0, location, this.getLine(location).length);\n } else if (\"row\" in location) {\n range = Range.fromPoints(location, location);\n } else if (Array.isArray(location)) {\n folds = [];\n location.forEach(function (range) {\n folds = folds.concat(this.unfold(range));\n }, this);\n return folds;\n } else {\n range = location;\n }\n\n folds = this.getFoldsInRangeList(range);\n var outermostFolds = folds;\n\n while (folds.length == 1 && Range.comparePoints(folds[0].start, range.start) < 0 && Range.comparePoints(folds[0].end, range.end) > 0) {\n this.expandFolds(folds);\n folds = this.getFoldsInRangeList(range);\n }\n\n if (expandInner != false) {\n this.removeFolds(folds);\n } else {\n this.expandFolds(folds);\n }\n\n if (outermostFolds.length) return outermostFolds;\n };\n\n this.isRowFolded = function (docRow, startFoldRow) {\n return !!this.getFoldLine(docRow, startFoldRow);\n };\n\n this.getRowFoldEnd = function (docRow, startFoldRow) {\n var foldLine = this.getFoldLine(docRow, startFoldRow);\n return foldLine ? foldLine.end.row : docRow;\n };\n\n this.getRowFoldStart = function (docRow, startFoldRow) {\n var foldLine = this.getFoldLine(docRow, startFoldRow);\n return foldLine ? foldLine.start.row : docRow;\n };\n\n this.getFoldDisplayLine = function (foldLine, endRow, endColumn, startRow, startColumn) {\n if (startRow == null) startRow = foldLine.start.row;\n if (startColumn == null) startColumn = 0;\n if (endRow == null) endRow = foldLine.end.row;\n if (endColumn == null) endColumn = this.getLine(endRow).length;\n var doc = this.doc;\n var textLine = \"\";\n foldLine.walk(function (placeholder, row, column, lastColumn) {\n if (row < startRow) return;\n\n if (row == startRow) {\n if (column < startColumn) return;\n lastColumn = Math.max(startColumn, lastColumn);\n }\n\n if (placeholder != null) {\n textLine += placeholder;\n } else {\n textLine += doc.getLine(row).substring(lastColumn, column);\n }\n }, endRow, endColumn);\n return textLine;\n };\n\n this.getDisplayLine = function (row, endColumn, startRow, startColumn) {\n var foldLine = this.getFoldLine(row);\n\n if (!foldLine) {\n var line;\n line = this.doc.getLine(row);\n return line.substring(startColumn || 0, endColumn || line.length);\n } else {\n return this.getFoldDisplayLine(foldLine, row, endColumn, startRow, startColumn);\n }\n };\n\n this.$cloneFoldData = function () {\n var fd = [];\n fd = this.$foldData.map(function (foldLine) {\n var folds = foldLine.folds.map(function (fold) {\n return fold.clone();\n });\n return new FoldLine(fd, folds);\n });\n return fd;\n };\n\n this.toggleFold = function (tryToUnfold) {\n var selection = this.selection;\n var range = selection.getRange();\n var fold;\n var bracketPos;\n\n if (range.isEmpty()) {\n var cursor = range.start;\n fold = this.getFoldAt(cursor.row, cursor.column);\n\n if (fold) {\n this.expandFold(fold);\n return;\n } else if (bracketPos = this.findMatchingBracket(cursor)) {\n if (range.comparePoint(bracketPos) == 1) {\n range.end = bracketPos;\n } else {\n range.start = bracketPos;\n range.start.column++;\n range.end.column--;\n }\n } else if (bracketPos = this.findMatchingBracket({\n row: cursor.row,\n column: cursor.column + 1\n })) {\n if (range.comparePoint(bracketPos) == 1) range.end = bracketPos;else range.start = bracketPos;\n range.start.column++;\n } else {\n range = this.getCommentFoldRange(cursor.row, cursor.column) || range;\n }\n } else {\n var folds = this.getFoldsInRange(range);\n\n if (tryToUnfold && folds.length) {\n this.expandFolds(folds);\n return;\n } else if (folds.length == 1) {\n fold = folds[0];\n }\n }\n\n if (!fold) fold = this.getFoldAt(range.start.row, range.start.column);\n\n if (fold && fold.range.toString() == range.toString()) {\n this.expandFold(fold);\n return;\n }\n\n var placeholder = \"...\";\n\n if (!range.isMultiLine()) {\n placeholder = this.getTextRange(range);\n if (placeholder.length < 4) return;\n placeholder = placeholder.trim().substring(0, 2) + \"..\";\n }\n\n this.addFold(placeholder, range);\n };\n\n this.getCommentFoldRange = function (row, column, dir) {\n var iterator = new TokenIterator(this, row, column);\n var token = iterator.getCurrentToken();\n var type = token && token.type;\n\n if (token && /^comment|string/.test(type)) {\n type = type.match(/comment|string/)[0];\n if (type == \"comment\") type += \"|doc-start\";\n var re = new RegExp(type);\n var range = new Range();\n\n if (dir != 1) {\n do {\n token = iterator.stepBackward();\n } while (token && re.test(token.type));\n\n iterator.stepForward();\n }\n\n range.start.row = iterator.getCurrentTokenRow();\n range.start.column = iterator.getCurrentTokenColumn() + 2;\n iterator = new TokenIterator(this, row, column);\n\n if (dir != -1) {\n var lastRow = -1;\n\n do {\n token = iterator.stepForward();\n\n if (lastRow == -1) {\n var state = this.getState(iterator.$row);\n if (!re.test(state)) lastRow = iterator.$row;\n } else if (iterator.$row > lastRow) {\n break;\n }\n } while (token && re.test(token.type));\n\n token = iterator.stepBackward();\n } else token = iterator.getCurrentToken();\n\n range.end.row = iterator.getCurrentTokenRow();\n range.end.column = iterator.getCurrentTokenColumn() + token.value.length - 2;\n return range;\n }\n };\n\n this.foldAll = function (startRow, endRow, depth, test) {\n if (depth == undefined) depth = 100000; // JSON.stringify doesn't hanle Infinity\n\n var foldWidgets = this.foldWidgets;\n if (!foldWidgets) return; // mode doesn't support folding\n\n endRow = endRow || this.getLength();\n startRow = startRow || 0;\n\n for (var row = startRow; row < endRow; row++) {\n if (foldWidgets[row] == null) foldWidgets[row] = this.getFoldWidget(row);\n if (foldWidgets[row] != \"start\") continue;\n if (test && !test(row)) continue;\n var range = this.getFoldWidgetRange(row);\n\n if (range && range.isMultiLine() && range.end.row <= endRow && range.start.row >= startRow) {\n row = range.end.row;\n range.collapseChildren = depth;\n this.addFold(\"...\", range);\n }\n }\n };\n\n this.foldToLevel = function (level) {\n this.foldAll();\n\n while (level-- > 0) {\n this.unfold(null, false);\n }\n };\n\n this.foldAllComments = function () {\n var session = this;\n this.foldAll(null, null, null, function (row) {\n var tokens = session.getTokens(row);\n\n for (var i = 0; i < tokens.length; i++) {\n var token = tokens[i];\n if (token.type == \"text\" && /^\\s+$/.test(token.value)) continue;\n if (/comment/.test(token.type)) return true;\n return false;\n }\n });\n };\n\n this.$foldStyles = {\n \"manual\": 1,\n \"markbegin\": 1,\n \"markbeginend\": 1\n };\n this.$foldStyle = \"markbegin\";\n\n this.setFoldStyle = function (style) {\n if (!this.$foldStyles[style]) throw new Error(\"invalid fold style: \" + style + \"[\" + Object.keys(this.$foldStyles).join(\", \") + \"]\");\n if (this.$foldStyle == style) return;\n this.$foldStyle = style;\n if (style == \"manual\") this.unfold();\n var mode = this.$foldMode;\n this.$setFolding(null);\n this.$setFolding(mode);\n };\n\n this.$setFolding = function (foldMode) {\n if (this.$foldMode == foldMode) return;\n this.$foldMode = foldMode;\n this.off('change', this.$updateFoldWidgets);\n this.off('tokenizerUpdate', this.$tokenizerUpdateFoldWidgets);\n\n this._signal(\"changeAnnotation\");\n\n if (!foldMode || this.$foldStyle == \"manual\") {\n this.foldWidgets = null;\n return;\n }\n\n this.foldWidgets = [];\n this.getFoldWidget = foldMode.getFoldWidget.bind(foldMode, this, this.$foldStyle);\n this.getFoldWidgetRange = foldMode.getFoldWidgetRange.bind(foldMode, this, this.$foldStyle);\n this.$updateFoldWidgets = this.updateFoldWidgets.bind(this);\n this.$tokenizerUpdateFoldWidgets = this.tokenizerUpdateFoldWidgets.bind(this);\n this.on('change', this.$updateFoldWidgets);\n this.on('tokenizerUpdate', this.$tokenizerUpdateFoldWidgets);\n };\n\n this.getParentFoldRangeData = function (row, ignoreCurrent) {\n var fw = this.foldWidgets;\n if (!fw || ignoreCurrent && fw[row]) return {};\n var i = row - 1,\n firstRange;\n\n while (i >= 0) {\n var c = fw[i];\n if (c == null) c = fw[i] = this.getFoldWidget(i);\n\n if (c == \"start\") {\n var range = this.getFoldWidgetRange(i);\n if (!firstRange) firstRange = range;\n if (range && range.end.row >= row) break;\n }\n\n i--;\n }\n\n return {\n range: i !== -1 && range,\n firstRange: firstRange\n };\n };\n\n this.onFoldWidgetClick = function (row, e) {\n e = e.domEvent;\n var options = {\n children: e.shiftKey,\n all: e.ctrlKey || e.metaKey,\n siblings: e.altKey\n };\n var range = this.$toggleFoldWidget(row, options);\n\n if (!range) {\n var el = e.target || e.srcElement;\n if (el && /ace_fold-widget/.test(el.className)) el.className += \" ace_invalid\";\n }\n };\n\n this.$toggleFoldWidget = function (row, options) {\n if (!this.getFoldWidget) return;\n var type = this.getFoldWidget(row);\n var line = this.getLine(row);\n var dir = type === \"end\" ? -1 : 1;\n var fold = this.getFoldAt(row, dir === -1 ? 0 : line.length, dir);\n\n if (fold) {\n if (options.children || options.all) this.removeFold(fold);else this.expandFold(fold);\n return fold;\n }\n\n var range = this.getFoldWidgetRange(row, true);\n\n if (range && !range.isMultiLine()) {\n fold = this.getFoldAt(range.start.row, range.start.column, 1);\n\n if (fold && range.isEqual(fold.range)) {\n this.removeFold(fold);\n return fold;\n }\n }\n\n if (options.siblings) {\n var data = this.getParentFoldRangeData(row);\n\n if (data.range) {\n var startRow = data.range.start.row + 1;\n var endRow = data.range.end.row;\n }\n\n this.foldAll(startRow, endRow, options.all ? 10000 : 0);\n } else if (options.children) {\n endRow = range ? range.end.row : this.getLength();\n this.foldAll(row + 1, endRow, options.all ? 10000 : 0);\n } else if (range) {\n if (options.all) range.collapseChildren = 10000;\n this.addFold(\"...\", range);\n }\n\n return range;\n };\n\n this.toggleFoldWidget = function (toggleParent) {\n var row = this.selection.getCursor().row;\n row = this.getRowFoldStart(row);\n var range = this.$toggleFoldWidget(row, {});\n if (range) return;\n var data = this.getParentFoldRangeData(row, true);\n range = data.range || data.firstRange;\n\n if (range) {\n row = range.start.row;\n var fold = this.getFoldAt(row, this.getLine(row).length, 1);\n\n if (fold) {\n this.removeFold(fold);\n } else {\n this.addFold(\"...\", range);\n }\n }\n };\n\n this.updateFoldWidgets = function (delta) {\n var firstRow = delta.start.row;\n var len = delta.end.row - firstRow;\n\n if (len === 0) {\n this.foldWidgets[firstRow] = null;\n } else if (delta.action == 'remove') {\n this.foldWidgets.splice(firstRow, len + 1, null);\n } else {\n var args = Array(len + 1);\n args.unshift(firstRow, 1);\n this.foldWidgets.splice.apply(this.foldWidgets, args);\n }\n };\n\n this.tokenizerUpdateFoldWidgets = function (e) {\n var rows = e.data;\n\n if (rows.first != rows.last) {\n if (this.foldWidgets.length > rows.first) this.foldWidgets.splice(rows.first, this.foldWidgets.length);\n }\n };\n }\n\n exports.Folding = Folding;\n});\nace.define(\"ace/edit_session/bracket_match\", [\"require\", \"exports\", \"module\", \"ace/token_iterator\", \"ace/range\"], function (require, exports, module) {\n \"use strict\";\n\n var TokenIterator = require(\"../token_iterator\").TokenIterator;\n\n var Range = require(\"../range\").Range;\n\n function BracketMatch() {\n this.findMatchingBracket = function (position, chr) {\n if (position.column == 0) return null;\n var charBeforeCursor = chr || this.getLine(position.row).charAt(position.column - 1);\n if (charBeforeCursor == \"\") return null;\n var match = charBeforeCursor.match(/([\\(\\[\\{])|([\\)\\]\\}])/);\n if (!match) return null;\n if (match[1]) return this.$findClosingBracket(match[1], position);else return this.$findOpeningBracket(match[2], position);\n };\n\n this.getBracketRange = function (pos) {\n var line = this.getLine(pos.row);\n var before = true,\n range;\n var chr = line.charAt(pos.column - 1);\n var match = chr && chr.match(/([\\(\\[\\{])|([\\)\\]\\}])/);\n\n if (!match) {\n chr = line.charAt(pos.column);\n pos = {\n row: pos.row,\n column: pos.column + 1\n };\n match = chr && chr.match(/([\\(\\[\\{])|([\\)\\]\\}])/);\n before = false;\n }\n\n if (!match) return null;\n\n if (match[1]) {\n var bracketPos = this.$findClosingBracket(match[1], pos);\n if (!bracketPos) return null;\n range = Range.fromPoints(pos, bracketPos);\n\n if (!before) {\n range.end.column++;\n range.start.column--;\n }\n\n range.cursor = range.end;\n } else {\n var bracketPos = this.$findOpeningBracket(match[2], pos);\n if (!bracketPos) return null;\n range = Range.fromPoints(bracketPos, pos);\n\n if (!before) {\n range.start.column++;\n range.end.column--;\n }\n\n range.cursor = range.start;\n }\n\n return range;\n };\n\n this.getMatchingBracketRanges = function (pos) {\n var line = this.getLine(pos.row);\n var chr = line.charAt(pos.column - 1);\n var match = chr && chr.match(/([\\(\\[\\{])|([\\)\\]\\}])/);\n\n if (!match) {\n chr = line.charAt(pos.column);\n pos = {\n row: pos.row,\n column: pos.column + 1\n };\n match = chr && chr.match(/([\\(\\[\\{])|([\\)\\]\\}])/);\n }\n\n if (!match) return null;\n var startRange = new Range(pos.row, pos.column - 1, pos.row, pos.column);\n var bracketPos = match[1] ? this.$findClosingBracket(match[1], pos) : this.$findOpeningBracket(match[2], pos);\n if (!bracketPos) return [startRange];\n var endRange = new Range(bracketPos.row, bracketPos.column, bracketPos.row, bracketPos.column + 1);\n return [startRange, endRange];\n };\n\n this.$brackets = {\n \")\": \"(\",\n \"(\": \")\",\n \"]\": \"[\",\n \"[\": \"]\",\n \"{\": \"}\",\n \"}\": \"{\",\n \"<\": \">\",\n \">\": \"<\"\n };\n\n this.$findOpeningBracket = function (bracket, position, typeRe) {\n var openBracket = this.$brackets[bracket];\n var depth = 1;\n var iterator = new TokenIterator(this, position.row, position.column);\n var token = iterator.getCurrentToken();\n if (!token) token = iterator.stepForward();\n if (!token) return;\n\n if (!typeRe) {\n typeRe = new RegExp(\"(\\\\.?\" + token.type.replace(\".\", \"\\\\.\").replace(\"rparen\", \".paren\").replace(/\\b(?:end)\\b/, \"(?:start|begin|end)\") + \")+\");\n }\n\n var valueIndex = position.column - iterator.getCurrentTokenColumn() - 2;\n var value = token.value;\n\n while (true) {\n while (valueIndex >= 0) {\n var chr = value.charAt(valueIndex);\n\n if (chr == openBracket) {\n depth -= 1;\n\n if (depth == 0) {\n return {\n row: iterator.getCurrentTokenRow(),\n column: valueIndex + iterator.getCurrentTokenColumn()\n };\n }\n } else if (chr == bracket) {\n depth += 1;\n }\n\n valueIndex -= 1;\n }\n\n do {\n token = iterator.stepBackward();\n } while (token && !typeRe.test(token.type));\n\n if (token == null) break;\n value = token.value;\n valueIndex = value.length - 1;\n }\n\n return null;\n };\n\n this.$findClosingBracket = function (bracket, position, typeRe) {\n var closingBracket = this.$brackets[bracket];\n var depth = 1;\n var iterator = new TokenIterator(this, position.row, position.column);\n var token = iterator.getCurrentToken();\n if (!token) token = iterator.stepForward();\n if (!token) return;\n\n if (!typeRe) {\n typeRe = new RegExp(\"(\\\\.?\" + token.type.replace(\".\", \"\\\\.\").replace(\"lparen\", \".paren\").replace(/\\b(?:start|begin)\\b/, \"(?:start|begin|end)\") + \")+\");\n }\n\n var valueIndex = position.column - iterator.getCurrentTokenColumn();\n\n while (true) {\n var value = token.value;\n var valueLength = value.length;\n\n while (valueIndex < valueLength) {\n var chr = value.charAt(valueIndex);\n\n if (chr == closingBracket) {\n depth -= 1;\n\n if (depth == 0) {\n return {\n row: iterator.getCurrentTokenRow(),\n column: valueIndex + iterator.getCurrentTokenColumn()\n };\n }\n } else if (chr == bracket) {\n depth += 1;\n }\n\n valueIndex += 1;\n }\n\n do {\n token = iterator.stepForward();\n } while (token && !typeRe.test(token.type));\n\n if (token == null) break;\n valueIndex = 0;\n }\n\n return null;\n };\n }\n\n exports.BracketMatch = BracketMatch;\n});\nace.define(\"ace/edit_session\", [\"require\", \"exports\", \"module\", \"ace/lib/oop\", \"ace/lib/lang\", \"ace/bidihandler\", \"ace/config\", \"ace/lib/event_emitter\", \"ace/selection\", \"ace/mode/text\", \"ace/range\", \"ace/document\", \"ace/background_tokenizer\", \"ace/search_highlight\", \"ace/edit_session/folding\", \"ace/edit_session/bracket_match\"], function (require, exports, module) {\n \"use strict\";\n\n var oop = require(\"./lib/oop\");\n\n var lang = require(\"./lib/lang\");\n\n var BidiHandler = require(\"./bidihandler\").BidiHandler;\n\n var config = require(\"./config\");\n\n var EventEmitter = require(\"./lib/event_emitter\").EventEmitter;\n\n var Selection = require(\"./selection\").Selection;\n\n var TextMode = require(\"./mode/text\").Mode;\n\n var Range = require(\"./range\").Range;\n\n var Document = require(\"./document\").Document;\n\n var BackgroundTokenizer = require(\"./background_tokenizer\").BackgroundTokenizer;\n\n var SearchHighlight = require(\"./search_highlight\").SearchHighlight;\n\n var EditSession = function EditSession(text, mode) {\n this.$breakpoints = [];\n this.$decorations = [];\n this.$frontMarkers = {};\n this.$backMarkers = {};\n this.$markerId = 1;\n this.$undoSelect = true;\n this.$foldData = [];\n this.id = \"session\" + ++EditSession.$uid;\n\n this.$foldData.toString = function () {\n return this.join(\"\\n\");\n };\n\n this.on(\"changeFold\", this.onChangeFold.bind(this));\n this.$onChange = this.onChange.bind(this);\n if (_typeof(text) != \"object\" || !text.getLine) text = new Document(text);\n this.setDocument(text);\n this.selection = new Selection(this);\n this.$bidiHandler = new BidiHandler(this);\n config.resetOptions(this);\n this.setMode(mode);\n\n config._signal(\"session\", this);\n };\n\n EditSession.$uid = 0;\n (function () {\n oop.implement(this, EventEmitter);\n\n this.setDocument = function (doc) {\n if (this.doc) this.doc.off(\"change\", this.$onChange);\n this.doc = doc;\n doc.on(\"change\", this.$onChange);\n if (this.bgTokenizer) this.bgTokenizer.setDocument(this.getDocument());\n this.resetCaches();\n };\n\n this.getDocument = function () {\n return this.doc;\n };\n\n this.$resetRowCache = function (docRow) {\n if (!docRow) {\n this.$docRowCache = [];\n this.$screenRowCache = [];\n return;\n }\n\n var l = this.$docRowCache.length;\n var i = this.$getRowCacheIndex(this.$docRowCache, docRow) + 1;\n\n if (l > i) {\n this.$docRowCache.splice(i, l);\n this.$screenRowCache.splice(i, l);\n }\n };\n\n this.$getRowCacheIndex = function (cacheArray, val) {\n var low = 0;\n var hi = cacheArray.length - 1;\n\n while (low <= hi) {\n var mid = low + hi >> 1;\n var c = cacheArray[mid];\n if (val > c) low = mid + 1;else if (val < c) hi = mid - 1;else return mid;\n }\n\n return low - 1;\n };\n\n this.resetCaches = function () {\n this.$modified = true;\n this.$wrapData = [];\n this.$rowLengthCache = [];\n this.$resetRowCache(0);\n if (this.bgTokenizer) this.bgTokenizer.start(0);\n };\n\n this.onChangeFold = function (e) {\n var fold = e.data;\n this.$resetRowCache(fold.start.row);\n };\n\n this.onChange = function (delta) {\n this.$modified = true;\n this.$bidiHandler.onChange(delta);\n this.$resetRowCache(delta.start.row);\n var removedFolds = this.$updateInternalDataOnChange(delta);\n\n if (!this.$fromUndo && this.$undoManager) {\n if (removedFolds && removedFolds.length) {\n this.$undoManager.add({\n action: \"removeFolds\",\n folds: removedFolds\n }, this.mergeUndoDeltas);\n this.mergeUndoDeltas = true;\n }\n\n this.$undoManager.add(delta, this.mergeUndoDeltas);\n this.mergeUndoDeltas = true;\n this.$informUndoManager.schedule();\n }\n\n this.bgTokenizer && this.bgTokenizer.$updateOnChange(delta);\n\n this._signal(\"change\", delta);\n };\n\n this.setValue = function (text) {\n this.doc.setValue(text);\n this.selection.moveTo(0, 0);\n this.$resetRowCache(0);\n this.setUndoManager(this.$undoManager);\n this.getUndoManager().reset();\n };\n\n this.getValue = this.toString = function () {\n return this.doc.getValue();\n };\n\n this.getSelection = function () {\n return this.selection;\n };\n\n this.getState = function (row) {\n return this.bgTokenizer.getState(row);\n };\n\n this.getTokens = function (row) {\n return this.bgTokenizer.getTokens(row);\n };\n\n this.getTokenAt = function (row, column) {\n var tokens = this.bgTokenizer.getTokens(row);\n var token,\n c = 0;\n\n if (column == null) {\n var i = tokens.length - 1;\n c = this.getLine(row).length;\n } else {\n for (var i = 0; i < tokens.length; i++) {\n c += tokens[i].value.length;\n if (c >= column) break;\n }\n }\n\n token = tokens[i];\n if (!token) return null;\n token.index = i;\n token.start = c - token.value.length;\n return token;\n };\n\n this.setUndoManager = function (undoManager) {\n this.$undoManager = undoManager;\n if (this.$informUndoManager) this.$informUndoManager.cancel();\n\n if (undoManager) {\n var self = this;\n undoManager.addSession(this);\n\n this.$syncInformUndoManager = function () {\n self.$informUndoManager.cancel();\n self.mergeUndoDeltas = false;\n };\n\n this.$informUndoManager = lang.delayedCall(this.$syncInformUndoManager);\n } else {\n this.$syncInformUndoManager = function () {};\n }\n };\n\n this.markUndoGroup = function () {\n if (this.$syncInformUndoManager) this.$syncInformUndoManager();\n };\n\n this.$defaultUndoManager = {\n undo: function undo() {},\n redo: function redo() {},\n hasUndo: function hasUndo() {},\n hasRedo: function hasRedo() {},\n reset: function reset() {},\n add: function add() {},\n addSelection: function addSelection() {},\n startNewGroup: function startNewGroup() {},\n addSession: function addSession() {}\n };\n\n this.getUndoManager = function () {\n return this.$undoManager || this.$defaultUndoManager;\n };\n\n this.getTabString = function () {\n if (this.getUseSoftTabs()) {\n return lang.stringRepeat(\" \", this.getTabSize());\n } else {\n return \"\\t\";\n }\n };\n\n this.setUseSoftTabs = function (val) {\n this.setOption(\"useSoftTabs\", val);\n };\n\n this.getUseSoftTabs = function () {\n return this.$useSoftTabs && !this.$mode.$indentWithTabs;\n };\n\n this.setTabSize = function (tabSize) {\n this.setOption(\"tabSize\", tabSize);\n };\n\n this.getTabSize = function () {\n return this.$tabSize;\n };\n\n this.isTabStop = function (position) {\n return this.$useSoftTabs && position.column % this.$tabSize === 0;\n };\n\n this.setNavigateWithinSoftTabs = function (navigateWithinSoftTabs) {\n this.setOption(\"navigateWithinSoftTabs\", navigateWithinSoftTabs);\n };\n\n this.getNavigateWithinSoftTabs = function () {\n return this.$navigateWithinSoftTabs;\n };\n\n this.$overwrite = false;\n\n this.setOverwrite = function (overwrite) {\n this.setOption(\"overwrite\", overwrite);\n };\n\n this.getOverwrite = function () {\n return this.$overwrite;\n };\n\n this.toggleOverwrite = function () {\n this.setOverwrite(!this.$overwrite);\n };\n\n this.addGutterDecoration = function (row, className) {\n if (!this.$decorations[row]) this.$decorations[row] = \"\";\n this.$decorations[row] += \" \" + className;\n\n this._signal(\"changeBreakpoint\", {});\n };\n\n this.removeGutterDecoration = function (row, className) {\n this.$decorations[row] = (this.$decorations[row] || \"\").replace(\" \" + className, \"\");\n\n this._signal(\"changeBreakpoint\", {});\n };\n\n this.getBreakpoints = function () {\n return this.$breakpoints;\n };\n\n this.setBreakpoints = function (rows) {\n this.$breakpoints = [];\n\n for (var i = 0; i < rows.length; i++) {\n this.$breakpoints[rows[i]] = \"ace_breakpoint\";\n }\n\n this._signal(\"changeBreakpoint\", {});\n };\n\n this.clearBreakpoints = function () {\n this.$breakpoints = [];\n\n this._signal(\"changeBreakpoint\", {});\n };\n\n this.setBreakpoint = function (row, className) {\n if (className === undefined) className = \"ace_breakpoint\";\n if (className) this.$breakpoints[row] = className;else delete this.$breakpoints[row];\n\n this._signal(\"changeBreakpoint\", {});\n };\n\n this.clearBreakpoint = function (row) {\n delete this.$breakpoints[row];\n\n this._signal(\"changeBreakpoint\", {});\n };\n\n this.addMarker = function (range, clazz, type, inFront) {\n var id = this.$markerId++;\n var marker = {\n range: range,\n type: type || \"line\",\n renderer: typeof type == \"function\" ? type : null,\n clazz: clazz,\n inFront: !!inFront,\n id: id\n };\n\n if (inFront) {\n this.$frontMarkers[id] = marker;\n\n this._signal(\"changeFrontMarker\");\n } else {\n this.$backMarkers[id] = marker;\n\n this._signal(\"changeBackMarker\");\n }\n\n return id;\n };\n\n this.addDynamicMarker = function (marker, inFront) {\n if (!marker.update) return;\n var id = this.$markerId++;\n marker.id = id;\n marker.inFront = !!inFront;\n\n if (inFront) {\n this.$frontMarkers[id] = marker;\n\n this._signal(\"changeFrontMarker\");\n } else {\n this.$backMarkers[id] = marker;\n\n this._signal(\"changeBackMarker\");\n }\n\n return marker;\n };\n\n this.removeMarker = function (markerId) {\n var marker = this.$frontMarkers[markerId] || this.$backMarkers[markerId];\n if (!marker) return;\n var markers = marker.inFront ? this.$frontMarkers : this.$backMarkers;\n delete markers[markerId];\n\n this._signal(marker.inFront ? \"changeFrontMarker\" : \"changeBackMarker\");\n };\n\n this.getMarkers = function (inFront) {\n return inFront ? this.$frontMarkers : this.$backMarkers;\n };\n\n this.highlight = function (re) {\n if (!this.$searchHighlight) {\n var highlight = new SearchHighlight(null, \"ace_selected-word\", \"text\");\n this.$searchHighlight = this.addDynamicMarker(highlight);\n }\n\n this.$searchHighlight.setRegexp(re);\n };\n\n this.highlightLines = function (startRow, endRow, clazz, inFront) {\n if (typeof endRow != \"number\") {\n clazz = endRow;\n endRow = startRow;\n }\n\n if (!clazz) clazz = \"ace_step\";\n var range = new Range(startRow, 0, endRow, Infinity);\n range.id = this.addMarker(range, clazz, \"fullLine\", inFront);\n return range;\n };\n\n this.setAnnotations = function (annotations) {\n this.$annotations = annotations;\n\n this._signal(\"changeAnnotation\", {});\n };\n\n this.getAnnotations = function () {\n return this.$annotations || [];\n };\n\n this.clearAnnotations = function () {\n this.setAnnotations([]);\n };\n\n this.$detectNewLine = function (text) {\n var match = text.match(/^.*?(\\r?\\n)/m);\n\n if (match) {\n this.$autoNewLine = match[1];\n } else {\n this.$autoNewLine = \"\\n\";\n }\n };\n\n this.getWordRange = function (row, column) {\n var line = this.getLine(row);\n var inToken = false;\n if (column > 0) inToken = !!line.charAt(column - 1).match(this.tokenRe);\n if (!inToken) inToken = !!line.charAt(column).match(this.tokenRe);\n if (inToken) var re = this.tokenRe;else if (/^\\s+$/.test(line.slice(column - 1, column + 1))) var re = /\\s/;else var re = this.nonTokenRe;\n var start = column;\n\n if (start > 0) {\n do {\n start--;\n } while (start >= 0 && line.charAt(start).match(re));\n\n start++;\n }\n\n var end = column;\n\n while (end < line.length && line.charAt(end).match(re)) {\n end++;\n }\n\n return new Range(row, start, row, end);\n };\n\n this.getAWordRange = function (row, column) {\n var wordRange = this.getWordRange(row, column);\n var line = this.getLine(wordRange.end.row);\n\n while (line.charAt(wordRange.end.column).match(/[ \\t]/)) {\n wordRange.end.column += 1;\n }\n\n return wordRange;\n };\n\n this.setNewLineMode = function (newLineMode) {\n this.doc.setNewLineMode(newLineMode);\n };\n\n this.getNewLineMode = function () {\n return this.doc.getNewLineMode();\n };\n\n this.setUseWorker = function (useWorker) {\n this.setOption(\"useWorker\", useWorker);\n };\n\n this.getUseWorker = function () {\n return this.$useWorker;\n };\n\n this.onReloadTokenizer = function (e) {\n var rows = e.data;\n this.bgTokenizer.start(rows.first);\n\n this._signal(\"tokenizerUpdate\", e);\n };\n\n this.$modes = config.$modes;\n this.$mode = null;\n this.$modeId = null;\n\n this.setMode = function (mode, cb) {\n if (mode && _typeof(mode) === \"object\") {\n if (mode.getTokenizer) return this.$onChangeMode(mode);\n var options = mode;\n var path = options.path;\n } else {\n path = mode || \"ace/mode/text\";\n }\n\n if (!this.$modes[\"ace/mode/text\"]) this.$modes[\"ace/mode/text\"] = new TextMode();\n\n if (this.$modes[path] && !options) {\n this.$onChangeMode(this.$modes[path]);\n cb && cb();\n return;\n }\n\n this.$modeId = path;\n config.loadModule([\"mode\", path], function (m) {\n if (this.$modeId !== path) return cb && cb();\n\n if (this.$modes[path] && !options) {\n this.$onChangeMode(this.$modes[path]);\n } else if (m && m.Mode) {\n m = new m.Mode(options);\n\n if (!options) {\n this.$modes[path] = m;\n m.$id = path;\n }\n\n this.$onChangeMode(m);\n }\n\n cb && cb();\n }.bind(this));\n if (!this.$mode) this.$onChangeMode(this.$modes[\"ace/mode/text\"], true);\n };\n\n this.$onChangeMode = function (mode, $isPlaceholder) {\n if (!$isPlaceholder) this.$modeId = mode.$id;\n if (this.$mode === mode) return;\n var oldMode = this.$mode;\n this.$mode = mode;\n this.$stopWorker();\n if (this.$useWorker) this.$startWorker();\n var tokenizer = mode.getTokenizer();\n\n if (tokenizer.on !== undefined) {\n var onReloadTokenizer = this.onReloadTokenizer.bind(this);\n tokenizer.on(\"update\", onReloadTokenizer);\n }\n\n if (!this.bgTokenizer) {\n this.bgTokenizer = new BackgroundTokenizer(tokenizer);\n\n var _self = this;\n\n this.bgTokenizer.on(\"update\", function (e) {\n _self._signal(\"tokenizerUpdate\", e);\n });\n } else {\n this.bgTokenizer.setTokenizer(tokenizer);\n }\n\n this.bgTokenizer.setDocument(this.getDocument());\n this.tokenRe = mode.tokenRe;\n this.nonTokenRe = mode.nonTokenRe;\n\n if (!$isPlaceholder) {\n if (mode.attachToSession) mode.attachToSession(this);\n this.$options.wrapMethod.set.call(this, this.$wrapMethod);\n this.$setFolding(mode.foldingRules);\n this.bgTokenizer.start(0);\n\n this._emit(\"changeMode\", {\n oldMode: oldMode,\n mode: mode\n });\n }\n };\n\n this.$stopWorker = function () {\n if (this.$worker) {\n this.$worker.terminate();\n this.$worker = null;\n }\n };\n\n this.$startWorker = function () {\n try {\n this.$worker = this.$mode.createWorker(this);\n } catch (e) {\n config.warn(\"Could not load worker\", e);\n this.$worker = null;\n }\n };\n\n this.getMode = function () {\n return this.$mode;\n };\n\n this.$scrollTop = 0;\n\n this.setScrollTop = function (scrollTop) {\n if (this.$scrollTop === scrollTop || isNaN(scrollTop)) return;\n this.$scrollTop = scrollTop;\n\n this._signal(\"changeScrollTop\", scrollTop);\n };\n\n this.getScrollTop = function () {\n return this.$scrollTop;\n };\n\n this.$scrollLeft = 0;\n\n this.setScrollLeft = function (scrollLeft) {\n if (this.$scrollLeft === scrollLeft || isNaN(scrollLeft)) return;\n this.$scrollLeft = scrollLeft;\n\n this._signal(\"changeScrollLeft\", scrollLeft);\n };\n\n this.getScrollLeft = function () {\n return this.$scrollLeft;\n };\n\n this.getScreenWidth = function () {\n this.$computeWidth();\n if (this.lineWidgets) return Math.max(this.getLineWidgetMaxWidth(), this.screenWidth);\n return this.screenWidth;\n };\n\n this.getLineWidgetMaxWidth = function () {\n if (this.lineWidgetsWidth != null) return this.lineWidgetsWidth;\n var width = 0;\n this.lineWidgets.forEach(function (w) {\n if (w && w.screenWidth > width) width = w.screenWidth;\n });\n return this.lineWidgetWidth = width;\n };\n\n this.$computeWidth = function (force) {\n if (this.$modified || force) {\n this.$modified = false;\n if (this.$useWrapMode) return this.screenWidth = this.$wrapLimit;\n var lines = this.doc.getAllLines();\n var cache = this.$rowLengthCache;\n var longestScreenLine = 0;\n var foldIndex = 0;\n var foldLine = this.$foldData[foldIndex];\n var foldStart = foldLine ? foldLine.start.row : Infinity;\n var len = lines.length;\n\n for (var i = 0; i < len; i++) {\n if (i > foldStart) {\n i = foldLine.end.row + 1;\n if (i >= len) break;\n foldLine = this.$foldData[foldIndex++];\n foldStart = foldLine ? foldLine.start.row : Infinity;\n }\n\n if (cache[i] == null) cache[i] = this.$getStringScreenWidth(lines[i])[0];\n if (cache[i] > longestScreenLine) longestScreenLine = cache[i];\n }\n\n this.screenWidth = longestScreenLine;\n }\n };\n\n this.getLine = function (row) {\n return this.doc.getLine(row);\n };\n\n this.getLines = function (firstRow, lastRow) {\n return this.doc.getLines(firstRow, lastRow);\n };\n\n this.getLength = function () {\n return this.doc.getLength();\n };\n\n this.getTextRange = function (range) {\n return this.doc.getTextRange(range || this.selection.getRange());\n };\n\n this.insert = function (position, text) {\n return this.doc.insert(position, text);\n };\n\n this.remove = function (range) {\n return this.doc.remove(range);\n };\n\n this.removeFullLines = function (firstRow, lastRow) {\n return this.doc.removeFullLines(firstRow, lastRow);\n };\n\n this.undoChanges = function (deltas, dontSelect) {\n if (!deltas.length) return;\n this.$fromUndo = true;\n\n for (var i = deltas.length - 1; i != -1; i--) {\n var delta = deltas[i];\n\n if (delta.action == \"insert\" || delta.action == \"remove\") {\n this.doc.revertDelta(delta);\n } else if (delta.folds) {\n this.addFolds(delta.folds);\n }\n }\n\n if (!dontSelect && this.$undoSelect) {\n if (deltas.selectionBefore) this.selection.fromJSON(deltas.selectionBefore);else this.selection.setRange(this.$getUndoSelection(deltas, true));\n }\n\n this.$fromUndo = false;\n };\n\n this.redoChanges = function (deltas, dontSelect) {\n if (!deltas.length) return;\n this.$fromUndo = true;\n\n for (var i = 0; i < deltas.length; i++) {\n var delta = deltas[i];\n\n if (delta.action == \"insert\" || delta.action == \"remove\") {\n this.doc.$safeApplyDelta(delta);\n }\n }\n\n if (!dontSelect && this.$undoSelect) {\n if (deltas.selectionAfter) this.selection.fromJSON(deltas.selectionAfter);else this.selection.setRange(this.$getUndoSelection(deltas, false));\n }\n\n this.$fromUndo = false;\n };\n\n this.setUndoSelect = function (enable) {\n this.$undoSelect = enable;\n };\n\n this.$getUndoSelection = function (deltas, isUndo) {\n function isInsert(delta) {\n return isUndo ? delta.action !== \"insert\" : delta.action === \"insert\";\n }\n\n var range, point;\n\n for (var i = 0; i < deltas.length; i++) {\n var delta = deltas[i];\n if (!delta.start) continue; // skip folds\n\n if (!range) {\n if (isInsert(delta)) {\n range = Range.fromPoints(delta.start, delta.end);\n } else {\n range = Range.fromPoints(delta.start, delta.start);\n }\n\n continue;\n }\n\n if (isInsert(delta)) {\n point = delta.start;\n\n if (range.compare(point.row, point.column) == -1) {\n range.setStart(point);\n }\n\n point = delta.end;\n\n if (range.compare(point.row, point.column) == 1) {\n range.setEnd(point);\n }\n } else {\n point = delta.start;\n\n if (range.compare(point.row, point.column) == -1) {\n range = Range.fromPoints(delta.start, delta.start);\n }\n }\n }\n\n return range;\n };\n\n this.replace = function (range, text) {\n return this.doc.replace(range, text);\n };\n\n this.moveText = function (fromRange, toPosition, copy) {\n var text = this.getTextRange(fromRange);\n var folds = this.getFoldsInRange(fromRange);\n var toRange = Range.fromPoints(toPosition, toPosition);\n\n if (!copy) {\n this.remove(fromRange);\n var rowDiff = fromRange.start.row - fromRange.end.row;\n var collDiff = rowDiff ? -fromRange.end.column : fromRange.start.column - fromRange.end.column;\n\n if (collDiff) {\n if (toRange.start.row == fromRange.end.row && toRange.start.column > fromRange.end.column) toRange.start.column += collDiff;\n if (toRange.end.row == fromRange.end.row && toRange.end.column > fromRange.end.column) toRange.end.column += collDiff;\n }\n\n if (rowDiff && toRange.start.row >= fromRange.end.row) {\n toRange.start.row += rowDiff;\n toRange.end.row += rowDiff;\n }\n }\n\n toRange.end = this.insert(toRange.start, text);\n\n if (folds.length) {\n var oldStart = fromRange.start;\n var newStart = toRange.start;\n var rowDiff = newStart.row - oldStart.row;\n var collDiff = newStart.column - oldStart.column;\n this.addFolds(folds.map(function (x) {\n x = x.clone();\n if (x.start.row == oldStart.row) x.start.column += collDiff;\n if (x.end.row == oldStart.row) x.end.column += collDiff;\n x.start.row += rowDiff;\n x.end.row += rowDiff;\n return x;\n }));\n }\n\n return toRange;\n };\n\n this.indentRows = function (startRow, endRow, indentString) {\n indentString = indentString.replace(/\\t/g, this.getTabString());\n\n for (var row = startRow; row <= endRow; row++) {\n this.doc.insertInLine({\n row: row,\n column: 0\n }, indentString);\n }\n };\n\n this.outdentRows = function (range) {\n var rowRange = range.collapseRows();\n var deleteRange = new Range(0, 0, 0, 0);\n var size = this.getTabSize();\n\n for (var i = rowRange.start.row; i <= rowRange.end.row; ++i) {\n var line = this.getLine(i);\n deleteRange.start.row = i;\n deleteRange.end.row = i;\n\n for (var j = 0; j < size; ++j) {\n if (line.charAt(j) != ' ') break;\n }\n\n if (j < size && line.charAt(j) == '\\t') {\n deleteRange.start.column = j;\n deleteRange.end.column = j + 1;\n } else {\n deleteRange.start.column = 0;\n deleteRange.end.column = j;\n }\n\n this.remove(deleteRange);\n }\n };\n\n this.$moveLines = function (firstRow, lastRow, dir) {\n firstRow = this.getRowFoldStart(firstRow);\n lastRow = this.getRowFoldEnd(lastRow);\n\n if (dir < 0) {\n var row = this.getRowFoldStart(firstRow + dir);\n if (row < 0) return 0;\n var diff = row - firstRow;\n } else if (dir > 0) {\n var row = this.getRowFoldEnd(lastRow + dir);\n if (row > this.doc.getLength() - 1) return 0;\n var diff = row - lastRow;\n } else {\n firstRow = this.$clipRowToDocument(firstRow);\n lastRow = this.$clipRowToDocument(lastRow);\n var diff = lastRow - firstRow + 1;\n }\n\n var range = new Range(firstRow, 0, lastRow, Number.MAX_VALUE);\n var folds = this.getFoldsInRange(range).map(function (x) {\n x = x.clone();\n x.start.row += diff;\n x.end.row += diff;\n return x;\n });\n var lines = dir == 0 ? this.doc.getLines(firstRow, lastRow) : this.doc.removeFullLines(firstRow, lastRow);\n this.doc.insertFullLines(firstRow + diff, lines);\n folds.length && this.addFolds(folds);\n return diff;\n };\n\n this.moveLinesUp = function (firstRow, lastRow) {\n return this.$moveLines(firstRow, lastRow, -1);\n };\n\n this.moveLinesDown = function (firstRow, lastRow) {\n return this.$moveLines(firstRow, lastRow, 1);\n };\n\n this.duplicateLines = function (firstRow, lastRow) {\n return this.$moveLines(firstRow, lastRow, 0);\n };\n\n this.$clipRowToDocument = function (row) {\n return Math.max(0, Math.min(row, this.doc.getLength() - 1));\n };\n\n this.$clipColumnToRow = function (row, column) {\n if (column < 0) return 0;\n return Math.min(this.doc.getLine(row).length, column);\n };\n\n this.$clipPositionToDocument = function (row, column) {\n column = Math.max(0, column);\n\n if (row < 0) {\n row = 0;\n column = 0;\n } else {\n var len = this.doc.getLength();\n\n if (row >= len) {\n row = len - 1;\n column = this.doc.getLine(len - 1).length;\n } else {\n column = Math.min(this.doc.getLine(row).length, column);\n }\n }\n\n return {\n row: row,\n column: column\n };\n };\n\n this.$clipRangeToDocument = function (range) {\n if (range.start.row < 0) {\n range.start.row = 0;\n range.start.column = 0;\n } else {\n range.start.column = this.$clipColumnToRow(range.start.row, range.start.column);\n }\n\n var len = this.doc.getLength() - 1;\n\n if (range.end.row > len) {\n range.end.row = len;\n range.end.column = this.doc.getLine(len).length;\n } else {\n range.end.column = this.$clipColumnToRow(range.end.row, range.end.column);\n }\n\n return range;\n };\n\n this.$wrapLimit = 80;\n this.$useWrapMode = false;\n this.$wrapLimitRange = {\n min: null,\n max: null\n };\n\n this.setUseWrapMode = function (useWrapMode) {\n if (useWrapMode != this.$useWrapMode) {\n this.$useWrapMode = useWrapMode;\n this.$modified = true;\n this.$resetRowCache(0);\n\n if (useWrapMode) {\n var len = this.getLength();\n this.$wrapData = Array(len);\n this.$updateWrapData(0, len - 1);\n }\n\n this._signal(\"changeWrapMode\");\n }\n };\n\n this.getUseWrapMode = function () {\n return this.$useWrapMode;\n };\n\n this.setWrapLimitRange = function (min, max) {\n if (this.$wrapLimitRange.min !== min || this.$wrapLimitRange.max !== max) {\n this.$wrapLimitRange = {\n min: min,\n max: max\n };\n this.$modified = true;\n this.$bidiHandler.markAsDirty();\n if (this.$useWrapMode) this._signal(\"changeWrapMode\");\n }\n };\n\n this.adjustWrapLimit = function (desiredLimit, $printMargin) {\n var limits = this.$wrapLimitRange;\n if (limits.max < 0) limits = {\n min: $printMargin,\n max: $printMargin\n };\n var wrapLimit = this.$constrainWrapLimit(desiredLimit, limits.min, limits.max);\n\n if (wrapLimit != this.$wrapLimit && wrapLimit > 1) {\n this.$wrapLimit = wrapLimit;\n this.$modified = true;\n\n if (this.$useWrapMode) {\n this.$updateWrapData(0, this.getLength() - 1);\n this.$resetRowCache(0);\n\n this._signal(\"changeWrapLimit\");\n }\n\n return true;\n }\n\n return false;\n };\n\n this.$constrainWrapLimit = function (wrapLimit, min, max) {\n if (min) wrapLimit = Math.max(min, wrapLimit);\n if (max) wrapLimit = Math.min(max, wrapLimit);\n return wrapLimit;\n };\n\n this.getWrapLimit = function () {\n return this.$wrapLimit;\n };\n\n this.setWrapLimit = function (limit) {\n this.setWrapLimitRange(limit, limit);\n };\n\n this.getWrapLimitRange = function () {\n return {\n min: this.$wrapLimitRange.min,\n max: this.$wrapLimitRange.max\n };\n };\n\n this.$updateInternalDataOnChange = function (delta) {\n var useWrapMode = this.$useWrapMode;\n var action = delta.action;\n var start = delta.start;\n var end = delta.end;\n var firstRow = start.row;\n var lastRow = end.row;\n var len = lastRow - firstRow;\n var removedFolds = null;\n this.$updating = true;\n\n if (len != 0) {\n if (action === \"remove\") {\n this[useWrapMode ? \"$wrapData\" : \"$rowLengthCache\"].splice(firstRow, len);\n var foldLines = this.$foldData;\n removedFolds = this.getFoldsInRange(delta);\n this.removeFolds(removedFolds);\n var foldLine = this.getFoldLine(end.row);\n var idx = 0;\n\n if (foldLine) {\n foldLine.addRemoveChars(end.row, end.column, start.column - end.column);\n foldLine.shiftRow(-len);\n var foldLineBefore = this.getFoldLine(firstRow);\n\n if (foldLineBefore && foldLineBefore !== foldLine) {\n foldLineBefore.merge(foldLine);\n foldLine = foldLineBefore;\n }\n\n idx = foldLines.indexOf(foldLine) + 1;\n }\n\n for (idx; idx < foldLines.length; idx++) {\n var foldLine = foldLines[idx];\n\n if (foldLine.start.row >= end.row) {\n foldLine.shiftRow(-len);\n }\n }\n\n lastRow = firstRow;\n } else {\n var args = Array(len);\n args.unshift(firstRow, 0);\n var arr = useWrapMode ? this.$wrapData : this.$rowLengthCache;\n arr.splice.apply(arr, args);\n var foldLines = this.$foldData;\n var foldLine = this.getFoldLine(firstRow);\n var idx = 0;\n\n if (foldLine) {\n var cmp = foldLine.range.compareInside(start.row, start.column);\n\n if (cmp == 0) {\n foldLine = foldLine.split(start.row, start.column);\n\n if (foldLine) {\n foldLine.shiftRow(len);\n foldLine.addRemoveChars(lastRow, 0, end.column - start.column);\n }\n } else if (cmp == -1) {\n foldLine.addRemoveChars(firstRow, 0, end.column - start.column);\n foldLine.shiftRow(len);\n }\n\n idx = foldLines.indexOf(foldLine) + 1;\n }\n\n for (idx; idx < foldLines.length; idx++) {\n var foldLine = foldLines[idx];\n\n if (foldLine.start.row >= firstRow) {\n foldLine.shiftRow(len);\n }\n }\n }\n } else {\n len = Math.abs(delta.start.column - delta.end.column);\n\n if (action === \"remove\") {\n removedFolds = this.getFoldsInRange(delta);\n this.removeFolds(removedFolds);\n len = -len;\n }\n\n var foldLine = this.getFoldLine(firstRow);\n\n if (foldLine) {\n foldLine.addRemoveChars(firstRow, start.column, len);\n }\n }\n\n if (useWrapMode && this.$wrapData.length != this.doc.getLength()) {\n console.error(\"doc.getLength() and $wrapData.length have to be the same!\");\n }\n\n this.$updating = false;\n if (useWrapMode) this.$updateWrapData(firstRow, lastRow);else this.$updateRowLengthCache(firstRow, lastRow);\n return removedFolds;\n };\n\n this.$updateRowLengthCache = function (firstRow, lastRow, b) {\n this.$rowLengthCache[firstRow] = null;\n this.$rowLengthCache[lastRow] = null;\n };\n\n this.$updateWrapData = function (firstRow, lastRow) {\n var lines = this.doc.getAllLines();\n var tabSize = this.getTabSize();\n var wrapData = this.$wrapData;\n var wrapLimit = this.$wrapLimit;\n var tokens;\n var foldLine;\n var row = firstRow;\n lastRow = Math.min(lastRow, lines.length - 1);\n\n while (row <= lastRow) {\n foldLine = this.getFoldLine(row, foldLine);\n\n if (!foldLine) {\n tokens = this.$getDisplayTokens(lines[row]);\n wrapData[row] = this.$computeWrapSplits(tokens, wrapLimit, tabSize);\n row++;\n } else {\n tokens = [];\n foldLine.walk(function (placeholder, row, column, lastColumn) {\n var walkTokens;\n\n if (placeholder != null) {\n walkTokens = this.$getDisplayTokens(placeholder, tokens.length);\n walkTokens[0] = PLACEHOLDER_START;\n\n for (var i = 1; i < walkTokens.length; i++) {\n walkTokens[i] = PLACEHOLDER_BODY;\n }\n } else {\n walkTokens = this.$getDisplayTokens(lines[row].substring(lastColumn, column), tokens.length);\n }\n\n tokens = tokens.concat(walkTokens);\n }.bind(this), foldLine.end.row, lines[foldLine.end.row].length + 1);\n wrapData[foldLine.start.row] = this.$computeWrapSplits(tokens, wrapLimit, tabSize);\n row = foldLine.end.row + 1;\n }\n }\n };\n\n var CHAR = 1,\n CHAR_EXT = 2,\n PLACEHOLDER_START = 3,\n PLACEHOLDER_BODY = 4,\n PUNCTUATION = 9,\n SPACE = 10,\n TAB = 11,\n TAB_SPACE = 12;\n\n this.$computeWrapSplits = function (tokens, wrapLimit, tabSize) {\n if (tokens.length == 0) {\n return [];\n }\n\n var splits = [];\n var displayLength = tokens.length;\n var lastSplit = 0,\n lastDocSplit = 0;\n var isCode = this.$wrapAsCode;\n var indentedSoftWrap = this.$indentedSoftWrap;\n var maxIndent = wrapLimit <= Math.max(2 * tabSize, 8) || indentedSoftWrap === false ? 0 : Math.floor(wrapLimit / 2);\n\n function getWrapIndent() {\n var indentation = 0;\n if (maxIndent === 0) return indentation;\n\n if (indentedSoftWrap) {\n for (var i = 0; i < tokens.length; i++) {\n var token = tokens[i];\n if (token == SPACE) indentation += 1;else if (token == TAB) indentation += tabSize;else if (token == TAB_SPACE) continue;else break;\n }\n }\n\n if (isCode && indentedSoftWrap !== false) indentation += tabSize;\n return Math.min(indentation, maxIndent);\n }\n\n function addSplit(screenPos) {\n var len = screenPos - lastSplit;\n\n for (var i = lastSplit; i < screenPos; i++) {\n var ch = tokens[i];\n if (ch === 12 || ch === 2) len -= 1;\n }\n\n if (!splits.length) {\n indent = getWrapIndent();\n splits.indent = indent;\n }\n\n lastDocSplit += len;\n splits.push(lastDocSplit);\n lastSplit = screenPos;\n }\n\n var indent = 0;\n\n while (displayLength - lastSplit > wrapLimit - indent) {\n var split = lastSplit + wrapLimit - indent;\n\n if (tokens[split - 1] >= SPACE && tokens[split] >= SPACE) {\n addSplit(split);\n continue;\n }\n\n if (tokens[split] == PLACEHOLDER_START || tokens[split] == PLACEHOLDER_BODY) {\n for (split; split != lastSplit - 1; split--) {\n if (tokens[split] == PLACEHOLDER_START) {\n break;\n }\n }\n\n if (split > lastSplit) {\n addSplit(split);\n continue;\n }\n\n split = lastSplit + wrapLimit;\n\n for (split; split < tokens.length; split++) {\n if (tokens[split] != PLACEHOLDER_BODY) {\n break;\n }\n }\n\n if (split == tokens.length) {\n break; // Breaks the while-loop.\n }\n\n addSplit(split);\n continue;\n }\n\n var minSplit = Math.max(split - (wrapLimit - (wrapLimit >> 2)), lastSplit - 1);\n\n while (split > minSplit && tokens[split] < PLACEHOLDER_START) {\n split--;\n }\n\n if (isCode) {\n while (split > minSplit && tokens[split] < PLACEHOLDER_START) {\n split--;\n }\n\n while (split > minSplit && tokens[split] == PUNCTUATION) {\n split--;\n }\n } else {\n while (split > minSplit && tokens[split] < SPACE) {\n split--;\n }\n }\n\n if (split > minSplit) {\n addSplit(++split);\n continue;\n }\n\n split = lastSplit + wrapLimit;\n if (tokens[split] == CHAR_EXT) split--;\n addSplit(split - indent);\n }\n\n return splits;\n };\n\n this.$getDisplayTokens = function (str, offset) {\n var arr = [];\n var tabSize;\n offset = offset || 0;\n\n for (var i = 0; i < str.length; i++) {\n var c = str.charCodeAt(i);\n\n if (c == 9) {\n tabSize = this.getScreenTabSize(arr.length + offset);\n arr.push(TAB);\n\n for (var n = 1; n < tabSize; n++) {\n arr.push(TAB_SPACE);\n }\n } else if (c == 32) {\n arr.push(SPACE);\n } else if (c > 39 && c < 48 || c > 57 && c < 64) {\n arr.push(PUNCTUATION);\n } else if (c >= 0x1100 && isFullWidth(c)) {\n arr.push(CHAR, CHAR_EXT);\n } else {\n arr.push(CHAR);\n }\n }\n\n return arr;\n };\n\n this.$getStringScreenWidth = function (str, maxScreenColumn, screenColumn) {\n if (maxScreenColumn == 0) return [0, 0];\n if (maxScreenColumn == null) maxScreenColumn = Infinity;\n screenColumn = screenColumn || 0;\n var c, column;\n\n for (column = 0; column < str.length; column++) {\n c = str.charCodeAt(column);\n\n if (c == 9) {\n screenColumn += this.getScreenTabSize(screenColumn);\n } else if (c >= 0x1100 && isFullWidth(c)) {\n screenColumn += 2;\n } else {\n screenColumn += 1;\n }\n\n if (screenColumn > maxScreenColumn) {\n break;\n }\n }\n\n return [screenColumn, column];\n };\n\n this.lineWidgets = null;\n\n this.getRowLength = function (row) {\n var h = 1;\n if (this.lineWidgets) h += this.lineWidgets[row] && this.lineWidgets[row].rowCount || 0;\n if (!this.$useWrapMode || !this.$wrapData[row]) return h;else return this.$wrapData[row].length + h;\n };\n\n this.getRowLineCount = function (row) {\n if (!this.$useWrapMode || !this.$wrapData[row]) {\n return 1;\n } else {\n return this.$wrapData[row].length + 1;\n }\n };\n\n this.getRowWrapIndent = function (screenRow) {\n if (this.$useWrapMode) {\n var pos = this.screenToDocumentPosition(screenRow, Number.MAX_VALUE);\n var splits = this.$wrapData[pos.row];\n return splits.length && splits[0] < pos.column ? splits.indent : 0;\n } else {\n return 0;\n }\n };\n\n this.getScreenLastRowColumn = function (screenRow) {\n var pos = this.screenToDocumentPosition(screenRow, Number.MAX_VALUE);\n return this.documentToScreenColumn(pos.row, pos.column);\n };\n\n this.getDocumentLastRowColumn = function (docRow, docColumn) {\n var screenRow = this.documentToScreenRow(docRow, docColumn);\n return this.getScreenLastRowColumn(screenRow);\n };\n\n this.getDocumentLastRowColumnPosition = function (docRow, docColumn) {\n var screenRow = this.documentToScreenRow(docRow, docColumn);\n return this.screenToDocumentPosition(screenRow, Number.MAX_VALUE / 10);\n };\n\n this.getRowSplitData = function (row) {\n if (!this.$useWrapMode) {\n return undefined;\n } else {\n return this.$wrapData[row];\n }\n };\n\n this.getScreenTabSize = function (screenColumn) {\n return this.$tabSize - (screenColumn % this.$tabSize | 0);\n };\n\n this.screenToDocumentRow = function (screenRow, screenColumn) {\n return this.screenToDocumentPosition(screenRow, screenColumn).row;\n };\n\n this.screenToDocumentColumn = function (screenRow, screenColumn) {\n return this.screenToDocumentPosition(screenRow, screenColumn).column;\n };\n\n this.screenToDocumentPosition = function (screenRow, screenColumn, offsetX) {\n if (screenRow < 0) return {\n row: 0,\n column: 0\n };\n var line;\n var docRow = 0;\n var docColumn = 0;\n var column;\n var row = 0;\n var rowLength = 0;\n var rowCache = this.$screenRowCache;\n var i = this.$getRowCacheIndex(rowCache, screenRow);\n var l = rowCache.length;\n\n if (l && i >= 0) {\n var row = rowCache[i];\n var docRow = this.$docRowCache[i];\n var doCache = screenRow > rowCache[l - 1];\n } else {\n var doCache = !l;\n }\n\n var maxRow = this.getLength() - 1;\n var foldLine = this.getNextFoldLine(docRow);\n var foldStart = foldLine ? foldLine.start.row : Infinity;\n\n while (row <= screenRow) {\n rowLength = this.getRowLength(docRow);\n\n if (row + rowLength > screenRow || docRow >= maxRow) {\n break;\n } else {\n row += rowLength;\n docRow++;\n\n if (docRow > foldStart) {\n docRow = foldLine.end.row + 1;\n foldLine = this.getNextFoldLine(docRow, foldLine);\n foldStart = foldLine ? foldLine.start.row : Infinity;\n }\n }\n\n if (doCache) {\n this.$docRowCache.push(docRow);\n this.$screenRowCache.push(row);\n }\n }\n\n if (foldLine && foldLine.start.row <= docRow) {\n line = this.getFoldDisplayLine(foldLine);\n docRow = foldLine.start.row;\n } else if (row + rowLength <= screenRow || docRow > maxRow) {\n return {\n row: maxRow,\n column: this.getLine(maxRow).length\n };\n } else {\n line = this.getLine(docRow);\n foldLine = null;\n }\n\n var wrapIndent = 0,\n splitIndex = Math.floor(screenRow - row);\n\n if (this.$useWrapMode) {\n var splits = this.$wrapData[docRow];\n\n if (splits) {\n column = splits[splitIndex];\n\n if (splitIndex > 0 && splits.length) {\n wrapIndent = splits.indent;\n docColumn = splits[splitIndex - 1] || splits[splits.length - 1];\n line = line.substring(docColumn);\n }\n }\n }\n\n if (offsetX !== undefined && this.$bidiHandler.isBidiRow(row + splitIndex, docRow, splitIndex)) screenColumn = this.$bidiHandler.offsetToCol(offsetX);\n docColumn += this.$getStringScreenWidth(line, screenColumn - wrapIndent)[1];\n if (this.$useWrapMode && docColumn >= column) docColumn = column - 1;\n if (foldLine) return foldLine.idxToPosition(docColumn);\n return {\n row: docRow,\n column: docColumn\n };\n };\n\n this.documentToScreenPosition = function (docRow, docColumn) {\n if (typeof docColumn === \"undefined\") var pos = this.$clipPositionToDocument(docRow.row, docRow.column);else pos = this.$clipPositionToDocument(docRow, docColumn);\n docRow = pos.row;\n docColumn = pos.column;\n var screenRow = 0;\n var foldStartRow = null;\n var fold = null;\n fold = this.getFoldAt(docRow, docColumn, 1);\n\n if (fold) {\n docRow = fold.start.row;\n docColumn = fold.start.column;\n }\n\n var rowEnd,\n row = 0;\n var rowCache = this.$docRowCache;\n var i = this.$getRowCacheIndex(rowCache, docRow);\n var l = rowCache.length;\n\n if (l && i >= 0) {\n var row = rowCache[i];\n var screenRow = this.$screenRowCache[i];\n var doCache = docRow > rowCache[l - 1];\n } else {\n var doCache = !l;\n }\n\n var foldLine = this.getNextFoldLine(row);\n var foldStart = foldLine ? foldLine.start.row : Infinity;\n\n while (row < docRow) {\n if (row >= foldStart) {\n rowEnd = foldLine.end.row + 1;\n if (rowEnd > docRow) break;\n foldLine = this.getNextFoldLine(rowEnd, foldLine);\n foldStart = foldLine ? foldLine.start.row : Infinity;\n } else {\n rowEnd = row + 1;\n }\n\n screenRow += this.getRowLength(row);\n row = rowEnd;\n\n if (doCache) {\n this.$docRowCache.push(row);\n this.$screenRowCache.push(screenRow);\n }\n }\n\n var textLine = \"\";\n\n if (foldLine && row >= foldStart) {\n textLine = this.getFoldDisplayLine(foldLine, docRow, docColumn);\n foldStartRow = foldLine.start.row;\n } else {\n textLine = this.getLine(docRow).substring(0, docColumn);\n foldStartRow = docRow;\n }\n\n var wrapIndent = 0;\n\n if (this.$useWrapMode) {\n var wrapRow = this.$wrapData[foldStartRow];\n\n if (wrapRow) {\n var screenRowOffset = 0;\n\n while (textLine.length >= wrapRow[screenRowOffset]) {\n screenRow++;\n screenRowOffset++;\n }\n\n textLine = textLine.substring(wrapRow[screenRowOffset - 1] || 0, textLine.length);\n wrapIndent = screenRowOffset > 0 ? wrapRow.indent : 0;\n }\n }\n\n if (this.lineWidgets && this.lineWidgets[row] && this.lineWidgets[row].rowsAbove) screenRow += this.lineWidgets[row].rowsAbove;\n return {\n row: screenRow,\n column: wrapIndent + this.$getStringScreenWidth(textLine)[0]\n };\n };\n\n this.documentToScreenColumn = function (row, docColumn) {\n return this.documentToScreenPosition(row, docColumn).column;\n };\n\n this.documentToScreenRow = function (docRow, docColumn) {\n return this.documentToScreenPosition(docRow, docColumn).row;\n };\n\n this.getScreenLength = function () {\n var screenRows = 0;\n var fold = null;\n\n if (!this.$useWrapMode) {\n screenRows = this.getLength();\n var foldData = this.$foldData;\n\n for (var i = 0; i < foldData.length; i++) {\n fold = foldData[i];\n screenRows -= fold.end.row - fold.start.row;\n }\n } else {\n var lastRow = this.$wrapData.length;\n var row = 0,\n i = 0;\n var fold = this.$foldData[i++];\n var foldStart = fold ? fold.start.row : Infinity;\n\n while (row < lastRow) {\n var splits = this.$wrapData[row];\n screenRows += splits ? splits.length + 1 : 1;\n row++;\n\n if (row > foldStart) {\n row = fold.end.row + 1;\n fold = this.$foldData[i++];\n foldStart = fold ? fold.start.row : Infinity;\n }\n }\n }\n\n if (this.lineWidgets) screenRows += this.$getWidgetScreenLength();\n return screenRows;\n };\n\n this.$setFontMetrics = function (fm) {\n if (!this.$enableVarChar) return;\n\n this.$getStringScreenWidth = function (str, maxScreenColumn, screenColumn) {\n if (maxScreenColumn === 0) return [0, 0];\n if (!maxScreenColumn) maxScreenColumn = Infinity;\n screenColumn = screenColumn || 0;\n var c, column;\n\n for (column = 0; column < str.length; column++) {\n c = str.charAt(column);\n\n if (c === \"\\t\") {\n screenColumn += this.getScreenTabSize(screenColumn);\n } else {\n screenColumn += fm.getCharacterWidth(c);\n }\n\n if (screenColumn > maxScreenColumn) {\n break;\n }\n }\n\n return [screenColumn, column];\n };\n };\n\n this.destroy = function () {\n if (this.bgTokenizer) {\n this.bgTokenizer.setDocument(null);\n this.bgTokenizer = null;\n }\n\n this.$stopWorker();\n this.removeAllListeners();\n\n if (this.doc) {\n this.doc.off(\"change\", this.$onChange);\n }\n\n this.selection.detach();\n };\n\n this.isFullWidth = isFullWidth;\n\n function isFullWidth(c) {\n if (c < 0x1100) return false;\n return c >= 0x1100 && c <= 0x115F || c >= 0x11A3 && c <= 0x11A7 || c >= 0x11FA && c <= 0x11FF || c >= 0x2329 && c <= 0x232A || c >= 0x2E80 && c <= 0x2E99 || c >= 0x2E9B && c <= 0x2EF3 || c >= 0x2F00 && c <= 0x2FD5 || c >= 0x2FF0 && c <= 0x2FFB || c >= 0x3000 && c <= 0x303E || c >= 0x3041 && c <= 0x3096 || c >= 0x3099 && c <= 0x30FF || c >= 0x3105 && c <= 0x312D || c >= 0x3131 && c <= 0x318E || c >= 0x3190 && c <= 0x31BA || c >= 0x31C0 && c <= 0x31E3 || c >= 0x31F0 && c <= 0x321E || c >= 0x3220 && c <= 0x3247 || c >= 0x3250 && c <= 0x32FE || c >= 0x3300 && c <= 0x4DBF || c >= 0x4E00 && c <= 0xA48C || c >= 0xA490 && c <= 0xA4C6 || c >= 0xA960 && c <= 0xA97C || c >= 0xAC00 && c <= 0xD7A3 || c >= 0xD7B0 && c <= 0xD7C6 || c >= 0xD7CB && c <= 0xD7FB || c >= 0xF900 && c <= 0xFAFF || c >= 0xFE10 && c <= 0xFE19 || c >= 0xFE30 && c <= 0xFE52 || c >= 0xFE54 && c <= 0xFE66 || c >= 0xFE68 && c <= 0xFE6B || c >= 0xFF01 && c <= 0xFF60 || c >= 0xFFE0 && c <= 0xFFE6;\n }\n }).call(EditSession.prototype);\n\n require(\"./edit_session/folding\").Folding.call(EditSession.prototype);\n\n require(\"./edit_session/bracket_match\").BracketMatch.call(EditSession.prototype);\n\n config.defineOptions(EditSession.prototype, \"session\", {\n wrap: {\n set: function set(value) {\n if (!value || value == \"off\") value = false;else if (value == \"free\") value = true;else if (value == \"printMargin\") value = -1;else if (typeof value == \"string\") value = parseInt(value, 10) || false;\n if (this.$wrap == value) return;\n this.$wrap = value;\n\n if (!value) {\n this.setUseWrapMode(false);\n } else {\n var col = typeof value == \"number\" ? value : null;\n this.setWrapLimitRange(col, col);\n this.setUseWrapMode(true);\n }\n },\n get: function get() {\n if (this.getUseWrapMode()) {\n if (this.$wrap == -1) return \"printMargin\";\n if (!this.getWrapLimitRange().min) return \"free\";\n return this.$wrap;\n }\n\n return \"off\";\n },\n handlesSet: true\n },\n wrapMethod: {\n set: function set(val) {\n val = val == \"auto\" ? this.$mode.type != \"text\" : val != \"text\";\n\n if (val != this.$wrapAsCode) {\n this.$wrapAsCode = val;\n\n if (this.$useWrapMode) {\n this.$useWrapMode = false;\n this.setUseWrapMode(true);\n }\n }\n },\n initialValue: \"auto\"\n },\n indentedSoftWrap: {\n set: function set() {\n if (this.$useWrapMode) {\n this.$useWrapMode = false;\n this.setUseWrapMode(true);\n }\n },\n initialValue: true\n },\n firstLineNumber: {\n set: function set() {\n this._signal(\"changeBreakpoint\");\n },\n initialValue: 1\n },\n useWorker: {\n set: function set(useWorker) {\n this.$useWorker = useWorker;\n this.$stopWorker();\n if (useWorker) this.$startWorker();\n },\n initialValue: true\n },\n useSoftTabs: {\n initialValue: true\n },\n tabSize: {\n set: function set(tabSize) {\n tabSize = parseInt(tabSize);\n\n if (tabSize > 0 && this.$tabSize !== tabSize) {\n this.$modified = true;\n this.$rowLengthCache = [];\n this.$tabSize = tabSize;\n\n this._signal(\"changeTabSize\");\n }\n },\n initialValue: 4,\n handlesSet: true\n },\n navigateWithinSoftTabs: {\n initialValue: false\n },\n foldStyle: {\n set: function set(val) {\n this.setFoldStyle(val);\n },\n handlesSet: true\n },\n overwrite: {\n set: function set(val) {\n this._signal(\"changeOverwrite\");\n },\n initialValue: false\n },\n newLineMode: {\n set: function set(val) {\n this.doc.setNewLineMode(val);\n },\n get: function get() {\n return this.doc.getNewLineMode();\n },\n handlesSet: true\n },\n mode: {\n set: function set(val) {\n this.setMode(val);\n },\n get: function get() {\n return this.$modeId;\n },\n handlesSet: true\n }\n });\n exports.EditSession = EditSession;\n});\nace.define(\"ace/search\", [\"require\", \"exports\", \"module\", \"ace/lib/lang\", \"ace/lib/oop\", \"ace/range\"], function (require, exports, module) {\n \"use strict\";\n\n var lang = require(\"./lib/lang\");\n\n var oop = require(\"./lib/oop\");\n\n var Range = require(\"./range\").Range;\n\n var Search = function Search() {\n this.$options = {};\n };\n\n (function () {\n this.set = function (options) {\n oop.mixin(this.$options, options);\n return this;\n };\n\n this.getOptions = function () {\n return lang.copyObject(this.$options);\n };\n\n this.setOptions = function (options) {\n this.$options = options;\n };\n\n this.find = function (session) {\n var options = this.$options;\n var iterator = this.$matchIterator(session, options);\n if (!iterator) return false;\n var firstRange = null;\n iterator.forEach(function (sr, sc, er, ec) {\n firstRange = new Range(sr, sc, er, ec);\n\n if (sc == ec && options.start && options.start.start && options.skipCurrent != false && firstRange.isEqual(options.start)) {\n firstRange = null;\n return false;\n }\n\n return true;\n });\n return firstRange;\n };\n\n this.findAll = function (session) {\n var options = this.$options;\n if (!options.needle) return [];\n this.$assembleRegExp(options);\n var range = options.range;\n var lines = range ? session.getLines(range.start.row, range.end.row) : session.doc.getAllLines();\n var ranges = [];\n var re = options.re;\n\n if (options.$isMultiLine) {\n var len = re.length;\n var maxRow = lines.length - len;\n var prevRange;\n\n outer: for (var row = re.offset || 0; row <= maxRow; row++) {\n for (var j = 0; j < len; j++) {\n if (lines[row + j].search(re[j]) == -1) continue outer;\n }\n\n var startLine = lines[row];\n var line = lines[row + len - 1];\n var startIndex = startLine.length - startLine.match(re[0])[0].length;\n var endIndex = line.match(re[len - 1])[0].length;\n\n if (prevRange && prevRange.end.row === row && prevRange.end.column > startIndex) {\n continue;\n }\n\n ranges.push(prevRange = new Range(row, startIndex, row + len - 1, endIndex));\n if (len > 2) row = row + len - 2;\n }\n } else {\n for (var i = 0; i < lines.length; i++) {\n var matches = lang.getMatchOffsets(lines[i], re);\n\n for (var j = 0; j < matches.length; j++) {\n var match = matches[j];\n ranges.push(new Range(i, match.offset, i, match.offset + match.length));\n }\n }\n }\n\n if (range) {\n var startColumn = range.start.column;\n var endColumn = range.start.column;\n var i = 0,\n j = ranges.length - 1;\n\n while (i < j && ranges[i].start.column < startColumn && ranges[i].start.row == range.start.row) {\n i++;\n }\n\n while (i < j && ranges[j].end.column > endColumn && ranges[j].end.row == range.end.row) {\n j--;\n }\n\n ranges = ranges.slice(i, j + 1);\n\n for (i = 0, j = ranges.length; i < j; i++) {\n ranges[i].start.row += range.start.row;\n ranges[i].end.row += range.start.row;\n }\n }\n\n return ranges;\n };\n\n this.replace = function (input, replacement) {\n var options = this.$options;\n var re = this.$assembleRegExp(options);\n if (options.$isMultiLine) return replacement;\n if (!re) return;\n var match = re.exec(input);\n if (!match || match[0].length != input.length) return null;\n replacement = input.replace(re, replacement);\n\n if (options.preserveCase) {\n replacement = replacement.split(\"\");\n\n for (var i = Math.min(input.length, input.length); i--;) {\n var ch = input[i];\n if (ch && ch.toLowerCase() != ch) replacement[i] = replacement[i].toUpperCase();else replacement[i] = replacement[i].toLowerCase();\n }\n\n replacement = replacement.join(\"\");\n }\n\n return replacement;\n };\n\n this.$assembleRegExp = function (options, $disableFakeMultiline) {\n if (options.needle instanceof RegExp) return options.re = options.needle;\n var needle = options.needle;\n if (!options.needle) return options.re = false;\n if (!options.regExp) needle = lang.escapeRegExp(needle);\n if (options.wholeWord) needle = addWordBoundary(needle, options);\n var modifier = options.caseSensitive ? \"gm\" : \"gmi\";\n options.$isMultiLine = !$disableFakeMultiline && /[\\n\\r]/.test(needle);\n if (options.$isMultiLine) return options.re = this.$assembleMultilineRegExp(needle, modifier);\n\n try {\n var re = new RegExp(needle, modifier);\n } catch (e) {\n re = false;\n }\n\n return options.re = re;\n };\n\n this.$assembleMultilineRegExp = function (needle, modifier) {\n var parts = needle.replace(/\\r\\n|\\r|\\n/g, \"$\\n^\").split(\"\\n\");\n var re = [];\n\n for (var i = 0; i < parts.length; i++) {\n try {\n re.push(new RegExp(parts[i], modifier));\n } catch (e) {\n return false;\n }\n }\n\n return re;\n };\n\n this.$matchIterator = function (session, options) {\n var re = this.$assembleRegExp(options);\n if (!re) return false;\n var backwards = options.backwards == true;\n var skipCurrent = options.skipCurrent != false;\n var range = options.range;\n var start = options.start;\n if (!start) start = range ? range[backwards ? \"end\" : \"start\"] : session.selection.getRange();\n if (start.start) start = start[skipCurrent != backwards ? \"end\" : \"start\"];\n var firstRow = range ? range.start.row : 0;\n var lastRow = range ? range.end.row : session.getLength() - 1;\n\n if (backwards) {\n var forEach = function forEach(callback) {\n var row = start.row;\n if (forEachInLine(row, start.column, callback)) return;\n\n for (row--; row >= firstRow; row--) {\n if (forEachInLine(row, Number.MAX_VALUE, callback)) return;\n }\n\n if (options.wrap == false) return;\n\n for (row = lastRow, firstRow = start.row; row >= firstRow; row--) {\n if (forEachInLine(row, Number.MAX_VALUE, callback)) return;\n }\n };\n } else {\n var forEach = function forEach(callback) {\n var row = start.row;\n if (forEachInLine(row, start.column, callback)) return;\n\n for (row = row + 1; row <= lastRow; row++) {\n if (forEachInLine(row, 0, callback)) return;\n }\n\n if (options.wrap == false) return;\n\n for (row = firstRow, lastRow = start.row; row <= lastRow; row++) {\n if (forEachInLine(row, 0, callback)) return;\n }\n };\n }\n\n if (options.$isMultiLine) {\n var len = re.length;\n\n var forEachInLine = function forEachInLine(row, offset, callback) {\n var startRow = backwards ? row - len + 1 : row;\n if (startRow < 0 || startRow + len > session.getLength()) return;\n var line = session.getLine(startRow);\n var startIndex = line.search(re[0]);\n if (!backwards && startIndex < offset || startIndex === -1) return;\n\n for (var i = 1; i < len; i++) {\n line = session.getLine(startRow + i);\n if (line.search(re[i]) == -1) return;\n }\n\n var endIndex = line.match(re[len - 1])[0].length;\n if (backwards && endIndex > offset) return;\n if (callback(startRow, startIndex, startRow + len - 1, endIndex)) return true;\n };\n } else if (backwards) {\n var forEachInLine = function forEachInLine(row, endIndex, callback) {\n var line = session.getLine(row);\n var matches = [];\n var m,\n last = 0;\n re.lastIndex = 0;\n\n while (m = re.exec(line)) {\n var length = m[0].length;\n last = m.index;\n\n if (!length) {\n if (last >= line.length) break;\n re.lastIndex = last += 1;\n }\n\n if (m.index + length > endIndex) break;\n matches.push(m.index, length);\n }\n\n for (var i = matches.length - 1; i >= 0; i -= 2) {\n var column = matches[i - 1];\n var length = matches[i];\n if (callback(row, column, row, column + length)) return true;\n }\n };\n } else {\n var forEachInLine = function forEachInLine(row, startIndex, callback) {\n var line = session.getLine(row);\n var last;\n var m;\n re.lastIndex = startIndex;\n\n while (m = re.exec(line)) {\n var length = m[0].length;\n last = m.index;\n if (callback(row, last, row, last + length)) return true;\n\n if (!length) {\n re.lastIndex = last += 1;\n if (last >= line.length) return false;\n }\n }\n };\n }\n\n return {\n forEach: forEach\n };\n };\n }).call(Search.prototype);\n\n function addWordBoundary(needle, options) {\n function wordBoundary(c) {\n if (/\\w/.test(c) || options.regExp) return \"\\\\b\";\n return \"\";\n }\n\n return wordBoundary(needle[0]) + needle + wordBoundary(needle[needle.length - 1]);\n }\n\n exports.Search = Search;\n});\nace.define(\"ace/keyboard/hash_handler\", [\"require\", \"exports\", \"module\", \"ace/lib/keys\", \"ace/lib/useragent\"], function (require, exports, module) {\n \"use strict\";\n\n var keyUtil = require(\"../lib/keys\");\n\n var useragent = require(\"../lib/useragent\");\n\n var KEY_MODS = keyUtil.KEY_MODS;\n\n function HashHandler(config, platform) {\n this.platform = platform || (useragent.isMac ? \"mac\" : \"win\");\n this.commands = {};\n this.commandKeyBinding = {};\n this.addCommands(config);\n this.$singleCommand = true;\n }\n\n function MultiHashHandler(config, platform) {\n HashHandler.call(this, config, platform);\n this.$singleCommand = false;\n }\n\n MultiHashHandler.prototype = HashHandler.prototype;\n (function () {\n this.addCommand = function (command) {\n if (this.commands[command.name]) this.removeCommand(command);\n this.commands[command.name] = command;\n if (command.bindKey) this._buildKeyHash(command);\n };\n\n this.removeCommand = function (command, keepCommand) {\n var name = command && (typeof command === 'string' ? command : command.name);\n command = this.commands[name];\n if (!keepCommand) delete this.commands[name];\n var ckb = this.commandKeyBinding;\n\n for (var keyId in ckb) {\n var cmdGroup = ckb[keyId];\n\n if (cmdGroup == command) {\n delete ckb[keyId];\n } else if (Array.isArray(cmdGroup)) {\n var i = cmdGroup.indexOf(command);\n\n if (i != -1) {\n cmdGroup.splice(i, 1);\n if (cmdGroup.length == 1) ckb[keyId] = cmdGroup[0];\n }\n }\n }\n };\n\n this.bindKey = function (key, command, position) {\n if (_typeof(key) == \"object\" && key) {\n if (position == undefined) position = key.position;\n key = key[this.platform];\n }\n\n if (!key) return;\n if (typeof command == \"function\") return this.addCommand({\n exec: command,\n bindKey: key,\n name: command.name || key\n });\n key.split(\"|\").forEach(function (keyPart) {\n var chain = \"\";\n\n if (keyPart.indexOf(\" \") != -1) {\n var parts = keyPart.split(/\\s+/);\n keyPart = parts.pop();\n parts.forEach(function (keyPart) {\n var binding = this.parseKeys(keyPart);\n var id = KEY_MODS[binding.hashId] + binding.key;\n chain += (chain ? \" \" : \"\") + id;\n\n this._addCommandToBinding(chain, \"chainKeys\");\n }, this);\n chain += \" \";\n }\n\n var binding = this.parseKeys(keyPart);\n var id = KEY_MODS[binding.hashId] + binding.key;\n\n this._addCommandToBinding(chain + id, command, position);\n }, this);\n };\n\n function getPosition(command) {\n return _typeof(command) == \"object\" && command.bindKey && command.bindKey.position || (command.isDefault ? -100 : 0);\n }\n\n this._addCommandToBinding = function (keyId, command, position) {\n var ckb = this.commandKeyBinding,\n i;\n\n if (!command) {\n delete ckb[keyId];\n } else if (!ckb[keyId] || this.$singleCommand) {\n ckb[keyId] = command;\n } else {\n if (!Array.isArray(ckb[keyId])) {\n ckb[keyId] = [ckb[keyId]];\n } else if ((i = ckb[keyId].indexOf(command)) != -1) {\n ckb[keyId].splice(i, 1);\n }\n\n if (typeof position != \"number\") {\n position = getPosition(command);\n }\n\n var commands = ckb[keyId];\n\n for (i = 0; i < commands.length; i++) {\n var other = commands[i];\n var otherPos = getPosition(other);\n if (otherPos > position) break;\n }\n\n commands.splice(i, 0, command);\n }\n };\n\n this.addCommands = function (commands) {\n commands && Object.keys(commands).forEach(function (name) {\n var command = commands[name];\n if (!command) return;\n if (typeof command === \"string\") return this.bindKey(command, name);\n if (typeof command === \"function\") command = {\n exec: command\n };\n if (_typeof(command) !== \"object\") return;\n if (!command.name) command.name = name;\n this.addCommand(command);\n }, this);\n };\n\n this.removeCommands = function (commands) {\n Object.keys(commands).forEach(function (name) {\n this.removeCommand(commands[name]);\n }, this);\n };\n\n this.bindKeys = function (keyList) {\n Object.keys(keyList).forEach(function (key) {\n this.bindKey(key, keyList[key]);\n }, this);\n };\n\n this._buildKeyHash = function (command) {\n this.bindKey(command.bindKey, command);\n };\n\n this.parseKeys = function (keys) {\n var parts = keys.toLowerCase().split(/[\\-\\+]([\\-\\+])?/).filter(function (x) {\n return x;\n });\n var key = parts.pop();\n var keyCode = keyUtil[key];\n if (keyUtil.FUNCTION_KEYS[keyCode]) key = keyUtil.FUNCTION_KEYS[keyCode].toLowerCase();else if (!parts.length) return {\n key: key,\n hashId: -1\n };else if (parts.length == 1 && parts[0] == \"shift\") return {\n key: key.toUpperCase(),\n hashId: -1\n };\n var hashId = 0;\n\n for (var i = parts.length; i--;) {\n var modifier = keyUtil.KEY_MODS[parts[i]];\n\n if (modifier == null) {\n if (typeof console != \"undefined\") console.error(\"invalid modifier \" + parts[i] + \" in \" + keys);\n return false;\n }\n\n hashId |= modifier;\n }\n\n return {\n key: key,\n hashId: hashId\n };\n };\n\n this.findKeyCommand = function findKeyCommand(hashId, keyString) {\n var key = KEY_MODS[hashId] + keyString;\n return this.commandKeyBinding[key];\n };\n\n this.handleKeyboard = function (data, hashId, keyString, keyCode) {\n if (keyCode < 0) return;\n var key = KEY_MODS[hashId] + keyString;\n var command = this.commandKeyBinding[key];\n\n if (data.$keyChain) {\n data.$keyChain += \" \" + key;\n command = this.commandKeyBinding[data.$keyChain] || command;\n }\n\n if (command) {\n if (command == \"chainKeys\" || command[command.length - 1] == \"chainKeys\") {\n data.$keyChain = data.$keyChain || key;\n return {\n command: \"null\"\n };\n }\n }\n\n if (data.$keyChain) {\n if ((!hashId || hashId == 4) && keyString.length == 1) data.$keyChain = data.$keyChain.slice(0, -key.length - 1); // wait for input\n else if (hashId == -1 || keyCode > 0) data.$keyChain = \"\"; // reset keyChain\n }\n\n return {\n command: command\n };\n };\n\n this.getStatusText = function (editor, data) {\n return data.$keyChain || \"\";\n };\n }).call(HashHandler.prototype);\n exports.HashHandler = HashHandler;\n exports.MultiHashHandler = MultiHashHandler;\n});\nace.define(\"ace/commands/command_manager\", [\"require\", \"exports\", \"module\", \"ace/lib/oop\", \"ace/keyboard/hash_handler\", \"ace/lib/event_emitter\"], function (require, exports, module) {\n \"use strict\";\n\n var oop = require(\"../lib/oop\");\n\n var MultiHashHandler = require(\"../keyboard/hash_handler\").MultiHashHandler;\n\n var EventEmitter = require(\"../lib/event_emitter\").EventEmitter;\n\n var CommandManager = function CommandManager(platform, commands) {\n MultiHashHandler.call(this, commands, platform);\n this.byName = this.commands;\n this.setDefaultHandler(\"exec\", function (e) {\n return e.command.exec(e.editor, e.args || {});\n });\n };\n\n oop.inherits(CommandManager, MultiHashHandler);\n (function () {\n oop.implement(this, EventEmitter);\n\n this.exec = function (command, editor, args) {\n if (Array.isArray(command)) {\n for (var i = command.length; i--;) {\n if (this.exec(command[i], editor, args)) return true;\n }\n\n return false;\n }\n\n if (typeof command === \"string\") command = this.commands[command];\n if (!command) return false;\n if (editor && editor.$readOnly && !command.readOnly) return false;\n if (this.$checkCommandState != false && command.isAvailable && !command.isAvailable(editor)) return false;\n var e = {\n editor: editor,\n command: command,\n args: args\n };\n e.returnValue = this._emit(\"exec\", e);\n\n this._signal(\"afterExec\", e);\n\n return e.returnValue === false ? false : true;\n };\n\n this.toggleRecording = function (editor) {\n if (this.$inReplay) return;\n editor && editor._emit(\"changeStatus\");\n\n if (this.recording) {\n this.macro.pop();\n this.off(\"exec\", this.$addCommandToMacro);\n if (!this.macro.length) this.macro = this.oldMacro;\n return this.recording = false;\n }\n\n if (!this.$addCommandToMacro) {\n this.$addCommandToMacro = function (e) {\n this.macro.push([e.command, e.args]);\n }.bind(this);\n }\n\n this.oldMacro = this.macro;\n this.macro = [];\n this.on(\"exec\", this.$addCommandToMacro);\n return this.recording = true;\n };\n\n this.replay = function (editor) {\n if (this.$inReplay || !this.macro) return;\n if (this.recording) return this.toggleRecording(editor);\n\n try {\n this.$inReplay = true;\n this.macro.forEach(function (x) {\n if (typeof x == \"string\") this.exec(x, editor);else this.exec(x[0], editor, x[1]);\n }, this);\n } finally {\n this.$inReplay = false;\n }\n };\n\n this.trimMacro = function (m) {\n return m.map(function (x) {\n if (typeof x[0] != \"string\") x[0] = x[0].name;\n if (!x[1]) x = x[0];\n return x;\n });\n };\n }).call(CommandManager.prototype);\n exports.CommandManager = CommandManager;\n});\nace.define(\"ace/commands/default_commands\", [\"require\", \"exports\", \"module\", \"ace/lib/lang\", \"ace/config\", \"ace/range\"], function (require, exports, module) {\n \"use strict\";\n\n var lang = require(\"../lib/lang\");\n\n var config = require(\"../config\");\n\n var Range = require(\"../range\").Range;\n\n function bindKey(win, mac) {\n return {\n win: win,\n mac: mac\n };\n }\n\n exports.commands = [{\n name: \"showSettingsMenu\",\n description: \"Show settings menu\",\n bindKey: bindKey(\"Ctrl-,\", \"Command-,\"),\n exec: function exec(editor) {\n config.loadModule(\"ace/ext/settings_menu\", function (module) {\n module.init(editor);\n editor.showSettingsMenu();\n });\n },\n readOnly: true\n }, {\n name: \"goToNextError\",\n description: \"Go to next error\",\n bindKey: bindKey(\"Alt-E\", \"F4\"),\n exec: function exec(editor) {\n config.loadModule(\"./ext/error_marker\", function (module) {\n module.showErrorMarker(editor, 1);\n });\n },\n scrollIntoView: \"animate\",\n readOnly: true\n }, {\n name: \"goToPreviousError\",\n description: \"Go to previous error\",\n bindKey: bindKey(\"Alt-Shift-E\", \"Shift-F4\"),\n exec: function exec(editor) {\n config.loadModule(\"./ext/error_marker\", function (module) {\n module.showErrorMarker(editor, -1);\n });\n },\n scrollIntoView: \"animate\",\n readOnly: true\n }, {\n name: \"selectall\",\n description: \"Select all\",\n bindKey: bindKey(\"Ctrl-A\", \"Command-A\"),\n exec: function exec(editor) {\n editor.selectAll();\n },\n readOnly: true\n }, {\n name: \"centerselection\",\n description: \"Center selection\",\n bindKey: bindKey(null, \"Ctrl-L\"),\n exec: function exec(editor) {\n editor.centerSelection();\n },\n readOnly: true\n }, {\n name: \"gotoline\",\n description: \"Go to line...\",\n bindKey: bindKey(\"Ctrl-L\", \"Command-L\"),\n exec: function exec(editor, line) {\n if (typeof line === \"number\" && !isNaN(line)) editor.gotoLine(line);\n editor.prompt({\n $type: \"gotoLine\"\n });\n },\n readOnly: true\n }, {\n name: \"fold\",\n bindKey: bindKey(\"Alt-L|Ctrl-F1\", \"Command-Alt-L|Command-F1\"),\n exec: function exec(editor) {\n editor.session.toggleFold(false);\n },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"center\",\n readOnly: true\n }, {\n name: \"unfold\",\n bindKey: bindKey(\"Alt-Shift-L|Ctrl-Shift-F1\", \"Command-Alt-Shift-L|Command-Shift-F1\"),\n exec: function exec(editor) {\n editor.session.toggleFold(true);\n },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"center\",\n readOnly: true\n }, {\n name: \"toggleFoldWidget\",\n description: \"Toggle fold widget\",\n bindKey: bindKey(\"F2\", \"F2\"),\n exec: function exec(editor) {\n editor.session.toggleFoldWidget();\n },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"center\",\n readOnly: true\n }, {\n name: \"toggleParentFoldWidget\",\n description: \"Toggle parent fold widget\",\n bindKey: bindKey(\"Alt-F2\", \"Alt-F2\"),\n exec: function exec(editor) {\n editor.session.toggleFoldWidget(true);\n },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"center\",\n readOnly: true\n }, {\n name: \"foldall\",\n description: \"Fold all\",\n bindKey: bindKey(null, \"Ctrl-Command-Option-0\"),\n exec: function exec(editor) {\n editor.session.foldAll();\n },\n scrollIntoView: \"center\",\n readOnly: true\n }, {\n name: \"foldAllComments\",\n description: \"Fold all comments\",\n bindKey: bindKey(null, \"Ctrl-Command-Option-0\"),\n exec: function exec(editor) {\n editor.session.foldAllComments();\n },\n scrollIntoView: \"center\",\n readOnly: true\n }, {\n name: \"foldOther\",\n description: \"Fold other\",\n bindKey: bindKey(\"Alt-0\", \"Command-Option-0\"),\n exec: function exec(editor) {\n editor.session.foldAll();\n editor.session.unfold(editor.selection.getAllRanges());\n },\n scrollIntoView: \"center\",\n readOnly: true\n }, {\n name: \"unfoldall\",\n description: \"Unfold all\",\n bindKey: bindKey(\"Alt-Shift-0\", \"Command-Option-Shift-0\"),\n exec: function exec(editor) {\n editor.session.unfold();\n },\n scrollIntoView: \"center\",\n readOnly: true\n }, {\n name: \"findnext\",\n description: \"Find next\",\n bindKey: bindKey(\"Ctrl-K\", \"Command-G\"),\n exec: function exec(editor) {\n editor.findNext();\n },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"center\",\n readOnly: true\n }, {\n name: \"findprevious\",\n description: \"Find previous\",\n bindKey: bindKey(\"Ctrl-Shift-K\", \"Command-Shift-G\"),\n exec: function exec(editor) {\n editor.findPrevious();\n },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"center\",\n readOnly: true\n }, {\n name: \"selectOrFindNext\",\n description: \"Select or find next\",\n bindKey: bindKey(\"Alt-K\", \"Ctrl-G\"),\n exec: function exec(editor) {\n if (editor.selection.isEmpty()) editor.selection.selectWord();else editor.findNext();\n },\n readOnly: true\n }, {\n name: \"selectOrFindPrevious\",\n description: \"Select or find previous\",\n bindKey: bindKey(\"Alt-Shift-K\", \"Ctrl-Shift-G\"),\n exec: function exec(editor) {\n if (editor.selection.isEmpty()) editor.selection.selectWord();else editor.findPrevious();\n },\n readOnly: true\n }, {\n name: \"find\",\n description: \"Find\",\n bindKey: bindKey(\"Ctrl-F\", \"Command-F\"),\n exec: function exec(editor) {\n config.loadModule(\"ace/ext/searchbox\", function (e) {\n e.Search(editor);\n });\n },\n readOnly: true\n }, {\n name: \"overwrite\",\n description: \"Overwrite\",\n bindKey: \"Insert\",\n exec: function exec(editor) {\n editor.toggleOverwrite();\n },\n readOnly: true\n }, {\n name: \"selecttostart\",\n description: \"Select to start\",\n bindKey: bindKey(\"Ctrl-Shift-Home\", \"Command-Shift-Home|Command-Shift-Up\"),\n exec: function exec(editor) {\n editor.getSelection().selectFileStart();\n },\n multiSelectAction: \"forEach\",\n readOnly: true,\n scrollIntoView: \"animate\",\n aceCommandGroup: \"fileJump\"\n }, {\n name: \"gotostart\",\n description: \"Go to start\",\n bindKey: bindKey(\"Ctrl-Home\", \"Command-Home|Command-Up\"),\n exec: function exec(editor) {\n editor.navigateFileStart();\n },\n multiSelectAction: \"forEach\",\n readOnly: true,\n scrollIntoView: \"animate\",\n aceCommandGroup: \"fileJump\"\n }, {\n name: \"selectup\",\n description: \"Select up\",\n bindKey: bindKey(\"Shift-Up\", \"Shift-Up|Ctrl-Shift-P\"),\n exec: function exec(editor) {\n editor.getSelection().selectUp();\n },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\",\n readOnly: true\n }, {\n name: \"golineup\",\n description: \"Go line up\",\n bindKey: bindKey(\"Up\", \"Up|Ctrl-P\"),\n exec: function exec(editor, args) {\n editor.navigateUp(args.times);\n },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\",\n readOnly: true\n }, {\n name: \"selecttoend\",\n description: \"Select to end\",\n bindKey: bindKey(\"Ctrl-Shift-End\", \"Command-Shift-End|Command-Shift-Down\"),\n exec: function exec(editor) {\n editor.getSelection().selectFileEnd();\n },\n multiSelectAction: \"forEach\",\n readOnly: true,\n scrollIntoView: \"animate\",\n aceCommandGroup: \"fileJump\"\n }, {\n name: \"gotoend\",\n description: \"Go to end\",\n bindKey: bindKey(\"Ctrl-End\", \"Command-End|Command-Down\"),\n exec: function exec(editor) {\n editor.navigateFileEnd();\n },\n multiSelectAction: \"forEach\",\n readOnly: true,\n scrollIntoView: \"animate\",\n aceCommandGroup: \"fileJump\"\n }, {\n name: \"selectdown\",\n description: \"Select down\",\n bindKey: bindKey(\"Shift-Down\", \"Shift-Down|Ctrl-Shift-N\"),\n exec: function exec(editor) {\n editor.getSelection().selectDown();\n },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\",\n readOnly: true\n }, {\n name: \"golinedown\",\n description: \"Go line down\",\n bindKey: bindKey(\"Down\", \"Down|Ctrl-N\"),\n exec: function exec(editor, args) {\n editor.navigateDown(args.times);\n },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\",\n readOnly: true\n }, {\n name: \"selectwordleft\",\n description: \"Select word left\",\n bindKey: bindKey(\"Ctrl-Shift-Left\", \"Option-Shift-Left\"),\n exec: function exec(editor) {\n editor.getSelection().selectWordLeft();\n },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\",\n readOnly: true\n }, {\n name: \"gotowordleft\",\n description: \"Go to word left\",\n bindKey: bindKey(\"Ctrl-Left\", \"Option-Left\"),\n exec: function exec(editor) {\n editor.navigateWordLeft();\n },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\",\n readOnly: true\n }, {\n name: \"selecttolinestart\",\n description: \"Select to line start\",\n bindKey: bindKey(\"Alt-Shift-Left\", \"Command-Shift-Left|Ctrl-Shift-A\"),\n exec: function exec(editor) {\n editor.getSelection().selectLineStart();\n },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\",\n readOnly: true\n }, {\n name: \"gotolinestart\",\n description: \"Go to line start\",\n bindKey: bindKey(\"Alt-Left|Home\", \"Command-Left|Home|Ctrl-A\"),\n exec: function exec(editor) {\n editor.navigateLineStart();\n },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\",\n readOnly: true\n }, {\n name: \"selectleft\",\n description: \"Select left\",\n bindKey: bindKey(\"Shift-Left\", \"Shift-Left|Ctrl-Shift-B\"),\n exec: function exec(editor) {\n editor.getSelection().selectLeft();\n },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\",\n readOnly: true\n }, {\n name: \"gotoleft\",\n description: \"Go to left\",\n bindKey: bindKey(\"Left\", \"Left|Ctrl-B\"),\n exec: function exec(editor, args) {\n editor.navigateLeft(args.times);\n },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\",\n readOnly: true\n }, {\n name: \"selectwordright\",\n description: \"Select word right\",\n bindKey: bindKey(\"Ctrl-Shift-Right\", \"Option-Shift-Right\"),\n exec: function exec(editor) {\n editor.getSelection().selectWordRight();\n },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\",\n readOnly: true\n }, {\n name: \"gotowordright\",\n description: \"Go to word right\",\n bindKey: bindKey(\"Ctrl-Right\", \"Option-Right\"),\n exec: function exec(editor) {\n editor.navigateWordRight();\n },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\",\n readOnly: true\n }, {\n name: \"selecttolineend\",\n description: \"Select to line end\",\n bindKey: bindKey(\"Alt-Shift-Right\", \"Command-Shift-Right|Shift-End|Ctrl-Shift-E\"),\n exec: function exec(editor) {\n editor.getSelection().selectLineEnd();\n },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\",\n readOnly: true\n }, {\n name: \"gotolineend\",\n description: \"Go to line end\",\n bindKey: bindKey(\"Alt-Right|End\", \"Command-Right|End|Ctrl-E\"),\n exec: function exec(editor) {\n editor.navigateLineEnd();\n },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\",\n readOnly: true\n }, {\n name: \"selectright\",\n description: \"Select right\",\n bindKey: bindKey(\"Shift-Right\", \"Shift-Right\"),\n exec: function exec(editor) {\n editor.getSelection().selectRight();\n },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\",\n readOnly: true\n }, {\n name: \"gotoright\",\n description: \"Go to right\",\n bindKey: bindKey(\"Right\", \"Right|Ctrl-F\"),\n exec: function exec(editor, args) {\n editor.navigateRight(args.times);\n },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\",\n readOnly: true\n }, {\n name: \"selectpagedown\",\n description: \"Select page down\",\n bindKey: \"Shift-PageDown\",\n exec: function exec(editor) {\n editor.selectPageDown();\n },\n readOnly: true\n }, {\n name: \"pagedown\",\n description: \"Page down\",\n bindKey: bindKey(null, \"Option-PageDown\"),\n exec: function exec(editor) {\n editor.scrollPageDown();\n },\n readOnly: true\n }, {\n name: \"gotopagedown\",\n description: \"Go to page down\",\n bindKey: bindKey(\"PageDown\", \"PageDown|Ctrl-V\"),\n exec: function exec(editor) {\n editor.gotoPageDown();\n },\n readOnly: true\n }, {\n name: \"selectpageup\",\n description: \"Select page up\",\n bindKey: \"Shift-PageUp\",\n exec: function exec(editor) {\n editor.selectPageUp();\n },\n readOnly: true\n }, {\n name: \"pageup\",\n description: \"Page up\",\n bindKey: bindKey(null, \"Option-PageUp\"),\n exec: function exec(editor) {\n editor.scrollPageUp();\n },\n readOnly: true\n }, {\n name: \"gotopageup\",\n description: \"Go to page up\",\n bindKey: \"PageUp\",\n exec: function exec(editor) {\n editor.gotoPageUp();\n },\n readOnly: true\n }, {\n name: \"scrollup\",\n description: \"Scroll up\",\n bindKey: bindKey(\"Ctrl-Up\", null),\n exec: function exec(e) {\n e.renderer.scrollBy(0, -2 * e.renderer.layerConfig.lineHeight);\n },\n readOnly: true\n }, {\n name: \"scrolldown\",\n description: \"Scroll down\",\n bindKey: bindKey(\"Ctrl-Down\", null),\n exec: function exec(e) {\n e.renderer.scrollBy(0, 2 * e.renderer.layerConfig.lineHeight);\n },\n readOnly: true\n }, {\n name: \"selectlinestart\",\n description: \"Select line start\",\n bindKey: \"Shift-Home\",\n exec: function exec(editor) {\n editor.getSelection().selectLineStart();\n },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\",\n readOnly: true\n }, {\n name: \"selectlineend\",\n description: \"Select line end\",\n bindKey: \"Shift-End\",\n exec: function exec(editor) {\n editor.getSelection().selectLineEnd();\n },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\",\n readOnly: true\n }, {\n name: \"togglerecording\",\n description: \"Toggle recording\",\n bindKey: bindKey(\"Ctrl-Alt-E\", \"Command-Option-E\"),\n exec: function exec(editor) {\n editor.commands.toggleRecording(editor);\n },\n readOnly: true\n }, {\n name: \"replaymacro\",\n description: \"Replay macro\",\n bindKey: bindKey(\"Ctrl-Shift-E\", \"Command-Shift-E\"),\n exec: function exec(editor) {\n editor.commands.replay(editor);\n },\n readOnly: true\n }, {\n name: \"jumptomatching\",\n description: \"Jump to matching\",\n bindKey: bindKey(\"Ctrl-\\\\|Ctrl-P\", \"Command-\\\\\"),\n exec: function exec(editor) {\n editor.jumpToMatching();\n },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"animate\",\n readOnly: true\n }, {\n name: \"selecttomatching\",\n description: \"Select to matching\",\n bindKey: bindKey(\"Ctrl-Shift-\\\\|Ctrl-Shift-P\", \"Command-Shift-\\\\\"),\n exec: function exec(editor) {\n editor.jumpToMatching(true);\n },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"animate\",\n readOnly: true\n }, {\n name: \"expandToMatching\",\n description: \"Expand to matching\",\n bindKey: bindKey(\"Ctrl-Shift-M\", \"Ctrl-Shift-M\"),\n exec: function exec(editor) {\n editor.jumpToMatching(true, true);\n },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"animate\",\n readOnly: true\n }, {\n name: \"passKeysToBrowser\",\n description: \"Pass keys to browser\",\n bindKey: bindKey(null, null),\n exec: function exec() {},\n passEvent: true,\n readOnly: true\n }, {\n name: \"copy\",\n description: \"Copy\",\n exec: function exec(editor) {},\n readOnly: true\n }, {\n name: \"cut\",\n description: \"Cut\",\n exec: function exec(editor) {\n var cutLine = editor.$copyWithEmptySelection && editor.selection.isEmpty();\n var range = cutLine ? editor.selection.getLineRange() : editor.selection.getRange();\n\n editor._emit(\"cut\", range);\n\n if (!range.isEmpty()) editor.session.remove(range);\n editor.clearSelection();\n },\n scrollIntoView: \"cursor\",\n multiSelectAction: \"forEach\"\n }, {\n name: \"paste\",\n description: \"Paste\",\n exec: function exec(editor, args) {\n editor.$handlePaste(args);\n },\n scrollIntoView: \"cursor\"\n }, {\n name: \"removeline\",\n description: \"Remove line\",\n bindKey: bindKey(\"Ctrl-D\", \"Command-D\"),\n exec: function exec(editor) {\n editor.removeLines();\n },\n scrollIntoView: \"cursor\",\n multiSelectAction: \"forEachLine\"\n }, {\n name: \"duplicateSelection\",\n description: \"Duplicate selection\",\n bindKey: bindKey(\"Ctrl-Shift-D\", \"Command-Shift-D\"),\n exec: function exec(editor) {\n editor.duplicateSelection();\n },\n scrollIntoView: \"cursor\",\n multiSelectAction: \"forEach\"\n }, {\n name: \"sortlines\",\n description: \"Sort lines\",\n bindKey: bindKey(\"Ctrl-Alt-S\", \"Command-Alt-S\"),\n exec: function exec(editor) {\n editor.sortLines();\n },\n scrollIntoView: \"selection\",\n multiSelectAction: \"forEachLine\"\n }, {\n name: \"togglecomment\",\n description: \"Toggle comment\",\n bindKey: bindKey(\"Ctrl-/\", \"Command-/\"),\n exec: function exec(editor) {\n editor.toggleCommentLines();\n },\n multiSelectAction: \"forEachLine\",\n scrollIntoView: \"selectionPart\"\n }, {\n name: \"toggleBlockComment\",\n description: \"Toggle block comment\",\n bindKey: bindKey(\"Ctrl-Shift-/\", \"Command-Shift-/\"),\n exec: function exec(editor) {\n editor.toggleBlockComment();\n },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"selectionPart\"\n }, {\n name: \"modifyNumberUp\",\n description: \"Modify number up\",\n bindKey: bindKey(\"Ctrl-Shift-Up\", \"Alt-Shift-Up\"),\n exec: function exec(editor) {\n editor.modifyNumber(1);\n },\n scrollIntoView: \"cursor\",\n multiSelectAction: \"forEach\"\n }, {\n name: \"modifyNumberDown\",\n description: \"Modify number down\",\n bindKey: bindKey(\"Ctrl-Shift-Down\", \"Alt-Shift-Down\"),\n exec: function exec(editor) {\n editor.modifyNumber(-1);\n },\n scrollIntoView: \"cursor\",\n multiSelectAction: \"forEach\"\n }, {\n name: \"replace\",\n description: \"Replace\",\n bindKey: bindKey(\"Ctrl-H\", \"Command-Option-F\"),\n exec: function exec(editor) {\n config.loadModule(\"ace/ext/searchbox\", function (e) {\n e.Search(editor, true);\n });\n }\n }, {\n name: \"undo\",\n description: \"Undo\",\n bindKey: bindKey(\"Ctrl-Z\", \"Command-Z\"),\n exec: function exec(editor) {\n editor.undo();\n }\n }, {\n name: \"redo\",\n description: \"Redo\",\n bindKey: bindKey(\"Ctrl-Shift-Z|Ctrl-Y\", \"Command-Shift-Z|Command-Y\"),\n exec: function exec(editor) {\n editor.redo();\n }\n }, {\n name: \"copylinesup\",\n description: \"Copy lines up\",\n bindKey: bindKey(\"Alt-Shift-Up\", \"Command-Option-Up\"),\n exec: function exec(editor) {\n editor.copyLinesUp();\n },\n scrollIntoView: \"cursor\"\n }, {\n name: \"movelinesup\",\n description: \"Move lines up\",\n bindKey: bindKey(\"Alt-Up\", \"Option-Up\"),\n exec: function exec(editor) {\n editor.moveLinesUp();\n },\n scrollIntoView: \"cursor\"\n }, {\n name: \"copylinesdown\",\n description: \"Copy lines down\",\n bindKey: bindKey(\"Alt-Shift-Down\", \"Command-Option-Down\"),\n exec: function exec(editor) {\n editor.copyLinesDown();\n },\n scrollIntoView: \"cursor\"\n }, {\n name: \"movelinesdown\",\n description: \"Move lines down\",\n bindKey: bindKey(\"Alt-Down\", \"Option-Down\"),\n exec: function exec(editor) {\n editor.moveLinesDown();\n },\n scrollIntoView: \"cursor\"\n }, {\n name: \"del\",\n description: \"Delete\",\n bindKey: bindKey(\"Delete\", \"Delete|Ctrl-D|Shift-Delete\"),\n exec: function exec(editor) {\n editor.remove(\"right\");\n },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\"\n }, {\n name: \"backspace\",\n description: \"Backspace\",\n bindKey: bindKey(\"Shift-Backspace|Backspace\", \"Ctrl-Backspace|Shift-Backspace|Backspace|Ctrl-H\"),\n exec: function exec(editor) {\n editor.remove(\"left\");\n },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\"\n }, {\n name: \"cut_or_delete\",\n description: \"Cut or delete\",\n bindKey: bindKey(\"Shift-Delete\", null),\n exec: function exec(editor) {\n if (editor.selection.isEmpty()) {\n editor.remove(\"left\");\n } else {\n return false;\n }\n },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\"\n }, {\n name: \"removetolinestart\",\n description: \"Remove to line start\",\n bindKey: bindKey(\"Alt-Backspace\", \"Command-Backspace\"),\n exec: function exec(editor) {\n editor.removeToLineStart();\n },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\"\n }, {\n name: \"removetolineend\",\n description: \"Remove to line end\",\n bindKey: bindKey(\"Alt-Delete\", \"Ctrl-K|Command-Delete\"),\n exec: function exec(editor) {\n editor.removeToLineEnd();\n },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\"\n }, {\n name: \"removetolinestarthard\",\n description: \"Remove to line start hard\",\n bindKey: bindKey(\"Ctrl-Shift-Backspace\", null),\n exec: function exec(editor) {\n var range = editor.selection.getRange();\n range.start.column = 0;\n editor.session.remove(range);\n },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\"\n }, {\n name: \"removetolineendhard\",\n description: \"Remove to line end hard\",\n bindKey: bindKey(\"Ctrl-Shift-Delete\", null),\n exec: function exec(editor) {\n var range = editor.selection.getRange();\n range.end.column = Number.MAX_VALUE;\n editor.session.remove(range);\n },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\"\n }, {\n name: \"removewordleft\",\n description: \"Remove word left\",\n bindKey: bindKey(\"Ctrl-Backspace\", \"Alt-Backspace|Ctrl-Alt-Backspace\"),\n exec: function exec(editor) {\n editor.removeWordLeft();\n },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\"\n }, {\n name: \"removewordright\",\n description: \"Remove word right\",\n bindKey: bindKey(\"Ctrl-Delete\", \"Alt-Delete\"),\n exec: function exec(editor) {\n editor.removeWordRight();\n },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\"\n }, {\n name: \"outdent\",\n description: \"Outdent\",\n bindKey: bindKey(\"Shift-Tab\", \"Shift-Tab\"),\n exec: function exec(editor) {\n editor.blockOutdent();\n },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"selectionPart\"\n }, {\n name: \"indent\",\n description: \"Indent\",\n bindKey: bindKey(\"Tab\", \"Tab\"),\n exec: function exec(editor) {\n editor.indent();\n },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"selectionPart\"\n }, {\n name: \"blockoutdent\",\n description: \"Block outdent\",\n bindKey: bindKey(\"Ctrl-[\", \"Ctrl-[\"),\n exec: function exec(editor) {\n editor.blockOutdent();\n },\n multiSelectAction: \"forEachLine\",\n scrollIntoView: \"selectionPart\"\n }, {\n name: \"blockindent\",\n description: \"Block indent\",\n bindKey: bindKey(\"Ctrl-]\", \"Ctrl-]\"),\n exec: function exec(editor) {\n editor.blockIndent();\n },\n multiSelectAction: \"forEachLine\",\n scrollIntoView: \"selectionPart\"\n }, {\n name: \"insertstring\",\n description: \"Insert string\",\n exec: function exec(editor, str) {\n editor.insert(str);\n },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\"\n }, {\n name: \"inserttext\",\n description: \"Insert text\",\n exec: function exec(editor, args) {\n editor.insert(lang.stringRepeat(args.text || \"\", args.times || 1));\n },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\"\n }, {\n name: \"splitline\",\n description: \"Split line\",\n bindKey: bindKey(null, \"Ctrl-O\"),\n exec: function exec(editor) {\n editor.splitLine();\n },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\"\n }, {\n name: \"transposeletters\",\n description: \"Transpose letters\",\n bindKey: bindKey(\"Alt-Shift-X\", \"Ctrl-T\"),\n exec: function exec(editor) {\n editor.transposeLetters();\n },\n multiSelectAction: function multiSelectAction(editor) {\n editor.transposeSelections(1);\n },\n scrollIntoView: \"cursor\"\n }, {\n name: \"touppercase\",\n description: \"To uppercase\",\n bindKey: bindKey(\"Ctrl-U\", \"Ctrl-U\"),\n exec: function exec(editor) {\n editor.toUpperCase();\n },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\"\n }, {\n name: \"tolowercase\",\n description: \"To lowercase\",\n bindKey: bindKey(\"Ctrl-Shift-U\", \"Ctrl-Shift-U\"),\n exec: function exec(editor) {\n editor.toLowerCase();\n },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\"\n }, {\n name: \"autoindent\",\n description: \"Auto Indent\",\n bindKey: bindKey(null, null),\n exec: function exec(editor) {\n editor.autoIndent();\n },\n multiSelectAction: \"forEachLine\",\n scrollIntoView: \"animate\"\n }, {\n name: \"expandtoline\",\n description: \"Expand to line\",\n bindKey: bindKey(\"Ctrl-Shift-L\", \"Command-Shift-L\"),\n exec: function exec(editor) {\n var range = editor.selection.getRange();\n range.start.column = range.end.column = 0;\n range.end.row++;\n editor.selection.setRange(range, false);\n },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\",\n readOnly: true\n }, {\n name: \"joinlines\",\n description: \"Join lines\",\n bindKey: bindKey(null, null),\n exec: function exec(editor) {\n var isBackwards = editor.selection.isBackwards();\n var selectionStart = isBackwards ? editor.selection.getSelectionLead() : editor.selection.getSelectionAnchor();\n var selectionEnd = isBackwards ? editor.selection.getSelectionAnchor() : editor.selection.getSelectionLead();\n var firstLineEndCol = editor.session.doc.getLine(selectionStart.row).length;\n var selectedText = editor.session.doc.getTextRange(editor.selection.getRange());\n var selectedCount = selectedText.replace(/\\n\\s*/, \" \").length;\n var insertLine = editor.session.doc.getLine(selectionStart.row);\n\n for (var i = selectionStart.row + 1; i <= selectionEnd.row + 1; i++) {\n var curLine = lang.stringTrimLeft(lang.stringTrimRight(editor.session.doc.getLine(i)));\n\n if (curLine.length !== 0) {\n curLine = \" \" + curLine;\n }\n\n insertLine += curLine;\n }\n\n if (selectionEnd.row + 1 < editor.session.doc.getLength() - 1) {\n insertLine += editor.session.doc.getNewLineCharacter();\n }\n\n editor.clearSelection();\n editor.session.doc.replace(new Range(selectionStart.row, 0, selectionEnd.row + 2, 0), insertLine);\n\n if (selectedCount > 0) {\n editor.selection.moveCursorTo(selectionStart.row, selectionStart.column);\n editor.selection.selectTo(selectionStart.row, selectionStart.column + selectedCount);\n } else {\n firstLineEndCol = editor.session.doc.getLine(selectionStart.row).length > firstLineEndCol ? firstLineEndCol + 1 : firstLineEndCol;\n editor.selection.moveCursorTo(selectionStart.row, firstLineEndCol);\n }\n },\n multiSelectAction: \"forEach\",\n readOnly: true\n }, {\n name: \"invertSelection\",\n description: \"Invert selection\",\n bindKey: bindKey(null, null),\n exec: function exec(editor) {\n var endRow = editor.session.doc.getLength() - 1;\n var endCol = editor.session.doc.getLine(endRow).length;\n var ranges = editor.selection.rangeList.ranges;\n var newRanges = [];\n\n if (ranges.length < 1) {\n ranges = [editor.selection.getRange()];\n }\n\n for (var i = 0; i < ranges.length; i++) {\n if (i == ranges.length - 1) {\n if (!(ranges[i].end.row === endRow && ranges[i].end.column === endCol)) {\n newRanges.push(new Range(ranges[i].end.row, ranges[i].end.column, endRow, endCol));\n }\n }\n\n if (i === 0) {\n if (!(ranges[i].start.row === 0 && ranges[i].start.column === 0)) {\n newRanges.push(new Range(0, 0, ranges[i].start.row, ranges[i].start.column));\n }\n } else {\n newRanges.push(new Range(ranges[i - 1].end.row, ranges[i - 1].end.column, ranges[i].start.row, ranges[i].start.column));\n }\n }\n\n editor.exitMultiSelectMode();\n editor.clearSelection();\n\n for (var i = 0; i < newRanges.length; i++) {\n editor.selection.addRange(newRanges[i], false);\n }\n },\n readOnly: true,\n scrollIntoView: \"none\"\n }, {\n name: \"addLineAfter\",\n description: \"Add new line after the current line\",\n exec: function exec(editor) {\n editor.selection.clearSelection();\n editor.navigateLineEnd();\n editor.insert(\"\\n\");\n },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\"\n }, {\n name: \"addLineBefore\",\n description: \"Add new line before the current line\",\n exec: function exec(editor) {\n editor.selection.clearSelection();\n var cursor = editor.getCursorPosition();\n editor.selection.moveTo(cursor.row - 1, Number.MAX_VALUE);\n editor.insert(\"\\n\");\n if (cursor.row === 0) editor.navigateUp();\n },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\"\n }, {\n name: \"openCommandPallete\",\n description: \"Open command pallete\",\n bindKey: bindKey(\"F1\", \"F1\"),\n exec: function exec(editor) {\n editor.prompt({\n $type: \"commands\"\n });\n },\n readOnly: true\n }, {\n name: \"modeSelect\",\n description: \"Change language mode...\",\n bindKey: bindKey(null, null),\n exec: function exec(editor) {\n editor.prompt({\n $type: \"modes\"\n });\n },\n readOnly: true\n }];\n\n for (var i = 1; i < 9; i++) {\n exports.commands.push({\n name: \"foldToLevel\" + i,\n description: \"Fold To Level \" + i,\n level: i,\n exec: function exec(editor) {\n editor.session.foldToLevel(this.level);\n },\n scrollIntoView: \"center\",\n readOnly: true\n });\n }\n});\nace.define(\"ace/editor\", [\"require\", \"exports\", \"module\", \"ace/lib/fixoldbrowsers\", \"ace/lib/oop\", \"ace/lib/dom\", \"ace/lib/lang\", \"ace/lib/useragent\", \"ace/keyboard/textinput\", \"ace/mouse/mouse_handler\", \"ace/mouse/fold_handler\", \"ace/keyboard/keybinding\", \"ace/edit_session\", \"ace/search\", \"ace/range\", \"ace/lib/event_emitter\", \"ace/commands/command_manager\", \"ace/commands/default_commands\", \"ace/config\", \"ace/token_iterator\", \"ace/clipboard\"], function (require, exports, module) {\n \"use strict\";\n\n require(\"./lib/fixoldbrowsers\");\n\n var oop = require(\"./lib/oop\");\n\n var dom = require(\"./lib/dom\");\n\n var lang = require(\"./lib/lang\");\n\n var useragent = require(\"./lib/useragent\");\n\n var TextInput = require(\"./keyboard/textinput\").TextInput;\n\n var MouseHandler = require(\"./mouse/mouse_handler\").MouseHandler;\n\n var FoldHandler = require(\"./mouse/fold_handler\").FoldHandler;\n\n var KeyBinding = require(\"./keyboard/keybinding\").KeyBinding;\n\n var EditSession = require(\"./edit_session\").EditSession;\n\n var Search = require(\"./search\").Search;\n\n var Range = require(\"./range\").Range;\n\n var EventEmitter = require(\"./lib/event_emitter\").EventEmitter;\n\n var CommandManager = require(\"./commands/command_manager\").CommandManager;\n\n var defaultCommands = require(\"./commands/default_commands\").commands;\n\n var config = require(\"./config\");\n\n var TokenIterator = require(\"./token_iterator\").TokenIterator;\n\n var clipboard = require(\"./clipboard\");\n\n var Editor = function Editor(renderer, session, options) {\n this.$toDestroy = [];\n var container = renderer.getContainerElement();\n this.container = container;\n this.renderer = renderer;\n this.id = \"editor\" + ++Editor.$uid;\n this.commands = new CommandManager(useragent.isMac ? \"mac\" : \"win\", defaultCommands);\n\n if ((typeof document === \"undefined\" ? \"undefined\" : _typeof(document)) == \"object\") {\n this.textInput = new TextInput(renderer.getTextAreaContainer(), this);\n this.renderer.textarea = this.textInput.getElement();\n this.$mouseHandler = new MouseHandler(this);\n new FoldHandler(this);\n }\n\n this.keyBinding = new KeyBinding(this);\n this.$search = new Search().set({\n wrap: true\n });\n this.$historyTracker = this.$historyTracker.bind(this);\n this.commands.on(\"exec\", this.$historyTracker);\n this.$initOperationListeners();\n this._$emitInputEvent = lang.delayedCall(function () {\n this._signal(\"input\", {});\n\n if (this.session && this.session.bgTokenizer) this.session.bgTokenizer.scheduleStart();\n }.bind(this));\n this.on(\"change\", function (_, _self) {\n _self._$emitInputEvent.schedule(31);\n });\n this.setSession(session || options && options.session || new EditSession(\"\"));\n config.resetOptions(this);\n if (options) this.setOptions(options);\n\n config._signal(\"editor\", this);\n };\n\n Editor.$uid = 0;\n (function () {\n oop.implement(this, EventEmitter);\n\n this.$initOperationListeners = function () {\n this.commands.on(\"exec\", this.startOperation.bind(this), true);\n this.commands.on(\"afterExec\", this.endOperation.bind(this), true);\n this.$opResetTimer = lang.delayedCall(this.endOperation.bind(this, true));\n this.on(\"change\", function () {\n if (!this.curOp) {\n this.startOperation();\n this.curOp.selectionBefore = this.$lastSel;\n }\n\n this.curOp.docChanged = true;\n }.bind(this), true);\n this.on(\"changeSelection\", function () {\n if (!this.curOp) {\n this.startOperation();\n this.curOp.selectionBefore = this.$lastSel;\n }\n\n this.curOp.selectionChanged = true;\n }.bind(this), true);\n };\n\n this.curOp = null;\n this.prevOp = {};\n\n this.startOperation = function (commandEvent) {\n if (this.curOp) {\n if (!commandEvent || this.curOp.command) return;\n this.prevOp = this.curOp;\n }\n\n if (!commandEvent) {\n this.previousCommand = null;\n commandEvent = {};\n }\n\n this.$opResetTimer.schedule();\n this.curOp = this.session.curOp = {\n command: commandEvent.command || {},\n args: commandEvent.args,\n scrollTop: this.renderer.scrollTop\n };\n this.curOp.selectionBefore = this.selection.toJSON();\n };\n\n this.endOperation = function (e) {\n if (this.curOp && this.session) {\n if (e && e.returnValue === false || !this.session) return this.curOp = null;\n if (e == true && this.curOp.command && this.curOp.command.name == \"mouse\") return;\n\n this._signal(\"beforeEndOperation\");\n\n if (!this.curOp) return;\n var command = this.curOp.command;\n var scrollIntoView = command && command.scrollIntoView;\n\n if (scrollIntoView) {\n switch (scrollIntoView) {\n case \"center-animate\":\n scrollIntoView = \"animate\";\n\n case \"center\":\n this.renderer.scrollCursorIntoView(null, 0.5);\n break;\n\n case \"animate\":\n case \"cursor\":\n this.renderer.scrollCursorIntoView();\n break;\n\n case \"selectionPart\":\n var range = this.selection.getRange();\n var config = this.renderer.layerConfig;\n\n if (range.start.row >= config.lastRow || range.end.row <= config.firstRow) {\n this.renderer.scrollSelectionIntoView(this.selection.anchor, this.selection.lead);\n }\n\n break;\n\n default:\n break;\n }\n\n if (scrollIntoView == \"animate\") this.renderer.animateScrolling(this.curOp.scrollTop);\n }\n\n var sel = this.selection.toJSON();\n this.curOp.selectionAfter = sel;\n this.$lastSel = this.selection.toJSON();\n this.session.getUndoManager().addSelection(sel);\n this.prevOp = this.curOp;\n this.curOp = null;\n }\n };\n\n this.$mergeableCommands = [\"backspace\", \"del\", \"insertstring\"];\n\n this.$historyTracker = function (e) {\n if (!this.$mergeUndoDeltas) return;\n var prev = this.prevOp;\n var mergeableCommands = this.$mergeableCommands;\n var shouldMerge = prev.command && e.command.name == prev.command.name;\n\n if (e.command.name == \"insertstring\") {\n var text = e.args;\n if (this.mergeNextCommand === undefined) this.mergeNextCommand = true;\n shouldMerge = shouldMerge && this.mergeNextCommand // previous command allows to coalesce with\n && (!/\\s/.test(text) || /\\s/.test(prev.args)); // previous insertion was of same type\n\n this.mergeNextCommand = true;\n } else {\n shouldMerge = shouldMerge && mergeableCommands.indexOf(e.command.name) !== -1; // the command is mergeable\n }\n\n if (this.$mergeUndoDeltas != \"always\" && Date.now() - this.sequenceStartTime > 2000) {\n shouldMerge = false; // the sequence is too long\n }\n\n if (shouldMerge) this.session.mergeUndoDeltas = true;else if (mergeableCommands.indexOf(e.command.name) !== -1) this.sequenceStartTime = Date.now();\n };\n\n this.setKeyboardHandler = function (keyboardHandler, cb) {\n if (keyboardHandler && typeof keyboardHandler === \"string\" && keyboardHandler != \"ace\") {\n this.$keybindingId = keyboardHandler;\n\n var _self = this;\n\n config.loadModule([\"keybinding\", keyboardHandler], function (module) {\n if (_self.$keybindingId == keyboardHandler) _self.keyBinding.setKeyboardHandler(module && module.handler);\n cb && cb();\n });\n } else {\n this.$keybindingId = null;\n this.keyBinding.setKeyboardHandler(keyboardHandler);\n cb && cb();\n }\n };\n\n this.getKeyboardHandler = function () {\n return this.keyBinding.getKeyboardHandler();\n };\n\n this.setSession = function (session) {\n if (this.session == session) return;\n if (this.curOp) this.endOperation();\n this.curOp = {};\n var oldSession = this.session;\n\n if (oldSession) {\n this.session.off(\"change\", this.$onDocumentChange);\n this.session.off(\"changeMode\", this.$onChangeMode);\n this.session.off(\"tokenizerUpdate\", this.$onTokenizerUpdate);\n this.session.off(\"changeTabSize\", this.$onChangeTabSize);\n this.session.off(\"changeWrapLimit\", this.$onChangeWrapLimit);\n this.session.off(\"changeWrapMode\", this.$onChangeWrapMode);\n this.session.off(\"changeFold\", this.$onChangeFold);\n this.session.off(\"changeFrontMarker\", this.$onChangeFrontMarker);\n this.session.off(\"changeBackMarker\", this.$onChangeBackMarker);\n this.session.off(\"changeBreakpoint\", this.$onChangeBreakpoint);\n this.session.off(\"changeAnnotation\", this.$onChangeAnnotation);\n this.session.off(\"changeOverwrite\", this.$onCursorChange);\n this.session.off(\"changeScrollTop\", this.$onScrollTopChange);\n this.session.off(\"changeScrollLeft\", this.$onScrollLeftChange);\n var selection = this.session.getSelection();\n selection.off(\"changeCursor\", this.$onCursorChange);\n selection.off(\"changeSelection\", this.$onSelectionChange);\n }\n\n this.session = session;\n\n if (session) {\n this.$onDocumentChange = this.onDocumentChange.bind(this);\n session.on(\"change\", this.$onDocumentChange);\n this.renderer.setSession(session);\n this.$onChangeMode = this.onChangeMode.bind(this);\n session.on(\"changeMode\", this.$onChangeMode);\n this.$onTokenizerUpdate = this.onTokenizerUpdate.bind(this);\n session.on(\"tokenizerUpdate\", this.$onTokenizerUpdate);\n this.$onChangeTabSize = this.renderer.onChangeTabSize.bind(this.renderer);\n session.on(\"changeTabSize\", this.$onChangeTabSize);\n this.$onChangeWrapLimit = this.onChangeWrapLimit.bind(this);\n session.on(\"changeWrapLimit\", this.$onChangeWrapLimit);\n this.$onChangeWrapMode = this.onChangeWrapMode.bind(this);\n session.on(\"changeWrapMode\", this.$onChangeWrapMode);\n this.$onChangeFold = this.onChangeFold.bind(this);\n session.on(\"changeFold\", this.$onChangeFold);\n this.$onChangeFrontMarker = this.onChangeFrontMarker.bind(this);\n this.session.on(\"changeFrontMarker\", this.$onChangeFrontMarker);\n this.$onChangeBackMarker = this.onChangeBackMarker.bind(this);\n this.session.on(\"changeBackMarker\", this.$onChangeBackMarker);\n this.$onChangeBreakpoint = this.onChangeBreakpoint.bind(this);\n this.session.on(\"changeBreakpoint\", this.$onChangeBreakpoint);\n this.$onChangeAnnotation = this.onChangeAnnotation.bind(this);\n this.session.on(\"changeAnnotation\", this.$onChangeAnnotation);\n this.$onCursorChange = this.onCursorChange.bind(this);\n this.session.on(\"changeOverwrite\", this.$onCursorChange);\n this.$onScrollTopChange = this.onScrollTopChange.bind(this);\n this.session.on(\"changeScrollTop\", this.$onScrollTopChange);\n this.$onScrollLeftChange = this.onScrollLeftChange.bind(this);\n this.session.on(\"changeScrollLeft\", this.$onScrollLeftChange);\n this.selection = session.getSelection();\n this.selection.on(\"changeCursor\", this.$onCursorChange);\n this.$onSelectionChange = this.onSelectionChange.bind(this);\n this.selection.on(\"changeSelection\", this.$onSelectionChange);\n this.onChangeMode();\n this.onCursorChange();\n this.onScrollTopChange();\n this.onScrollLeftChange();\n this.onSelectionChange();\n this.onChangeFrontMarker();\n this.onChangeBackMarker();\n this.onChangeBreakpoint();\n this.onChangeAnnotation();\n this.session.getUseWrapMode() && this.renderer.adjustWrapLimit();\n this.renderer.updateFull();\n } else {\n this.selection = null;\n this.renderer.setSession(session);\n }\n\n this._signal(\"changeSession\", {\n session: session,\n oldSession: oldSession\n });\n\n this.curOp = null;\n oldSession && oldSession._signal(\"changeEditor\", {\n oldEditor: this\n });\n session && session._signal(\"changeEditor\", {\n editor: this\n });\n if (session && session.bgTokenizer) session.bgTokenizer.scheduleStart();\n };\n\n this.getSession = function () {\n return this.session;\n };\n\n this.setValue = function (val, cursorPos) {\n this.session.doc.setValue(val);\n if (!cursorPos) this.selectAll();else if (cursorPos == 1) this.navigateFileEnd();else if (cursorPos == -1) this.navigateFileStart();\n return val;\n };\n\n this.getValue = function () {\n return this.session.getValue();\n };\n\n this.getSelection = function () {\n return this.selection;\n };\n\n this.resize = function (force) {\n this.renderer.onResize(force);\n };\n\n this.setTheme = function (theme, cb) {\n this.renderer.setTheme(theme, cb);\n };\n\n this.getTheme = function () {\n return this.renderer.getTheme();\n };\n\n this.setStyle = function (style) {\n this.renderer.setStyle(style);\n };\n\n this.unsetStyle = function (style) {\n this.renderer.unsetStyle(style);\n };\n\n this.getFontSize = function () {\n return this.getOption(\"fontSize\") || dom.computedStyle(this.container).fontSize;\n };\n\n this.setFontSize = function (size) {\n this.setOption(\"fontSize\", size);\n };\n\n this.$highlightBrackets = function () {\n if (this.$highlightPending) {\n return;\n }\n\n var self = this;\n this.$highlightPending = true;\n setTimeout(function () {\n self.$highlightPending = false;\n var session = self.session;\n if (!session || !session.bgTokenizer) return;\n\n if (session.$bracketHighlight) {\n session.$bracketHighlight.markerIds.forEach(function (id) {\n session.removeMarker(id);\n });\n session.$bracketHighlight = null;\n }\n\n var ranges = session.getMatchingBracketRanges(self.getCursorPosition());\n if (!ranges && session.$mode.getMatching) ranges = session.$mode.getMatching(self.session);\n if (!ranges) return;\n var markerType = \"ace_bracket\";\n\n if (!Array.isArray(ranges)) {\n ranges = [ranges];\n } else if (ranges.length == 1) {\n markerType = \"ace_error_bracket\";\n }\n\n if (ranges.length == 2) {\n if (Range.comparePoints(ranges[0].end, ranges[1].start) == 0) ranges = [Range.fromPoints(ranges[0].start, ranges[1].end)];else if (Range.comparePoints(ranges[0].start, ranges[1].end) == 0) ranges = [Range.fromPoints(ranges[1].start, ranges[0].end)];\n }\n\n session.$bracketHighlight = {\n ranges: ranges,\n markerIds: ranges.map(function (range) {\n return session.addMarker(range, markerType, \"text\");\n })\n };\n }, 50);\n };\n\n this.$highlightTags = function () {\n if (this.$highlightTagPending) return;\n var self = this;\n this.$highlightTagPending = true;\n setTimeout(function () {\n self.$highlightTagPending = false;\n var session = self.session;\n if (!session || !session.bgTokenizer) return;\n var pos = self.getCursorPosition();\n var iterator = new TokenIterator(self.session, pos.row, pos.column);\n var token = iterator.getCurrentToken();\n\n if (!token || !/\\b(?:tag-open|tag-name)/.test(token.type)) {\n session.removeMarker(session.$tagHighlight);\n session.$tagHighlight = null;\n return;\n }\n\n if (token.type.indexOf(\"tag-open\") !== -1) {\n token = iterator.stepForward();\n if (!token) return;\n }\n\n var tag = token.value;\n var currentTag = token.value;\n var depth = 0;\n var prevToken = iterator.stepBackward();\n\n if (prevToken.value === '<') {\n do {\n prevToken = token;\n token = iterator.stepForward();\n\n if (token) {\n if (token.type.indexOf('tag-name') !== -1) {\n currentTag = token.value;\n\n if (tag === currentTag) {\n if (prevToken.value === '<') {\n depth++;\n } else if (prevToken.value === '') {\n // self closing tag\n depth--;\n }\n }\n } while (token && depth >= 0);\n } else {\n do {\n token = prevToken;\n prevToken = iterator.stepBackward();\n\n if (token) {\n if (token.type.indexOf('tag-name') !== -1) {\n if (tag === token.value) {\n if (prevToken.value === '<') {\n depth++;\n } else if (prevToken.value === '') {\n // self closing tag\n var stepCount = 0;\n var tmpToken = prevToken;\n\n while (tmpToken) {\n if (tmpToken.type.indexOf('tag-name') !== -1 && tmpToken.value === tag) {\n depth--;\n break;\n } else if (tmpToken.value === '<') {\n break;\n }\n\n tmpToken = iterator.stepBackward();\n stepCount++;\n }\n\n for (var i = 0; i < stepCount; i++) {\n iterator.stepForward();\n }\n }\n }\n } while (prevToken && depth <= 0);\n\n iterator.stepForward();\n }\n\n if (!token) {\n session.removeMarker(session.$tagHighlight);\n session.$tagHighlight = null;\n return;\n }\n\n var row = iterator.getCurrentTokenRow();\n var column = iterator.getCurrentTokenColumn();\n var range = new Range(row, column, row, column + token.value.length);\n var sbm = session.$backMarkers[session.$tagHighlight];\n\n if (session.$tagHighlight && sbm != undefined && range.compareRange(sbm.range) !== 0) {\n session.removeMarker(session.$tagHighlight);\n session.$tagHighlight = null;\n }\n\n if (!session.$tagHighlight) session.$tagHighlight = session.addMarker(range, \"ace_bracket\", \"text\");\n }, 50);\n };\n\n this.focus = function () {\n var _self = this;\n\n setTimeout(function () {\n if (!_self.isFocused()) _self.textInput.focus();\n });\n this.textInput.focus();\n };\n\n this.isFocused = function () {\n return this.textInput.isFocused();\n };\n\n this.blur = function () {\n this.textInput.blur();\n };\n\n this.onFocus = function (e) {\n if (this.$isFocused) return;\n this.$isFocused = true;\n this.renderer.showCursor();\n this.renderer.visualizeFocus();\n\n this._emit(\"focus\", e);\n };\n\n this.onBlur = function (e) {\n if (!this.$isFocused) return;\n this.$isFocused = false;\n this.renderer.hideCursor();\n this.renderer.visualizeBlur();\n\n this._emit(\"blur\", e);\n };\n\n this.$cursorChange = function () {\n this.renderer.updateCursor();\n this.$highlightBrackets();\n this.$highlightTags();\n this.$updateHighlightActiveLine();\n };\n\n this.onDocumentChange = function (delta) {\n var wrap = this.session.$useWrapMode;\n var lastRow = delta.start.row == delta.end.row ? delta.end.row : Infinity;\n this.renderer.updateLines(delta.start.row, lastRow, wrap);\n\n this._signal(\"change\", delta);\n\n this.$cursorChange();\n };\n\n this.onTokenizerUpdate = function (e) {\n var rows = e.data;\n this.renderer.updateLines(rows.first, rows.last);\n };\n\n this.onScrollTopChange = function () {\n this.renderer.scrollToY(this.session.getScrollTop());\n };\n\n this.onScrollLeftChange = function () {\n this.renderer.scrollToX(this.session.getScrollLeft());\n };\n\n this.onCursorChange = function () {\n this.$cursorChange();\n\n this._signal(\"changeSelection\");\n };\n\n this.$updateHighlightActiveLine = function () {\n var session = this.getSession();\n var highlight;\n\n if (this.$highlightActiveLine) {\n if (this.$selectionStyle != \"line\" || !this.selection.isMultiLine()) highlight = this.getCursorPosition();\n if (this.renderer.theme && this.renderer.theme.$selectionColorConflict && !this.selection.isEmpty()) highlight = false;\n if (this.renderer.$maxLines && this.session.getLength() === 1 && !(this.renderer.$minLines > 1)) highlight = false;\n }\n\n if (session.$highlightLineMarker && !highlight) {\n session.removeMarker(session.$highlightLineMarker.id);\n session.$highlightLineMarker = null;\n } else if (!session.$highlightLineMarker && highlight) {\n var range = new Range(highlight.row, highlight.column, highlight.row, Infinity);\n range.id = session.addMarker(range, \"ace_active-line\", \"screenLine\");\n session.$highlightLineMarker = range;\n } else if (highlight) {\n session.$highlightLineMarker.start.row = highlight.row;\n session.$highlightLineMarker.end.row = highlight.row;\n session.$highlightLineMarker.start.column = highlight.column;\n\n session._signal(\"changeBackMarker\");\n }\n };\n\n this.onSelectionChange = function (e) {\n var session = this.session;\n\n if (session.$selectionMarker) {\n session.removeMarker(session.$selectionMarker);\n }\n\n session.$selectionMarker = null;\n\n if (!this.selection.isEmpty()) {\n var range = this.selection.getRange();\n var style = this.getSelectionStyle();\n session.$selectionMarker = session.addMarker(range, \"ace_selection\", style);\n } else {\n this.$updateHighlightActiveLine();\n }\n\n var re = this.$highlightSelectedWord && this.$getSelectionHighLightRegexp();\n this.session.highlight(re);\n\n this._signal(\"changeSelection\");\n };\n\n this.$getSelectionHighLightRegexp = function () {\n var session = this.session;\n var selection = this.getSelectionRange();\n if (selection.isEmpty() || selection.isMultiLine()) return;\n var startColumn = selection.start.column;\n var endColumn = selection.end.column;\n var line = session.getLine(selection.start.row);\n var needle = line.substring(startColumn, endColumn);\n if (needle.length > 5000 || !/[\\w\\d]/.test(needle)) return;\n var re = this.$search.$assembleRegExp({\n wholeWord: true,\n caseSensitive: true,\n needle: needle\n });\n var wordWithBoundary = line.substring(startColumn - 1, endColumn + 1);\n if (!re.test(wordWithBoundary)) return;\n return re;\n };\n\n this.onChangeFrontMarker = function () {\n this.renderer.updateFrontMarkers();\n };\n\n this.onChangeBackMarker = function () {\n this.renderer.updateBackMarkers();\n };\n\n this.onChangeBreakpoint = function () {\n this.renderer.updateBreakpoints();\n };\n\n this.onChangeAnnotation = function () {\n this.renderer.setAnnotations(this.session.getAnnotations());\n };\n\n this.onChangeMode = function (e) {\n this.renderer.updateText();\n\n this._emit(\"changeMode\", e);\n };\n\n this.onChangeWrapLimit = function () {\n this.renderer.updateFull();\n };\n\n this.onChangeWrapMode = function () {\n this.renderer.onResize(true);\n };\n\n this.onChangeFold = function () {\n this.$updateHighlightActiveLine();\n this.renderer.updateFull();\n };\n\n this.getSelectedText = function () {\n return this.session.getTextRange(this.getSelectionRange());\n };\n\n this.getCopyText = function () {\n var text = this.getSelectedText();\n var nl = this.session.doc.getNewLineCharacter();\n var copyLine = false;\n\n if (!text && this.$copyWithEmptySelection) {\n copyLine = true;\n var ranges = this.selection.getAllRanges();\n\n for (var i = 0; i < ranges.length; i++) {\n var range = ranges[i];\n if (i && ranges[i - 1].start.row == range.start.row) continue;\n text += this.session.getLine(range.start.row) + nl;\n }\n }\n\n var e = {\n text: text\n };\n\n this._signal(\"copy\", e);\n\n clipboard.lineMode = copyLine ? e.text : false;\n return e.text;\n };\n\n this.onCopy = function () {\n this.commands.exec(\"copy\", this);\n };\n\n this.onCut = function () {\n this.commands.exec(\"cut\", this);\n };\n\n this.onPaste = function (text, event) {\n var e = {\n text: text,\n event: event\n };\n this.commands.exec(\"paste\", this, e);\n };\n\n this.$handlePaste = function (e) {\n if (typeof e == \"string\") e = {\n text: e\n };\n\n this._signal(\"paste\", e);\n\n var text = e.text;\n var lineMode = text === clipboard.lineMode;\n var session = this.session;\n\n if (!this.inMultiSelectMode || this.inVirtualSelectionMode) {\n if (lineMode) session.insert({\n row: this.selection.lead.row,\n column: 0\n }, text);else this.insert(text);\n } else if (lineMode) {\n this.selection.rangeList.ranges.forEach(function (range) {\n session.insert({\n row: range.start.row,\n column: 0\n }, text);\n });\n } else {\n var lines = text.split(/\\r\\n|\\r|\\n/);\n var ranges = this.selection.rangeList.ranges;\n var isFullLine = lines.length == 2 && (!lines[0] || !lines[1]);\n if (lines.length != ranges.length || isFullLine) return this.commands.exec(\"insertstring\", this, text);\n\n for (var i = ranges.length; i--;) {\n var range = ranges[i];\n if (!range.isEmpty()) session.remove(range);\n session.insert(range.start, lines[i]);\n }\n }\n };\n\n this.execCommand = function (command, args) {\n return this.commands.exec(command, this, args);\n };\n\n this.insert = function (text, pasted) {\n var session = this.session;\n var mode = session.getMode();\n var cursor = this.getCursorPosition();\n\n if (this.getBehavioursEnabled() && !pasted) {\n var transform = mode.transformAction(session.getState(cursor.row), 'insertion', this, session, text);\n\n if (transform) {\n if (text !== transform.text) {\n if (!this.inVirtualSelectionMode) {\n this.session.mergeUndoDeltas = false;\n this.mergeNextCommand = false;\n }\n }\n\n text = transform.text;\n }\n }\n\n if (text == \"\\t\") text = this.session.getTabString();\n\n if (!this.selection.isEmpty()) {\n var range = this.getSelectionRange();\n cursor = this.session.remove(range);\n this.clearSelection();\n } else if (this.session.getOverwrite() && text.indexOf(\"\\n\") == -1) {\n var range = new Range.fromPoints(cursor, cursor);\n range.end.column += text.length;\n this.session.remove(range);\n }\n\n if (text == \"\\n\" || text == \"\\r\\n\") {\n var line = session.getLine(cursor.row);\n\n if (cursor.column > line.search(/\\S|$/)) {\n var d = line.substr(cursor.column).search(/\\S|$/);\n session.doc.removeInLine(cursor.row, cursor.column, cursor.column + d);\n }\n }\n\n this.clearSelection();\n var start = cursor.column;\n var lineState = session.getState(cursor.row);\n var line = session.getLine(cursor.row);\n var shouldOutdent = mode.checkOutdent(lineState, line, text);\n session.insert(cursor, text);\n\n if (transform && transform.selection) {\n if (transform.selection.length == 2) {\n // Transform relative to the current column\n this.selection.setSelectionRange(new Range(cursor.row, start + transform.selection[0], cursor.row, start + transform.selection[1]));\n } else {\n // Transform relative to the current row.\n this.selection.setSelectionRange(new Range(cursor.row + transform.selection[0], transform.selection[1], cursor.row + transform.selection[2], transform.selection[3]));\n }\n }\n\n if (this.$enableAutoIndent) {\n if (session.getDocument().isNewLine(text)) {\n var lineIndent = mode.getNextLineIndent(lineState, line.slice(0, cursor.column), session.getTabString());\n session.insert({\n row: cursor.row + 1,\n column: 0\n }, lineIndent);\n }\n\n if (shouldOutdent) mode.autoOutdent(lineState, session, cursor.row);\n }\n };\n\n this.autoIndent = function () {\n var session = this.session;\n var mode = session.getMode();\n var startRow, endRow;\n\n if (this.selection.isEmpty()) {\n startRow = 0;\n endRow = session.doc.getLength() - 1;\n } else {\n var selectedRange = this.getSelectionRange();\n startRow = selectedRange.start.row;\n endRow = selectedRange.end.row;\n }\n\n var prevLineState = \"\";\n var prevLine = \"\";\n var lineIndent = \"\";\n var line, currIndent, range;\n var tab = session.getTabString();\n\n for (var row = startRow; row <= endRow; row++) {\n if (row > 0) {\n prevLineState = session.getState(row - 1);\n prevLine = session.getLine(row - 1);\n lineIndent = mode.getNextLineIndent(prevLineState, prevLine, tab);\n }\n\n line = session.getLine(row);\n currIndent = mode.$getIndent(line);\n\n if (lineIndent !== currIndent) {\n if (currIndent.length > 0) {\n range = new Range(row, 0, row, currIndent.length);\n session.remove(range);\n }\n\n if (lineIndent.length > 0) {\n session.insert({\n row: row,\n column: 0\n }, lineIndent);\n }\n }\n\n mode.autoOutdent(prevLineState, session, row);\n }\n };\n\n this.onTextInput = function (text, composition) {\n if (!composition) return this.keyBinding.onTextInput(text);\n this.startOperation({\n command: {\n name: \"insertstring\"\n }\n });\n var applyComposition = this.applyComposition.bind(this, text, composition);\n if (this.selection.rangeCount) this.forEachSelection(applyComposition);else applyComposition();\n this.endOperation();\n };\n\n this.applyComposition = function (text, composition) {\n if (composition.extendLeft || composition.extendRight) {\n var r = this.selection.getRange();\n r.start.column -= composition.extendLeft;\n r.end.column += composition.extendRight;\n\n if (r.start.column < 0) {\n r.start.row--;\n r.start.column += this.session.getLine(r.start.row).length + 1;\n }\n\n this.selection.setRange(r);\n if (!text && !r.isEmpty()) this.remove();\n }\n\n if (text || !this.selection.isEmpty()) this.insert(text, true);\n\n if (composition.restoreStart || composition.restoreEnd) {\n var r = this.selection.getRange();\n r.start.column -= composition.restoreStart;\n r.end.column -= composition.restoreEnd;\n this.selection.setRange(r);\n }\n };\n\n this.onCommandKey = function (e, hashId, keyCode) {\n return this.keyBinding.onCommandKey(e, hashId, keyCode);\n };\n\n this.setOverwrite = function (overwrite) {\n this.session.setOverwrite(overwrite);\n };\n\n this.getOverwrite = function () {\n return this.session.getOverwrite();\n };\n\n this.toggleOverwrite = function () {\n this.session.toggleOverwrite();\n };\n\n this.setScrollSpeed = function (speed) {\n this.setOption(\"scrollSpeed\", speed);\n };\n\n this.getScrollSpeed = function () {\n return this.getOption(\"scrollSpeed\");\n };\n\n this.setDragDelay = function (dragDelay) {\n this.setOption(\"dragDelay\", dragDelay);\n };\n\n this.getDragDelay = function () {\n return this.getOption(\"dragDelay\");\n };\n\n this.setSelectionStyle = function (val) {\n this.setOption(\"selectionStyle\", val);\n };\n\n this.getSelectionStyle = function () {\n return this.getOption(\"selectionStyle\");\n };\n\n this.setHighlightActiveLine = function (shouldHighlight) {\n this.setOption(\"highlightActiveLine\", shouldHighlight);\n };\n\n this.getHighlightActiveLine = function () {\n return this.getOption(\"highlightActiveLine\");\n };\n\n this.setHighlightGutterLine = function (shouldHighlight) {\n this.setOption(\"highlightGutterLine\", shouldHighlight);\n };\n\n this.getHighlightGutterLine = function () {\n return this.getOption(\"highlightGutterLine\");\n };\n\n this.setHighlightSelectedWord = function (shouldHighlight) {\n this.setOption(\"highlightSelectedWord\", shouldHighlight);\n };\n\n this.getHighlightSelectedWord = function () {\n return this.$highlightSelectedWord;\n };\n\n this.setAnimatedScroll = function (shouldAnimate) {\n this.renderer.setAnimatedScroll(shouldAnimate);\n };\n\n this.getAnimatedScroll = function () {\n return this.renderer.getAnimatedScroll();\n };\n\n this.setShowInvisibles = function (showInvisibles) {\n this.renderer.setShowInvisibles(showInvisibles);\n };\n\n this.getShowInvisibles = function () {\n return this.renderer.getShowInvisibles();\n };\n\n this.setDisplayIndentGuides = function (display) {\n this.renderer.setDisplayIndentGuides(display);\n };\n\n this.getDisplayIndentGuides = function () {\n return this.renderer.getDisplayIndentGuides();\n };\n\n this.setShowPrintMargin = function (showPrintMargin) {\n this.renderer.setShowPrintMargin(showPrintMargin);\n };\n\n this.getShowPrintMargin = function () {\n return this.renderer.getShowPrintMargin();\n };\n\n this.setPrintMarginColumn = function (showPrintMargin) {\n this.renderer.setPrintMarginColumn(showPrintMargin);\n };\n\n this.getPrintMarginColumn = function () {\n return this.renderer.getPrintMarginColumn();\n };\n\n this.setReadOnly = function (readOnly) {\n this.setOption(\"readOnly\", readOnly);\n };\n\n this.getReadOnly = function () {\n return this.getOption(\"readOnly\");\n };\n\n this.setBehavioursEnabled = function (enabled) {\n this.setOption(\"behavioursEnabled\", enabled);\n };\n\n this.getBehavioursEnabled = function () {\n return this.getOption(\"behavioursEnabled\");\n };\n\n this.setWrapBehavioursEnabled = function (enabled) {\n this.setOption(\"wrapBehavioursEnabled\", enabled);\n };\n\n this.getWrapBehavioursEnabled = function () {\n return this.getOption(\"wrapBehavioursEnabled\");\n };\n\n this.setShowFoldWidgets = function (show) {\n this.setOption(\"showFoldWidgets\", show);\n };\n\n this.getShowFoldWidgets = function () {\n return this.getOption(\"showFoldWidgets\");\n };\n\n this.setFadeFoldWidgets = function (fade) {\n this.setOption(\"fadeFoldWidgets\", fade);\n };\n\n this.getFadeFoldWidgets = function () {\n return this.getOption(\"fadeFoldWidgets\");\n };\n\n this.remove = function (dir) {\n if (this.selection.isEmpty()) {\n if (dir == \"left\") this.selection.selectLeft();else this.selection.selectRight();\n }\n\n var range = this.getSelectionRange();\n\n if (this.getBehavioursEnabled()) {\n var session = this.session;\n var state = session.getState(range.start.row);\n var new_range = session.getMode().transformAction(state, 'deletion', this, session, range);\n\n if (range.end.column === 0) {\n var text = session.getTextRange(range);\n\n if (text[text.length - 1] == \"\\n\") {\n var line = session.getLine(range.end.row);\n\n if (/^\\s+$/.test(line)) {\n range.end.column = line.length;\n }\n }\n }\n\n if (new_range) range = new_range;\n }\n\n this.session.remove(range);\n this.clearSelection();\n };\n\n this.removeWordRight = function () {\n if (this.selection.isEmpty()) this.selection.selectWordRight();\n this.session.remove(this.getSelectionRange());\n this.clearSelection();\n };\n\n this.removeWordLeft = function () {\n if (this.selection.isEmpty()) this.selection.selectWordLeft();\n this.session.remove(this.getSelectionRange());\n this.clearSelection();\n };\n\n this.removeToLineStart = function () {\n if (this.selection.isEmpty()) this.selection.selectLineStart();\n if (this.selection.isEmpty()) this.selection.selectLeft();\n this.session.remove(this.getSelectionRange());\n this.clearSelection();\n };\n\n this.removeToLineEnd = function () {\n if (this.selection.isEmpty()) this.selection.selectLineEnd();\n var range = this.getSelectionRange();\n\n if (range.start.column == range.end.column && range.start.row == range.end.row) {\n range.end.column = 0;\n range.end.row++;\n }\n\n this.session.remove(range);\n this.clearSelection();\n };\n\n this.splitLine = function () {\n if (!this.selection.isEmpty()) {\n this.session.remove(this.getSelectionRange());\n this.clearSelection();\n }\n\n var cursor = this.getCursorPosition();\n this.insert(\"\\n\");\n this.moveCursorToPosition(cursor);\n };\n\n this.transposeLetters = function () {\n if (!this.selection.isEmpty()) {\n return;\n }\n\n var cursor = this.getCursorPosition();\n var column = cursor.column;\n if (column === 0) return;\n var line = this.session.getLine(cursor.row);\n var swap, range;\n\n if (column < line.length) {\n swap = line.charAt(column) + line.charAt(column - 1);\n range = new Range(cursor.row, column - 1, cursor.row, column + 1);\n } else {\n swap = line.charAt(column - 1) + line.charAt(column - 2);\n range = new Range(cursor.row, column - 2, cursor.row, column);\n }\n\n this.session.replace(range, swap);\n this.session.selection.moveToPosition(range.end);\n };\n\n this.toLowerCase = function () {\n var originalRange = this.getSelectionRange();\n\n if (this.selection.isEmpty()) {\n this.selection.selectWord();\n }\n\n var range = this.getSelectionRange();\n var text = this.session.getTextRange(range);\n this.session.replace(range, text.toLowerCase());\n this.selection.setSelectionRange(originalRange);\n };\n\n this.toUpperCase = function () {\n var originalRange = this.getSelectionRange();\n\n if (this.selection.isEmpty()) {\n this.selection.selectWord();\n }\n\n var range = this.getSelectionRange();\n var text = this.session.getTextRange(range);\n this.session.replace(range, text.toUpperCase());\n this.selection.setSelectionRange(originalRange);\n };\n\n this.indent = function () {\n var session = this.session;\n var range = this.getSelectionRange();\n\n if (range.start.row < range.end.row) {\n var rows = this.$getSelectedRows();\n session.indentRows(rows.first, rows.last, \"\\t\");\n return;\n } else if (range.start.column < range.end.column) {\n var text = session.getTextRange(range);\n\n if (!/^\\s+$/.test(text)) {\n var rows = this.$getSelectedRows();\n session.indentRows(rows.first, rows.last, \"\\t\");\n return;\n }\n }\n\n var line = session.getLine(range.start.row);\n var position = range.start;\n var size = session.getTabSize();\n var column = session.documentToScreenColumn(position.row, position.column);\n\n if (this.session.getUseSoftTabs()) {\n var count = size - column % size;\n var indentString = lang.stringRepeat(\" \", count);\n } else {\n var count = column % size;\n\n while (line[range.start.column - 1] == \" \" && count) {\n range.start.column--;\n count--;\n }\n\n this.selection.setSelectionRange(range);\n indentString = \"\\t\";\n }\n\n return this.insert(indentString);\n };\n\n this.blockIndent = function () {\n var rows = this.$getSelectedRows();\n this.session.indentRows(rows.first, rows.last, \"\\t\");\n };\n\n this.blockOutdent = function () {\n var selection = this.session.getSelection();\n this.session.outdentRows(selection.getRange());\n };\n\n this.sortLines = function () {\n var rows = this.$getSelectedRows();\n var session = this.session;\n var lines = [];\n\n for (var i = rows.first; i <= rows.last; i++) {\n lines.push(session.getLine(i));\n }\n\n lines.sort(function (a, b) {\n if (a.toLowerCase() < b.toLowerCase()) return -1;\n if (a.toLowerCase() > b.toLowerCase()) return 1;\n return 0;\n });\n var deleteRange = new Range(0, 0, 0, 0);\n\n for (var i = rows.first; i <= rows.last; i++) {\n var line = session.getLine(i);\n deleteRange.start.row = i;\n deleteRange.end.row = i;\n deleteRange.end.column = line.length;\n session.replace(deleteRange, lines[i - rows.first]);\n }\n };\n\n this.toggleCommentLines = function () {\n var state = this.session.getState(this.getCursorPosition().row);\n var rows = this.$getSelectedRows();\n this.session.getMode().toggleCommentLines(state, this.session, rows.first, rows.last);\n };\n\n this.toggleBlockComment = function () {\n var cursor = this.getCursorPosition();\n var state = this.session.getState(cursor.row);\n var range = this.getSelectionRange();\n this.session.getMode().toggleBlockComment(state, this.session, range, cursor);\n };\n\n this.getNumberAt = function (row, column) {\n var _numberRx = /[\\-]?[0-9]+(?:\\.[0-9]+)?/g;\n _numberRx.lastIndex = 0;\n var s = this.session.getLine(row);\n\n while (_numberRx.lastIndex < column) {\n var m = _numberRx.exec(s);\n\n if (m.index <= column && m.index + m[0].length >= column) {\n var number = {\n value: m[0],\n start: m.index,\n end: m.index + m[0].length\n };\n return number;\n }\n }\n\n return null;\n };\n\n this.modifyNumber = function (amount) {\n var row = this.selection.getCursor().row;\n var column = this.selection.getCursor().column;\n var charRange = new Range(row, column - 1, row, column);\n var c = this.session.getTextRange(charRange);\n\n if (!isNaN(parseFloat(c)) && isFinite(c)) {\n var nr = this.getNumberAt(row, column);\n\n if (nr) {\n var fp = nr.value.indexOf(\".\") >= 0 ? nr.start + nr.value.indexOf(\".\") + 1 : nr.end;\n var decimals = nr.start + nr.value.length - fp;\n var t = parseFloat(nr.value);\n t *= Math.pow(10, decimals);\n\n if (fp !== nr.end && column < fp) {\n amount *= Math.pow(10, nr.end - column - 1);\n } else {\n amount *= Math.pow(10, nr.end - column);\n }\n\n t += amount;\n t /= Math.pow(10, decimals);\n var nnr = t.toFixed(decimals);\n var replaceRange = new Range(row, nr.start, row, nr.end);\n this.session.replace(replaceRange, nnr);\n this.moveCursorTo(row, Math.max(nr.start + 1, column + nnr.length - nr.value.length));\n }\n } else {\n this.toggleWord();\n }\n };\n\n this.$toggleWordPairs = [[\"first\", \"last\"], [\"true\", \"false\"], [\"yes\", \"no\"], [\"width\", \"height\"], [\"top\", \"bottom\"], [\"right\", \"left\"], [\"on\", \"off\"], [\"x\", \"y\"], [\"get\", \"set\"], [\"max\", \"min\"], [\"horizontal\", \"vertical\"], [\"show\", \"hide\"], [\"add\", \"remove\"], [\"up\", \"down\"], [\"before\", \"after\"], [\"even\", \"odd\"], [\"in\", \"out\"], [\"inside\", \"outside\"], [\"next\", \"previous\"], [\"increase\", \"decrease\"], [\"attach\", \"detach\"], [\"&&\", \"||\"], [\"==\", \"!=\"]];\n\n this.toggleWord = function () {\n var row = this.selection.getCursor().row;\n var column = this.selection.getCursor().column;\n this.selection.selectWord();\n var currentState = this.getSelectedText();\n var currWordStart = this.selection.getWordRange().start.column;\n var wordParts = currentState.replace(/([a-z]+|[A-Z]+)(?=[A-Z_]|$)/g, '$1 ').split(/\\s/);\n var delta = column - currWordStart - 1;\n if (delta < 0) delta = 0;\n var curLength = 0,\n itLength = 0;\n var that = this;\n\n if (currentState.match(/[A-Za-z0-9_]+/)) {\n wordParts.forEach(function (item, i) {\n itLength = curLength + item.length;\n\n if (delta >= curLength && delta <= itLength) {\n currentState = item;\n that.selection.clearSelection();\n that.moveCursorTo(row, curLength + currWordStart);\n that.selection.selectTo(row, itLength + currWordStart);\n }\n\n curLength = itLength;\n });\n }\n\n var wordPairs = this.$toggleWordPairs;\n var reg;\n\n for (var i = 0; i < wordPairs.length; i++) {\n var item = wordPairs[i];\n\n for (var j = 0; j <= 1; j++) {\n var negate = +!j;\n var firstCondition = currentState.match(new RegExp('^\\\\s?_?(' + lang.escapeRegExp(item[j]) + ')\\\\s?$', 'i'));\n\n if (firstCondition) {\n var secondCondition = currentState.match(new RegExp('([_]|^|\\\\s)(' + lang.escapeRegExp(firstCondition[1]) + ')($|\\\\s)', 'g'));\n\n if (secondCondition) {\n reg = currentState.replace(new RegExp(lang.escapeRegExp(item[j]), 'i'), function (result) {\n var res = item[negate];\n\n if (result.toUpperCase() == result) {\n res = res.toUpperCase();\n } else if (result.charAt(0).toUpperCase() == result.charAt(0)) {\n res = res.substr(0, 0) + item[negate].charAt(0).toUpperCase() + res.substr(1);\n }\n\n return res;\n });\n this.insert(reg);\n reg = \"\";\n }\n }\n }\n }\n };\n\n this.removeLines = function () {\n var rows = this.$getSelectedRows();\n this.session.removeFullLines(rows.first, rows.last);\n this.clearSelection();\n };\n\n this.duplicateSelection = function () {\n var sel = this.selection;\n var doc = this.session;\n var range = sel.getRange();\n var reverse = sel.isBackwards();\n\n if (range.isEmpty()) {\n var row = range.start.row;\n doc.duplicateLines(row, row);\n } else {\n var point = reverse ? range.start : range.end;\n var endPoint = doc.insert(point, doc.getTextRange(range), false);\n range.start = point;\n range.end = endPoint;\n sel.setSelectionRange(range, reverse);\n }\n };\n\n this.moveLinesDown = function () {\n this.$moveLines(1, false);\n };\n\n this.moveLinesUp = function () {\n this.$moveLines(-1, false);\n };\n\n this.moveText = function (range, toPosition, copy) {\n return this.session.moveText(range, toPosition, copy);\n };\n\n this.copyLinesUp = function () {\n this.$moveLines(-1, true);\n };\n\n this.copyLinesDown = function () {\n this.$moveLines(1, true);\n };\n\n this.$moveLines = function (dir, copy) {\n var rows, moved;\n var selection = this.selection;\n\n if (!selection.inMultiSelectMode || this.inVirtualSelectionMode) {\n var range = selection.toOrientedRange();\n rows = this.$getSelectedRows(range);\n moved = this.session.$moveLines(rows.first, rows.last, copy ? 0 : dir);\n if (copy && dir == -1) moved = 0;\n range.moveBy(moved, 0);\n selection.fromOrientedRange(range);\n } else {\n var ranges = selection.rangeList.ranges;\n selection.rangeList.detach(this.session);\n this.inVirtualSelectionMode = true;\n var diff = 0;\n var totalDiff = 0;\n var l = ranges.length;\n\n for (var i = 0; i < l; i++) {\n var rangeIndex = i;\n ranges[i].moveBy(diff, 0);\n rows = this.$getSelectedRows(ranges[i]);\n var first = rows.first;\n var last = rows.last;\n\n while (++i < l) {\n if (totalDiff) ranges[i].moveBy(totalDiff, 0);\n var subRows = this.$getSelectedRows(ranges[i]);\n if (copy && subRows.first != last) break;else if (!copy && subRows.first > last + 1) break;\n last = subRows.last;\n }\n\n i--;\n diff = this.session.$moveLines(first, last, copy ? 0 : dir);\n if (copy && dir == -1) rangeIndex = i + 1;\n\n while (rangeIndex <= i) {\n ranges[rangeIndex].moveBy(diff, 0);\n rangeIndex++;\n }\n\n if (!copy) diff = 0;\n totalDiff += diff;\n }\n\n selection.fromOrientedRange(selection.ranges[0]);\n selection.rangeList.attach(this.session);\n this.inVirtualSelectionMode = false;\n }\n };\n\n this.$getSelectedRows = function (range) {\n range = (range || this.getSelectionRange()).collapseRows();\n return {\n first: this.session.getRowFoldStart(range.start.row),\n last: this.session.getRowFoldEnd(range.end.row)\n };\n };\n\n this.onCompositionStart = function (compositionState) {\n this.renderer.showComposition(compositionState);\n };\n\n this.onCompositionUpdate = function (text) {\n this.renderer.setCompositionText(text);\n };\n\n this.onCompositionEnd = function () {\n this.renderer.hideComposition();\n };\n\n this.getFirstVisibleRow = function () {\n return this.renderer.getFirstVisibleRow();\n };\n\n this.getLastVisibleRow = function () {\n return this.renderer.getLastVisibleRow();\n };\n\n this.isRowVisible = function (row) {\n return row >= this.getFirstVisibleRow() && row <= this.getLastVisibleRow();\n };\n\n this.isRowFullyVisible = function (row) {\n return row >= this.renderer.getFirstFullyVisibleRow() && row <= this.renderer.getLastFullyVisibleRow();\n };\n\n this.$getVisibleRowCount = function () {\n return this.renderer.getScrollBottomRow() - this.renderer.getScrollTopRow() + 1;\n };\n\n this.$moveByPage = function (dir, select) {\n var renderer = this.renderer;\n var config = this.renderer.layerConfig;\n var rows = dir * Math.floor(config.height / config.lineHeight);\n\n if (select === true) {\n this.selection.$moveSelection(function () {\n this.moveCursorBy(rows, 0);\n });\n } else if (select === false) {\n this.selection.moveCursorBy(rows, 0);\n this.selection.clearSelection();\n }\n\n var scrollTop = renderer.scrollTop;\n renderer.scrollBy(0, rows * config.lineHeight);\n if (select != null) renderer.scrollCursorIntoView(null, 0.5);\n renderer.animateScrolling(scrollTop);\n };\n\n this.selectPageDown = function () {\n this.$moveByPage(1, true);\n };\n\n this.selectPageUp = function () {\n this.$moveByPage(-1, true);\n };\n\n this.gotoPageDown = function () {\n this.$moveByPage(1, false);\n };\n\n this.gotoPageUp = function () {\n this.$moveByPage(-1, false);\n };\n\n this.scrollPageDown = function () {\n this.$moveByPage(1);\n };\n\n this.scrollPageUp = function () {\n this.$moveByPage(-1);\n };\n\n this.scrollToRow = function (row) {\n this.renderer.scrollToRow(row);\n };\n\n this.scrollToLine = function (line, center, animate, callback) {\n this.renderer.scrollToLine(line, center, animate, callback);\n };\n\n this.centerSelection = function () {\n var range = this.getSelectionRange();\n var pos = {\n row: Math.floor(range.start.row + (range.end.row - range.start.row) / 2),\n column: Math.floor(range.start.column + (range.end.column - range.start.column) / 2)\n };\n this.renderer.alignCursor(pos, 0.5);\n };\n\n this.getCursorPosition = function () {\n return this.selection.getCursor();\n };\n\n this.getCursorPositionScreen = function () {\n return this.session.documentToScreenPosition(this.getCursorPosition());\n };\n\n this.getSelectionRange = function () {\n return this.selection.getRange();\n };\n\n this.selectAll = function () {\n this.selection.selectAll();\n };\n\n this.clearSelection = function () {\n this.selection.clearSelection();\n };\n\n this.moveCursorTo = function (row, column) {\n this.selection.moveCursorTo(row, column);\n };\n\n this.moveCursorToPosition = function (pos) {\n this.selection.moveCursorToPosition(pos);\n };\n\n this.jumpToMatching = function (select, expand) {\n var cursor = this.getCursorPosition();\n var iterator = new TokenIterator(this.session, cursor.row, cursor.column);\n var prevToken = iterator.getCurrentToken();\n var token = prevToken || iterator.stepForward();\n if (!token) return;\n var matchType;\n var found = false;\n var depth = {};\n var i = cursor.column - token.start;\n var bracketType;\n var brackets = {\n \")\": \"(\",\n \"(\": \"(\",\n \"]\": \"[\",\n \"[\": \"[\",\n \"{\": \"{\",\n \"}\": \"{\"\n };\n\n do {\n if (token.value.match(/[{}()\\[\\]]/g)) {\n for (; i < token.value.length && !found; i++) {\n if (!brackets[token.value[i]]) {\n continue;\n }\n\n bracketType = brackets[token.value[i]] + '.' + token.type.replace(\"rparen\", \"lparen\");\n\n if (isNaN(depth[bracketType])) {\n depth[bracketType] = 0;\n }\n\n switch (token.value[i]) {\n case '(':\n case '[':\n case '{':\n depth[bracketType]++;\n break;\n\n case ')':\n case ']':\n case '}':\n depth[bracketType]--;\n\n if (depth[bracketType] === -1) {\n matchType = 'bracket';\n found = true;\n }\n\n break;\n }\n }\n } else if (token.type.indexOf('tag-name') !== -1) {\n if (isNaN(depth[token.value])) {\n depth[token.value] = 0;\n }\n\n if (prevToken.value === '<') {\n depth[token.value]++;\n } else if (prevToken.value === '= 0; --i) {\n if (this.$tryReplace(ranges[i], replacement)) {\n replaced++;\n }\n }\n\n this.selection.setSelectionRange(selection);\n return replaced;\n };\n\n this.$tryReplace = function (range, replacement) {\n var input = this.session.getTextRange(range);\n replacement = this.$search.replace(input, replacement);\n\n if (replacement !== null) {\n range.end = this.session.replace(range, replacement);\n return range;\n } else {\n return null;\n }\n };\n\n this.getLastSearchOptions = function () {\n return this.$search.getOptions();\n };\n\n this.find = function (needle, options, animate) {\n if (!options) options = {};\n if (typeof needle == \"string\" || needle instanceof RegExp) options.needle = needle;else if (_typeof(needle) == \"object\") oop.mixin(options, needle);\n var range = this.selection.getRange();\n\n if (options.needle == null) {\n needle = this.session.getTextRange(range) || this.$search.$options.needle;\n\n if (!needle) {\n range = this.session.getWordRange(range.start.row, range.start.column);\n needle = this.session.getTextRange(range);\n }\n\n this.$search.set({\n needle: needle\n });\n }\n\n this.$search.set(options);\n if (!options.start) this.$search.set({\n start: range\n });\n var newRange = this.$search.find(this.session);\n if (options.preventScroll) return newRange;\n\n if (newRange) {\n this.revealRange(newRange, animate);\n return newRange;\n }\n\n if (options.backwards) range.start = range.end;else range.end = range.start;\n this.selection.setRange(range);\n };\n\n this.findNext = function (options, animate) {\n this.find({\n skipCurrent: true,\n backwards: false\n }, options, animate);\n };\n\n this.findPrevious = function (options, animate) {\n this.find(options, {\n skipCurrent: true,\n backwards: true\n }, animate);\n };\n\n this.revealRange = function (range, animate) {\n this.session.unfold(range);\n this.selection.setSelectionRange(range);\n var scrollTop = this.renderer.scrollTop;\n this.renderer.scrollSelectionIntoView(range.start, range.end, 0.5);\n if (animate !== false) this.renderer.animateScrolling(scrollTop);\n };\n\n this.undo = function () {\n this.session.getUndoManager().undo(this.session);\n this.renderer.scrollCursorIntoView(null, 0.5);\n };\n\n this.redo = function () {\n this.session.getUndoManager().redo(this.session);\n this.renderer.scrollCursorIntoView(null, 0.5);\n };\n\n this.destroy = function () {\n if (this.$toDestroy) {\n this.$toDestroy.forEach(function (el) {\n el.destroy();\n });\n this.$toDestroy = null;\n }\n\n if (this.$mouseHandler) this.$mouseHandler.destroy();\n this.renderer.destroy();\n\n this._signal(\"destroy\", this);\n\n if (this.session) this.session.destroy();\n if (this._$emitInputEvent) this._$emitInputEvent.cancel();\n this.removeAllListeners();\n };\n\n this.setAutoScrollEditorIntoView = function (enable) {\n if (!enable) return;\n var rect;\n var self = this;\n var shouldScroll = false;\n if (!this.$scrollAnchor) this.$scrollAnchor = document.createElement(\"div\");\n var scrollAnchor = this.$scrollAnchor;\n scrollAnchor.style.cssText = \"position:absolute\";\n this.container.insertBefore(scrollAnchor, this.container.firstChild);\n var onChangeSelection = this.on(\"changeSelection\", function () {\n shouldScroll = true;\n });\n var onBeforeRender = this.renderer.on(\"beforeRender\", function () {\n if (shouldScroll) rect = self.renderer.container.getBoundingClientRect();\n });\n var onAfterRender = this.renderer.on(\"afterRender\", function () {\n if (shouldScroll && rect && (self.isFocused() || self.searchBox && self.searchBox.isFocused())) {\n var renderer = self.renderer;\n var pos = renderer.$cursorLayer.$pixelPos;\n var config = renderer.layerConfig;\n var top = pos.top - config.offset;\n\n if (pos.top >= 0 && top + rect.top < 0) {\n shouldScroll = true;\n } else if (pos.top < config.height && pos.top + rect.top + config.lineHeight > window.innerHeight) {\n shouldScroll = false;\n } else {\n shouldScroll = null;\n }\n\n if (shouldScroll != null) {\n scrollAnchor.style.top = top + \"px\";\n scrollAnchor.style.left = pos.left + \"px\";\n scrollAnchor.style.height = config.lineHeight + \"px\";\n scrollAnchor.scrollIntoView(shouldScroll);\n }\n\n shouldScroll = rect = null;\n }\n });\n\n this.setAutoScrollEditorIntoView = function (enable) {\n if (enable) return;\n delete this.setAutoScrollEditorIntoView;\n this.off(\"changeSelection\", onChangeSelection);\n this.renderer.off(\"afterRender\", onAfterRender);\n this.renderer.off(\"beforeRender\", onBeforeRender);\n };\n };\n\n this.$resetCursorStyle = function () {\n var style = this.$cursorStyle || \"ace\";\n var cursorLayer = this.renderer.$cursorLayer;\n if (!cursorLayer) return;\n cursorLayer.setSmoothBlinking(/smooth/.test(style));\n cursorLayer.isBlinking = !this.$readOnly && style != \"wide\";\n dom.setCssClass(cursorLayer.element, \"ace_slim-cursors\", /slim/.test(style));\n };\n\n this.prompt = function (message, options, callback) {\n var editor = this;\n config.loadModule(\"./ext/prompt\", function (module) {\n module.prompt(editor, message, options, callback);\n });\n };\n }).call(Editor.prototype);\n config.defineOptions(Editor.prototype, \"editor\", {\n selectionStyle: {\n set: function set(style) {\n this.onSelectionChange();\n\n this._signal(\"changeSelectionStyle\", {\n data: style\n });\n },\n initialValue: \"line\"\n },\n highlightActiveLine: {\n set: function set() {\n this.$updateHighlightActiveLine();\n },\n initialValue: true\n },\n highlightSelectedWord: {\n set: function set(shouldHighlight) {\n this.$onSelectionChange();\n },\n initialValue: true\n },\n readOnly: {\n set: function set(readOnly) {\n this.textInput.setReadOnly(readOnly);\n this.$resetCursorStyle();\n },\n initialValue: false\n },\n copyWithEmptySelection: {\n set: function set(value) {\n this.textInput.setCopyWithEmptySelection(value);\n },\n initialValue: false\n },\n cursorStyle: {\n set: function set(val) {\n this.$resetCursorStyle();\n },\n values: [\"ace\", \"slim\", \"smooth\", \"wide\"],\n initialValue: \"ace\"\n },\n mergeUndoDeltas: {\n values: [false, true, \"always\"],\n initialValue: true\n },\n behavioursEnabled: {\n initialValue: true\n },\n wrapBehavioursEnabled: {\n initialValue: true\n },\n enableAutoIndent: {\n initialValue: true\n },\n autoScrollEditorIntoView: {\n set: function set(val) {\n this.setAutoScrollEditorIntoView(val);\n }\n },\n keyboardHandler: {\n set: function set(val) {\n this.setKeyboardHandler(val);\n },\n get: function get() {\n return this.$keybindingId;\n },\n handlesSet: true\n },\n value: {\n set: function set(val) {\n this.session.setValue(val);\n },\n get: function get() {\n return this.getValue();\n },\n handlesSet: true,\n hidden: true\n },\n session: {\n set: function set(val) {\n this.setSession(val);\n },\n get: function get() {\n return this.session;\n },\n handlesSet: true,\n hidden: true\n },\n showLineNumbers: {\n set: function set(show) {\n this.renderer.$gutterLayer.setShowLineNumbers(show);\n this.renderer.$loop.schedule(this.renderer.CHANGE_GUTTER);\n if (show && this.$relativeLineNumbers) relativeNumberRenderer.attach(this);else relativeNumberRenderer.detach(this);\n },\n initialValue: true\n },\n relativeLineNumbers: {\n set: function set(value) {\n if (this.$showLineNumbers && value) relativeNumberRenderer.attach(this);else relativeNumberRenderer.detach(this);\n }\n },\n placeholder: {\n set: function set(message) {\n if (!this.$updatePlaceholder) {\n this.$updatePlaceholder = function () {\n var value = this.session && (this.renderer.$composition || this.getValue());\n\n if (value && this.renderer.placeholderNode) {\n this.renderer.off(\"afterRender\", this.$updatePlaceholder);\n dom.removeCssClass(this.container, \"ace_hasPlaceholder\");\n this.renderer.placeholderNode.remove();\n this.renderer.placeholderNode = null;\n } else if (!value && !this.renderer.placeholderNode) {\n this.renderer.on(\"afterRender\", this.$updatePlaceholder);\n dom.addCssClass(this.container, \"ace_hasPlaceholder\");\n var el = dom.createElement(\"div\");\n el.className = \"ace_placeholder\";\n el.textContent = this.$placeholder || \"\";\n this.renderer.placeholderNode = el;\n this.renderer.content.appendChild(this.renderer.placeholderNode);\n } else if (!value && this.renderer.placeholderNode) {\n this.renderer.placeholderNode.textContent = this.$placeholder || \"\";\n }\n }.bind(this);\n\n this.on(\"input\", this.$updatePlaceholder);\n }\n\n this.$updatePlaceholder();\n }\n },\n hScrollBarAlwaysVisible: \"renderer\",\n vScrollBarAlwaysVisible: \"renderer\",\n highlightGutterLine: \"renderer\",\n animatedScroll: \"renderer\",\n showInvisibles: \"renderer\",\n showPrintMargin: \"renderer\",\n printMarginColumn: \"renderer\",\n printMargin: \"renderer\",\n fadeFoldWidgets: \"renderer\",\n showFoldWidgets: \"renderer\",\n displayIndentGuides: \"renderer\",\n showGutter: \"renderer\",\n fontSize: \"renderer\",\n fontFamily: \"renderer\",\n maxLines: \"renderer\",\n minLines: \"renderer\",\n scrollPastEnd: \"renderer\",\n fixedWidthGutter: \"renderer\",\n theme: \"renderer\",\n hasCssTransforms: \"renderer\",\n maxPixelHeight: \"renderer\",\n useTextareaForIME: \"renderer\",\n scrollSpeed: \"$mouseHandler\",\n dragDelay: \"$mouseHandler\",\n dragEnabled: \"$mouseHandler\",\n focusTimeout: \"$mouseHandler\",\n tooltipFollowsMouse: \"$mouseHandler\",\n firstLineNumber: \"session\",\n overwrite: \"session\",\n newLineMode: \"session\",\n useWorker: \"session\",\n useSoftTabs: \"session\",\n navigateWithinSoftTabs: \"session\",\n tabSize: \"session\",\n wrap: \"session\",\n indentedSoftWrap: \"session\",\n foldStyle: \"session\",\n mode: \"session\"\n });\n var relativeNumberRenderer = {\n getText: function getText(session, row) {\n return (Math.abs(session.selection.lead.row - row) || row + 1 + (row < 9 ? \"\\xb7\" : \"\")) + \"\";\n },\n getWidth: function getWidth(session, lastLineNumber, config) {\n return Math.max(lastLineNumber.toString().length, (config.lastRow + 1).toString().length, 2) * config.characterWidth;\n },\n update: function update(e, editor) {\n editor.renderer.$loop.schedule(editor.renderer.CHANGE_GUTTER);\n },\n attach: function attach(editor) {\n editor.renderer.$gutterLayer.$renderer = this;\n editor.on(\"changeSelection\", this.update);\n this.update(null, editor);\n },\n detach: function detach(editor) {\n if (editor.renderer.$gutterLayer.$renderer == this) editor.renderer.$gutterLayer.$renderer = null;\n editor.off(\"changeSelection\", this.update);\n this.update(null, editor);\n }\n };\n exports.Editor = Editor;\n});\nace.define(\"ace/undomanager\", [\"require\", \"exports\", \"module\", \"ace/range\"], function (require, exports, module) {\n \"use strict\";\n\n var UndoManager = function UndoManager() {\n this.$maxRev = 0;\n this.$fromUndo = false;\n this.reset();\n };\n\n (function () {\n this.addSession = function (session) {\n this.$session = session;\n };\n\n this.add = function (delta, allowMerge, session) {\n if (this.$fromUndo) return;\n if (delta == this.$lastDelta) return;\n if (!this.$keepRedoStack) this.$redoStack.length = 0;\n\n if (allowMerge === false || !this.lastDeltas) {\n this.lastDeltas = [];\n this.$undoStack.push(this.lastDeltas);\n delta.id = this.$rev = ++this.$maxRev;\n }\n\n if (delta.action == \"remove\" || delta.action == \"insert\") this.$lastDelta = delta;\n this.lastDeltas.push(delta);\n };\n\n this.addSelection = function (selection, rev) {\n this.selections.push({\n value: selection,\n rev: rev || this.$rev\n });\n };\n\n this.startNewGroup = function () {\n this.lastDeltas = null;\n return this.$rev;\n };\n\n this.markIgnored = function (from, to) {\n if (to == null) to = this.$rev + 1;\n var stack = this.$undoStack;\n\n for (var i = stack.length; i--;) {\n var delta = stack[i][0];\n if (delta.id <= from) break;\n if (delta.id < to) delta.ignore = true;\n }\n\n this.lastDeltas = null;\n };\n\n this.getSelection = function (rev, after) {\n var stack = this.selections;\n\n for (var i = stack.length; i--;) {\n var selection = stack[i];\n\n if (selection.rev < rev) {\n if (after) selection = stack[i + 1];\n return selection;\n }\n }\n };\n\n this.getRevision = function () {\n return this.$rev;\n };\n\n this.getDeltas = function (from, to) {\n if (to == null) to = this.$rev + 1;\n var stack = this.$undoStack;\n var end = null,\n start = 0;\n\n for (var i = stack.length; i--;) {\n var delta = stack[i][0];\n if (delta.id < to && !end) end = i + 1;\n\n if (delta.id <= from) {\n start = i + 1;\n break;\n }\n }\n\n return stack.slice(start, end);\n };\n\n this.getChangedRanges = function (from, to) {\n if (to == null) to = this.$rev + 1;\n };\n\n this.getChangedLines = function (from, to) {\n if (to == null) to = this.$rev + 1;\n };\n\n this.undo = function (session, dontSelect) {\n this.lastDeltas = null;\n var stack = this.$undoStack;\n if (!rearrangeUndoStack(stack, stack.length)) return;\n if (!session) session = this.$session;\n if (this.$redoStackBaseRev !== this.$rev && this.$redoStack.length) this.$redoStack = [];\n this.$fromUndo = true;\n var deltaSet = stack.pop();\n var undoSelectionRange = null;\n\n if (deltaSet) {\n undoSelectionRange = session.undoChanges(deltaSet, dontSelect);\n this.$redoStack.push(deltaSet);\n this.$syncRev();\n }\n\n this.$fromUndo = false;\n return undoSelectionRange;\n };\n\n this.redo = function (session, dontSelect) {\n this.lastDeltas = null;\n if (!session) session = this.$session;\n this.$fromUndo = true;\n\n if (this.$redoStackBaseRev != this.$rev) {\n var diff = this.getDeltas(this.$redoStackBaseRev, this.$rev + 1);\n rebaseRedoStack(this.$redoStack, diff);\n this.$redoStackBaseRev = this.$rev;\n this.$redoStack.forEach(function (x) {\n x[0].id = ++this.$maxRev;\n }, this);\n }\n\n var deltaSet = this.$redoStack.pop();\n var redoSelectionRange = null;\n\n if (deltaSet) {\n redoSelectionRange = session.redoChanges(deltaSet, dontSelect);\n this.$undoStack.push(deltaSet);\n this.$syncRev();\n }\n\n this.$fromUndo = false;\n return redoSelectionRange;\n };\n\n this.$syncRev = function () {\n var stack = this.$undoStack;\n var nextDelta = stack[stack.length - 1];\n var id = nextDelta && nextDelta[0].id || 0;\n this.$redoStackBaseRev = id;\n this.$rev = id;\n };\n\n this.reset = function () {\n this.lastDeltas = null;\n this.$lastDelta = null;\n this.$undoStack = [];\n this.$redoStack = [];\n this.$rev = 0;\n this.mark = 0;\n this.$redoStackBaseRev = this.$rev;\n this.selections = [];\n };\n\n this.canUndo = function () {\n return this.$undoStack.length > 0;\n };\n\n this.canRedo = function () {\n return this.$redoStack.length > 0;\n };\n\n this.bookmark = function (rev) {\n if (rev == undefined) rev = this.$rev;\n this.mark = rev;\n };\n\n this.isAtBookmark = function () {\n return this.$rev === this.mark;\n };\n\n this.toJSON = function () {};\n\n this.fromJSON = function () {};\n\n this.hasUndo = this.canUndo;\n this.hasRedo = this.canRedo;\n this.isClean = this.isAtBookmark;\n this.markClean = this.bookmark;\n\n this.$prettyPrint = function (delta) {\n if (delta) return stringifyDelta(delta);\n return stringifyDelta(this.$undoStack) + \"\\n---\\n\" + stringifyDelta(this.$redoStack);\n };\n }).call(UndoManager.prototype);\n\n function rearrangeUndoStack(stack, pos) {\n for (var i = pos; i--;) {\n var deltaSet = stack[i];\n\n if (deltaSet && !deltaSet[0].ignore) {\n while (i < pos - 1) {\n var swapped = swapGroups(stack[i], stack[i + 1]);\n stack[i] = swapped[0];\n stack[i + 1] = swapped[1];\n i++;\n }\n\n return true;\n }\n }\n }\n\n var Range = require(\"./range\").Range;\n\n var cmp = Range.comparePoints;\n var comparePoints = Range.comparePoints;\n\n function $updateMarkers(delta) {\n var isInsert = delta.action == \"insert\";\n var start = delta.start;\n var end = delta.end;\n var rowShift = (end.row - start.row) * (isInsert ? 1 : -1);\n var colShift = (end.column - start.column) * (isInsert ? 1 : -1);\n if (isInsert) end = start;\n\n for (var i in this.marks) {\n var point = this.marks[i];\n var cmp = comparePoints(point, start);\n\n if (cmp < 0) {\n continue; // delta starts after the range\n }\n\n if (cmp === 0) {\n if (isInsert) {\n if (point.bias == 1) {\n cmp = 1;\n } else {\n point.bias == -1;\n continue;\n }\n }\n }\n\n var cmp2 = isInsert ? cmp : comparePoints(point, end);\n\n if (cmp2 > 0) {\n point.row += rowShift;\n point.column += point.row == end.row ? colShift : 0;\n continue;\n }\n\n if (!isInsert && cmp2 <= 0) {\n point.row = start.row;\n point.column = start.column;\n if (cmp2 === 0) point.bias = 1;\n }\n }\n }\n\n function clonePos(pos) {\n return {\n row: pos.row,\n column: pos.column\n };\n }\n\n function cloneDelta(d) {\n return {\n start: clonePos(d.start),\n end: clonePos(d.end),\n action: d.action,\n lines: d.lines.slice()\n };\n }\n\n function stringifyDelta(d) {\n d = d || this;\n\n if (Array.isArray(d)) {\n return d.map(stringifyDelta).join(\"\\n\");\n }\n\n var type = \"\";\n\n if (d.action) {\n type = d.action == \"insert\" ? \"+\" : \"-\";\n type += \"[\" + d.lines + \"]\";\n } else if (d.value) {\n if (Array.isArray(d.value)) {\n type = d.value.map(stringifyRange).join(\"\\n\");\n } else {\n type = stringifyRange(d.value);\n }\n }\n\n if (d.start) {\n type += stringifyRange(d);\n }\n\n if (d.id || d.rev) {\n type += \"\\t(\" + (d.id || d.rev) + \")\";\n }\n\n return type;\n }\n\n function stringifyRange(r) {\n return r.start.row + \":\" + r.start.column + \"=>\" + r.end.row + \":\" + r.end.column;\n }\n\n function swap(d1, d2) {\n var i1 = d1.action == \"insert\";\n var i2 = d2.action == \"insert\";\n\n if (i1 && i2) {\n if (cmp(d2.start, d1.end) >= 0) {\n shift(d2, d1, -1);\n } else if (cmp(d2.start, d1.start) <= 0) {\n shift(d1, d2, +1);\n } else {\n return null;\n }\n } else if (i1 && !i2) {\n if (cmp(d2.start, d1.end) >= 0) {\n shift(d2, d1, -1);\n } else if (cmp(d2.end, d1.start) <= 0) {\n shift(d1, d2, -1);\n } else {\n return null;\n }\n } else if (!i1 && i2) {\n if (cmp(d2.start, d1.start) >= 0) {\n shift(d2, d1, +1);\n } else if (cmp(d2.start, d1.start) <= 0) {\n shift(d1, d2, +1);\n } else {\n return null;\n }\n } else if (!i1 && !i2) {\n if (cmp(d2.start, d1.start) >= 0) {\n shift(d2, d1, +1);\n } else if (cmp(d2.end, d1.start) <= 0) {\n shift(d1, d2, -1);\n } else {\n return null;\n }\n }\n\n return [d2, d1];\n }\n\n function swapGroups(ds1, ds2) {\n for (var i = ds1.length; i--;) {\n for (var j = 0; j < ds2.length; j++) {\n if (!swap(ds1[i], ds2[j])) {\n while (i < ds1.length) {\n while (j--) {\n swap(ds2[j], ds1[i]);\n }\n\n j = ds2.length;\n i++;\n }\n\n return [ds1, ds2];\n }\n }\n }\n\n ds1.selectionBefore = ds2.selectionBefore = ds1.selectionAfter = ds2.selectionAfter = null;\n return [ds2, ds1];\n }\n\n function xform(d1, c1) {\n var i1 = d1.action == \"insert\";\n var i2 = c1.action == \"insert\";\n\n if (i1 && i2) {\n if (cmp(d1.start, c1.start) < 0) {\n shift(c1, d1, 1);\n } else {\n shift(d1, c1, 1);\n }\n } else if (i1 && !i2) {\n if (cmp(d1.start, c1.end) >= 0) {\n shift(d1, c1, -1);\n } else if (cmp(d1.start, c1.start) <= 0) {\n shift(c1, d1, +1);\n } else {\n shift(d1, Range.fromPoints(c1.start, d1.start), -1);\n shift(c1, d1, +1);\n }\n } else if (!i1 && i2) {\n if (cmp(c1.start, d1.end) >= 0) {\n shift(c1, d1, -1);\n } else if (cmp(c1.start, d1.start) <= 0) {\n shift(d1, c1, +1);\n } else {\n shift(c1, Range.fromPoints(d1.start, c1.start), -1);\n shift(d1, c1, +1);\n }\n } else if (!i1 && !i2) {\n if (cmp(c1.start, d1.end) >= 0) {\n shift(c1, d1, -1);\n } else if (cmp(c1.end, d1.start) <= 0) {\n shift(d1, c1, -1);\n } else {\n var before, after;\n\n if (cmp(d1.start, c1.start) < 0) {\n before = d1;\n d1 = splitDelta(d1, c1.start);\n }\n\n if (cmp(d1.end, c1.end) > 0) {\n after = splitDelta(d1, c1.end);\n }\n\n shiftPos(c1.end, d1.start, d1.end, -1);\n\n if (after && !before) {\n d1.lines = after.lines;\n d1.start = after.start;\n d1.end = after.end;\n after = d1;\n }\n\n return [c1, before, after].filter(Boolean);\n }\n }\n\n return [c1, d1];\n }\n\n function shift(d1, d2, dir) {\n shiftPos(d1.start, d2.start, d2.end, dir);\n shiftPos(d1.end, d2.start, d2.end, dir);\n }\n\n function shiftPos(pos, start, end, dir) {\n if (pos.row == (dir == 1 ? start : end).row) {\n pos.column += dir * (end.column - start.column);\n }\n\n pos.row += dir * (end.row - start.row);\n }\n\n function splitDelta(c, pos) {\n var lines = c.lines;\n var end = c.end;\n c.end = clonePos(pos);\n var rowsBefore = c.end.row - c.start.row;\n var otherLines = lines.splice(rowsBefore, lines.length);\n var col = rowsBefore ? pos.column : pos.column - c.start.column;\n lines.push(otherLines[0].substring(0, col));\n otherLines[0] = otherLines[0].substr(col);\n var rest = {\n start: clonePos(pos),\n end: end,\n lines: otherLines,\n action: c.action\n };\n return rest;\n }\n\n function moveDeltasByOne(redoStack, d) {\n d = cloneDelta(d);\n\n for (var j = redoStack.length; j--;) {\n var deltaSet = redoStack[j];\n\n for (var i = 0; i < deltaSet.length; i++) {\n var x = deltaSet[i];\n var xformed = xform(x, d);\n d = xformed[0];\n\n if (xformed.length != 2) {\n if (xformed[2]) {\n deltaSet.splice(i + 1, 1, xformed[1], xformed[2]);\n i++;\n } else if (!xformed[1]) {\n deltaSet.splice(i, 1);\n i--;\n }\n }\n }\n\n if (!deltaSet.length) {\n redoStack.splice(j, 1);\n }\n }\n\n return redoStack;\n }\n\n function rebaseRedoStack(redoStack, deltaSets) {\n for (var i = 0; i < deltaSets.length; i++) {\n var deltas = deltaSets[i];\n\n for (var j = 0; j < deltas.length; j++) {\n moveDeltasByOne(redoStack, deltas[j]);\n }\n }\n }\n\n exports.UndoManager = UndoManager;\n});\nace.define(\"ace/layer/lines\", [\"require\", \"exports\", \"module\", \"ace/lib/dom\"], function (require, exports, module) {\n \"use strict\";\n\n var dom = require(\"../lib/dom\");\n\n var Lines = function Lines(element, canvasHeight) {\n this.element = element;\n this.canvasHeight = canvasHeight || 500000;\n this.element.style.height = this.canvasHeight * 2 + \"px\";\n this.cells = [];\n this.cellCache = [];\n this.$offsetCoefficient = 0;\n };\n\n (function () {\n this.moveContainer = function (config) {\n dom.translate(this.element, 0, -(config.firstRowScreen * config.lineHeight % this.canvasHeight) - config.offset * this.$offsetCoefficient);\n };\n\n this.pageChanged = function (oldConfig, newConfig) {\n return Math.floor(oldConfig.firstRowScreen * oldConfig.lineHeight / this.canvasHeight) !== Math.floor(newConfig.firstRowScreen * newConfig.lineHeight / this.canvasHeight);\n };\n\n this.computeLineTop = function (row, config, session) {\n var screenTop = config.firstRowScreen * config.lineHeight;\n var screenPage = Math.floor(screenTop / this.canvasHeight);\n var lineTop = session.documentToScreenRow(row, 0) * config.lineHeight;\n return lineTop - screenPage * this.canvasHeight;\n };\n\n this.computeLineHeight = function (row, config, session) {\n return config.lineHeight * session.getRowLineCount(row);\n };\n\n this.getLength = function () {\n return this.cells.length;\n };\n\n this.get = function (index) {\n return this.cells[index];\n };\n\n this.shift = function () {\n this.$cacheCell(this.cells.shift());\n };\n\n this.pop = function () {\n this.$cacheCell(this.cells.pop());\n };\n\n this.push = function (cell) {\n if (Array.isArray(cell)) {\n this.cells.push.apply(this.cells, cell);\n var fragment = dom.createFragment(this.element);\n\n for (var i = 0; i < cell.length; i++) {\n fragment.appendChild(cell[i].element);\n }\n\n this.element.appendChild(fragment);\n } else {\n this.cells.push(cell);\n this.element.appendChild(cell.element);\n }\n };\n\n this.unshift = function (cell) {\n if (Array.isArray(cell)) {\n this.cells.unshift.apply(this.cells, cell);\n var fragment = dom.createFragment(this.element);\n\n for (var i = 0; i < cell.length; i++) {\n fragment.appendChild(cell[i].element);\n }\n\n if (this.element.firstChild) this.element.insertBefore(fragment, this.element.firstChild);else this.element.appendChild(fragment);\n } else {\n this.cells.unshift(cell);\n this.element.insertAdjacentElement(\"afterbegin\", cell.element);\n }\n };\n\n this.last = function () {\n if (this.cells.length) return this.cells[this.cells.length - 1];else return null;\n };\n\n this.$cacheCell = function (cell) {\n if (!cell) return;\n cell.element.remove();\n this.cellCache.push(cell);\n };\n\n this.createCell = function (row, config, session, initElement) {\n var cell = this.cellCache.pop();\n\n if (!cell) {\n var element = dom.createElement(\"div\");\n if (initElement) initElement(element);\n this.element.appendChild(element);\n cell = {\n element: element,\n text: \"\",\n row: row\n };\n }\n\n cell.row = row;\n return cell;\n };\n }).call(Lines.prototype);\n exports.Lines = Lines;\n});\nace.define(\"ace/layer/gutter\", [\"require\", \"exports\", \"module\", \"ace/lib/dom\", \"ace/lib/oop\", \"ace/lib/lang\", \"ace/lib/event_emitter\", \"ace/layer/lines\"], function (require, exports, module) {\n \"use strict\";\n\n var dom = require(\"../lib/dom\");\n\n var oop = require(\"../lib/oop\");\n\n var lang = require(\"../lib/lang\");\n\n var EventEmitter = require(\"../lib/event_emitter\").EventEmitter;\n\n var Lines = require(\"./lines\").Lines;\n\n var Gutter = function Gutter(parentEl) {\n this.element = dom.createElement(\"div\");\n this.element.className = \"ace_layer ace_gutter-layer\";\n parentEl.appendChild(this.element);\n this.setShowFoldWidgets(this.$showFoldWidgets);\n this.gutterWidth = 0;\n this.$annotations = [];\n this.$updateAnnotations = this.$updateAnnotations.bind(this);\n this.$lines = new Lines(this.element);\n this.$lines.$offsetCoefficient = 1;\n };\n\n (function () {\n oop.implement(this, EventEmitter);\n\n this.setSession = function (session) {\n if (this.session) this.session.off(\"change\", this.$updateAnnotations);\n this.session = session;\n if (session) session.on(\"change\", this.$updateAnnotations);\n };\n\n this.addGutterDecoration = function (row, className) {\n if (window.console) console.warn && console.warn(\"deprecated use session.addGutterDecoration\");\n this.session.addGutterDecoration(row, className);\n };\n\n this.removeGutterDecoration = function (row, className) {\n if (window.console) console.warn && console.warn(\"deprecated use session.removeGutterDecoration\");\n this.session.removeGutterDecoration(row, className);\n };\n\n this.setAnnotations = function (annotations) {\n this.$annotations = [];\n\n for (var i = 0; i < annotations.length; i++) {\n var annotation = annotations[i];\n var row = annotation.row;\n var rowInfo = this.$annotations[row];\n if (!rowInfo) rowInfo = this.$annotations[row] = {\n text: []\n };\n var annoText = annotation.text;\n annoText = annoText ? lang.escapeHTML(annoText) : annotation.html || \"\";\n if (rowInfo.text.indexOf(annoText) === -1) rowInfo.text.push(annoText);\n var type = annotation.type;\n if (type == \"error\") rowInfo.className = \" ace_error\";else if (type == \"warning\" && rowInfo.className != \" ace_error\") rowInfo.className = \" ace_warning\";else if (type == \"info\" && !rowInfo.className) rowInfo.className = \" ace_info\";\n }\n };\n\n this.$updateAnnotations = function (delta) {\n if (!this.$annotations.length) return;\n var firstRow = delta.start.row;\n var len = delta.end.row - firstRow;\n\n if (len === 0) {} else if (delta.action == 'remove') {\n this.$annotations.splice(firstRow, len + 1, null);\n } else {\n var args = new Array(len + 1);\n args.unshift(firstRow, 1);\n this.$annotations.splice.apply(this.$annotations, args);\n }\n };\n\n this.update = function (config) {\n this.config = config;\n var session = this.session;\n var firstRow = config.firstRow;\n var lastRow = Math.min(config.lastRow + config.gutterOffset, // needed to compensate for hor scollbar\n session.getLength() - 1);\n this.oldLastRow = lastRow;\n this.config = config;\n this.$lines.moveContainer(config);\n this.$updateCursorRow();\n var fold = session.getNextFoldLine(firstRow);\n var foldStart = fold ? fold.start.row : Infinity;\n var cell = null;\n var index = -1;\n var row = firstRow;\n\n while (true) {\n if (row > foldStart) {\n row = fold.end.row + 1;\n fold = session.getNextFoldLine(row, fold);\n foldStart = fold ? fold.start.row : Infinity;\n }\n\n if (row > lastRow) {\n while (this.$lines.getLength() > index + 1) {\n this.$lines.pop();\n }\n\n break;\n }\n\n cell = this.$lines.get(++index);\n\n if (cell) {\n cell.row = row;\n } else {\n cell = this.$lines.createCell(row, config, this.session, onCreateCell);\n this.$lines.push(cell);\n }\n\n this.$renderCell(cell, config, fold, row);\n row++;\n }\n\n this._signal(\"afterRender\");\n\n this.$updateGutterWidth(config);\n };\n\n this.$updateGutterWidth = function (config) {\n var session = this.session;\n var gutterRenderer = session.gutterRenderer || this.$renderer;\n var firstLineNumber = session.$firstLineNumber;\n var lastLineText = this.$lines.last() ? this.$lines.last().text : \"\";\n if (this.$fixedWidth || session.$useWrapMode) lastLineText = session.getLength() + firstLineNumber - 1;\n var gutterWidth = gutterRenderer ? gutterRenderer.getWidth(session, lastLineText, config) : lastLineText.toString().length * config.characterWidth;\n var padding = this.$padding || this.$computePadding();\n gutterWidth += padding.left + padding.right;\n\n if (gutterWidth !== this.gutterWidth && !isNaN(gutterWidth)) {\n this.gutterWidth = gutterWidth;\n this.element.parentNode.style.width = this.element.style.width = Math.ceil(this.gutterWidth) + \"px\";\n\n this._signal(\"changeGutterWidth\", gutterWidth);\n }\n };\n\n this.$updateCursorRow = function () {\n if (!this.$highlightGutterLine) return;\n var position = this.session.selection.getCursor();\n if (this.$cursorRow === position.row) return;\n this.$cursorRow = position.row;\n };\n\n this.updateLineHighlight = function () {\n if (!this.$highlightGutterLine) return;\n var row = this.session.selection.cursor.row;\n this.$cursorRow = row;\n if (this.$cursorCell && this.$cursorCell.row == row) return;\n if (this.$cursorCell) this.$cursorCell.element.className = this.$cursorCell.element.className.replace(\"ace_gutter-active-line \", \"\");\n var cells = this.$lines.cells;\n this.$cursorCell = null;\n\n for (var i = 0; i < cells.length; i++) {\n var cell = cells[i];\n\n if (cell.row >= this.$cursorRow) {\n if (cell.row > this.$cursorRow) {\n var fold = this.session.getFoldLine(this.$cursorRow);\n if (i > 0 && fold && fold.start.row == cells[i - 1].row) cell = cells[i - 1];else break;\n }\n\n cell.element.className = \"ace_gutter-active-line \" + cell.element.className;\n this.$cursorCell = cell;\n break;\n }\n }\n };\n\n this.scrollLines = function (config) {\n var oldConfig = this.config;\n this.config = config;\n this.$updateCursorRow();\n if (this.$lines.pageChanged(oldConfig, config)) return this.update(config);\n this.$lines.moveContainer(config);\n var lastRow = Math.min(config.lastRow + config.gutterOffset, // needed to compensate for hor scollbar\n this.session.getLength() - 1);\n var oldLastRow = this.oldLastRow;\n this.oldLastRow = lastRow;\n if (!oldConfig || oldLastRow < config.firstRow) return this.update(config);\n if (lastRow < oldConfig.firstRow) return this.update(config);\n if (oldConfig.firstRow < config.firstRow) for (var row = this.session.getFoldedRowCount(oldConfig.firstRow, config.firstRow - 1); row > 0; row--) {\n this.$lines.shift();\n }\n if (oldLastRow > lastRow) for (var row = this.session.getFoldedRowCount(lastRow + 1, oldLastRow); row > 0; row--) {\n this.$lines.pop();\n }\n\n if (config.firstRow < oldConfig.firstRow) {\n this.$lines.unshift(this.$renderLines(config, config.firstRow, oldConfig.firstRow - 1));\n }\n\n if (lastRow > oldLastRow) {\n this.$lines.push(this.$renderLines(config, oldLastRow + 1, lastRow));\n }\n\n this.updateLineHighlight();\n\n this._signal(\"afterRender\");\n\n this.$updateGutterWidth(config);\n };\n\n this.$renderLines = function (config, firstRow, lastRow) {\n var fragment = [];\n var row = firstRow;\n var foldLine = this.session.getNextFoldLine(row);\n var foldStart = foldLine ? foldLine.start.row : Infinity;\n\n while (true) {\n if (row > foldStart) {\n row = foldLine.end.row + 1;\n foldLine = this.session.getNextFoldLine(row, foldLine);\n foldStart = foldLine ? foldLine.start.row : Infinity;\n }\n\n if (row > lastRow) break;\n var cell = this.$lines.createCell(row, config, this.session, onCreateCell);\n this.$renderCell(cell, config, foldLine, row);\n fragment.push(cell);\n row++;\n }\n\n return fragment;\n };\n\n this.$renderCell = function (cell, config, fold, row) {\n var element = cell.element;\n var session = this.session;\n var textNode = element.childNodes[0];\n var foldWidget = element.childNodes[1];\n var firstLineNumber = session.$firstLineNumber;\n var breakpoints = session.$breakpoints;\n var decorations = session.$decorations;\n var gutterRenderer = session.gutterRenderer || this.$renderer;\n var foldWidgets = this.$showFoldWidgets && session.foldWidgets;\n var foldStart = fold ? fold.start.row : Number.MAX_VALUE;\n var className = \"ace_gutter-cell \";\n\n if (this.$highlightGutterLine) {\n if (row == this.$cursorRow || fold && row < this.$cursorRow && row >= foldStart && this.$cursorRow <= fold.end.row) {\n className += \"ace_gutter-active-line \";\n\n if (this.$cursorCell != cell) {\n if (this.$cursorCell) this.$cursorCell.element.className = this.$cursorCell.element.className.replace(\"ace_gutter-active-line \", \"\");\n this.$cursorCell = cell;\n }\n }\n }\n\n if (breakpoints[row]) className += breakpoints[row];\n if (decorations[row]) className += decorations[row];\n if (this.$annotations[row]) className += this.$annotations[row].className;\n if (element.className != className) element.className = className;\n\n if (foldWidgets) {\n var c = foldWidgets[row];\n if (c == null) c = foldWidgets[row] = session.getFoldWidget(row);\n }\n\n if (c) {\n var className = \"ace_fold-widget ace_\" + c;\n if (c == \"start\" && row == foldStart && row < fold.end.row) className += \" ace_closed\";else className += \" ace_open\";\n if (foldWidget.className != className) foldWidget.className = className;\n var foldHeight = config.lineHeight + \"px\";\n dom.setStyle(foldWidget.style, \"height\", foldHeight);\n dom.setStyle(foldWidget.style, \"display\", \"inline-block\");\n } else {\n if (foldWidget) {\n dom.setStyle(foldWidget.style, \"display\", \"none\");\n }\n }\n\n var text = (gutterRenderer ? gutterRenderer.getText(session, row) : row + firstLineNumber).toString();\n\n if (text !== textNode.data) {\n textNode.data = text;\n }\n\n dom.setStyle(cell.element.style, \"height\", this.$lines.computeLineHeight(row, config, session) + \"px\");\n dom.setStyle(cell.element.style, \"top\", this.$lines.computeLineTop(row, config, session) + \"px\");\n cell.text = text;\n return cell;\n };\n\n this.$fixedWidth = false;\n this.$highlightGutterLine = true;\n this.$renderer = \"\";\n\n this.setHighlightGutterLine = function (highlightGutterLine) {\n this.$highlightGutterLine = highlightGutterLine;\n };\n\n this.$showLineNumbers = true;\n this.$renderer = \"\";\n\n this.setShowLineNumbers = function (show) {\n this.$renderer = !show && {\n getWidth: function getWidth() {\n return 0;\n },\n getText: function getText() {\n return \"\";\n }\n };\n };\n\n this.getShowLineNumbers = function () {\n return this.$showLineNumbers;\n };\n\n this.$showFoldWidgets = true;\n\n this.setShowFoldWidgets = function (show) {\n if (show) dom.addCssClass(this.element, \"ace_folding-enabled\");else dom.removeCssClass(this.element, \"ace_folding-enabled\");\n this.$showFoldWidgets = show;\n this.$padding = null;\n };\n\n this.getShowFoldWidgets = function () {\n return this.$showFoldWidgets;\n };\n\n this.$computePadding = function () {\n if (!this.element.firstChild) return {\n left: 0,\n right: 0\n };\n var style = dom.computedStyle(this.element.firstChild);\n this.$padding = {};\n this.$padding.left = (parseInt(style.borderLeftWidth) || 0) + (parseInt(style.paddingLeft) || 0) + 1;\n this.$padding.right = (parseInt(style.borderRightWidth) || 0) + (parseInt(style.paddingRight) || 0);\n return this.$padding;\n };\n\n this.getRegion = function (point) {\n var padding = this.$padding || this.$computePadding();\n var rect = this.element.getBoundingClientRect();\n if (point.x < padding.left + rect.left) return \"markers\";\n if (this.$showFoldWidgets && point.x > rect.right - padding.right) return \"foldWidgets\";\n };\n }).call(Gutter.prototype);\n\n function onCreateCell(element) {\n var textNode = document.createTextNode('');\n element.appendChild(textNode);\n var foldWidget = dom.createElement(\"span\");\n element.appendChild(foldWidget);\n return element;\n }\n\n exports.Gutter = Gutter;\n});\nace.define(\"ace/layer/marker\", [\"require\", \"exports\", \"module\", \"ace/range\", \"ace/lib/dom\"], function (require, exports, module) {\n \"use strict\";\n\n var Range = require(\"../range\").Range;\n\n var dom = require(\"../lib/dom\");\n\n var Marker = function Marker(parentEl) {\n this.element = dom.createElement(\"div\");\n this.element.className = \"ace_layer ace_marker-layer\";\n parentEl.appendChild(this.element);\n };\n\n (function () {\n this.$padding = 0;\n\n this.setPadding = function (padding) {\n this.$padding = padding;\n };\n\n this.setSession = function (session) {\n this.session = session;\n };\n\n this.setMarkers = function (markers) {\n this.markers = markers;\n };\n\n this.elt = function (className, css) {\n var x = this.i != -1 && this.element.childNodes[this.i];\n\n if (!x) {\n x = document.createElement(\"div\");\n this.element.appendChild(x);\n this.i = -1;\n } else {\n this.i++;\n }\n\n x.style.cssText = css;\n x.className = className;\n };\n\n this.update = function (config) {\n if (!config) return;\n this.config = config;\n this.i = 0;\n var html;\n\n for (var key in this.markers) {\n var marker = this.markers[key];\n\n if (!marker.range) {\n marker.update(html, this, this.session, config);\n continue;\n }\n\n var range = marker.range.clipRows(config.firstRow, config.lastRow);\n if (range.isEmpty()) continue;\n range = range.toScreenRange(this.session);\n\n if (marker.renderer) {\n var top = this.$getTop(range.start.row, config);\n var left = this.$padding + range.start.column * config.characterWidth;\n marker.renderer(html, range, left, top, config);\n } else if (marker.type == \"fullLine\") {\n this.drawFullLineMarker(html, range, marker.clazz, config);\n } else if (marker.type == \"screenLine\") {\n this.drawScreenLineMarker(html, range, marker.clazz, config);\n } else if (range.isMultiLine()) {\n if (marker.type == \"text\") this.drawTextMarker(html, range, marker.clazz, config);else this.drawMultiLineMarker(html, range, marker.clazz, config);\n } else {\n this.drawSingleLineMarker(html, range, marker.clazz + \" ace_start\" + \" ace_br15\", config);\n }\n }\n\n if (this.i != -1) {\n while (this.i < this.element.childElementCount) {\n this.element.removeChild(this.element.lastChild);\n }\n }\n };\n\n this.$getTop = function (row, layerConfig) {\n return (row - layerConfig.firstRowScreen) * layerConfig.lineHeight;\n };\n\n function getBorderClass(tl, tr, br, bl) {\n return (tl ? 1 : 0) | (tr ? 2 : 0) | (br ? 4 : 0) | (bl ? 8 : 0);\n }\n\n this.drawTextMarker = function (stringBuilder, range, clazz, layerConfig, extraStyle) {\n var session = this.session;\n var start = range.start.row;\n var end = range.end.row;\n var row = start;\n var prev = 0;\n var curr = 0;\n var next = session.getScreenLastRowColumn(row);\n var lineRange = new Range(row, range.start.column, row, curr);\n\n for (; row <= end; row++) {\n lineRange.start.row = lineRange.end.row = row;\n lineRange.start.column = row == start ? range.start.column : session.getRowWrapIndent(row);\n lineRange.end.column = next;\n prev = curr;\n curr = next;\n next = row + 1 < end ? session.getScreenLastRowColumn(row + 1) : row == end ? 0 : range.end.column;\n this.drawSingleLineMarker(stringBuilder, lineRange, clazz + (row == start ? \" ace_start\" : \"\") + \" ace_br\" + getBorderClass(row == start || row == start + 1 && range.start.column, prev < curr, curr > next, row == end), layerConfig, row == end ? 0 : 1, extraStyle);\n }\n };\n\n this.drawMultiLineMarker = function (stringBuilder, range, clazz, config, extraStyle) {\n var padding = this.$padding;\n var height = config.lineHeight;\n var top = this.$getTop(range.start.row, config);\n var left = padding + range.start.column * config.characterWidth;\n extraStyle = extraStyle || \"\";\n\n if (this.session.$bidiHandler.isBidiRow(range.start.row)) {\n var range1 = range.clone();\n range1.end.row = range1.start.row;\n range1.end.column = this.session.getLine(range1.start.row).length;\n this.drawBidiSingleLineMarker(stringBuilder, range1, clazz + \" ace_br1 ace_start\", config, null, extraStyle);\n } else {\n this.elt(clazz + \" ace_br1 ace_start\", \"height:\" + height + \"px;\" + \"right:0;\" + \"top:\" + top + \"px;left:\" + left + \"px;\" + (extraStyle || \"\"));\n }\n\n if (this.session.$bidiHandler.isBidiRow(range.end.row)) {\n var range1 = range.clone();\n range1.start.row = range1.end.row;\n range1.start.column = 0;\n this.drawBidiSingleLineMarker(stringBuilder, range1, clazz + \" ace_br12\", config, null, extraStyle);\n } else {\n top = this.$getTop(range.end.row, config);\n var width = range.end.column * config.characterWidth;\n this.elt(clazz + \" ace_br12\", \"height:\" + height + \"px;\" + \"width:\" + width + \"px;\" + \"top:\" + top + \"px;\" + \"left:\" + padding + \"px;\" + (extraStyle || \"\"));\n }\n\n height = (range.end.row - range.start.row - 1) * config.lineHeight;\n if (height <= 0) return;\n top = this.$getTop(range.start.row + 1, config);\n var radiusClass = (range.start.column ? 1 : 0) | (range.end.column ? 0 : 8);\n this.elt(clazz + (radiusClass ? \" ace_br\" + radiusClass : \"\"), \"height:\" + height + \"px;\" + \"right:0;\" + \"top:\" + top + \"px;\" + \"left:\" + padding + \"px;\" + (extraStyle || \"\"));\n };\n\n this.drawSingleLineMarker = function (stringBuilder, range, clazz, config, extraLength, extraStyle) {\n if (this.session.$bidiHandler.isBidiRow(range.start.row)) return this.drawBidiSingleLineMarker(stringBuilder, range, clazz, config, extraLength, extraStyle);\n var height = config.lineHeight;\n var width = (range.end.column + (extraLength || 0) - range.start.column) * config.characterWidth;\n var top = this.$getTop(range.start.row, config);\n var left = this.$padding + range.start.column * config.characterWidth;\n this.elt(clazz, \"height:\" + height + \"px;\" + \"width:\" + width + \"px;\" + \"top:\" + top + \"px;\" + \"left:\" + left + \"px;\" + (extraStyle || \"\"));\n };\n\n this.drawBidiSingleLineMarker = function (stringBuilder, range, clazz, config, extraLength, extraStyle) {\n var height = config.lineHeight,\n top = this.$getTop(range.start.row, config),\n padding = this.$padding;\n var selections = this.session.$bidiHandler.getSelections(range.start.column, range.end.column);\n selections.forEach(function (selection) {\n this.elt(clazz, \"height:\" + height + \"px;\" + \"width:\" + selection.width + (extraLength || 0) + \"px;\" + \"top:\" + top + \"px;\" + \"left:\" + (padding + selection.left) + \"px;\" + (extraStyle || \"\"));\n }, this);\n };\n\n this.drawFullLineMarker = function (stringBuilder, range, clazz, config, extraStyle) {\n var top = this.$getTop(range.start.row, config);\n var height = config.lineHeight;\n if (range.start.row != range.end.row) height += this.$getTop(range.end.row, config) - top;\n this.elt(clazz, \"height:\" + height + \"px;\" + \"top:\" + top + \"px;\" + \"left:0;right:0;\" + (extraStyle || \"\"));\n };\n\n this.drawScreenLineMarker = function (stringBuilder, range, clazz, config, extraStyle) {\n var top = this.$getTop(range.start.row, config);\n var height = config.lineHeight;\n this.elt(clazz, \"height:\" + height + \"px;\" + \"top:\" + top + \"px;\" + \"left:0;right:0;\" + (extraStyle || \"\"));\n };\n }).call(Marker.prototype);\n exports.Marker = Marker;\n});\nace.define(\"ace/layer/text\", [\"require\", \"exports\", \"module\", \"ace/lib/oop\", \"ace/lib/dom\", \"ace/lib/lang\", \"ace/layer/lines\", \"ace/lib/event_emitter\"], function (require, exports, module) {\n \"use strict\";\n\n var oop = require(\"../lib/oop\");\n\n var dom = require(\"../lib/dom\");\n\n var lang = require(\"../lib/lang\");\n\n var Lines = require(\"./lines\").Lines;\n\n var EventEmitter = require(\"../lib/event_emitter\").EventEmitter;\n\n var Text = function Text(parentEl) {\n this.dom = dom;\n this.element = this.dom.createElement(\"div\");\n this.element.className = \"ace_layer ace_text-layer\";\n parentEl.appendChild(this.element);\n this.$updateEolChar = this.$updateEolChar.bind(this);\n this.$lines = new Lines(this.element);\n };\n\n (function () {\n oop.implement(this, EventEmitter);\n this.EOF_CHAR = \"\\xB6\";\n this.EOL_CHAR_LF = \"\\xAC\";\n this.EOL_CHAR_CRLF = \"\\xa4\";\n this.EOL_CHAR = this.EOL_CHAR_LF;\n this.TAB_CHAR = \"\\u2014\"; //\"\\u21E5\";\n\n this.SPACE_CHAR = \"\\xB7\";\n this.$padding = 0;\n this.MAX_LINE_LENGTH = 10000;\n\n this.$updateEolChar = function () {\n var doc = this.session.doc;\n var unixMode = doc.getNewLineCharacter() == \"\\n\" && doc.getNewLineMode() != \"windows\";\n var EOL_CHAR = unixMode ? this.EOL_CHAR_LF : this.EOL_CHAR_CRLF;\n\n if (this.EOL_CHAR != EOL_CHAR) {\n this.EOL_CHAR = EOL_CHAR;\n return true;\n }\n };\n\n this.setPadding = function (padding) {\n this.$padding = padding;\n this.element.style.margin = \"0 \" + padding + \"px\";\n };\n\n this.getLineHeight = function () {\n return this.$fontMetrics.$characterSize.height || 0;\n };\n\n this.getCharacterWidth = function () {\n return this.$fontMetrics.$characterSize.width || 0;\n };\n\n this.$setFontMetrics = function (measure) {\n this.$fontMetrics = measure;\n this.$fontMetrics.on(\"changeCharacterSize\", function (e) {\n this._signal(\"changeCharacterSize\", e);\n }.bind(this));\n this.$pollSizeChanges();\n };\n\n this.checkForSizeChanges = function () {\n this.$fontMetrics.checkForSizeChanges();\n };\n\n this.$pollSizeChanges = function () {\n return this.$pollSizeChangesTimer = this.$fontMetrics.$pollSizeChanges();\n };\n\n this.setSession = function (session) {\n this.session = session;\n if (session) this.$computeTabString();\n };\n\n this.showInvisibles = false;\n this.showSpaces = false;\n this.showTabs = false;\n this.showEOL = false;\n\n this.setShowInvisibles = function (showInvisibles) {\n if (this.showInvisibles == showInvisibles) return false;\n this.showInvisibles = showInvisibles;\n\n if (typeof showInvisibles == \"string\") {\n this.showSpaces = /tab/i.test(showInvisibles);\n this.showTabs = /space/i.test(showInvisibles);\n this.showEOL = /eol/i.test(showInvisibles);\n } else {\n this.showSpaces = this.showTabs = this.showEOL = showInvisibles;\n }\n\n this.$computeTabString();\n return true;\n };\n\n this.displayIndentGuides = true;\n\n this.setDisplayIndentGuides = function (display) {\n if (this.displayIndentGuides == display) return false;\n this.displayIndentGuides = display;\n this.$computeTabString();\n return true;\n };\n\n this.$tabStrings = [];\n\n this.onChangeTabSize = this.$computeTabString = function () {\n var tabSize = this.session.getTabSize();\n this.tabSize = tabSize;\n var tabStr = this.$tabStrings = [0];\n\n for (var i = 1; i < tabSize + 1; i++) {\n if (this.showTabs) {\n var span = this.dom.createElement(\"span\");\n span.className = \"ace_invisible ace_invisible_tab\";\n span.textContent = lang.stringRepeat(this.TAB_CHAR, i);\n tabStr.push(span);\n } else {\n tabStr.push(this.dom.createTextNode(lang.stringRepeat(\" \", i), this.element));\n }\n }\n\n if (this.displayIndentGuides) {\n this.$indentGuideRe = /\\s\\S| \\t|\\t |\\s$/;\n var className = \"ace_indent-guide\";\n var spaceClass = this.showSpaces ? \" ace_invisible ace_invisible_space\" : \"\";\n var spaceContent = this.showSpaces ? lang.stringRepeat(this.SPACE_CHAR, this.tabSize) : lang.stringRepeat(\" \", this.tabSize);\n var tabClass = this.showTabs ? \" ace_invisible ace_invisible_tab\" : \"\";\n var tabContent = this.showTabs ? lang.stringRepeat(this.TAB_CHAR, this.tabSize) : spaceContent;\n var span = this.dom.createElement(\"span\");\n span.className = className + spaceClass;\n span.textContent = spaceContent;\n this.$tabStrings[\" \"] = span;\n var span = this.dom.createElement(\"span\");\n span.className = className + tabClass;\n span.textContent = tabContent;\n this.$tabStrings[\"\\t\"] = span;\n }\n };\n\n this.updateLines = function (config, firstRow, lastRow) {\n if (this.config.lastRow != config.lastRow || this.config.firstRow != config.firstRow) {\n return this.update(config);\n }\n\n this.config = config;\n var first = Math.max(firstRow, config.firstRow);\n var last = Math.min(lastRow, config.lastRow);\n var lineElements = this.element.childNodes;\n var lineElementsIdx = 0;\n\n for (var row = config.firstRow; row < first; row++) {\n var foldLine = this.session.getFoldLine(row);\n\n if (foldLine) {\n if (foldLine.containsRow(first)) {\n first = foldLine.start.row;\n break;\n } else {\n row = foldLine.end.row;\n }\n }\n\n lineElementsIdx++;\n }\n\n var heightChanged = false;\n var row = first;\n var foldLine = this.session.getNextFoldLine(row);\n var foldStart = foldLine ? foldLine.start.row : Infinity;\n\n while (true) {\n if (row > foldStart) {\n row = foldLine.end.row + 1;\n foldLine = this.session.getNextFoldLine(row, foldLine);\n foldStart = foldLine ? foldLine.start.row : Infinity;\n }\n\n if (row > last) break;\n var lineElement = lineElements[lineElementsIdx++];\n\n if (lineElement) {\n this.dom.removeChildren(lineElement);\n this.$renderLine(lineElement, row, row == foldStart ? foldLine : false);\n if (heightChanged) lineElement.style.top = this.$lines.computeLineTop(row, config, this.session) + \"px\";\n var height = config.lineHeight * this.session.getRowLength(row) + \"px\";\n\n if (lineElement.style.height != height) {\n heightChanged = true;\n lineElement.style.height = height;\n }\n }\n\n row++;\n }\n\n if (heightChanged) {\n while (lineElementsIdx < this.$lines.cells.length) {\n var cell = this.$lines.cells[lineElementsIdx++];\n cell.element.style.top = this.$lines.computeLineTop(cell.row, config, this.session) + \"px\";\n }\n }\n };\n\n this.scrollLines = function (config) {\n var oldConfig = this.config;\n this.config = config;\n if (this.$lines.pageChanged(oldConfig, config)) return this.update(config);\n this.$lines.moveContainer(config);\n var lastRow = config.lastRow;\n var oldLastRow = oldConfig ? oldConfig.lastRow : -1;\n if (!oldConfig || oldLastRow < config.firstRow) return this.update(config);\n if (lastRow < oldConfig.firstRow) return this.update(config);\n if (!oldConfig || oldConfig.lastRow < config.firstRow) return this.update(config);\n if (config.lastRow < oldConfig.firstRow) return this.update(config);\n if (oldConfig.firstRow < config.firstRow) for (var row = this.session.getFoldedRowCount(oldConfig.firstRow, config.firstRow - 1); row > 0; row--) {\n this.$lines.shift();\n }\n if (oldConfig.lastRow > config.lastRow) for (var row = this.session.getFoldedRowCount(config.lastRow + 1, oldConfig.lastRow); row > 0; row--) {\n this.$lines.pop();\n }\n\n if (config.firstRow < oldConfig.firstRow) {\n this.$lines.unshift(this.$renderLinesFragment(config, config.firstRow, oldConfig.firstRow - 1));\n }\n\n if (config.lastRow > oldConfig.lastRow) {\n this.$lines.push(this.$renderLinesFragment(config, oldConfig.lastRow + 1, config.lastRow));\n }\n };\n\n this.$renderLinesFragment = function (config, firstRow, lastRow) {\n var fragment = [];\n var row = firstRow;\n var foldLine = this.session.getNextFoldLine(row);\n var foldStart = foldLine ? foldLine.start.row : Infinity;\n\n while (true) {\n if (row > foldStart) {\n row = foldLine.end.row + 1;\n foldLine = this.session.getNextFoldLine(row, foldLine);\n foldStart = foldLine ? foldLine.start.row : Infinity;\n }\n\n if (row > lastRow) break;\n var line = this.$lines.createCell(row, config, this.session);\n var lineEl = line.element;\n this.dom.removeChildren(lineEl);\n dom.setStyle(lineEl.style, \"height\", this.$lines.computeLineHeight(row, config, this.session) + \"px\");\n dom.setStyle(lineEl.style, \"top\", this.$lines.computeLineTop(row, config, this.session) + \"px\");\n this.$renderLine(lineEl, row, row == foldStart ? foldLine : false);\n\n if (this.$useLineGroups()) {\n lineEl.className = \"ace_line_group\";\n } else {\n lineEl.className = \"ace_line\";\n }\n\n fragment.push(line);\n row++;\n }\n\n return fragment;\n };\n\n this.update = function (config) {\n this.$lines.moveContainer(config);\n this.config = config;\n var firstRow = config.firstRow;\n var lastRow = config.lastRow;\n var lines = this.$lines;\n\n while (lines.getLength()) {\n lines.pop();\n }\n\n lines.push(this.$renderLinesFragment(config, firstRow, lastRow));\n };\n\n this.$textToken = {\n \"text\": true,\n \"rparen\": true,\n \"lparen\": true\n };\n\n this.$renderToken = function (parent, screenColumn, token, value) {\n var self = this;\n var re = /(\\t)|( +)|([\\x00-\\x1f\\x80-\\xa0\\xad\\u1680\\u180E\\u2000-\\u200f\\u2028\\u2029\\u202F\\u205F\\uFEFF\\uFFF9-\\uFFFC]+)|(\\u3000)|([\\u1100-\\u115F\\u11A3-\\u11A7\\u11FA-\\u11FF\\u2329-\\u232A\\u2E80-\\u2E99\\u2E9B-\\u2EF3\\u2F00-\\u2FD5\\u2FF0-\\u2FFB\\u3001-\\u303E\\u3041-\\u3096\\u3099-\\u30FF\\u3105-\\u312D\\u3131-\\u318E\\u3190-\\u31BA\\u31C0-\\u31E3\\u31F0-\\u321E\\u3220-\\u3247\\u3250-\\u32FE\\u3300-\\u4DBF\\u4E00-\\uA48C\\uA490-\\uA4C6\\uA960-\\uA97C\\uAC00-\\uD7A3\\uD7B0-\\uD7C6\\uD7CB-\\uD7FB\\uF900-\\uFAFF\\uFE10-\\uFE19\\uFE30-\\uFE52\\uFE54-\\uFE66\\uFE68-\\uFE6B\\uFF01-\\uFF60\\uFFE0-\\uFFE6]|[\\uD800-\\uDBFF][\\uDC00-\\uDFFF])/g;\n var valueFragment = this.dom.createFragment(this.element);\n var m;\n var i = 0;\n\n while (m = re.exec(value)) {\n var tab = m[1];\n var simpleSpace = m[2];\n var controlCharacter = m[3];\n var cjkSpace = m[4];\n var cjk = m[5];\n if (!self.showSpaces && simpleSpace) continue;\n var before = i != m.index ? value.slice(i, m.index) : \"\";\n i = m.index + m[0].length;\n\n if (before) {\n valueFragment.appendChild(this.dom.createTextNode(before, this.element));\n }\n\n if (tab) {\n var tabSize = self.session.getScreenTabSize(screenColumn + m.index);\n valueFragment.appendChild(self.$tabStrings[tabSize].cloneNode(true));\n screenColumn += tabSize - 1;\n } else if (simpleSpace) {\n if (self.showSpaces) {\n var span = this.dom.createElement(\"span\");\n span.className = \"ace_invisible ace_invisible_space\";\n span.textContent = lang.stringRepeat(self.SPACE_CHAR, simpleSpace.length);\n valueFragment.appendChild(span);\n } else {\n valueFragment.appendChild(this.com.createTextNode(simpleSpace, this.element));\n }\n } else if (controlCharacter) {\n var span = this.dom.createElement(\"span\");\n span.className = \"ace_invisible ace_invisible_space ace_invalid\";\n span.textContent = lang.stringRepeat(self.SPACE_CHAR, controlCharacter.length);\n valueFragment.appendChild(span);\n } else if (cjkSpace) {\n screenColumn += 1;\n var span = this.dom.createElement(\"span\");\n span.style.width = self.config.characterWidth * 2 + \"px\";\n span.className = self.showSpaces ? \"ace_cjk ace_invisible ace_invisible_space\" : \"ace_cjk\";\n span.textContent = self.showSpaces ? self.SPACE_CHAR : cjkSpace;\n valueFragment.appendChild(span);\n } else if (cjk) {\n screenColumn += 1;\n var span = this.dom.createElement(\"span\");\n span.style.width = self.config.characterWidth * 2 + \"px\";\n span.className = \"ace_cjk\";\n span.textContent = cjk;\n valueFragment.appendChild(span);\n }\n }\n\n valueFragment.appendChild(this.dom.createTextNode(i ? value.slice(i) : value, this.element));\n\n if (!this.$textToken[token.type]) {\n var classes = \"ace_\" + token.type.replace(/\\./g, \" ace_\");\n var span = this.dom.createElement(\"span\");\n if (token.type == \"fold\") span.style.width = token.value.length * this.config.characterWidth + \"px\";\n span.className = classes;\n span.appendChild(valueFragment);\n parent.appendChild(span);\n } else {\n parent.appendChild(valueFragment);\n }\n\n return screenColumn + value.length;\n };\n\n this.renderIndentGuide = function (parent, value, max) {\n var cols = value.search(this.$indentGuideRe);\n if (cols <= 0 || cols >= max) return value;\n\n if (value[0] == \" \") {\n cols -= cols % this.tabSize;\n var count = cols / this.tabSize;\n\n for (var i = 0; i < count; i++) {\n parent.appendChild(this.$tabStrings[\" \"].cloneNode(true));\n }\n\n return value.substr(cols);\n } else if (value[0] == \"\\t\") {\n for (var i = 0; i < cols; i++) {\n parent.appendChild(this.$tabStrings[\"\\t\"].cloneNode(true));\n }\n\n return value.substr(cols);\n }\n\n return value;\n };\n\n this.$createLineElement = function (parent) {\n var lineEl = this.dom.createElement(\"div\");\n lineEl.className = \"ace_line\";\n lineEl.style.height = this.config.lineHeight + \"px\";\n return lineEl;\n };\n\n this.$renderWrappedLine = function (parent, tokens, splits) {\n var chars = 0;\n var split = 0;\n var splitChars = splits[0];\n var screenColumn = 0;\n var lineEl = this.$createLineElement();\n parent.appendChild(lineEl);\n\n for (var i = 0; i < tokens.length; i++) {\n var token = tokens[i];\n var value = token.value;\n\n if (i == 0 && this.displayIndentGuides) {\n chars = value.length;\n value = this.renderIndentGuide(lineEl, value, splitChars);\n if (!value) continue;\n chars -= value.length;\n }\n\n if (chars + value.length < splitChars) {\n screenColumn = this.$renderToken(lineEl, screenColumn, token, value);\n chars += value.length;\n } else {\n while (chars + value.length >= splitChars) {\n screenColumn = this.$renderToken(lineEl, screenColumn, token, value.substring(0, splitChars - chars));\n value = value.substring(splitChars - chars);\n chars = splitChars;\n lineEl = this.$createLineElement();\n parent.appendChild(lineEl);\n lineEl.appendChild(this.dom.createTextNode(lang.stringRepeat(\"\\xa0\", splits.indent), this.element));\n split++;\n screenColumn = 0;\n splitChars = splits[split] || Number.MAX_VALUE;\n }\n\n if (value.length != 0) {\n chars += value.length;\n screenColumn = this.$renderToken(lineEl, screenColumn, token, value);\n }\n }\n }\n\n if (splits[splits.length - 1] > this.MAX_LINE_LENGTH) this.$renderOverflowMessage(lineEl, screenColumn, null, \"\", true);\n };\n\n this.$renderSimpleLine = function (parent, tokens) {\n var screenColumn = 0;\n var token = tokens[0];\n var value = token.value;\n if (this.displayIndentGuides) value = this.renderIndentGuide(parent, value);\n if (value) screenColumn = this.$renderToken(parent, screenColumn, token, value);\n\n for (var i = 1; i < tokens.length; i++) {\n token = tokens[i];\n value = token.value;\n if (screenColumn + value.length > this.MAX_LINE_LENGTH) return this.$renderOverflowMessage(parent, screenColumn, token, value);\n screenColumn = this.$renderToken(parent, screenColumn, token, value);\n }\n };\n\n this.$renderOverflowMessage = function (parent, screenColumn, token, value, hide) {\n token && this.$renderToken(parent, screenColumn, token, value.slice(0, this.MAX_LINE_LENGTH - screenColumn));\n var overflowEl = this.dom.createElement(\"span\");\n overflowEl.className = \"ace_inline_button ace_keyword ace_toggle_wrap\";\n overflowEl.textContent = hide ? \"\" : \"\";\n parent.appendChild(overflowEl);\n };\n\n this.$renderLine = function (parent, row, foldLine) {\n if (!foldLine && foldLine != false) foldLine = this.session.getFoldLine(row);\n if (foldLine) var tokens = this.$getFoldLineTokens(row, foldLine);else var tokens = this.session.getTokens(row);\n var lastLineEl = parent;\n\n if (tokens.length) {\n var splits = this.session.getRowSplitData(row);\n\n if (splits && splits.length) {\n this.$renderWrappedLine(parent, tokens, splits);\n var lastLineEl = parent.lastChild;\n } else {\n var lastLineEl = parent;\n\n if (this.$useLineGroups()) {\n lastLineEl = this.$createLineElement();\n parent.appendChild(lastLineEl);\n }\n\n this.$renderSimpleLine(lastLineEl, tokens);\n }\n } else if (this.$useLineGroups()) {\n lastLineEl = this.$createLineElement();\n parent.appendChild(lastLineEl);\n }\n\n if (this.showEOL && lastLineEl) {\n if (foldLine) row = foldLine.end.row;\n var invisibleEl = this.dom.createElement(\"span\");\n invisibleEl.className = \"ace_invisible ace_invisible_eol\";\n invisibleEl.textContent = row == this.session.getLength() - 1 ? this.EOF_CHAR : this.EOL_CHAR;\n lastLineEl.appendChild(invisibleEl);\n }\n };\n\n this.$getFoldLineTokens = function (row, foldLine) {\n var session = this.session;\n var renderTokens = [];\n\n function addTokens(tokens, from, to) {\n var idx = 0,\n col = 0;\n\n while (col + tokens[idx].value.length < from) {\n col += tokens[idx].value.length;\n idx++;\n if (idx == tokens.length) return;\n }\n\n if (col != from) {\n var value = tokens[idx].value.substring(from - col);\n if (value.length > to - from) value = value.substring(0, to - from);\n renderTokens.push({\n type: tokens[idx].type,\n value: value\n });\n col = from + value.length;\n idx += 1;\n }\n\n while (col < to && idx < tokens.length) {\n var value = tokens[idx].value;\n\n if (value.length + col > to) {\n renderTokens.push({\n type: tokens[idx].type,\n value: value.substring(0, to - col)\n });\n } else renderTokens.push(tokens[idx]);\n\n col += value.length;\n idx += 1;\n }\n }\n\n var tokens = session.getTokens(row);\n foldLine.walk(function (placeholder, row, column, lastColumn, isNewRow) {\n if (placeholder != null) {\n renderTokens.push({\n type: \"fold\",\n value: placeholder\n });\n } else {\n if (isNewRow) tokens = session.getTokens(row);\n if (tokens.length) addTokens(tokens, lastColumn, column);\n }\n }, foldLine.end.row, this.session.getLine(foldLine.end.row).length);\n return renderTokens;\n };\n\n this.$useLineGroups = function () {\n return this.session.getUseWrapMode();\n };\n\n this.destroy = function () {};\n }).call(Text.prototype);\n exports.Text = Text;\n});\nace.define(\"ace/layer/cursor\", [\"require\", \"exports\", \"module\", \"ace/lib/dom\"], function (require, exports, module) {\n \"use strict\";\n\n var dom = require(\"../lib/dom\");\n\n var Cursor = function Cursor(parentEl) {\n this.element = dom.createElement(\"div\");\n this.element.className = \"ace_layer ace_cursor-layer\";\n parentEl.appendChild(this.element);\n this.isVisible = false;\n this.isBlinking = true;\n this.blinkInterval = 1000;\n this.smoothBlinking = false;\n this.cursors = [];\n this.cursor = this.addCursor();\n dom.addCssClass(this.element, \"ace_hidden-cursors\");\n this.$updateCursors = this.$updateOpacity.bind(this);\n };\n\n (function () {\n this.$updateOpacity = function (val) {\n var cursors = this.cursors;\n\n for (var i = cursors.length; i--;) {\n dom.setStyle(cursors[i].style, \"opacity\", val ? \"\" : \"0\");\n }\n };\n\n this.$startCssAnimation = function () {\n var cursors = this.cursors;\n\n for (var i = cursors.length; i--;) {\n cursors[i].style.animationDuration = this.blinkInterval + \"ms\";\n }\n\n this.$isAnimating = true;\n setTimeout(function () {\n if (this.$isAnimating) {\n dom.addCssClass(this.element, \"ace_animate-blinking\");\n }\n }.bind(this));\n };\n\n this.$stopCssAnimation = function () {\n this.$isAnimating = false;\n dom.removeCssClass(this.element, \"ace_animate-blinking\");\n };\n\n this.$padding = 0;\n\n this.setPadding = function (padding) {\n this.$padding = padding;\n };\n\n this.setSession = function (session) {\n this.session = session;\n };\n\n this.setBlinking = function (blinking) {\n if (blinking != this.isBlinking) {\n this.isBlinking = blinking;\n this.restartTimer();\n }\n };\n\n this.setBlinkInterval = function (blinkInterval) {\n if (blinkInterval != this.blinkInterval) {\n this.blinkInterval = blinkInterval;\n this.restartTimer();\n }\n };\n\n this.setSmoothBlinking = function (smoothBlinking) {\n if (smoothBlinking != this.smoothBlinking) {\n this.smoothBlinking = smoothBlinking;\n dom.setCssClass(this.element, \"ace_smooth-blinking\", smoothBlinking);\n this.$updateCursors(true);\n this.restartTimer();\n }\n };\n\n this.addCursor = function () {\n var el = dom.createElement(\"div\");\n el.className = \"ace_cursor\";\n this.element.appendChild(el);\n this.cursors.push(el);\n return el;\n };\n\n this.removeCursor = function () {\n if (this.cursors.length > 1) {\n var el = this.cursors.pop();\n el.parentNode.removeChild(el);\n return el;\n }\n };\n\n this.hideCursor = function () {\n this.isVisible = false;\n dom.addCssClass(this.element, \"ace_hidden-cursors\");\n this.restartTimer();\n };\n\n this.showCursor = function () {\n this.isVisible = true;\n dom.removeCssClass(this.element, \"ace_hidden-cursors\");\n this.restartTimer();\n };\n\n this.restartTimer = function () {\n var update = this.$updateCursors;\n clearInterval(this.intervalId);\n clearTimeout(this.timeoutId);\n this.$stopCssAnimation();\n\n if (this.smoothBlinking) {\n this.$isSmoothBlinking = false;\n dom.removeCssClass(this.element, \"ace_smooth-blinking\");\n }\n\n update(true);\n\n if (!this.isBlinking || !this.blinkInterval || !this.isVisible) {\n this.$stopCssAnimation();\n return;\n }\n\n if (this.smoothBlinking) {\n this.$isSmoothBlinking = true;\n setTimeout(function () {\n if (this.$isSmoothBlinking) {\n dom.addCssClass(this.element, \"ace_smooth-blinking\");\n }\n }.bind(this));\n }\n\n if (dom.HAS_CSS_ANIMATION) {\n this.$startCssAnimation();\n } else {\n var blink = function () {\n this.timeoutId = setTimeout(function () {\n update(false);\n }, 0.6 * this.blinkInterval);\n }.bind(this);\n\n this.intervalId = setInterval(function () {\n update(true);\n blink();\n }, this.blinkInterval);\n blink();\n }\n };\n\n this.getPixelPosition = function (position, onScreen) {\n if (!this.config || !this.session) return {\n left: 0,\n top: 0\n };\n if (!position) position = this.session.selection.getCursor();\n var pos = this.session.documentToScreenPosition(position);\n var cursorLeft = this.$padding + (this.session.$bidiHandler.isBidiRow(pos.row, position.row) ? this.session.$bidiHandler.getPosLeft(pos.column) : pos.column * this.config.characterWidth);\n var cursorTop = (pos.row - (onScreen ? this.config.firstRowScreen : 0)) * this.config.lineHeight;\n return {\n left: cursorLeft,\n top: cursorTop\n };\n };\n\n this.isCursorInView = function (pixelPos, config) {\n return pixelPos.top >= 0 && pixelPos.top < config.maxHeight;\n };\n\n this.update = function (config) {\n this.config = config;\n var selections = this.session.$selectionMarkers;\n var i = 0,\n cursorIndex = 0;\n\n if (selections === undefined || selections.length === 0) {\n selections = [{\n cursor: null\n }];\n }\n\n for (var i = 0, n = selections.length; i < n; i++) {\n var pixelPos = this.getPixelPosition(selections[i].cursor, true);\n\n if ((pixelPos.top > config.height + config.offset || pixelPos.top < 0) && i > 1) {\n continue;\n }\n\n var element = this.cursors[cursorIndex++] || this.addCursor();\n var style = element.style;\n\n if (!this.drawCursor) {\n if (!this.isCursorInView(pixelPos, config)) {\n dom.setStyle(style, \"display\", \"none\");\n } else {\n dom.setStyle(style, \"display\", \"block\");\n dom.translate(element, pixelPos.left, pixelPos.top);\n dom.setStyle(style, \"width\", Math.round(config.characterWidth) + \"px\");\n dom.setStyle(style, \"height\", config.lineHeight + \"px\");\n }\n } else {\n this.drawCursor(element, pixelPos, config, selections[i], this.session);\n }\n }\n\n while (this.cursors.length > cursorIndex) {\n this.removeCursor();\n }\n\n var overwrite = this.session.getOverwrite();\n this.$setOverwrite(overwrite);\n this.$pixelPos = pixelPos;\n this.restartTimer();\n };\n\n this.drawCursor = null;\n\n this.$setOverwrite = function (overwrite) {\n if (overwrite != this.overwrite) {\n this.overwrite = overwrite;\n if (overwrite) dom.addCssClass(this.element, \"ace_overwrite-cursors\");else dom.removeCssClass(this.element, \"ace_overwrite-cursors\");\n }\n };\n\n this.destroy = function () {\n clearInterval(this.intervalId);\n clearTimeout(this.timeoutId);\n };\n }).call(Cursor.prototype);\n exports.Cursor = Cursor;\n});\nace.define(\"ace/scrollbar\", [\"require\", \"exports\", \"module\", \"ace/lib/oop\", \"ace/lib/dom\", \"ace/lib/event\", \"ace/lib/event_emitter\"], function (require, exports, module) {\n \"use strict\";\n\n var oop = require(\"./lib/oop\");\n\n var dom = require(\"./lib/dom\");\n\n var event = require(\"./lib/event\");\n\n var EventEmitter = require(\"./lib/event_emitter\").EventEmitter;\n\n var MAX_SCROLL_H = 0x8000;\n\n var ScrollBar = function ScrollBar(parent) {\n this.element = dom.createElement(\"div\");\n this.element.className = \"ace_scrollbar ace_scrollbar\" + this.classSuffix;\n this.inner = dom.createElement(\"div\");\n this.inner.className = \"ace_scrollbar-inner\";\n this.inner.textContent = \"\\xa0\";\n this.element.appendChild(this.inner);\n parent.appendChild(this.element);\n this.setVisible(false);\n this.skipEvent = false;\n event.addListener(this.element, \"scroll\", this.onScroll.bind(this));\n event.addListener(this.element, \"mousedown\", event.preventDefault);\n };\n\n (function () {\n oop.implement(this, EventEmitter);\n\n this.setVisible = function (isVisible) {\n this.element.style.display = isVisible ? \"\" : \"none\";\n this.isVisible = isVisible;\n this.coeff = 1;\n };\n }).call(ScrollBar.prototype);\n\n var VScrollBar = function VScrollBar(parent, renderer) {\n ScrollBar.call(this, parent);\n this.scrollTop = 0;\n this.scrollHeight = 0;\n renderer.$scrollbarWidth = this.width = dom.scrollbarWidth(parent.ownerDocument);\n this.inner.style.width = this.element.style.width = (this.width || 15) + 5 + \"px\";\n this.$minWidth = 0;\n };\n\n oop.inherits(VScrollBar, ScrollBar);\n (function () {\n this.classSuffix = '-v';\n\n this.onScroll = function () {\n if (!this.skipEvent) {\n this.scrollTop = this.element.scrollTop;\n\n if (this.coeff != 1) {\n var h = this.element.clientHeight / this.scrollHeight;\n this.scrollTop = this.scrollTop * (1 - h) / (this.coeff - h);\n }\n\n this._emit(\"scroll\", {\n data: this.scrollTop\n });\n }\n\n this.skipEvent = false;\n };\n\n this.getWidth = function () {\n return Math.max(this.isVisible ? this.width : 0, this.$minWidth || 0);\n };\n\n this.setHeight = function (height) {\n this.element.style.height = height + \"px\";\n };\n\n this.setInnerHeight = this.setScrollHeight = function (height) {\n this.scrollHeight = height;\n\n if (height > MAX_SCROLL_H) {\n this.coeff = MAX_SCROLL_H / height;\n height = MAX_SCROLL_H;\n } else if (this.coeff != 1) {\n this.coeff = 1;\n }\n\n this.inner.style.height = height + \"px\";\n };\n\n this.setScrollTop = function (scrollTop) {\n if (this.scrollTop != scrollTop) {\n this.skipEvent = true;\n this.scrollTop = scrollTop;\n this.element.scrollTop = scrollTop * this.coeff;\n }\n };\n }).call(VScrollBar.prototype);\n\n var HScrollBar = function HScrollBar(parent, renderer) {\n ScrollBar.call(this, parent);\n this.scrollLeft = 0;\n this.height = renderer.$scrollbarWidth;\n this.inner.style.height = this.element.style.height = (this.height || 15) + 5 + \"px\";\n };\n\n oop.inherits(HScrollBar, ScrollBar);\n (function () {\n this.classSuffix = '-h';\n\n this.onScroll = function () {\n if (!this.skipEvent) {\n this.scrollLeft = this.element.scrollLeft;\n\n this._emit(\"scroll\", {\n data: this.scrollLeft\n });\n }\n\n this.skipEvent = false;\n };\n\n this.getHeight = function () {\n return this.isVisible ? this.height : 0;\n };\n\n this.setWidth = function (width) {\n this.element.style.width = width + \"px\";\n };\n\n this.setInnerWidth = function (width) {\n this.inner.style.width = width + \"px\";\n };\n\n this.setScrollWidth = function (width) {\n this.inner.style.width = width + \"px\";\n };\n\n this.setScrollLeft = function (scrollLeft) {\n if (this.scrollLeft != scrollLeft) {\n this.skipEvent = true;\n this.scrollLeft = this.element.scrollLeft = scrollLeft;\n }\n };\n }).call(HScrollBar.prototype);\n exports.ScrollBar = VScrollBar; // backward compatibility\n\n exports.ScrollBarV = VScrollBar; // backward compatibility\n\n exports.ScrollBarH = HScrollBar; // backward compatibility\n\n exports.VScrollBar = VScrollBar;\n exports.HScrollBar = HScrollBar;\n});\nace.define(\"ace/renderloop\", [\"require\", \"exports\", \"module\", \"ace/lib/event\"], function (require, exports, module) {\n \"use strict\";\n\n var event = require(\"./lib/event\");\n\n var RenderLoop = function RenderLoop(onRender, win) {\n this.onRender = onRender;\n this.pending = false;\n this.changes = 0;\n this.$recursionLimit = 2;\n this.window = win || window;\n\n var _self = this;\n\n this._flush = function (ts) {\n _self.pending = false;\n var changes = _self.changes;\n\n if (changes) {\n event.blockIdle(100);\n _self.changes = 0;\n\n _self.onRender(changes);\n }\n\n if (_self.changes) {\n if (_self.$recursionLimit-- < 0) return;\n\n _self.schedule();\n } else {\n _self.$recursionLimit = 2;\n }\n };\n };\n\n (function () {\n this.schedule = function (change) {\n this.changes = this.changes | change;\n\n if (this.changes && !this.pending) {\n event.nextFrame(this._flush);\n this.pending = true;\n }\n };\n\n this.clear = function (change) {\n var changes = this.changes;\n this.changes = 0;\n return changes;\n };\n }).call(RenderLoop.prototype);\n exports.RenderLoop = RenderLoop;\n});\nace.define(\"ace/layer/font_metrics\", [\"require\", \"exports\", \"module\", \"ace/lib/oop\", \"ace/lib/dom\", \"ace/lib/lang\", \"ace/lib/event\", \"ace/lib/useragent\", \"ace/lib/event_emitter\"], function (require, exports, module) {\n var oop = require(\"../lib/oop\");\n\n var dom = require(\"../lib/dom\");\n\n var lang = require(\"../lib/lang\");\n\n var event = require(\"../lib/event\");\n\n var useragent = require(\"../lib/useragent\");\n\n var EventEmitter = require(\"../lib/event_emitter\").EventEmitter;\n\n var CHAR_COUNT = 256;\n var USE_OBSERVER = typeof ResizeObserver == \"function\";\n var L = 200;\n\n var FontMetrics = exports.FontMetrics = function (parentEl) {\n this.el = dom.createElement(\"div\");\n this.$setMeasureNodeStyles(this.el.style, true);\n this.$main = dom.createElement(\"div\");\n this.$setMeasureNodeStyles(this.$main.style);\n this.$measureNode = dom.createElement(\"div\");\n this.$setMeasureNodeStyles(this.$measureNode.style);\n this.el.appendChild(this.$main);\n this.el.appendChild(this.$measureNode);\n parentEl.appendChild(this.el);\n this.$measureNode.textContent = lang.stringRepeat(\"X\", CHAR_COUNT);\n this.$characterSize = {\n width: 0,\n height: 0\n };\n if (USE_OBSERVER) this.$addObserver();else this.checkForSizeChanges();\n };\n\n (function () {\n oop.implement(this, EventEmitter);\n this.$characterSize = {\n width: 0,\n height: 0\n };\n\n this.$setMeasureNodeStyles = function (style, isRoot) {\n style.width = style.height = \"auto\";\n style.left = style.top = \"0px\";\n style.visibility = \"hidden\";\n style.position = \"absolute\";\n style.whiteSpace = \"pre\";\n\n if (useragent.isIE < 8) {\n style[\"font-family\"] = \"inherit\";\n } else {\n style.font = \"inherit\";\n }\n\n style.overflow = isRoot ? \"hidden\" : \"visible\";\n };\n\n this.checkForSizeChanges = function (size) {\n if (size === undefined) size = this.$measureSizes();\n\n if (size && (this.$characterSize.width !== size.width || this.$characterSize.height !== size.height)) {\n this.$measureNode.style.fontWeight = \"bold\";\n var boldSize = this.$measureSizes();\n this.$measureNode.style.fontWeight = \"\";\n this.$characterSize = size;\n this.charSizes = Object.create(null);\n this.allowBoldFonts = boldSize && boldSize.width === size.width && boldSize.height === size.height;\n\n this._emit(\"changeCharacterSize\", {\n data: size\n });\n }\n };\n\n this.$addObserver = function () {\n var self = this;\n this.$observer = new window.ResizeObserver(function (e) {\n self.checkForSizeChanges();\n });\n this.$observer.observe(this.$measureNode);\n };\n\n this.$pollSizeChanges = function () {\n if (this.$pollSizeChangesTimer || this.$observer) return this.$pollSizeChangesTimer;\n var self = this;\n return this.$pollSizeChangesTimer = event.onIdle(function cb() {\n self.checkForSizeChanges();\n event.onIdle(cb, 500);\n }, 500);\n };\n\n this.setPolling = function (val) {\n if (val) {\n this.$pollSizeChanges();\n } else if (this.$pollSizeChangesTimer) {\n clearInterval(this.$pollSizeChangesTimer);\n this.$pollSizeChangesTimer = 0;\n }\n };\n\n this.$measureSizes = function (node) {\n var size = {\n height: (node || this.$measureNode).clientHeight,\n width: (node || this.$measureNode).clientWidth / CHAR_COUNT\n };\n if (size.width === 0 || size.height === 0) return null;\n return size;\n };\n\n this.$measureCharWidth = function (ch) {\n this.$main.textContent = lang.stringRepeat(ch, CHAR_COUNT);\n var rect = this.$main.getBoundingClientRect();\n return rect.width / CHAR_COUNT;\n };\n\n this.getCharacterWidth = function (ch) {\n var w = this.charSizes[ch];\n\n if (w === undefined) {\n w = this.charSizes[ch] = this.$measureCharWidth(ch) / this.$characterSize.width;\n }\n\n return w;\n };\n\n this.destroy = function () {\n clearInterval(this.$pollSizeChangesTimer);\n if (this.$observer) this.$observer.disconnect();\n if (this.el && this.el.parentNode) this.el.parentNode.removeChild(this.el);\n };\n\n this.$getZoom = function getZoom(element) {\n if (!element || !element.parentElement) return 1;\n return (window.getComputedStyle(element).zoom || 1) * getZoom(element.parentElement);\n };\n\n this.$initTransformMeasureNodes = function () {\n var t = function t(_t, l) {\n return [\"div\", {\n style: \"position: absolute;top:\" + _t + \"px;left:\" + l + \"px;\"\n }];\n };\n\n this.els = dom.buildDom([t(0, 0), t(L, 0), t(0, L), t(L, L)], this.el);\n };\n\n this.transformCoordinates = function (clientPos, elPos) {\n if (clientPos) {\n var zoom = this.$getZoom(this.el);\n clientPos = mul(1 / zoom, clientPos);\n }\n\n function solve(l1, l2, r) {\n var det = l1[1] * l2[0] - l1[0] * l2[1];\n return [(-l2[1] * r[0] + l2[0] * r[1]) / det, (+l1[1] * r[0] - l1[0] * r[1]) / det];\n }\n\n function sub(a, b) {\n return [a[0] - b[0], a[1] - b[1]];\n }\n\n function add(a, b) {\n return [a[0] + b[0], a[1] + b[1]];\n }\n\n function mul(a, b) {\n return [a * b[0], a * b[1]];\n }\n\n if (!this.els) this.$initTransformMeasureNodes();\n\n function p(el) {\n var r = el.getBoundingClientRect();\n return [r.left, r.top];\n }\n\n var a = p(this.els[0]);\n var b = p(this.els[1]);\n var c = p(this.els[2]);\n var d = p(this.els[3]);\n var h = solve(sub(d, b), sub(d, c), sub(add(b, c), add(d, a)));\n var m1 = mul(1 + h[0], sub(b, a));\n var m2 = mul(1 + h[1], sub(c, a));\n\n if (elPos) {\n var x = elPos;\n var k = h[0] * x[0] / L + h[1] * x[1] / L + 1;\n var ut = add(mul(x[0], m1), mul(x[1], m2));\n return add(mul(1 / k / L, ut), a);\n }\n\n var u = sub(clientPos, a);\n var f = solve(sub(m1, mul(h[0], u)), sub(m2, mul(h[1], u)), u);\n return mul(L, f);\n };\n }).call(FontMetrics.prototype);\n});\nace.define(\"ace/virtual_renderer\", [\"require\", \"exports\", \"module\", \"ace/lib/oop\", \"ace/lib/dom\", \"ace/config\", \"ace/layer/gutter\", \"ace/layer/marker\", \"ace/layer/text\", \"ace/layer/cursor\", \"ace/scrollbar\", \"ace/scrollbar\", \"ace/renderloop\", \"ace/layer/font_metrics\", \"ace/lib/event_emitter\", \"ace/lib/useragent\"], function (require, exports, module) {\n \"use strict\";\n\n var oop = require(\"./lib/oop\");\n\n var dom = require(\"./lib/dom\");\n\n var config = require(\"./config\");\n\n var GutterLayer = require(\"./layer/gutter\").Gutter;\n\n var MarkerLayer = require(\"./layer/marker\").Marker;\n\n var TextLayer = require(\"./layer/text\").Text;\n\n var CursorLayer = require(\"./layer/cursor\").Cursor;\n\n var HScrollBar = require(\"./scrollbar\").HScrollBar;\n\n var VScrollBar = require(\"./scrollbar\").VScrollBar;\n\n var RenderLoop = require(\"./renderloop\").RenderLoop;\n\n var FontMetrics = require(\"./layer/font_metrics\").FontMetrics;\n\n var EventEmitter = require(\"./lib/event_emitter\").EventEmitter;\n\n var editorCss = \"\\\n.ace_br1 {border-top-left-radius : 3px;}\\\n.ace_br2 {border-top-right-radius : 3px;}\\\n.ace_br3 {border-top-left-radius : 3px; border-top-right-radius: 3px;}\\\n.ace_br4 {border-bottom-right-radius: 3px;}\\\n.ace_br5 {border-top-left-radius : 3px; border-bottom-right-radius: 3px;}\\\n.ace_br6 {border-top-right-radius : 3px; border-bottom-right-radius: 3px;}\\\n.ace_br7 {border-top-left-radius : 3px; border-top-right-radius: 3px; border-bottom-right-radius: 3px;}\\\n.ace_br8 {border-bottom-left-radius : 3px;}\\\n.ace_br9 {border-top-left-radius : 3px; border-bottom-left-radius: 3px;}\\\n.ace_br10{border-top-right-radius : 3px; border-bottom-left-radius: 3px;}\\\n.ace_br11{border-top-left-radius : 3px; border-top-right-radius: 3px; border-bottom-left-radius: 3px;}\\\n.ace_br12{border-bottom-right-radius: 3px; border-bottom-left-radius: 3px;}\\\n.ace_br13{border-top-left-radius : 3px; border-bottom-right-radius: 3px; border-bottom-left-radius: 3px;}\\\n.ace_br14{border-top-right-radius : 3px; border-bottom-right-radius: 3px; border-bottom-left-radius: 3px;}\\\n.ace_br15{border-top-left-radius : 3px; border-top-right-radius: 3px; border-bottom-right-radius: 3px; border-bottom-left-radius: 3px;}\\\n.ace_editor {\\\nposition: relative;\\\noverflow: hidden;\\\npadding: 0;\\\nfont: 12px/normal 'Monaco', 'Menlo', 'Ubuntu Mono', 'Consolas', 'source-code-pro', monospace;\\\ndirection: ltr;\\\ntext-align: left;\\\n-webkit-tap-highlight-color: rgba(0, 0, 0, 0);\\\n}\\\n.ace_scroller {\\\nposition: absolute;\\\noverflow: hidden;\\\ntop: 0;\\\nbottom: 0;\\\nbackground-color: inherit;\\\n-ms-user-select: none;\\\n-moz-user-select: none;\\\n-webkit-user-select: none;\\\nuser-select: none;\\\ncursor: text;\\\n}\\\n.ace_content {\\\nposition: absolute;\\\nbox-sizing: border-box;\\\nmin-width: 100%;\\\ncontain: style size layout;\\\nfont-variant-ligatures: no-common-ligatures;\\\n}\\\n.ace_dragging .ace_scroller:before{\\\nposition: absolute;\\\ntop: 0;\\\nleft: 0;\\\nright: 0;\\\nbottom: 0;\\\ncontent: '';\\\nbackground: rgba(250, 250, 250, 0.01);\\\nz-index: 1000;\\\n}\\\n.ace_dragging.ace_dark .ace_scroller:before{\\\nbackground: rgba(0, 0, 0, 0.01);\\\n}\\\n.ace_selecting, .ace_selecting * {\\\ncursor: text !important;\\\n}\\\n.ace_gutter {\\\nposition: absolute;\\\noverflow : hidden;\\\nwidth: auto;\\\ntop: 0;\\\nbottom: 0;\\\nleft: 0;\\\ncursor: default;\\\nz-index: 4;\\\n-ms-user-select: none;\\\n-moz-user-select: none;\\\n-webkit-user-select: none;\\\nuser-select: none;\\\ncontain: style size layout;\\\n}\\\n.ace_gutter-active-line {\\\nposition: absolute;\\\nleft: 0;\\\nright: 0;\\\n}\\\n.ace_scroller.ace_scroll-left {\\\nbox-shadow: 17px 0 16px -16px rgba(0, 0, 0, 0.4) inset;\\\n}\\\n.ace_gutter-cell {\\\nposition: absolute;\\\ntop: 0;\\\nleft: 0;\\\nright: 0;\\\npadding-left: 19px;\\\npadding-right: 6px;\\\nbackground-repeat: no-repeat;\\\n}\\\n.ace_gutter-cell.ace_error {\\\nbackground-image: url(\\\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAABOFBMVEX/////////QRswFAb/Ui4wFAYwFAYwFAaWGAfDRymzOSH/PxswFAb/SiUwFAYwFAbUPRvjQiDllog5HhHdRybsTi3/Tyv9Tir+Syj/UC3////XurebMBIwFAb/RSHbPx/gUzfdwL3kzMivKBAwFAbbvbnhPx66NhowFAYwFAaZJg8wFAaxKBDZurf/RB6mMxb/SCMwFAYwFAbxQB3+RB4wFAb/Qhy4Oh+4QifbNRcwFAYwFAYwFAb/QRzdNhgwFAYwFAbav7v/Uy7oaE68MBK5LxLewr/r2NXewLswFAaxJw4wFAbkPRy2PyYwFAaxKhLm1tMwFAazPiQwFAaUGAb/QBrfOx3bvrv/VC/maE4wFAbRPBq6MRO8Qynew8Dp2tjfwb0wFAbx6eju5+by6uns4uH9/f36+vr/GkHjAAAAYnRSTlMAGt+64rnWu/bo8eAA4InH3+DwoN7j4eLi4xP99Nfg4+b+/u9B/eDs1MD1mO7+4PHg2MXa347g7vDizMLN4eG+Pv7i5evs/v79yu7S3/DV7/498Yv24eH+4ufQ3Ozu/v7+y13sRqwAAADLSURBVHjaZc/XDsFgGIBhtDrshlitmk2IrbHFqL2pvXf/+78DPokj7+Fz9qpU/9UXJIlhmPaTaQ6QPaz0mm+5gwkgovcV6GZzd5JtCQwgsxoHOvJO15kleRLAnMgHFIESUEPmawB9ngmelTtipwwfASilxOLyiV5UVUyVAfbG0cCPHig+GBkzAENHS0AstVF6bacZIOzgLmxsHbt2OecNgJC83JERmePUYq8ARGkJx6XtFsdddBQgZE2nPR6CICZhawjA4Fb/chv+399kfR+MMMDGOQAAAABJRU5ErkJggg==\\\");\\\nbackground-repeat: no-repeat;\\\nbackground-position: 2px center;\\\n}\\\n.ace_gutter-cell.ace_warning {\\\nbackground-image: url(\\\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAAmVBMVEX///8AAAD///8AAAAAAABPSzb/5sAAAAB/blH/73z/ulkAAAAAAAD85pkAAAAAAAACAgP/vGz/rkDerGbGrV7/pkQICAf////e0IsAAAD/oED/qTvhrnUAAAD/yHD/njcAAADuv2r/nz//oTj/p064oGf/zHAAAAA9Nir/tFIAAAD/tlTiuWf/tkIAAACynXEAAAAAAAAtIRW7zBpBAAAAM3RSTlMAABR1m7RXO8Ln31Z36zT+neXe5OzooRDfn+TZ4p3h2hTf4t3k3ucyrN1K5+Xaks52Sfs9CXgrAAAAjklEQVR42o3PbQ+CIBQFYEwboPhSYgoYunIqqLn6/z8uYdH8Vmdnu9vz4WwXgN/xTPRD2+sgOcZjsge/whXZgUaYYvT8QnuJaUrjrHUQreGczuEafQCO/SJTufTbroWsPgsllVhq3wJEk2jUSzX3CUEDJC84707djRc5MTAQxoLgupWRwW6UB5fS++NV8AbOZgnsC7BpEAAAAABJRU5ErkJggg==\\\");\\\nbackground-position: 2px center;\\\n}\\\n.ace_gutter-cell.ace_info {\\\nbackground-image: url(\\\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAAAAAA6mKC9AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAAJ0Uk5TAAB2k804AAAAPklEQVQY02NgIB68QuO3tiLznjAwpKTgNyDbMegwisCHZUETUZV0ZqOquBpXj2rtnpSJT1AEnnRmL2OgGgAAIKkRQap2htgAAAAASUVORK5CYII=\\\");\\\nbackground-position: 2px center;\\\n}\\\n.ace_dark .ace_gutter-cell.ace_info {\\\nbackground-image: url(\\\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQBAMAAADt3eJSAAAAJFBMVEUAAAChoaGAgIAqKiq+vr6tra1ZWVmUlJSbm5s8PDxubm56enrdgzg3AAAAAXRSTlMAQObYZgAAAClJREFUeNpjYMAPdsMYHegyJZFQBlsUlMFVCWUYKkAZMxZAGdxlDMQBAG+TBP4B6RyJAAAAAElFTkSuQmCC\\\");\\\n}\\\n.ace_scrollbar {\\\ncontain: strict;\\\nposition: absolute;\\\nright: 0;\\\nbottom: 0;\\\nz-index: 6;\\\n}\\\n.ace_scrollbar-inner {\\\nposition: absolute;\\\ncursor: text;\\\nleft: 0;\\\ntop: 0;\\\n}\\\n.ace_scrollbar-v{\\\noverflow-x: hidden;\\\noverflow-y: scroll;\\\ntop: 0;\\\n}\\\n.ace_scrollbar-h {\\\noverflow-x: scroll;\\\noverflow-y: hidden;\\\nleft: 0;\\\n}\\\n.ace_print-margin {\\\nposition: absolute;\\\nheight: 100%;\\\n}\\\n.ace_text-input {\\\nposition: absolute;\\\nz-index: 0;\\\nwidth: 0.5em;\\\nheight: 1em;\\\nopacity: 0;\\\nbackground: transparent;\\\n-moz-appearance: none;\\\nappearance: none;\\\nborder: none;\\\nresize: none;\\\noutline: none;\\\noverflow: hidden;\\\nfont: inherit;\\\npadding: 0 1px;\\\nmargin: 0 -1px;\\\ncontain: strict;\\\n-ms-user-select: text;\\\n-moz-user-select: text;\\\n-webkit-user-select: text;\\\nuser-select: text;\\\nwhite-space: pre!important;\\\n}\\\n.ace_text-input.ace_composition {\\\nbackground: transparent;\\\ncolor: inherit;\\\nz-index: 1000;\\\nopacity: 1;\\\n}\\\n.ace_composition_placeholder { color: transparent }\\\n.ace_composition_marker { \\\nborder-bottom: 1px solid;\\\nposition: absolute;\\\nborder-radius: 0;\\\nmargin-top: 1px;\\\n}\\\n[ace_nocontext=true] {\\\ntransform: none!important;\\\nfilter: none!important;\\\nclip-path: none!important;\\\nmask : none!important;\\\ncontain: none!important;\\\nperspective: none!important;\\\nmix-blend-mode: initial!important;\\\nz-index: auto;\\\n}\\\n.ace_layer {\\\nz-index: 1;\\\nposition: absolute;\\\noverflow: hidden;\\\nword-wrap: normal;\\\nwhite-space: pre;\\\nheight: 100%;\\\nwidth: 100%;\\\nbox-sizing: border-box;\\\npointer-events: none;\\\n}\\\n.ace_gutter-layer {\\\nposition: relative;\\\nwidth: auto;\\\ntext-align: right;\\\npointer-events: auto;\\\nheight: 1000000px;\\\ncontain: style size layout;\\\n}\\\n.ace_text-layer {\\\nfont: inherit !important;\\\nposition: absolute;\\\nheight: 1000000px;\\\nwidth: 1000000px;\\\ncontain: style size layout;\\\n}\\\n.ace_text-layer > .ace_line, .ace_text-layer > .ace_line_group {\\\ncontain: style size layout;\\\nposition: absolute;\\\ntop: 0;\\\nleft: 0;\\\nright: 0;\\\n}\\\n.ace_hidpi .ace_text-layer,\\\n.ace_hidpi .ace_gutter-layer,\\\n.ace_hidpi .ace_content,\\\n.ace_hidpi .ace_gutter {\\\ncontain: strict;\\\nwill-change: transform;\\\n}\\\n.ace_hidpi .ace_text-layer > .ace_line, \\\n.ace_hidpi .ace_text-layer > .ace_line_group {\\\ncontain: strict;\\\n}\\\n.ace_cjk {\\\ndisplay: inline-block;\\\ntext-align: center;\\\n}\\\n.ace_cursor-layer {\\\nz-index: 4;\\\n}\\\n.ace_cursor {\\\nz-index: 4;\\\nposition: absolute;\\\nbox-sizing: border-box;\\\nborder-left: 2px solid;\\\ntransform: translatez(0);\\\n}\\\n.ace_multiselect .ace_cursor {\\\nborder-left-width: 1px;\\\n}\\\n.ace_slim-cursors .ace_cursor {\\\nborder-left-width: 1px;\\\n}\\\n.ace_overwrite-cursors .ace_cursor {\\\nborder-left-width: 0;\\\nborder-bottom: 1px solid;\\\n}\\\n.ace_hidden-cursors .ace_cursor {\\\nopacity: 0.2;\\\n}\\\n.ace_hasPlaceholder .ace_hidden-cursors .ace_cursor {\\\nopacity: 0;\\\n}\\\n.ace_smooth-blinking .ace_cursor {\\\ntransition: opacity 0.18s;\\\n}\\\n.ace_animate-blinking .ace_cursor {\\\nanimation-duration: 1000ms;\\\nanimation-timing-function: step-end;\\\nanimation-name: blink-ace-animate;\\\nanimation-iteration-count: infinite;\\\n}\\\n.ace_animate-blinking.ace_smooth-blinking .ace_cursor {\\\nanimation-duration: 1000ms;\\\nanimation-timing-function: ease-in-out;\\\nanimation-name: blink-ace-animate-smooth;\\\n}\\\n@keyframes blink-ace-animate {\\\nfrom, to { opacity: 1; }\\\n60% { opacity: 0; }\\\n}\\\n@keyframes blink-ace-animate-smooth {\\\nfrom, to { opacity: 1; }\\\n45% { opacity: 1; }\\\n60% { opacity: 0; }\\\n85% { opacity: 0; }\\\n}\\\n.ace_marker-layer .ace_step, .ace_marker-layer .ace_stack {\\\nposition: absolute;\\\nz-index: 3;\\\n}\\\n.ace_marker-layer .ace_selection {\\\nposition: absolute;\\\nz-index: 5;\\\n}\\\n.ace_marker-layer .ace_bracket {\\\nposition: absolute;\\\nz-index: 6;\\\n}\\\n.ace_marker-layer .ace_error_bracket {\\\nposition: absolute;\\\nborder-bottom: 1px solid #DE5555;\\\nborder-radius: 0;\\\n}\\\n.ace_marker-layer .ace_active-line {\\\nposition: absolute;\\\nz-index: 2;\\\n}\\\n.ace_marker-layer .ace_selected-word {\\\nposition: absolute;\\\nz-index: 4;\\\nbox-sizing: border-box;\\\n}\\\n.ace_line .ace_fold {\\\nbox-sizing: border-box;\\\ndisplay: inline-block;\\\nheight: 11px;\\\nmargin-top: -2px;\\\nvertical-align: middle;\\\nbackground-image:\\\nurl(\\\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABEAAAAJCAYAAADU6McMAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAJpJREFUeNpi/P//PwOlgAXGYGRklAVSokD8GmjwY1wasKljQpYACtpCFeADcHVQfQyMQAwzwAZI3wJKvCLkfKBaMSClBlR7BOQikCFGQEErIH0VqkabiGCAqwUadAzZJRxQr/0gwiXIal8zQQPnNVTgJ1TdawL0T5gBIP1MUJNhBv2HKoQHHjqNrA4WO4zY0glyNKLT2KIfIMAAQsdgGiXvgnYAAAAASUVORK5CYII=\\\"),\\\nurl(\\\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAA3CAYAAADNNiA5AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAACJJREFUeNpi+P//fxgTAwPDBxDxD078RSX+YeEyDFMCIMAAI3INmXiwf2YAAAAASUVORK5CYII=\\\");\\\nbackground-repeat: no-repeat, repeat-x;\\\nbackground-position: center center, top left;\\\ncolor: transparent;\\\nborder: 1px solid black;\\\nborder-radius: 2px;\\\ncursor: pointer;\\\npointer-events: auto;\\\n}\\\n.ace_dark .ace_fold {\\\n}\\\n.ace_fold:hover{\\\nbackground-image:\\\nurl(\\\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABEAAAAJCAYAAADU6McMAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAJpJREFUeNpi/P//PwOlgAXGYGRklAVSokD8GmjwY1wasKljQpYACtpCFeADcHVQfQyMQAwzwAZI3wJKvCLkfKBaMSClBlR7BOQikCFGQEErIH0VqkabiGCAqwUadAzZJRxQr/0gwiXIal8zQQPnNVTgJ1TdawL0T5gBIP1MUJNhBv2HKoQHHjqNrA4WO4zY0glyNKLT2KIfIMAAQsdgGiXvgnYAAAAASUVORK5CYII=\\\"),\\\nurl(\\\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAA3CAYAAADNNiA5AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAACBJREFUeNpi+P//fz4TAwPDZxDxD5X4i5fLMEwJgAADAEPVDbjNw87ZAAAAAElFTkSuQmCC\\\");\\\n}\\\n.ace_tooltip {\\\nbackground-color: #FFF;\\\nbackground-image: linear-gradient(to bottom, transparent, rgba(0, 0, 0, 0.1));\\\nborder: 1px solid gray;\\\nborder-radius: 1px;\\\nbox-shadow: 0 1px 2px rgba(0, 0, 0, 0.3);\\\ncolor: black;\\\nmax-width: 100%;\\\npadding: 3px 4px;\\\nposition: fixed;\\\nz-index: 999999;\\\nbox-sizing: border-box;\\\ncursor: default;\\\nwhite-space: pre;\\\nword-wrap: break-word;\\\nline-height: normal;\\\nfont-style: normal;\\\nfont-weight: normal;\\\nletter-spacing: normal;\\\npointer-events: none;\\\n}\\\n.ace_folding-enabled > .ace_gutter-cell {\\\npadding-right: 13px;\\\n}\\\n.ace_fold-widget {\\\nbox-sizing: border-box;\\\nmargin: 0 -12px 0 1px;\\\ndisplay: none;\\\nwidth: 11px;\\\nvertical-align: top;\\\nbackground-image: url(\\\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAYAAACNbyblAAAANElEQVR42mWKsQ0AMAzC8ixLlrzQjzmBiEjp0A6WwBCSPgKAXoLkqSot7nN3yMwR7pZ32NzpKkVoDBUxKAAAAABJRU5ErkJggg==\\\");\\\nbackground-repeat: no-repeat;\\\nbackground-position: center;\\\nborder-radius: 3px;\\\nborder: 1px solid transparent;\\\ncursor: pointer;\\\n}\\\n.ace_folding-enabled .ace_fold-widget {\\\ndisplay: inline-block; \\\n}\\\n.ace_fold-widget.ace_end {\\\nbackground-image: url(\\\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAYAAACNbyblAAAANElEQVR42m3HwQkAMAhD0YzsRchFKI7sAikeWkrxwScEB0nh5e7KTPWimZki4tYfVbX+MNl4pyZXejUO1QAAAABJRU5ErkJggg==\\\");\\\n}\\\n.ace_fold-widget.ace_closed {\\\nbackground-image: url(\\\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAMAAAAGCAYAAAAG5SQMAAAAOUlEQVR42jXKwQkAMAgDwKwqKD4EwQ26sSOkVWjgIIHAzPiCgaqiqnJHZnKICBERHN194O5b9vbLuAVRL+l0YWnZAAAAAElFTkSuQmCCXA==\\\");\\\n}\\\n.ace_fold-widget:hover {\\\nborder: 1px solid rgba(0, 0, 0, 0.3);\\\nbackground-color: rgba(255, 255, 255, 0.2);\\\nbox-shadow: 0 1px 1px rgba(255, 255, 255, 0.7);\\\n}\\\n.ace_fold-widget:active {\\\nborder: 1px solid rgba(0, 0, 0, 0.4);\\\nbackground-color: rgba(0, 0, 0, 0.05);\\\nbox-shadow: 0 1px 1px rgba(255, 255, 255, 0.8);\\\n}\\\n.ace_dark .ace_fold-widget {\\\nbackground-image: url(\\\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAYAAACNbyblAAAAHklEQVQIW2P4//8/AzoGEQ7oGCaLLAhWiSwB146BAQCSTPYocqT0AAAAAElFTkSuQmCC\\\");\\\n}\\\n.ace_dark .ace_fold-widget.ace_end {\\\nbackground-image: url(\\\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAYAAACNbyblAAAAH0lEQVQIW2P4//8/AxQ7wNjIAjDMgC4AxjCVKBirIAAF0kz2rlhxpAAAAABJRU5ErkJggg==\\\");\\\n}\\\n.ace_dark .ace_fold-widget.ace_closed {\\\nbackground-image: url(\\\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAMAAAAFCAYAAACAcVaiAAAAHElEQVQIW2P4//+/AxAzgDADlOOAznHAKgPWAwARji8UIDTfQQAAAABJRU5ErkJggg==\\\");\\\n}\\\n.ace_dark .ace_fold-widget:hover {\\\nbox-shadow: 0 1px 1px rgba(255, 255, 255, 0.2);\\\nbackground-color: rgba(255, 255, 255, 0.1);\\\n}\\\n.ace_dark .ace_fold-widget:active {\\\nbox-shadow: 0 1px 1px rgba(255, 255, 255, 0.2);\\\n}\\\n.ace_inline_button {\\\nborder: 1px solid lightgray;\\\ndisplay: inline-block;\\\nmargin: -1px 8px;\\\npadding: 0 5px;\\\npointer-events: auto;\\\ncursor: pointer;\\\n}\\\n.ace_inline_button:hover {\\\nborder-color: gray;\\\nbackground: rgba(200,200,200,0.2);\\\ndisplay: inline-block;\\\npointer-events: auto;\\\n}\\\n.ace_fold-widget.ace_invalid {\\\nbackground-color: #FFB4B4;\\\nborder-color: #DE5555;\\\n}\\\n.ace_fade-fold-widgets .ace_fold-widget {\\\ntransition: opacity 0.4s ease 0.05s;\\\nopacity: 0;\\\n}\\\n.ace_fade-fold-widgets:hover .ace_fold-widget {\\\ntransition: opacity 0.05s ease 0.05s;\\\nopacity:1;\\\n}\\\n.ace_underline {\\\ntext-decoration: underline;\\\n}\\\n.ace_bold {\\\nfont-weight: bold;\\\n}\\\n.ace_nobold .ace_bold {\\\nfont-weight: normal;\\\n}\\\n.ace_italic {\\\nfont-style: italic;\\\n}\\\n.ace_error-marker {\\\nbackground-color: rgba(255, 0, 0,0.2);\\\nposition: absolute;\\\nz-index: 9;\\\n}\\\n.ace_highlight-marker {\\\nbackground-color: rgba(255, 255, 0,0.2);\\\nposition: absolute;\\\nz-index: 8;\\\n}\\\n.ace_mobile-menu {\\\nposition: absolute;\\\nline-height: 1.5;\\\nborder-radius: 4px;\\\n-ms-user-select: none;\\\n-moz-user-select: none;\\\n-webkit-user-select: none;\\\nuser-select: none;\\\nbackground: white;\\\nbox-shadow: 1px 3px 2px grey;\\\nborder: 1px solid #dcdcdc;\\\ncolor: black;\\\n}\\\n.ace_dark > .ace_mobile-menu {\\\nbackground: #333;\\\ncolor: #ccc;\\\nbox-shadow: 1px 3px 2px grey;\\\nborder: 1px solid #444;\\\n}\\\n.ace_mobile-button {\\\npadding: 2px;\\\ncursor: pointer;\\\noverflow: hidden;\\\n}\\\n.ace_mobile-button:hover {\\\nbackground-color: #eee;\\\nopacity:1;\\\n}\\\n.ace_mobile-button:active {\\\nbackground-color: #ddd;\\\n}\\\n.ace_placeholder {\\\nfont-family: arial;\\\ntransform: scale(0.9);\\\ntransform-origin: left;\\\nwhite-space: pre;\\\nopacity: 0.7;\\\nmargin: 0 10px;\\\n}\";\n\n var useragent = require(\"./lib/useragent\");\n\n var HIDE_TEXTAREA = useragent.isIE;\n dom.importCssString(editorCss, \"ace_editor.css\", false);\n\n var VirtualRenderer = function VirtualRenderer(container, theme) {\n var _self = this;\n\n this.container = container || dom.createElement(\"div\");\n dom.addCssClass(this.container, \"ace_editor\");\n if (dom.HI_DPI) dom.addCssClass(this.container, \"ace_hidpi\");\n this.setTheme(theme);\n if (config.get(\"useStrictCSP\") == null) config.set(\"useStrictCSP\", false);\n this.$gutter = dom.createElement(\"div\");\n this.$gutter.className = \"ace_gutter\";\n this.container.appendChild(this.$gutter);\n this.$gutter.setAttribute(\"aria-hidden\", true);\n this.scroller = dom.createElement(\"div\");\n this.scroller.className = \"ace_scroller\";\n this.container.appendChild(this.scroller);\n this.content = dom.createElement(\"div\");\n this.content.className = \"ace_content\";\n this.scroller.appendChild(this.content);\n this.$gutterLayer = new GutterLayer(this.$gutter);\n this.$gutterLayer.on(\"changeGutterWidth\", this.onGutterResize.bind(this));\n this.$markerBack = new MarkerLayer(this.content);\n var textLayer = this.$textLayer = new TextLayer(this.content);\n this.canvas = textLayer.element;\n this.$markerFront = new MarkerLayer(this.content);\n this.$cursorLayer = new CursorLayer(this.content);\n this.$horizScroll = false;\n this.$vScroll = false;\n this.scrollBar = this.scrollBarV = new VScrollBar(this.container, this);\n this.scrollBarH = new HScrollBar(this.container, this);\n this.scrollBarV.on(\"scroll\", function (e) {\n if (!_self.$scrollAnimation) _self.session.setScrollTop(e.data - _self.scrollMargin.top);\n });\n this.scrollBarH.on(\"scroll\", function (e) {\n if (!_self.$scrollAnimation) _self.session.setScrollLeft(e.data - _self.scrollMargin.left);\n });\n this.scrollTop = 0;\n this.scrollLeft = 0;\n this.cursorPos = {\n row: 0,\n column: 0\n };\n this.$fontMetrics = new FontMetrics(this.container);\n this.$textLayer.$setFontMetrics(this.$fontMetrics);\n this.$textLayer.on(\"changeCharacterSize\", function (e) {\n _self.updateCharacterSize();\n\n _self.onResize(true, _self.gutterWidth, _self.$size.width, _self.$size.height);\n\n _self._signal(\"changeCharacterSize\", e);\n });\n this.$size = {\n width: 0,\n height: 0,\n scrollerHeight: 0,\n scrollerWidth: 0,\n $dirty: true\n };\n this.layerConfig = {\n width: 1,\n padding: 0,\n firstRow: 0,\n firstRowScreen: 0,\n lastRow: 0,\n lineHeight: 0,\n characterWidth: 0,\n minHeight: 1,\n maxHeight: 1,\n offset: 0,\n height: 1,\n gutterOffset: 1\n };\n this.scrollMargin = {\n left: 0,\n right: 0,\n top: 0,\n bottom: 0,\n v: 0,\n h: 0\n };\n this.margin = {\n left: 0,\n right: 0,\n top: 0,\n bottom: 0,\n v: 0,\n h: 0\n };\n this.$keepTextAreaAtCursor = !useragent.isIOS;\n this.$loop = new RenderLoop(this.$renderChanges.bind(this), this.container.ownerDocument.defaultView);\n this.$loop.schedule(this.CHANGE_FULL);\n this.updateCharacterSize();\n this.setPadding(4);\n config.resetOptions(this);\n\n config._signal(\"renderer\", this);\n };\n\n (function () {\n this.CHANGE_CURSOR = 1;\n this.CHANGE_MARKER = 2;\n this.CHANGE_GUTTER = 4;\n this.CHANGE_SCROLL = 8;\n this.CHANGE_LINES = 16;\n this.CHANGE_TEXT = 32;\n this.CHANGE_SIZE = 64;\n this.CHANGE_MARKER_BACK = 128;\n this.CHANGE_MARKER_FRONT = 256;\n this.CHANGE_FULL = 512;\n this.CHANGE_H_SCROLL = 1024;\n oop.implement(this, EventEmitter);\n\n this.updateCharacterSize = function () {\n if (this.$textLayer.allowBoldFonts != this.$allowBoldFonts) {\n this.$allowBoldFonts = this.$textLayer.allowBoldFonts;\n this.setStyle(\"ace_nobold\", !this.$allowBoldFonts);\n }\n\n this.layerConfig.characterWidth = this.characterWidth = this.$textLayer.getCharacterWidth();\n this.layerConfig.lineHeight = this.lineHeight = this.$textLayer.getLineHeight();\n this.$updatePrintMargin();\n dom.setStyle(this.scroller.style, \"line-height\", this.lineHeight + \"px\");\n };\n\n this.setSession = function (session) {\n if (this.session) this.session.doc.off(\"changeNewLineMode\", this.onChangeNewLineMode);\n this.session = session;\n if (session && this.scrollMargin.top && session.getScrollTop() <= 0) session.setScrollTop(-this.scrollMargin.top);\n this.$cursorLayer.setSession(session);\n this.$markerBack.setSession(session);\n this.$markerFront.setSession(session);\n this.$gutterLayer.setSession(session);\n this.$textLayer.setSession(session);\n if (!session) return;\n this.$loop.schedule(this.CHANGE_FULL);\n this.session.$setFontMetrics(this.$fontMetrics);\n this.scrollBarH.scrollLeft = this.scrollBarV.scrollTop = null;\n this.onChangeNewLineMode = this.onChangeNewLineMode.bind(this);\n this.onChangeNewLineMode();\n this.session.doc.on(\"changeNewLineMode\", this.onChangeNewLineMode);\n };\n\n this.updateLines = function (firstRow, lastRow, force) {\n if (lastRow === undefined) lastRow = Infinity;\n\n if (!this.$changedLines) {\n this.$changedLines = {\n firstRow: firstRow,\n lastRow: lastRow\n };\n } else {\n if (this.$changedLines.firstRow > firstRow) this.$changedLines.firstRow = firstRow;\n if (this.$changedLines.lastRow < lastRow) this.$changedLines.lastRow = lastRow;\n }\n\n if (this.$changedLines.lastRow < this.layerConfig.firstRow) {\n if (force) this.$changedLines.lastRow = this.layerConfig.lastRow;else return;\n }\n\n if (this.$changedLines.firstRow > this.layerConfig.lastRow) return;\n this.$loop.schedule(this.CHANGE_LINES);\n };\n\n this.onChangeNewLineMode = function () {\n this.$loop.schedule(this.CHANGE_TEXT);\n this.$textLayer.$updateEolChar();\n this.session.$bidiHandler.setEolChar(this.$textLayer.EOL_CHAR);\n };\n\n this.onChangeTabSize = function () {\n this.$loop.schedule(this.CHANGE_TEXT | this.CHANGE_MARKER);\n this.$textLayer.onChangeTabSize();\n };\n\n this.updateText = function () {\n this.$loop.schedule(this.CHANGE_TEXT);\n };\n\n this.updateFull = function (force) {\n if (force) this.$renderChanges(this.CHANGE_FULL, true);else this.$loop.schedule(this.CHANGE_FULL);\n };\n\n this.updateFontSize = function () {\n this.$textLayer.checkForSizeChanges();\n };\n\n this.$changes = 0;\n\n this.$updateSizeAsync = function () {\n if (this.$loop.pending) this.$size.$dirty = true;else this.onResize();\n };\n\n this.onResize = function (force, gutterWidth, width, height) {\n if (this.resizing > 2) return;else if (this.resizing > 0) this.resizing++;else this.resizing = force ? 1 : 0;\n var el = this.container;\n if (!height) height = el.clientHeight || el.scrollHeight;\n if (!width) width = el.clientWidth || el.scrollWidth;\n var changes = this.$updateCachedSize(force, gutterWidth, width, height);\n if (!this.$size.scrollerHeight || !width && !height) return this.resizing = 0;\n if (force) this.$gutterLayer.$padding = null;\n if (force) this.$renderChanges(changes | this.$changes, true);else this.$loop.schedule(changes | this.$changes);\n if (this.resizing) this.resizing = 0;\n this.scrollBarH.scrollLeft = this.scrollBarV.scrollTop = null;\n };\n\n this.$updateCachedSize = function (force, gutterWidth, width, height) {\n height -= this.$extraHeight || 0;\n var changes = 0;\n var size = this.$size;\n var oldSize = {\n width: size.width,\n height: size.height,\n scrollerHeight: size.scrollerHeight,\n scrollerWidth: size.scrollerWidth\n };\n\n if (height && (force || size.height != height)) {\n size.height = height;\n changes |= this.CHANGE_SIZE;\n size.scrollerHeight = size.height;\n if (this.$horizScroll) size.scrollerHeight -= this.scrollBarH.getHeight();\n this.scrollBarV.element.style.bottom = this.scrollBarH.getHeight() + \"px\";\n changes = changes | this.CHANGE_SCROLL;\n }\n\n if (width && (force || size.width != width)) {\n changes |= this.CHANGE_SIZE;\n size.width = width;\n if (gutterWidth == null) gutterWidth = this.$showGutter ? this.$gutter.offsetWidth : 0;\n this.gutterWidth = gutterWidth;\n dom.setStyle(this.scrollBarH.element.style, \"left\", gutterWidth + \"px\");\n dom.setStyle(this.scroller.style, \"left\", gutterWidth + this.margin.left + \"px\");\n size.scrollerWidth = Math.max(0, width - gutterWidth - this.scrollBarV.getWidth() - this.margin.h);\n dom.setStyle(this.$gutter.style, \"left\", this.margin.left + \"px\");\n var right = this.scrollBarV.getWidth() + \"px\";\n dom.setStyle(this.scrollBarH.element.style, \"right\", right);\n dom.setStyle(this.scroller.style, \"right\", right);\n dom.setStyle(this.scroller.style, \"bottom\", this.scrollBarH.getHeight());\n\n if (this.session && this.session.getUseWrapMode() && this.adjustWrapLimit() || force) {\n changes |= this.CHANGE_FULL;\n }\n }\n\n size.$dirty = !width || !height;\n if (changes) this._signal(\"resize\", oldSize);\n return changes;\n };\n\n this.onGutterResize = function (width) {\n var gutterWidth = this.$showGutter ? width : 0;\n if (gutterWidth != this.gutterWidth) this.$changes |= this.$updateCachedSize(true, gutterWidth, this.$size.width, this.$size.height);\n\n if (this.session.getUseWrapMode() && this.adjustWrapLimit()) {\n this.$loop.schedule(this.CHANGE_FULL);\n } else if (this.$size.$dirty) {\n this.$loop.schedule(this.CHANGE_FULL);\n } else {\n this.$computeLayerConfig();\n }\n };\n\n this.adjustWrapLimit = function () {\n var availableWidth = this.$size.scrollerWidth - this.$padding * 2;\n var limit = Math.floor(availableWidth / this.characterWidth);\n return this.session.adjustWrapLimit(limit, this.$showPrintMargin && this.$printMarginColumn);\n };\n\n this.setAnimatedScroll = function (shouldAnimate) {\n this.setOption(\"animatedScroll\", shouldAnimate);\n };\n\n this.getAnimatedScroll = function () {\n return this.$animatedScroll;\n };\n\n this.setShowInvisibles = function (showInvisibles) {\n this.setOption(\"showInvisibles\", showInvisibles);\n this.session.$bidiHandler.setShowInvisibles(showInvisibles);\n };\n\n this.getShowInvisibles = function () {\n return this.getOption(\"showInvisibles\");\n };\n\n this.getDisplayIndentGuides = function () {\n return this.getOption(\"displayIndentGuides\");\n };\n\n this.setDisplayIndentGuides = function (display) {\n this.setOption(\"displayIndentGuides\", display);\n };\n\n this.setShowPrintMargin = function (showPrintMargin) {\n this.setOption(\"showPrintMargin\", showPrintMargin);\n };\n\n this.getShowPrintMargin = function () {\n return this.getOption(\"showPrintMargin\");\n };\n\n this.setPrintMarginColumn = function (showPrintMargin) {\n this.setOption(\"printMarginColumn\", showPrintMargin);\n };\n\n this.getPrintMarginColumn = function () {\n return this.getOption(\"printMarginColumn\");\n };\n\n this.getShowGutter = function () {\n return this.getOption(\"showGutter\");\n };\n\n this.setShowGutter = function (show) {\n return this.setOption(\"showGutter\", show);\n };\n\n this.getFadeFoldWidgets = function () {\n return this.getOption(\"fadeFoldWidgets\");\n };\n\n this.setFadeFoldWidgets = function (show) {\n this.setOption(\"fadeFoldWidgets\", show);\n };\n\n this.setHighlightGutterLine = function (shouldHighlight) {\n this.setOption(\"highlightGutterLine\", shouldHighlight);\n };\n\n this.getHighlightGutterLine = function () {\n return this.getOption(\"highlightGutterLine\");\n };\n\n this.$updatePrintMargin = function () {\n if (!this.$showPrintMargin && !this.$printMarginEl) return;\n\n if (!this.$printMarginEl) {\n var containerEl = dom.createElement(\"div\");\n containerEl.className = \"ace_layer ace_print-margin-layer\";\n this.$printMarginEl = dom.createElement(\"div\");\n this.$printMarginEl.className = \"ace_print-margin\";\n containerEl.appendChild(this.$printMarginEl);\n this.content.insertBefore(containerEl, this.content.firstChild);\n }\n\n var style = this.$printMarginEl.style;\n style.left = Math.round(this.characterWidth * this.$printMarginColumn + this.$padding) + \"px\";\n style.visibility = this.$showPrintMargin ? \"visible\" : \"hidden\";\n if (this.session && this.session.$wrap == -1) this.adjustWrapLimit();\n };\n\n this.getContainerElement = function () {\n return this.container;\n };\n\n this.getMouseEventTarget = function () {\n return this.scroller;\n };\n\n this.getTextAreaContainer = function () {\n return this.container;\n };\n\n this.$moveTextAreaToCursor = function () {\n if (this.$isMousePressed) return;\n var style = this.textarea.style;\n var composition = this.$composition;\n\n if (!this.$keepTextAreaAtCursor && !composition) {\n dom.translate(this.textarea, -100, 0);\n return;\n }\n\n var pixelPos = this.$cursorLayer.$pixelPos;\n if (!pixelPos) return;\n if (composition && composition.markerRange) pixelPos = this.$cursorLayer.getPixelPosition(composition.markerRange.start, true);\n var config = this.layerConfig;\n var posTop = pixelPos.top;\n var posLeft = pixelPos.left;\n posTop -= config.offset;\n var h = composition && composition.useTextareaForIME ? this.lineHeight : HIDE_TEXTAREA ? 0 : 1;\n\n if (posTop < 0 || posTop > config.height - h) {\n dom.translate(this.textarea, 0, 0);\n return;\n }\n\n var w = 1;\n var maxTop = this.$size.height - h;\n\n if (!composition) {\n posTop += this.lineHeight;\n } else {\n if (composition.useTextareaForIME) {\n var val = this.textarea.value;\n w = this.characterWidth * this.session.$getStringScreenWidth(val)[0];\n } else {\n posTop += this.lineHeight + 2;\n }\n }\n\n posLeft -= this.scrollLeft;\n if (posLeft > this.$size.scrollerWidth - w) posLeft = this.$size.scrollerWidth - w;\n posLeft += this.gutterWidth + this.margin.left;\n dom.setStyle(style, \"height\", h + \"px\");\n dom.setStyle(style, \"width\", w + \"px\");\n dom.translate(this.textarea, Math.min(posLeft, this.$size.scrollerWidth - w), Math.min(posTop, maxTop));\n };\n\n this.getFirstVisibleRow = function () {\n return this.layerConfig.firstRow;\n };\n\n this.getFirstFullyVisibleRow = function () {\n return this.layerConfig.firstRow + (this.layerConfig.offset === 0 ? 0 : 1);\n };\n\n this.getLastFullyVisibleRow = function () {\n var config = this.layerConfig;\n var lastRow = config.lastRow;\n var top = this.session.documentToScreenRow(lastRow, 0) * config.lineHeight;\n if (top - this.session.getScrollTop() > config.height - config.lineHeight) return lastRow - 1;\n return lastRow;\n };\n\n this.getLastVisibleRow = function () {\n return this.layerConfig.lastRow;\n };\n\n this.$padding = null;\n\n this.setPadding = function (padding) {\n this.$padding = padding;\n this.$textLayer.setPadding(padding);\n this.$cursorLayer.setPadding(padding);\n this.$markerFront.setPadding(padding);\n this.$markerBack.setPadding(padding);\n this.$loop.schedule(this.CHANGE_FULL);\n this.$updatePrintMargin();\n };\n\n this.setScrollMargin = function (top, bottom, left, right) {\n var sm = this.scrollMargin;\n sm.top = top | 0;\n sm.bottom = bottom | 0;\n sm.right = right | 0;\n sm.left = left | 0;\n sm.v = sm.top + sm.bottom;\n sm.h = sm.left + sm.right;\n if (sm.top && this.scrollTop <= 0 && this.session) this.session.setScrollTop(-sm.top);\n this.updateFull();\n };\n\n this.setMargin = function (top, bottom, left, right) {\n var sm = this.margin;\n sm.top = top | 0;\n sm.bottom = bottom | 0;\n sm.right = right | 0;\n sm.left = left | 0;\n sm.v = sm.top + sm.bottom;\n sm.h = sm.left + sm.right;\n this.$updateCachedSize(true, this.gutterWidth, this.$size.width, this.$size.height);\n this.updateFull();\n };\n\n this.getHScrollBarAlwaysVisible = function () {\n return this.$hScrollBarAlwaysVisible;\n };\n\n this.setHScrollBarAlwaysVisible = function (alwaysVisible) {\n this.setOption(\"hScrollBarAlwaysVisible\", alwaysVisible);\n };\n\n this.getVScrollBarAlwaysVisible = function () {\n return this.$vScrollBarAlwaysVisible;\n };\n\n this.setVScrollBarAlwaysVisible = function (alwaysVisible) {\n this.setOption(\"vScrollBarAlwaysVisible\", alwaysVisible);\n };\n\n this.$updateScrollBarV = function () {\n var scrollHeight = this.layerConfig.maxHeight;\n var scrollerHeight = this.$size.scrollerHeight;\n\n if (!this.$maxLines && this.$scrollPastEnd) {\n scrollHeight -= (scrollerHeight - this.lineHeight) * this.$scrollPastEnd;\n\n if (this.scrollTop > scrollHeight - scrollerHeight) {\n scrollHeight = this.scrollTop + scrollerHeight;\n this.scrollBarV.scrollTop = null;\n }\n }\n\n this.scrollBarV.setScrollHeight(scrollHeight + this.scrollMargin.v);\n this.scrollBarV.setScrollTop(this.scrollTop + this.scrollMargin.top);\n };\n\n this.$updateScrollBarH = function () {\n this.scrollBarH.setScrollWidth(this.layerConfig.width + 2 * this.$padding + this.scrollMargin.h);\n this.scrollBarH.setScrollLeft(this.scrollLeft + this.scrollMargin.left);\n };\n\n this.$frozen = false;\n\n this.freeze = function () {\n this.$frozen = true;\n };\n\n this.unfreeze = function () {\n this.$frozen = false;\n };\n\n this.$renderChanges = function (changes, force) {\n if (this.$changes) {\n changes |= this.$changes;\n this.$changes = 0;\n }\n\n if (!this.session || !this.container.offsetWidth || this.$frozen || !changes && !force) {\n this.$changes |= changes;\n return;\n }\n\n if (this.$size.$dirty) {\n this.$changes |= changes;\n return this.onResize(true);\n }\n\n if (!this.lineHeight) {\n this.$textLayer.checkForSizeChanges();\n }\n\n this._signal(\"beforeRender\", changes);\n\n if (this.session && this.session.$bidiHandler) this.session.$bidiHandler.updateCharacterWidths(this.$fontMetrics);\n var config = this.layerConfig;\n\n if (changes & this.CHANGE_FULL || changes & this.CHANGE_SIZE || changes & this.CHANGE_TEXT || changes & this.CHANGE_LINES || changes & this.CHANGE_SCROLL || changes & this.CHANGE_H_SCROLL) {\n changes |= this.$computeLayerConfig() | this.$loop.clear();\n\n if (config.firstRow != this.layerConfig.firstRow && config.firstRowScreen == this.layerConfig.firstRowScreen) {\n var st = this.scrollTop + (config.firstRow - this.layerConfig.firstRow) * this.lineHeight;\n\n if (st > 0) {\n this.scrollTop = st;\n changes = changes | this.CHANGE_SCROLL;\n changes |= this.$computeLayerConfig() | this.$loop.clear();\n }\n }\n\n config = this.layerConfig;\n this.$updateScrollBarV();\n if (changes & this.CHANGE_H_SCROLL) this.$updateScrollBarH();\n dom.translate(this.content, -this.scrollLeft, -config.offset);\n var width = config.width + 2 * this.$padding + \"px\";\n var height = config.minHeight + \"px\";\n dom.setStyle(this.content.style, \"width\", width);\n dom.setStyle(this.content.style, \"height\", height);\n }\n\n if (changes & this.CHANGE_H_SCROLL) {\n dom.translate(this.content, -this.scrollLeft, -config.offset);\n this.scroller.className = this.scrollLeft <= 0 ? \"ace_scroller\" : \"ace_scroller ace_scroll-left\";\n }\n\n if (changes & this.CHANGE_FULL) {\n this.$changedLines = null;\n this.$textLayer.update(config);\n if (this.$showGutter) this.$gutterLayer.update(config);\n this.$markerBack.update(config);\n this.$markerFront.update(config);\n this.$cursorLayer.update(config);\n this.$moveTextAreaToCursor();\n\n this._signal(\"afterRender\", changes);\n\n return;\n }\n\n if (changes & this.CHANGE_SCROLL) {\n this.$changedLines = null;\n if (changes & this.CHANGE_TEXT || changes & this.CHANGE_LINES) this.$textLayer.update(config);else this.$textLayer.scrollLines(config);\n\n if (this.$showGutter) {\n if (changes & this.CHANGE_GUTTER || changes & this.CHANGE_LINES) this.$gutterLayer.update(config);else this.$gutterLayer.scrollLines(config);\n }\n\n this.$markerBack.update(config);\n this.$markerFront.update(config);\n this.$cursorLayer.update(config);\n this.$moveTextAreaToCursor();\n\n this._signal(\"afterRender\", changes);\n\n return;\n }\n\n if (changes & this.CHANGE_TEXT) {\n this.$changedLines = null;\n this.$textLayer.update(config);\n if (this.$showGutter) this.$gutterLayer.update(config);\n } else if (changes & this.CHANGE_LINES) {\n if (this.$updateLines() || changes & this.CHANGE_GUTTER && this.$showGutter) this.$gutterLayer.update(config);\n } else if (changes & this.CHANGE_TEXT || changes & this.CHANGE_GUTTER) {\n if (this.$showGutter) this.$gutterLayer.update(config);\n } else if (changes & this.CHANGE_CURSOR) {\n if (this.$highlightGutterLine) this.$gutterLayer.updateLineHighlight(config);\n }\n\n if (changes & this.CHANGE_CURSOR) {\n this.$cursorLayer.update(config);\n this.$moveTextAreaToCursor();\n }\n\n if (changes & (this.CHANGE_MARKER | this.CHANGE_MARKER_FRONT)) {\n this.$markerFront.update(config);\n }\n\n if (changes & (this.CHANGE_MARKER | this.CHANGE_MARKER_BACK)) {\n this.$markerBack.update(config);\n }\n\n this._signal(\"afterRender\", changes);\n };\n\n this.$autosize = function () {\n var height = this.session.getScreenLength() * this.lineHeight;\n var maxHeight = this.$maxLines * this.lineHeight;\n var desiredHeight = Math.min(maxHeight, Math.max((this.$minLines || 1) * this.lineHeight, height)) + this.scrollMargin.v + (this.$extraHeight || 0);\n if (this.$horizScroll) desiredHeight += this.scrollBarH.getHeight();\n if (this.$maxPixelHeight && desiredHeight > this.$maxPixelHeight) desiredHeight = this.$maxPixelHeight;\n var hideScrollbars = desiredHeight <= 2 * this.lineHeight;\n var vScroll = !hideScrollbars && height > maxHeight;\n\n if (desiredHeight != this.desiredHeight || this.$size.height != this.desiredHeight || vScroll != this.$vScroll) {\n if (vScroll != this.$vScroll) {\n this.$vScroll = vScroll;\n this.scrollBarV.setVisible(vScroll);\n }\n\n var w = this.container.clientWidth;\n this.container.style.height = desiredHeight + \"px\";\n this.$updateCachedSize(true, this.$gutterWidth, w, desiredHeight);\n this.desiredHeight = desiredHeight;\n\n this._signal(\"autosize\");\n }\n };\n\n this.$computeLayerConfig = function () {\n var session = this.session;\n var size = this.$size;\n var hideScrollbars = size.height <= 2 * this.lineHeight;\n var screenLines = this.session.getScreenLength();\n var maxHeight = screenLines * this.lineHeight;\n var longestLine = this.$getLongestLine();\n var horizScroll = !hideScrollbars && (this.$hScrollBarAlwaysVisible || size.scrollerWidth - longestLine - 2 * this.$padding < 0);\n var hScrollChanged = this.$horizScroll !== horizScroll;\n\n if (hScrollChanged) {\n this.$horizScroll = horizScroll;\n this.scrollBarH.setVisible(horizScroll);\n }\n\n var vScrollBefore = this.$vScroll; // autosize can change vscroll value in which case we need to update longestLine\n\n if (this.$maxLines && this.lineHeight > 1) this.$autosize();\n var minHeight = size.scrollerHeight + this.lineHeight;\n var scrollPastEnd = !this.$maxLines && this.$scrollPastEnd ? (size.scrollerHeight - this.lineHeight) * this.$scrollPastEnd : 0;\n maxHeight += scrollPastEnd;\n var sm = this.scrollMargin;\n this.session.setScrollTop(Math.max(-sm.top, Math.min(this.scrollTop, maxHeight - size.scrollerHeight + sm.bottom)));\n this.session.setScrollLeft(Math.max(-sm.left, Math.min(this.scrollLeft, longestLine + 2 * this.$padding - size.scrollerWidth + sm.right)));\n var vScroll = !hideScrollbars && (this.$vScrollBarAlwaysVisible || size.scrollerHeight - maxHeight + scrollPastEnd < 0 || this.scrollTop > sm.top);\n var vScrollChanged = vScrollBefore !== vScroll;\n\n if (vScrollChanged) {\n this.$vScroll = vScroll;\n this.scrollBarV.setVisible(vScroll);\n }\n\n var offset = this.scrollTop % this.lineHeight;\n var lineCount = Math.ceil(minHeight / this.lineHeight) - 1;\n var firstRow = Math.max(0, Math.round((this.scrollTop - offset) / this.lineHeight));\n var lastRow = firstRow + lineCount;\n var firstRowScreen, firstRowHeight;\n var lineHeight = this.lineHeight;\n firstRow = session.screenToDocumentRow(firstRow, 0);\n var foldLine = session.getFoldLine(firstRow);\n\n if (foldLine) {\n firstRow = foldLine.start.row;\n }\n\n firstRowScreen = session.documentToScreenRow(firstRow, 0);\n firstRowHeight = session.getRowLength(firstRow) * lineHeight;\n lastRow = Math.min(session.screenToDocumentRow(lastRow, 0), session.getLength() - 1);\n minHeight = size.scrollerHeight + session.getRowLength(lastRow) * lineHeight + firstRowHeight;\n offset = this.scrollTop - firstRowScreen * lineHeight;\n var changes = 0;\n if (this.layerConfig.width != longestLine || hScrollChanged) changes = this.CHANGE_H_SCROLL;\n\n if (hScrollChanged || vScrollChanged) {\n changes |= this.$updateCachedSize(true, this.gutterWidth, size.width, size.height);\n\n this._signal(\"scrollbarVisibilityChanged\");\n\n if (vScrollChanged) longestLine = this.$getLongestLine();\n }\n\n this.layerConfig = {\n width: longestLine,\n padding: this.$padding,\n firstRow: firstRow,\n firstRowScreen: firstRowScreen,\n lastRow: lastRow,\n lineHeight: lineHeight,\n characterWidth: this.characterWidth,\n minHeight: minHeight,\n maxHeight: maxHeight,\n offset: offset,\n gutterOffset: lineHeight ? Math.max(0, Math.ceil((offset + size.height - size.scrollerHeight) / lineHeight)) : 0,\n height: this.$size.scrollerHeight\n };\n if (this.session.$bidiHandler) this.session.$bidiHandler.setContentWidth(longestLine - this.$padding);\n return changes;\n };\n\n this.$updateLines = function () {\n if (!this.$changedLines) return;\n var firstRow = this.$changedLines.firstRow;\n var lastRow = this.$changedLines.lastRow;\n this.$changedLines = null;\n var layerConfig = this.layerConfig;\n\n if (firstRow > layerConfig.lastRow + 1) {\n return;\n }\n\n if (lastRow < layerConfig.firstRow) {\n return;\n }\n\n if (lastRow === Infinity) {\n if (this.$showGutter) this.$gutterLayer.update(layerConfig);\n this.$textLayer.update(layerConfig);\n return;\n }\n\n this.$textLayer.updateLines(layerConfig, firstRow, lastRow);\n return true;\n };\n\n this.$getLongestLine = function () {\n var charCount = this.session.getScreenWidth();\n if (this.showInvisibles && !this.session.$useWrapMode) charCount += 1;\n if (this.$textLayer && charCount > this.$textLayer.MAX_LINE_LENGTH) charCount = this.$textLayer.MAX_LINE_LENGTH + 30;\n return Math.max(this.$size.scrollerWidth - 2 * this.$padding, Math.round(charCount * this.characterWidth));\n };\n\n this.updateFrontMarkers = function () {\n this.$markerFront.setMarkers(this.session.getMarkers(true));\n this.$loop.schedule(this.CHANGE_MARKER_FRONT);\n };\n\n this.updateBackMarkers = function () {\n this.$markerBack.setMarkers(this.session.getMarkers());\n this.$loop.schedule(this.CHANGE_MARKER_BACK);\n };\n\n this.addGutterDecoration = function (row, className) {\n this.$gutterLayer.addGutterDecoration(row, className);\n };\n\n this.removeGutterDecoration = function (row, className) {\n this.$gutterLayer.removeGutterDecoration(row, className);\n };\n\n this.updateBreakpoints = function (rows) {\n this.$loop.schedule(this.CHANGE_GUTTER);\n };\n\n this.setAnnotations = function (annotations) {\n this.$gutterLayer.setAnnotations(annotations);\n this.$loop.schedule(this.CHANGE_GUTTER);\n };\n\n this.updateCursor = function () {\n this.$loop.schedule(this.CHANGE_CURSOR);\n };\n\n this.hideCursor = function () {\n this.$cursorLayer.hideCursor();\n };\n\n this.showCursor = function () {\n this.$cursorLayer.showCursor();\n };\n\n this.scrollSelectionIntoView = function (anchor, lead, offset) {\n this.scrollCursorIntoView(anchor, offset);\n this.scrollCursorIntoView(lead, offset);\n };\n\n this.scrollCursorIntoView = function (cursor, offset, $viewMargin) {\n if (this.$size.scrollerHeight === 0) return;\n var pos = this.$cursorLayer.getPixelPosition(cursor);\n var left = pos.left;\n var top = pos.top;\n var topMargin = $viewMargin && $viewMargin.top || 0;\n var bottomMargin = $viewMargin && $viewMargin.bottom || 0;\n var scrollTop = this.$scrollAnimation ? this.session.getScrollTop() : this.scrollTop;\n\n if (scrollTop + topMargin > top) {\n if (offset && scrollTop + topMargin > top + this.lineHeight) top -= offset * this.$size.scrollerHeight;\n if (top === 0) top = -this.scrollMargin.top;\n this.session.setScrollTop(top);\n } else if (scrollTop + this.$size.scrollerHeight - bottomMargin < top + this.lineHeight) {\n if (offset && scrollTop + this.$size.scrollerHeight - bottomMargin < top - this.lineHeight) top += offset * this.$size.scrollerHeight;\n this.session.setScrollTop(top + this.lineHeight + bottomMargin - this.$size.scrollerHeight);\n }\n\n var scrollLeft = this.scrollLeft;\n\n if (scrollLeft > left) {\n if (left < this.$padding + 2 * this.layerConfig.characterWidth) left = -this.scrollMargin.left;\n this.session.setScrollLeft(left);\n } else if (scrollLeft + this.$size.scrollerWidth < left + this.characterWidth) {\n this.session.setScrollLeft(Math.round(left + this.characterWidth - this.$size.scrollerWidth));\n } else if (scrollLeft <= this.$padding && left - scrollLeft < this.characterWidth) {\n this.session.setScrollLeft(0);\n }\n };\n\n this.getScrollTop = function () {\n return this.session.getScrollTop();\n };\n\n this.getScrollLeft = function () {\n return this.session.getScrollLeft();\n };\n\n this.getScrollTopRow = function () {\n return this.scrollTop / this.lineHeight;\n };\n\n this.getScrollBottomRow = function () {\n return Math.max(0, Math.floor((this.scrollTop + this.$size.scrollerHeight) / this.lineHeight) - 1);\n };\n\n this.scrollToRow = function (row) {\n this.session.setScrollTop(row * this.lineHeight);\n };\n\n this.alignCursor = function (cursor, alignment) {\n if (typeof cursor == \"number\") cursor = {\n row: cursor,\n column: 0\n };\n var pos = this.$cursorLayer.getPixelPosition(cursor);\n var h = this.$size.scrollerHeight - this.lineHeight;\n var offset = pos.top - h * (alignment || 0);\n this.session.setScrollTop(offset);\n return offset;\n };\n\n this.STEPS = 8;\n\n this.$calcSteps = function (fromValue, toValue) {\n var i = 0;\n var l = this.STEPS;\n var steps = [];\n\n var func = function func(t, x_min, dx) {\n return dx * (Math.pow(t - 1, 3) + 1) + x_min;\n };\n\n for (i = 0; i < l; ++i) {\n steps.push(func(i / this.STEPS, fromValue, toValue - fromValue));\n }\n\n return steps;\n };\n\n this.scrollToLine = function (line, center, animate, callback) {\n var pos = this.$cursorLayer.getPixelPosition({\n row: line,\n column: 0\n });\n var offset = pos.top;\n if (center) offset -= this.$size.scrollerHeight / 2;\n var initialScroll = this.scrollTop;\n this.session.setScrollTop(offset);\n if (animate !== false) this.animateScrolling(initialScroll, callback);\n };\n\n this.animateScrolling = function (fromValue, callback) {\n var toValue = this.scrollTop;\n if (!this.$animatedScroll) return;\n\n var _self = this;\n\n if (fromValue == toValue) return;\n\n if (this.$scrollAnimation) {\n var oldSteps = this.$scrollAnimation.steps;\n\n if (oldSteps.length) {\n fromValue = oldSteps[0];\n if (fromValue == toValue) return;\n }\n }\n\n var steps = _self.$calcSteps(fromValue, toValue);\n\n this.$scrollAnimation = {\n from: fromValue,\n to: toValue,\n steps: steps\n };\n clearInterval(this.$timer);\n\n _self.session.setScrollTop(steps.shift());\n\n _self.session.$scrollTop = toValue;\n this.$timer = setInterval(function () {\n if (!_self.session) return clearInterval(_self.$timer);\n\n if (steps.length) {\n _self.session.setScrollTop(steps.shift());\n\n _self.session.$scrollTop = toValue;\n } else if (toValue != null) {\n _self.session.$scrollTop = -1;\n\n _self.session.setScrollTop(toValue);\n\n toValue = null;\n } else {\n _self.$timer = clearInterval(_self.$timer);\n _self.$scrollAnimation = null;\n callback && callback();\n }\n }, 10);\n };\n\n this.scrollToY = function (scrollTop) {\n if (this.scrollTop !== scrollTop) {\n this.$loop.schedule(this.CHANGE_SCROLL);\n this.scrollTop = scrollTop;\n }\n };\n\n this.scrollToX = function (scrollLeft) {\n if (this.scrollLeft !== scrollLeft) this.scrollLeft = scrollLeft;\n this.$loop.schedule(this.CHANGE_H_SCROLL);\n };\n\n this.scrollTo = function (x, y) {\n this.session.setScrollTop(y);\n this.session.setScrollLeft(x);\n };\n\n this.scrollBy = function (deltaX, deltaY) {\n deltaY && this.session.setScrollTop(this.session.getScrollTop() + deltaY);\n deltaX && this.session.setScrollLeft(this.session.getScrollLeft() + deltaX);\n };\n\n this.isScrollableBy = function (deltaX, deltaY) {\n if (deltaY < 0 && this.session.getScrollTop() >= 1 - this.scrollMargin.top) return true;\n if (deltaY > 0 && this.session.getScrollTop() + this.$size.scrollerHeight - this.layerConfig.maxHeight < -1 + this.scrollMargin.bottom) return true;\n if (deltaX < 0 && this.session.getScrollLeft() >= 1 - this.scrollMargin.left) return true;\n if (deltaX > 0 && this.session.getScrollLeft() + this.$size.scrollerWidth - this.layerConfig.width < -1 + this.scrollMargin.right) return true;\n };\n\n this.pixelToScreenCoordinates = function (x, y) {\n var canvasPos;\n\n if (this.$hasCssTransforms) {\n canvasPos = {\n top: 0,\n left: 0\n };\n var p = this.$fontMetrics.transformCoordinates([x, y]);\n x = p[1] - this.gutterWidth - this.margin.left;\n y = p[0];\n } else {\n canvasPos = this.scroller.getBoundingClientRect();\n }\n\n var offsetX = x + this.scrollLeft - canvasPos.left - this.$padding;\n var offset = offsetX / this.characterWidth;\n var row = Math.floor((y + this.scrollTop - canvasPos.top) / this.lineHeight);\n var col = this.$blockCursor ? Math.floor(offset) : Math.round(offset);\n return {\n row: row,\n column: col,\n side: offset - col > 0 ? 1 : -1,\n offsetX: offsetX\n };\n };\n\n this.screenToTextCoordinates = function (x, y) {\n var canvasPos;\n\n if (this.$hasCssTransforms) {\n canvasPos = {\n top: 0,\n left: 0\n };\n var p = this.$fontMetrics.transformCoordinates([x, y]);\n x = p[1] - this.gutterWidth - this.margin.left;\n y = p[0];\n } else {\n canvasPos = this.scroller.getBoundingClientRect();\n }\n\n var offsetX = x + this.scrollLeft - canvasPos.left - this.$padding;\n var offset = offsetX / this.characterWidth;\n var col = this.$blockCursor ? Math.floor(offset) : Math.round(offset);\n var row = Math.floor((y + this.scrollTop - canvasPos.top) / this.lineHeight);\n return this.session.screenToDocumentPosition(row, Math.max(col, 0), offsetX);\n };\n\n this.textToScreenCoordinates = function (row, column) {\n var canvasPos = this.scroller.getBoundingClientRect();\n var pos = this.session.documentToScreenPosition(row, column);\n var x = this.$padding + (this.session.$bidiHandler.isBidiRow(pos.row, row) ? this.session.$bidiHandler.getPosLeft(pos.column) : Math.round(pos.column * this.characterWidth));\n var y = pos.row * this.lineHeight;\n return {\n pageX: canvasPos.left + x - this.scrollLeft,\n pageY: canvasPos.top + y - this.scrollTop\n };\n };\n\n this.visualizeFocus = function () {\n dom.addCssClass(this.container, \"ace_focus\");\n };\n\n this.visualizeBlur = function () {\n dom.removeCssClass(this.container, \"ace_focus\");\n };\n\n this.showComposition = function (composition) {\n this.$composition = composition;\n\n if (!composition.cssText) {\n composition.cssText = this.textarea.style.cssText;\n }\n\n if (composition.useTextareaForIME == undefined) composition.useTextareaForIME = this.$useTextareaForIME;\n\n if (this.$useTextareaForIME) {\n dom.addCssClass(this.textarea, \"ace_composition\");\n this.textarea.style.cssText = \"\";\n this.$moveTextAreaToCursor();\n this.$cursorLayer.element.style.display = \"none\";\n } else {\n composition.markerId = this.session.addMarker(composition.markerRange, \"ace_composition_marker\", \"text\");\n }\n };\n\n this.setCompositionText = function (text) {\n var cursor = this.session.selection.cursor;\n this.addToken(text, \"composition_placeholder\", cursor.row, cursor.column);\n this.$moveTextAreaToCursor();\n };\n\n this.hideComposition = function () {\n if (!this.$composition) return;\n if (this.$composition.markerId) this.session.removeMarker(this.$composition.markerId);\n dom.removeCssClass(this.textarea, \"ace_composition\");\n this.textarea.style.cssText = this.$composition.cssText;\n var cursor = this.session.selection.cursor;\n this.removeExtraToken(cursor.row, cursor.column);\n this.$composition = null;\n this.$cursorLayer.element.style.display = \"\";\n };\n\n this.addToken = function (text, type, row, column) {\n var session = this.session;\n session.bgTokenizer.lines[row] = null;\n var newToken = {\n type: type,\n value: text\n };\n var tokens = session.getTokens(row);\n\n if (column == null) {\n tokens.push(newToken);\n } else {\n var l = 0;\n\n for (var i = 0; i < tokens.length; i++) {\n var token = tokens[i];\n l += token.value.length;\n\n if (column <= l) {\n var diff = token.value.length - (l - column);\n var before = token.value.slice(0, diff);\n var after = token.value.slice(diff);\n tokens.splice(i, 1, {\n type: token.type,\n value: before\n }, newToken, {\n type: token.type,\n value: after\n });\n break;\n }\n }\n }\n\n this.updateLines(row, row);\n };\n\n this.removeExtraToken = function (row, column) {\n this.updateLines(row, row);\n };\n\n this.setTheme = function (theme, cb) {\n var _self = this;\n\n this.$themeId = theme;\n\n _self._dispatchEvent('themeChange', {\n theme: theme\n });\n\n if (!theme || typeof theme == \"string\") {\n var moduleName = theme || this.$options.theme.initialValue;\n config.loadModule([\"theme\", moduleName], afterLoad);\n } else {\n afterLoad(theme);\n }\n\n function afterLoad(module) {\n if (_self.$themeId != theme) return cb && cb();\n if (!module || !module.cssClass) throw new Error(\"couldn't load module \" + theme + \" or it didn't call define\");\n if (module.$id) _self.$themeId = module.$id;\n dom.importCssString(module.cssText, module.cssClass, _self.container);\n if (_self.theme) dom.removeCssClass(_self.container, _self.theme.cssClass);\n var padding = \"padding\" in module ? module.padding : \"padding\" in (_self.theme || {}) ? 4 : _self.$padding;\n if (_self.$padding && padding != _self.$padding) _self.setPadding(padding);\n _self.$theme = module.cssClass;\n _self.theme = module;\n dom.addCssClass(_self.container, module.cssClass);\n dom.setCssClass(_self.container, \"ace_dark\", module.isDark);\n\n if (_self.$size) {\n _self.$size.width = 0;\n\n _self.$updateSizeAsync();\n }\n\n _self._dispatchEvent('themeLoaded', {\n theme: module\n });\n\n cb && cb();\n }\n };\n\n this.getTheme = function () {\n return this.$themeId;\n };\n\n this.setStyle = function (style, include) {\n dom.setCssClass(this.container, style, include !== false);\n };\n\n this.unsetStyle = function (style) {\n dom.removeCssClass(this.container, style);\n };\n\n this.setCursorStyle = function (style) {\n dom.setStyle(this.scroller.style, \"cursor\", style);\n };\n\n this.setMouseCursor = function (cursorStyle) {\n dom.setStyle(this.scroller.style, \"cursor\", cursorStyle);\n };\n\n this.attachToShadowRoot = function () {\n dom.importCssString(editorCss, \"ace_editor.css\", this.container);\n };\n\n this.destroy = function () {\n this.freeze();\n this.$fontMetrics.destroy();\n this.$cursorLayer.destroy();\n this.removeAllListeners();\n this.container.textContent = \"\";\n };\n }).call(VirtualRenderer.prototype);\n config.defineOptions(VirtualRenderer.prototype, \"renderer\", {\n animatedScroll: {\n initialValue: false\n },\n showInvisibles: {\n set: function set(value) {\n if (this.$textLayer.setShowInvisibles(value)) this.$loop.schedule(this.CHANGE_TEXT);\n },\n initialValue: false\n },\n showPrintMargin: {\n set: function set() {\n this.$updatePrintMargin();\n },\n initialValue: true\n },\n printMarginColumn: {\n set: function set() {\n this.$updatePrintMargin();\n },\n initialValue: 80\n },\n printMargin: {\n set: function set(val) {\n if (typeof val == \"number\") this.$printMarginColumn = val;\n this.$showPrintMargin = !!val;\n this.$updatePrintMargin();\n },\n get: function get() {\n return this.$showPrintMargin && this.$printMarginColumn;\n }\n },\n showGutter: {\n set: function set(show) {\n this.$gutter.style.display = show ? \"block\" : \"none\";\n this.$loop.schedule(this.CHANGE_FULL);\n this.onGutterResize();\n },\n initialValue: true\n },\n fadeFoldWidgets: {\n set: function set(show) {\n dom.setCssClass(this.$gutter, \"ace_fade-fold-widgets\", show);\n },\n initialValue: false\n },\n showFoldWidgets: {\n set: function set(show) {\n this.$gutterLayer.setShowFoldWidgets(show);\n this.$loop.schedule(this.CHANGE_GUTTER);\n },\n initialValue: true\n },\n displayIndentGuides: {\n set: function set(show) {\n if (this.$textLayer.setDisplayIndentGuides(show)) this.$loop.schedule(this.CHANGE_TEXT);\n },\n initialValue: true\n },\n highlightGutterLine: {\n set: function set(shouldHighlight) {\n this.$gutterLayer.setHighlightGutterLine(shouldHighlight);\n this.$loop.schedule(this.CHANGE_GUTTER);\n },\n initialValue: true\n },\n hScrollBarAlwaysVisible: {\n set: function set(val) {\n if (!this.$hScrollBarAlwaysVisible || !this.$horizScroll) this.$loop.schedule(this.CHANGE_SCROLL);\n },\n initialValue: false\n },\n vScrollBarAlwaysVisible: {\n set: function set(val) {\n if (!this.$vScrollBarAlwaysVisible || !this.$vScroll) this.$loop.schedule(this.CHANGE_SCROLL);\n },\n initialValue: false\n },\n fontSize: {\n set: function set(size) {\n if (typeof size == \"number\") size = size + \"px\";\n this.container.style.fontSize = size;\n this.updateFontSize();\n },\n initialValue: 12\n },\n fontFamily: {\n set: function set(name) {\n this.container.style.fontFamily = name;\n this.updateFontSize();\n }\n },\n maxLines: {\n set: function set(val) {\n this.updateFull();\n }\n },\n minLines: {\n set: function set(val) {\n if (!(this.$minLines < 0x1ffffffffffff)) this.$minLines = 0;\n this.updateFull();\n }\n },\n maxPixelHeight: {\n set: function set(val) {\n this.updateFull();\n },\n initialValue: 0\n },\n scrollPastEnd: {\n set: function set(val) {\n val = +val || 0;\n if (this.$scrollPastEnd == val) return;\n this.$scrollPastEnd = val;\n this.$loop.schedule(this.CHANGE_SCROLL);\n },\n initialValue: 0,\n handlesSet: true\n },\n fixedWidthGutter: {\n set: function set(val) {\n this.$gutterLayer.$fixedWidth = !!val;\n this.$loop.schedule(this.CHANGE_GUTTER);\n }\n },\n theme: {\n set: function set(val) {\n this.setTheme(val);\n },\n get: function get() {\n return this.$themeId || this.theme;\n },\n initialValue: \"./theme/textmate\",\n handlesSet: true\n },\n hasCssTransforms: {},\n useTextareaForIME: {\n initialValue: !useragent.isMobile && !useragent.isIE\n }\n });\n exports.VirtualRenderer = VirtualRenderer;\n});\nace.define(\"ace/worker/worker_client\", [\"require\", \"exports\", \"module\", \"ace/lib/oop\", \"ace/lib/net\", \"ace/lib/event_emitter\", \"ace/config\"], function (require, exports, module) {\n \"use strict\";\n\n var oop = require(\"../lib/oop\");\n\n var net = require(\"../lib/net\");\n\n var EventEmitter = require(\"../lib/event_emitter\").EventEmitter;\n\n var config = require(\"../config\");\n\n function $workerBlob(workerUrl) {\n var script = \"importScripts('\" + net.qualifyURL(workerUrl) + \"');\";\n\n try {\n return new Blob([script], {\n \"type\": \"application/javascript\"\n });\n } catch (e) {\n // Backwards-compatibility\n var BlobBuilder = window.BlobBuilder || window.WebKitBlobBuilder || window.MozBlobBuilder;\n var blobBuilder = new BlobBuilder();\n blobBuilder.append(script);\n return blobBuilder.getBlob(\"application/javascript\");\n }\n }\n\n function createWorker(workerUrl) {\n if (typeof Worker == \"undefined\") return {\n postMessage: function postMessage() {},\n terminate: function terminate() {}\n };\n\n if (config.get(\"loadWorkerFromBlob\")) {\n var blob = $workerBlob(workerUrl);\n var URL = window.URL || window.webkitURL;\n var blobURL = URL.createObjectURL(blob);\n return new Worker(blobURL);\n }\n\n return new Worker(workerUrl);\n }\n\n var WorkerClient = function WorkerClient(worker) {\n if (!worker.postMessage) worker = this.$createWorkerFromOldConfig.apply(this, arguments);\n this.$worker = worker;\n this.$sendDeltaQueue = this.$sendDeltaQueue.bind(this);\n this.changeListener = this.changeListener.bind(this);\n this.onMessage = this.onMessage.bind(this);\n this.callbackId = 1;\n this.callbacks = {};\n this.$worker.onmessage = this.onMessage;\n };\n\n (function () {\n oop.implement(this, EventEmitter);\n\n this.$createWorkerFromOldConfig = function (topLevelNamespaces, mod, classname, workerUrl, importScripts) {\n if (require.nameToUrl && !require.toUrl) require.toUrl = require.nameToUrl;\n\n if (config.get(\"packaged\") || !require.toUrl) {\n workerUrl = workerUrl || config.moduleUrl(mod, \"worker\");\n } else {\n var normalizePath = this.$normalizePath;\n workerUrl = workerUrl || normalizePath(require.toUrl(\"ace/worker/worker.js\", null, \"_\"));\n var tlns = {};\n topLevelNamespaces.forEach(function (ns) {\n tlns[ns] = normalizePath(require.toUrl(ns, null, \"_\").replace(/(\\.js)?(\\?.*)?$/, \"\"));\n });\n }\n\n this.$worker = createWorker(workerUrl);\n\n if (importScripts) {\n this.send(\"importScripts\", importScripts);\n }\n\n this.$worker.postMessage({\n init: true,\n tlns: tlns,\n module: mod,\n classname: classname\n });\n return this.$worker;\n };\n\n this.onMessage = function (e) {\n var msg = e.data;\n\n switch (msg.type) {\n case \"event\":\n this._signal(msg.name, {\n data: msg.data\n });\n\n break;\n\n case \"call\":\n var callback = this.callbacks[msg.id];\n\n if (callback) {\n callback(msg.data);\n delete this.callbacks[msg.id];\n }\n\n break;\n\n case \"error\":\n this.reportError(msg.data);\n break;\n\n case \"log\":\n window.console && console.log && console.log.apply(console, msg.data);\n break;\n }\n };\n\n this.reportError = function (err) {\n window.console && console.error && console.error(err);\n };\n\n this.$normalizePath = function (path) {\n return net.qualifyURL(path);\n };\n\n this.terminate = function () {\n this._signal(\"terminate\", {});\n\n this.deltaQueue = null;\n this.$worker.terminate();\n this.$worker = null;\n if (this.$doc) this.$doc.off(\"change\", this.changeListener);\n this.$doc = null;\n };\n\n this.send = function (cmd, args) {\n this.$worker.postMessage({\n command: cmd,\n args: args\n });\n };\n\n this.call = function (cmd, args, callback) {\n if (callback) {\n var id = this.callbackId++;\n this.callbacks[id] = callback;\n args.push(id);\n }\n\n this.send(cmd, args);\n };\n\n this.emit = function (event, data) {\n try {\n if (data.data && data.data.err) data.data.err = {\n message: data.data.err.message,\n stack: data.data.err.stack,\n code: data.data.err.code\n };\n this.$worker.postMessage({\n event: event,\n data: {\n data: data.data\n }\n });\n } catch (ex) {\n console.error(ex.stack);\n }\n };\n\n this.attachToDocument = function (doc) {\n if (this.$doc) this.terminate();\n this.$doc = doc;\n this.call(\"setValue\", [doc.getValue()]);\n doc.on(\"change\", this.changeListener);\n };\n\n this.changeListener = function (delta) {\n if (!this.deltaQueue) {\n this.deltaQueue = [];\n setTimeout(this.$sendDeltaQueue, 0);\n }\n\n if (delta.action == \"insert\") this.deltaQueue.push(delta.start, delta.lines);else this.deltaQueue.push(delta.start, delta.end);\n };\n\n this.$sendDeltaQueue = function () {\n var q = this.deltaQueue;\n if (!q) return;\n this.deltaQueue = null;\n\n if (q.length > 50 && q.length > this.$doc.getLength() >> 1) {\n this.call(\"setValue\", [this.$doc.getValue()]);\n } else this.emit(\"change\", {\n data: q\n });\n };\n }).call(WorkerClient.prototype);\n\n var UIWorkerClient = function UIWorkerClient(topLevelNamespaces, mod, classname) {\n var main = null;\n var emitSync = false;\n var sender = Object.create(EventEmitter);\n var messageBuffer = [];\n var workerClient = new WorkerClient({\n messageBuffer: messageBuffer,\n terminate: function terminate() {},\n postMessage: function postMessage(e) {\n messageBuffer.push(e);\n if (!main) return;\n if (emitSync) setTimeout(processNext);else processNext();\n }\n });\n\n workerClient.setEmitSync = function (val) {\n emitSync = val;\n };\n\n var processNext = function processNext() {\n var msg = messageBuffer.shift();\n if (msg.command) main[msg.command].apply(main, msg.args);else if (msg.event) sender._signal(msg.event, msg.data);\n };\n\n sender.postMessage = function (msg) {\n workerClient.onMessage({\n data: msg\n });\n };\n\n sender.callback = function (data, callbackId) {\n this.postMessage({\n type: \"call\",\n id: callbackId,\n data: data\n });\n };\n\n sender.emit = function (name, data) {\n this.postMessage({\n type: \"event\",\n name: name,\n data: data\n });\n };\n\n config.loadModule([\"worker\", mod], function (Main) {\n main = new Main[classname](sender);\n\n while (messageBuffer.length) {\n processNext();\n }\n });\n return workerClient;\n };\n\n exports.UIWorkerClient = UIWorkerClient;\n exports.WorkerClient = WorkerClient;\n exports.createWorker = createWorker;\n});\nace.define(\"ace/placeholder\", [\"require\", \"exports\", \"module\", \"ace/range\", \"ace/lib/event_emitter\", \"ace/lib/oop\"], function (require, exports, module) {\n \"use strict\";\n\n var Range = require(\"./range\").Range;\n\n var EventEmitter = require(\"./lib/event_emitter\").EventEmitter;\n\n var oop = require(\"./lib/oop\");\n\n var PlaceHolder = function PlaceHolder(session, length, pos, others, mainClass, othersClass) {\n var _self = this;\n\n this.length = length;\n this.session = session;\n this.doc = session.getDocument();\n this.mainClass = mainClass;\n this.othersClass = othersClass;\n this.$onUpdate = this.onUpdate.bind(this);\n this.doc.on(\"change\", this.$onUpdate);\n this.$others = others;\n\n this.$onCursorChange = function () {\n setTimeout(function () {\n _self.onCursorChange();\n });\n };\n\n this.$pos = pos;\n var undoStack = session.getUndoManager().$undoStack || session.getUndoManager().$undostack || {\n length: -1\n };\n this.$undoStackDepth = undoStack.length;\n this.setup();\n session.selection.on(\"changeCursor\", this.$onCursorChange);\n };\n\n (function () {\n oop.implement(this, EventEmitter);\n\n this.setup = function () {\n var _self = this;\n\n var doc = this.doc;\n var session = this.session;\n this.selectionBefore = session.selection.toJSON();\n if (session.selection.inMultiSelectMode) session.selection.toSingleRange();\n this.pos = doc.createAnchor(this.$pos.row, this.$pos.column);\n var pos = this.pos;\n pos.$insertRight = true;\n pos.detach();\n pos.markerId = session.addMarker(new Range(pos.row, pos.column, pos.row, pos.column + this.length), this.mainClass, null, false);\n this.others = [];\n this.$others.forEach(function (other) {\n var anchor = doc.createAnchor(other.row, other.column);\n anchor.$insertRight = true;\n anchor.detach();\n\n _self.others.push(anchor);\n });\n session.setUndoSelect(false);\n };\n\n this.showOtherMarkers = function () {\n if (this.othersActive) return;\n var session = this.session;\n\n var _self = this;\n\n this.othersActive = true;\n this.others.forEach(function (anchor) {\n anchor.markerId = session.addMarker(new Range(anchor.row, anchor.column, anchor.row, anchor.column + _self.length), _self.othersClass, null, false);\n });\n };\n\n this.hideOtherMarkers = function () {\n if (!this.othersActive) return;\n this.othersActive = false;\n\n for (var i = 0; i < this.others.length; i++) {\n this.session.removeMarker(this.others[i].markerId);\n }\n };\n\n this.onUpdate = function (delta) {\n if (this.$updating) return this.updateAnchors(delta);\n var range = delta;\n if (range.start.row !== range.end.row) return;\n if (range.start.row !== this.pos.row) return;\n this.$updating = true;\n var lengthDiff = delta.action === \"insert\" ? range.end.column - range.start.column : range.start.column - range.end.column;\n var inMainRange = range.start.column >= this.pos.column && range.start.column <= this.pos.column + this.length + 1;\n var distanceFromStart = range.start.column - this.pos.column;\n this.updateAnchors(delta);\n if (inMainRange) this.length += lengthDiff;\n\n if (inMainRange && !this.session.$fromUndo) {\n if (delta.action === 'insert') {\n for (var i = this.others.length - 1; i >= 0; i--) {\n var otherPos = this.others[i];\n var newPos = {\n row: otherPos.row,\n column: otherPos.column + distanceFromStart\n };\n this.doc.insertMergedLines(newPos, delta.lines);\n }\n } else if (delta.action === 'remove') {\n for (var i = this.others.length - 1; i >= 0; i--) {\n var otherPos = this.others[i];\n var newPos = {\n row: otherPos.row,\n column: otherPos.column + distanceFromStart\n };\n this.doc.remove(new Range(newPos.row, newPos.column, newPos.row, newPos.column - lengthDiff));\n }\n }\n }\n\n this.$updating = false;\n this.updateMarkers();\n };\n\n this.updateAnchors = function (delta) {\n this.pos.onChange(delta);\n\n for (var i = this.others.length; i--;) {\n this.others[i].onChange(delta);\n }\n\n this.updateMarkers();\n };\n\n this.updateMarkers = function () {\n if (this.$updating) return;\n\n var _self = this;\n\n var session = this.session;\n\n var updateMarker = function updateMarker(pos, className) {\n session.removeMarker(pos.markerId);\n pos.markerId = session.addMarker(new Range(pos.row, pos.column, pos.row, pos.column + _self.length), className, null, false);\n };\n\n updateMarker(this.pos, this.mainClass);\n\n for (var i = this.others.length; i--;) {\n updateMarker(this.others[i], this.othersClass);\n }\n };\n\n this.onCursorChange = function (event) {\n if (this.$updating || !this.session) return;\n var pos = this.session.selection.getCursor();\n\n if (pos.row === this.pos.row && pos.column >= this.pos.column && pos.column <= this.pos.column + this.length) {\n this.showOtherMarkers();\n\n this._emit(\"cursorEnter\", event);\n } else {\n this.hideOtherMarkers();\n\n this._emit(\"cursorLeave\", event);\n }\n };\n\n this.detach = function () {\n this.session.removeMarker(this.pos && this.pos.markerId);\n this.hideOtherMarkers();\n this.doc.off(\"change\", this.$onUpdate);\n this.session.selection.off(\"changeCursor\", this.$onCursorChange);\n this.session.setUndoSelect(true);\n this.session = null;\n };\n\n this.cancel = function () {\n if (this.$undoStackDepth === -1) return;\n var undoManager = this.session.getUndoManager();\n var undosRequired = (undoManager.$undoStack || undoManager.$undostack).length - this.$undoStackDepth;\n\n for (var i = 0; i < undosRequired; i++) {\n undoManager.undo(this.session, true);\n }\n\n if (this.selectionBefore) this.session.selection.fromJSON(this.selectionBefore);\n };\n }).call(PlaceHolder.prototype);\n exports.PlaceHolder = PlaceHolder;\n});\nace.define(\"ace/mouse/multi_select_handler\", [\"require\", \"exports\", \"module\", \"ace/lib/event\", \"ace/lib/useragent\"], function (require, exports, module) {\n var event = require(\"../lib/event\");\n\n var useragent = require(\"../lib/useragent\");\n\n function isSamePoint(p1, p2) {\n return p1.row == p2.row && p1.column == p2.column;\n }\n\n function onMouseDown(e) {\n var ev = e.domEvent;\n var alt = ev.altKey;\n var shift = ev.shiftKey;\n var ctrl = ev.ctrlKey;\n var accel = e.getAccelKey();\n var button = e.getButton();\n if (ctrl && useragent.isMac) button = ev.button;\n\n if (e.editor.inMultiSelectMode && button == 2) {\n e.editor.textInput.onContextMenu(e.domEvent);\n return;\n }\n\n if (!ctrl && !alt && !accel) {\n if (button === 0 && e.editor.inMultiSelectMode) e.editor.exitMultiSelectMode();\n return;\n }\n\n if (button !== 0) return;\n var editor = e.editor;\n var selection = editor.selection;\n var isMultiSelect = editor.inMultiSelectMode;\n var pos = e.getDocumentPosition();\n var cursor = selection.getCursor();\n var inSelection = e.inSelection() || selection.isEmpty() && isSamePoint(pos, cursor);\n var mouseX = e.x,\n mouseY = e.y;\n\n var onMouseSelection = function onMouseSelection(e) {\n mouseX = e.clientX;\n mouseY = e.clientY;\n };\n\n var session = editor.session;\n var screenAnchor = editor.renderer.pixelToScreenCoordinates(mouseX, mouseY);\n var screenCursor = screenAnchor;\n var selectionMode;\n\n if (editor.$mouseHandler.$enableJumpToDef) {\n if (ctrl && alt || accel && alt) selectionMode = shift ? \"block\" : \"add\";else if (alt && editor.$blockSelectEnabled) selectionMode = \"block\";\n } else {\n if (accel && !alt) {\n selectionMode = \"add\";\n if (!isMultiSelect && shift) return;\n } else if (alt && editor.$blockSelectEnabled) {\n selectionMode = \"block\";\n }\n }\n\n if (selectionMode && useragent.isMac && ev.ctrlKey) {\n editor.$mouseHandler.cancelContextMenu();\n }\n\n if (selectionMode == \"add\") {\n if (!isMultiSelect && inSelection) return; // dragging\n\n if (!isMultiSelect) {\n var range = selection.toOrientedRange();\n editor.addSelectionMarker(range);\n }\n\n var oldRange = selection.rangeList.rangeAtPoint(pos);\n editor.inVirtualSelectionMode = true;\n\n if (shift) {\n oldRange = null;\n range = selection.ranges[0] || range;\n editor.removeSelectionMarker(range);\n }\n\n editor.once(\"mouseup\", function () {\n var tmpSel = selection.toOrientedRange();\n if (oldRange && tmpSel.isEmpty() && isSamePoint(oldRange.cursor, tmpSel.cursor)) selection.substractPoint(tmpSel.cursor);else {\n if (shift) {\n selection.substractPoint(range.cursor);\n } else if (range) {\n editor.removeSelectionMarker(range);\n selection.addRange(range);\n }\n\n selection.addRange(tmpSel);\n }\n editor.inVirtualSelectionMode = false;\n });\n } else if (selectionMode == \"block\") {\n e.stop();\n editor.inVirtualSelectionMode = true;\n var initialRange;\n var rectSel = [];\n\n var blockSelect = function blockSelect() {\n var newCursor = editor.renderer.pixelToScreenCoordinates(mouseX, mouseY);\n var cursor = session.screenToDocumentPosition(newCursor.row, newCursor.column, newCursor.offsetX);\n if (isSamePoint(screenCursor, newCursor) && isSamePoint(cursor, selection.lead)) return;\n screenCursor = newCursor;\n editor.selection.moveToPosition(cursor);\n editor.renderer.scrollCursorIntoView();\n editor.removeSelectionMarkers(rectSel);\n rectSel = selection.rectangularRangeBlock(screenCursor, screenAnchor);\n if (editor.$mouseHandler.$clickSelection && rectSel.length == 1 && rectSel[0].isEmpty()) rectSel[0] = editor.$mouseHandler.$clickSelection.clone();\n rectSel.forEach(editor.addSelectionMarker, editor);\n editor.updateSelectionMarkers();\n };\n\n if (isMultiSelect && !accel) {\n selection.toSingleRange();\n } else if (!isMultiSelect && accel) {\n initialRange = selection.toOrientedRange();\n editor.addSelectionMarker(initialRange);\n }\n\n if (shift) screenAnchor = session.documentToScreenPosition(selection.lead);else selection.moveToPosition(pos);\n screenCursor = {\n row: -1,\n column: -1\n };\n\n var onMouseSelectionEnd = function onMouseSelectionEnd(e) {\n blockSelect();\n clearInterval(timerId);\n editor.removeSelectionMarkers(rectSel);\n if (!rectSel.length) rectSel = [selection.toOrientedRange()];\n\n if (initialRange) {\n editor.removeSelectionMarker(initialRange);\n selection.toSingleRange(initialRange);\n }\n\n for (var i = 0; i < rectSel.length; i++) {\n selection.addRange(rectSel[i]);\n }\n\n editor.inVirtualSelectionMode = false;\n editor.$mouseHandler.$clickSelection = null;\n };\n\n var onSelectionInterval = blockSelect;\n event.capture(editor.container, onMouseSelection, onMouseSelectionEnd);\n var timerId = setInterval(function () {\n onSelectionInterval();\n }, 20);\n return e.preventDefault();\n }\n }\n\n exports.onMouseDown = onMouseDown;\n});\nace.define(\"ace/commands/multi_select_commands\", [\"require\", \"exports\", \"module\", \"ace/keyboard/hash_handler\"], function (require, exports, module) {\n exports.defaultCommands = [{\n name: \"addCursorAbove\",\n description: \"Add cursor above\",\n exec: function exec(editor) {\n editor.selectMoreLines(-1);\n },\n bindKey: {\n win: \"Ctrl-Alt-Up\",\n mac: \"Ctrl-Alt-Up\"\n },\n scrollIntoView: \"cursor\",\n readOnly: true\n }, {\n name: \"addCursorBelow\",\n description: \"Add cursor below\",\n exec: function exec(editor) {\n editor.selectMoreLines(1);\n },\n bindKey: {\n win: \"Ctrl-Alt-Down\",\n mac: \"Ctrl-Alt-Down\"\n },\n scrollIntoView: \"cursor\",\n readOnly: true\n }, {\n name: \"addCursorAboveSkipCurrent\",\n description: \"Add cursor above (skip current)\",\n exec: function exec(editor) {\n editor.selectMoreLines(-1, true);\n },\n bindKey: {\n win: \"Ctrl-Alt-Shift-Up\",\n mac: \"Ctrl-Alt-Shift-Up\"\n },\n scrollIntoView: \"cursor\",\n readOnly: true\n }, {\n name: \"addCursorBelowSkipCurrent\",\n description: \"Add cursor below (skip current)\",\n exec: function exec(editor) {\n editor.selectMoreLines(1, true);\n },\n bindKey: {\n win: \"Ctrl-Alt-Shift-Down\",\n mac: \"Ctrl-Alt-Shift-Down\"\n },\n scrollIntoView: \"cursor\",\n readOnly: true\n }, {\n name: \"selectMoreBefore\",\n description: \"Select more before\",\n exec: function exec(editor) {\n editor.selectMore(-1);\n },\n bindKey: {\n win: \"Ctrl-Alt-Left\",\n mac: \"Ctrl-Alt-Left\"\n },\n scrollIntoView: \"cursor\",\n readOnly: true\n }, {\n name: \"selectMoreAfter\",\n description: \"Select more after\",\n exec: function exec(editor) {\n editor.selectMore(1);\n },\n bindKey: {\n win: \"Ctrl-Alt-Right\",\n mac: \"Ctrl-Alt-Right\"\n },\n scrollIntoView: \"cursor\",\n readOnly: true\n }, {\n name: \"selectNextBefore\",\n description: \"Select next before\",\n exec: function exec(editor) {\n editor.selectMore(-1, true);\n },\n bindKey: {\n win: \"Ctrl-Alt-Shift-Left\",\n mac: \"Ctrl-Alt-Shift-Left\"\n },\n scrollIntoView: \"cursor\",\n readOnly: true\n }, {\n name: \"selectNextAfter\",\n description: \"Select next after\",\n exec: function exec(editor) {\n editor.selectMore(1, true);\n },\n bindKey: {\n win: \"Ctrl-Alt-Shift-Right\",\n mac: \"Ctrl-Alt-Shift-Right\"\n },\n scrollIntoView: \"cursor\",\n readOnly: true\n }, {\n name: \"toggleSplitSelectionIntoLines\",\n description: \"Split into lines\",\n exec: function exec(editor) {\n if (editor.multiSelect.rangeCount > 1) editor.multiSelect.joinSelections();else editor.multiSelect.splitIntoLines();\n },\n bindKey: {\n win: \"Ctrl-Alt-L\",\n mac: \"Ctrl-Alt-L\"\n },\n readOnly: true\n }, {\n name: \"splitSelectionIntoLines\",\n description: \"Split into lines\",\n exec: function exec(editor) {\n editor.multiSelect.splitIntoLines();\n },\n readOnly: true\n }, {\n name: \"alignCursors\",\n description: \"Align cursors\",\n exec: function exec(editor) {\n editor.alignCursors();\n },\n bindKey: {\n win: \"Ctrl-Alt-A\",\n mac: \"Ctrl-Alt-A\"\n },\n scrollIntoView: \"cursor\"\n }, {\n name: \"findAll\",\n description: \"Find all\",\n exec: function exec(editor) {\n editor.findAll();\n },\n bindKey: {\n win: \"Ctrl-Alt-K\",\n mac: \"Ctrl-Alt-G\"\n },\n scrollIntoView: \"cursor\",\n readOnly: true\n }];\n exports.multiSelectCommands = [{\n name: \"singleSelection\",\n description: \"Single selection\",\n bindKey: \"esc\",\n exec: function exec(editor) {\n editor.exitMultiSelectMode();\n },\n scrollIntoView: \"cursor\",\n readOnly: true,\n isAvailable: function isAvailable(editor) {\n return editor && editor.inMultiSelectMode;\n }\n }];\n\n var HashHandler = require(\"../keyboard/hash_handler\").HashHandler;\n\n exports.keyboardHandler = new HashHandler(exports.multiSelectCommands);\n});\nace.define(\"ace/multi_select\", [\"require\", \"exports\", \"module\", \"ace/range_list\", \"ace/range\", \"ace/selection\", \"ace/mouse/multi_select_handler\", \"ace/lib/event\", \"ace/lib/lang\", \"ace/commands/multi_select_commands\", \"ace/search\", \"ace/edit_session\", \"ace/editor\", \"ace/config\"], function (require, exports, module) {\n var RangeList = require(\"./range_list\").RangeList;\n\n var Range = require(\"./range\").Range;\n\n var Selection = require(\"./selection\").Selection;\n\n var onMouseDown = require(\"./mouse/multi_select_handler\").onMouseDown;\n\n var event = require(\"./lib/event\");\n\n var lang = require(\"./lib/lang\");\n\n var commands = require(\"./commands/multi_select_commands\");\n\n exports.commands = commands.defaultCommands.concat(commands.multiSelectCommands);\n\n var Search = require(\"./search\").Search;\n\n var search = new Search();\n\n function find(session, needle, dir) {\n search.$options.wrap = true;\n search.$options.needle = needle;\n search.$options.backwards = dir == -1;\n return search.find(session);\n }\n\n var EditSession = require(\"./edit_session\").EditSession;\n\n (function () {\n this.getSelectionMarkers = function () {\n return this.$selectionMarkers;\n };\n }).call(EditSession.prototype);\n (function () {\n this.ranges = null;\n this.rangeList = null;\n\n this.addRange = function (range, $blockChangeEvents) {\n if (!range) return;\n\n if (!this.inMultiSelectMode && this.rangeCount === 0) {\n var oldRange = this.toOrientedRange();\n this.rangeList.add(oldRange);\n this.rangeList.add(range);\n\n if (this.rangeList.ranges.length != 2) {\n this.rangeList.removeAll();\n return $blockChangeEvents || this.fromOrientedRange(range);\n }\n\n this.rangeList.removeAll();\n this.rangeList.add(oldRange);\n this.$onAddRange(oldRange);\n }\n\n if (!range.cursor) range.cursor = range.end;\n var removed = this.rangeList.add(range);\n this.$onAddRange(range);\n if (removed.length) this.$onRemoveRange(removed);\n\n if (this.rangeCount > 1 && !this.inMultiSelectMode) {\n this._signal(\"multiSelect\");\n\n this.inMultiSelectMode = true;\n this.session.$undoSelect = false;\n this.rangeList.attach(this.session);\n }\n\n return $blockChangeEvents || this.fromOrientedRange(range);\n };\n\n this.toSingleRange = function (range) {\n range = range || this.ranges[0];\n var removed = this.rangeList.removeAll();\n if (removed.length) this.$onRemoveRange(removed);\n range && this.fromOrientedRange(range);\n };\n\n this.substractPoint = function (pos) {\n var removed = this.rangeList.substractPoint(pos);\n\n if (removed) {\n this.$onRemoveRange(removed);\n return removed[0];\n }\n };\n\n this.mergeOverlappingRanges = function () {\n var removed = this.rangeList.merge();\n if (removed.length) this.$onRemoveRange(removed);\n };\n\n this.$onAddRange = function (range) {\n this.rangeCount = this.rangeList.ranges.length;\n this.ranges.unshift(range);\n\n this._signal(\"addRange\", {\n range: range\n });\n };\n\n this.$onRemoveRange = function (removed) {\n this.rangeCount = this.rangeList.ranges.length;\n\n if (this.rangeCount == 1 && this.inMultiSelectMode) {\n var lastRange = this.rangeList.ranges.pop();\n removed.push(lastRange);\n this.rangeCount = 0;\n }\n\n for (var i = removed.length; i--;) {\n var index = this.ranges.indexOf(removed[i]);\n this.ranges.splice(index, 1);\n }\n\n this._signal(\"removeRange\", {\n ranges: removed\n });\n\n if (this.rangeCount === 0 && this.inMultiSelectMode) {\n this.inMultiSelectMode = false;\n\n this._signal(\"singleSelect\");\n\n this.session.$undoSelect = true;\n this.rangeList.detach(this.session);\n }\n\n lastRange = lastRange || this.ranges[0];\n if (lastRange && !lastRange.isEqual(this.getRange())) this.fromOrientedRange(lastRange);\n };\n\n this.$initRangeList = function () {\n if (this.rangeList) return;\n this.rangeList = new RangeList();\n this.ranges = [];\n this.rangeCount = 0;\n };\n\n this.getAllRanges = function () {\n return this.rangeCount ? this.rangeList.ranges.concat() : [this.getRange()];\n };\n\n this.splitIntoLines = function () {\n var ranges = this.ranges.length ? this.ranges : [this.getRange()];\n var newRanges = [];\n\n for (var i = 0; i < ranges.length; i++) {\n var range = ranges[i];\n var row = range.start.row;\n var endRow = range.end.row;\n\n if (row === endRow) {\n newRanges.push(range.clone());\n } else {\n newRanges.push(new Range(row, range.start.column, row, this.session.getLine(row).length));\n\n while (++row < endRow) {\n newRanges.push(this.getLineRange(row, true));\n }\n\n newRanges.push(new Range(endRow, 0, endRow, range.end.column));\n }\n\n if (i == 0 && !this.isBackwards()) newRanges = newRanges.reverse();\n }\n\n this.toSingleRange();\n\n for (var i = newRanges.length; i--;) {\n this.addRange(newRanges[i]);\n }\n };\n\n this.joinSelections = function () {\n var ranges = this.rangeList.ranges;\n var lastRange = ranges[ranges.length - 1];\n var range = Range.fromPoints(ranges[0].start, lastRange.end);\n this.toSingleRange();\n this.setSelectionRange(range, lastRange.cursor == lastRange.start);\n };\n\n this.toggleBlockSelection = function () {\n if (this.rangeCount > 1) {\n var ranges = this.rangeList.ranges;\n var lastRange = ranges[ranges.length - 1];\n var range = Range.fromPoints(ranges[0].start, lastRange.end);\n this.toSingleRange();\n this.setSelectionRange(range, lastRange.cursor == lastRange.start);\n } else {\n var cursor = this.session.documentToScreenPosition(this.cursor);\n var anchor = this.session.documentToScreenPosition(this.anchor);\n var rectSel = this.rectangularRangeBlock(cursor, anchor);\n rectSel.forEach(this.addRange, this);\n }\n };\n\n this.rectangularRangeBlock = function (screenCursor, screenAnchor, includeEmptyLines) {\n var rectSel = [];\n var xBackwards = screenCursor.column < screenAnchor.column;\n\n if (xBackwards) {\n var startColumn = screenCursor.column;\n var endColumn = screenAnchor.column;\n var startOffsetX = screenCursor.offsetX;\n var endOffsetX = screenAnchor.offsetX;\n } else {\n var startColumn = screenAnchor.column;\n var endColumn = screenCursor.column;\n var startOffsetX = screenAnchor.offsetX;\n var endOffsetX = screenCursor.offsetX;\n }\n\n var yBackwards = screenCursor.row < screenAnchor.row;\n\n if (yBackwards) {\n var startRow = screenCursor.row;\n var endRow = screenAnchor.row;\n } else {\n var startRow = screenAnchor.row;\n var endRow = screenCursor.row;\n }\n\n if (startColumn < 0) startColumn = 0;\n if (startRow < 0) startRow = 0;\n if (startRow == endRow) includeEmptyLines = true;\n var docEnd;\n\n for (var row = startRow; row <= endRow; row++) {\n var range = Range.fromPoints(this.session.screenToDocumentPosition(row, startColumn, startOffsetX), this.session.screenToDocumentPosition(row, endColumn, endOffsetX));\n\n if (range.isEmpty()) {\n if (docEnd && isSamePoint(range.end, docEnd)) break;\n docEnd = range.end;\n }\n\n range.cursor = xBackwards ? range.start : range.end;\n rectSel.push(range);\n }\n\n if (yBackwards) rectSel.reverse();\n\n if (!includeEmptyLines) {\n var end = rectSel.length - 1;\n\n while (rectSel[end].isEmpty() && end > 0) {\n end--;\n }\n\n if (end > 0) {\n var start = 0;\n\n while (rectSel[start].isEmpty()) {\n start++;\n }\n }\n\n for (var i = end; i >= start; i--) {\n if (rectSel[i].isEmpty()) rectSel.splice(i, 1);\n }\n }\n\n return rectSel;\n };\n }).call(Selection.prototype);\n\n var Editor = require(\"./editor\").Editor;\n\n (function () {\n this.updateSelectionMarkers = function () {\n this.renderer.updateCursor();\n this.renderer.updateBackMarkers();\n };\n\n this.addSelectionMarker = function (orientedRange) {\n if (!orientedRange.cursor) orientedRange.cursor = orientedRange.end;\n var style = this.getSelectionStyle();\n orientedRange.marker = this.session.addMarker(orientedRange, \"ace_selection\", style);\n this.session.$selectionMarkers.push(orientedRange);\n this.session.selectionMarkerCount = this.session.$selectionMarkers.length;\n return orientedRange;\n };\n\n this.removeSelectionMarker = function (range) {\n if (!range.marker) return;\n this.session.removeMarker(range.marker);\n var index = this.session.$selectionMarkers.indexOf(range);\n if (index != -1) this.session.$selectionMarkers.splice(index, 1);\n this.session.selectionMarkerCount = this.session.$selectionMarkers.length;\n };\n\n this.removeSelectionMarkers = function (ranges) {\n var markerList = this.session.$selectionMarkers;\n\n for (var i = ranges.length; i--;) {\n var range = ranges[i];\n if (!range.marker) continue;\n this.session.removeMarker(range.marker);\n var index = markerList.indexOf(range);\n if (index != -1) markerList.splice(index, 1);\n }\n\n this.session.selectionMarkerCount = markerList.length;\n };\n\n this.$onAddRange = function (e) {\n this.addSelectionMarker(e.range);\n this.renderer.updateCursor();\n this.renderer.updateBackMarkers();\n };\n\n this.$onRemoveRange = function (e) {\n this.removeSelectionMarkers(e.ranges);\n this.renderer.updateCursor();\n this.renderer.updateBackMarkers();\n };\n\n this.$onMultiSelect = function (e) {\n if (this.inMultiSelectMode) return;\n this.inMultiSelectMode = true;\n this.setStyle(\"ace_multiselect\");\n this.keyBinding.addKeyboardHandler(commands.keyboardHandler);\n this.commands.setDefaultHandler(\"exec\", this.$onMultiSelectExec);\n this.renderer.updateCursor();\n this.renderer.updateBackMarkers();\n };\n\n this.$onSingleSelect = function (e) {\n if (this.session.multiSelect.inVirtualMode) return;\n this.inMultiSelectMode = false;\n this.unsetStyle(\"ace_multiselect\");\n this.keyBinding.removeKeyboardHandler(commands.keyboardHandler);\n this.commands.removeDefaultHandler(\"exec\", this.$onMultiSelectExec);\n this.renderer.updateCursor();\n this.renderer.updateBackMarkers();\n\n this._emit(\"changeSelection\");\n };\n\n this.$onMultiSelectExec = function (e) {\n var command = e.command;\n var editor = e.editor;\n if (!editor.multiSelect) return;\n\n if (!command.multiSelectAction) {\n var result = command.exec(editor, e.args || {});\n editor.multiSelect.addRange(editor.multiSelect.toOrientedRange());\n editor.multiSelect.mergeOverlappingRanges();\n } else if (command.multiSelectAction == \"forEach\") {\n result = editor.forEachSelection(command, e.args);\n } else if (command.multiSelectAction == \"forEachLine\") {\n result = editor.forEachSelection(command, e.args, true);\n } else if (command.multiSelectAction == \"single\") {\n editor.exitMultiSelectMode();\n result = command.exec(editor, e.args || {});\n } else {\n result = command.multiSelectAction(editor, e.args || {});\n }\n\n return result;\n };\n\n this.forEachSelection = function (cmd, args, options) {\n if (this.inVirtualSelectionMode) return;\n var keepOrder = options && options.keepOrder;\n var $byLines = options == true || options && options.$byLines;\n var session = this.session;\n var selection = this.selection;\n var rangeList = selection.rangeList;\n var ranges = (keepOrder ? selection : rangeList).ranges;\n var result;\n if (!ranges.length) return cmd.exec ? cmd.exec(this, args || {}) : cmd(this, args || {});\n var reg = selection._eventRegistry;\n selection._eventRegistry = {};\n var tmpSel = new Selection(session);\n this.inVirtualSelectionMode = true;\n\n for (var i = ranges.length; i--;) {\n if ($byLines) {\n while (i > 0 && ranges[i].start.row == ranges[i - 1].end.row) {\n i--;\n }\n }\n\n tmpSel.fromOrientedRange(ranges[i]);\n tmpSel.index = i;\n this.selection = session.selection = tmpSel;\n var cmdResult = cmd.exec ? cmd.exec(this, args || {}) : cmd(this, args || {});\n if (!result && cmdResult !== undefined) result = cmdResult;\n tmpSel.toOrientedRange(ranges[i]);\n }\n\n tmpSel.detach();\n this.selection = session.selection = selection;\n this.inVirtualSelectionMode = false;\n selection._eventRegistry = reg;\n selection.mergeOverlappingRanges();\n if (selection.ranges[0]) selection.fromOrientedRange(selection.ranges[0]);\n var anim = this.renderer.$scrollAnimation;\n this.onCursorChange();\n this.onSelectionChange();\n if (anim && anim.from == anim.to) this.renderer.animateScrolling(anim.from);\n return result;\n };\n\n this.exitMultiSelectMode = function () {\n if (!this.inMultiSelectMode || this.inVirtualSelectionMode) return;\n this.multiSelect.toSingleRange();\n };\n\n this.getSelectedText = function () {\n var text = \"\";\n\n if (this.inMultiSelectMode && !this.inVirtualSelectionMode) {\n var ranges = this.multiSelect.rangeList.ranges;\n var buf = [];\n\n for (var i = 0; i < ranges.length; i++) {\n buf.push(this.session.getTextRange(ranges[i]));\n }\n\n var nl = this.session.getDocument().getNewLineCharacter();\n text = buf.join(nl);\n if (text.length == (buf.length - 1) * nl.length) text = \"\";\n } else if (!this.selection.isEmpty()) {\n text = this.session.getTextRange(this.getSelectionRange());\n }\n\n return text;\n };\n\n this.$checkMultiselectChange = function (e, anchor) {\n if (this.inMultiSelectMode && !this.inVirtualSelectionMode) {\n var range = this.multiSelect.ranges[0];\n if (this.multiSelect.isEmpty() && anchor == this.multiSelect.anchor) return;\n var pos = anchor == this.multiSelect.anchor ? range.cursor == range.start ? range.end : range.start : range.cursor;\n if (pos.row != anchor.row || this.session.$clipPositionToDocument(pos.row, pos.column).column != anchor.column) this.multiSelect.toSingleRange(this.multiSelect.toOrientedRange());else this.multiSelect.mergeOverlappingRanges();\n }\n };\n\n this.findAll = function (needle, options, additive) {\n options = options || {};\n options.needle = needle || options.needle;\n\n if (options.needle == undefined) {\n var range = this.selection.isEmpty() ? this.selection.getWordRange() : this.selection.getRange();\n options.needle = this.session.getTextRange(range);\n }\n\n this.$search.set(options);\n var ranges = this.$search.findAll(this.session);\n if (!ranges.length) return 0;\n var selection = this.multiSelect;\n if (!additive) selection.toSingleRange(ranges[0]);\n\n for (var i = ranges.length; i--;) {\n selection.addRange(ranges[i], true);\n }\n\n if (range && selection.rangeList.rangeAtPoint(range.start)) selection.addRange(range, true);\n return ranges.length;\n };\n\n this.selectMoreLines = function (dir, skip) {\n var range = this.selection.toOrientedRange();\n var isBackwards = range.cursor == range.end;\n var screenLead = this.session.documentToScreenPosition(range.cursor);\n if (this.selection.$desiredColumn) screenLead.column = this.selection.$desiredColumn;\n var lead = this.session.screenToDocumentPosition(screenLead.row + dir, screenLead.column);\n\n if (!range.isEmpty()) {\n var screenAnchor = this.session.documentToScreenPosition(isBackwards ? range.end : range.start);\n var anchor = this.session.screenToDocumentPosition(screenAnchor.row + dir, screenAnchor.column);\n } else {\n var anchor = lead;\n }\n\n if (isBackwards) {\n var newRange = Range.fromPoints(lead, anchor);\n newRange.cursor = newRange.start;\n } else {\n var newRange = Range.fromPoints(anchor, lead);\n newRange.cursor = newRange.end;\n }\n\n newRange.desiredColumn = screenLead.column;\n\n if (!this.selection.inMultiSelectMode) {\n this.selection.addRange(range);\n } else {\n if (skip) var toRemove = range.cursor;\n }\n\n this.selection.addRange(newRange);\n if (toRemove) this.selection.substractPoint(toRemove);\n };\n\n this.transposeSelections = function (dir) {\n var session = this.session;\n var sel = session.multiSelect;\n var all = sel.ranges;\n\n for (var i = all.length; i--;) {\n var range = all[i];\n\n if (range.isEmpty()) {\n var tmp = session.getWordRange(range.start.row, range.start.column);\n range.start.row = tmp.start.row;\n range.start.column = tmp.start.column;\n range.end.row = tmp.end.row;\n range.end.column = tmp.end.column;\n }\n }\n\n sel.mergeOverlappingRanges();\n var words = [];\n\n for (var i = all.length; i--;) {\n var range = all[i];\n words.unshift(session.getTextRange(range));\n }\n\n if (dir < 0) words.unshift(words.pop());else words.push(words.shift());\n\n for (var i = all.length; i--;) {\n var range = all[i];\n var tmp = range.clone();\n session.replace(range, words[i]);\n range.start.row = tmp.start.row;\n range.start.column = tmp.start.column;\n }\n\n sel.fromOrientedRange(sel.ranges[0]);\n };\n\n this.selectMore = function (dir, skip, stopAtFirst) {\n var session = this.session;\n var sel = session.multiSelect;\n var range = sel.toOrientedRange();\n\n if (range.isEmpty()) {\n range = session.getWordRange(range.start.row, range.start.column);\n range.cursor = dir == -1 ? range.start : range.end;\n this.multiSelect.addRange(range);\n if (stopAtFirst) return;\n }\n\n var needle = session.getTextRange(range);\n var newRange = find(session, needle, dir);\n\n if (newRange) {\n newRange.cursor = dir == -1 ? newRange.start : newRange.end;\n this.session.unfold(newRange);\n this.multiSelect.addRange(newRange);\n this.renderer.scrollCursorIntoView(null, 0.5);\n }\n\n if (skip) this.multiSelect.substractPoint(range.cursor);\n };\n\n this.alignCursors = function () {\n var session = this.session;\n var sel = session.multiSelect;\n var ranges = sel.ranges;\n var row = -1;\n var sameRowRanges = ranges.filter(function (r) {\n if (r.cursor.row == row) return true;\n row = r.cursor.row;\n });\n\n if (!ranges.length || sameRowRanges.length == ranges.length - 1) {\n var range = this.selection.getRange();\n var fr = range.start.row,\n lr = range.end.row;\n var guessRange = fr == lr;\n\n if (guessRange) {\n var max = this.session.getLength();\n var line;\n\n do {\n line = this.session.getLine(lr);\n } while (/[=:]/.test(line) && ++lr < max);\n\n do {\n line = this.session.getLine(fr);\n } while (/[=:]/.test(line) && --fr > 0);\n\n if (fr < 0) fr = 0;\n if (lr >= max) lr = max - 1;\n }\n\n var lines = this.session.removeFullLines(fr, lr);\n lines = this.$reAlignText(lines, guessRange);\n this.session.insert({\n row: fr,\n column: 0\n }, lines.join(\"\\n\") + \"\\n\");\n\n if (!guessRange) {\n range.start.column = 0;\n range.end.column = lines[lines.length - 1].length;\n }\n\n this.selection.setRange(range);\n } else {\n sameRowRanges.forEach(function (r) {\n sel.substractPoint(r.cursor);\n });\n var maxCol = 0;\n var minSpace = Infinity;\n var spaceOffsets = ranges.map(function (r) {\n var p = r.cursor;\n var line = session.getLine(p.row);\n var spaceOffset = line.substr(p.column).search(/\\S/g);\n if (spaceOffset == -1) spaceOffset = 0;\n if (p.column > maxCol) maxCol = p.column;\n if (spaceOffset < minSpace) minSpace = spaceOffset;\n return spaceOffset;\n });\n ranges.forEach(function (r, i) {\n var p = r.cursor;\n var l = maxCol - p.column;\n var d = spaceOffsets[i] - minSpace;\n if (l > d) session.insert(p, lang.stringRepeat(\" \", l - d));else session.remove(new Range(p.row, p.column, p.row, p.column - l + d));\n r.start.column = r.end.column = maxCol;\n r.start.row = r.end.row = p.row;\n r.cursor = r.end;\n });\n sel.fromOrientedRange(ranges[0]);\n this.renderer.updateCursor();\n this.renderer.updateBackMarkers();\n }\n };\n\n this.$reAlignText = function (lines, forceLeft) {\n var isLeftAligned = true,\n isRightAligned = true;\n var startW, textW, endW;\n return lines.map(function (line) {\n var m = line.match(/(\\s*)(.*?)(\\s*)([=:].*)/);\n if (!m) return [line];\n\n if (startW == null) {\n startW = m[1].length;\n textW = m[2].length;\n endW = m[3].length;\n return m;\n }\n\n if (startW + textW + endW != m[1].length + m[2].length + m[3].length) isRightAligned = false;\n if (startW != m[1].length) isLeftAligned = false;\n if (startW > m[1].length) startW = m[1].length;\n if (textW < m[2].length) textW = m[2].length;\n if (endW > m[3].length) endW = m[3].length;\n return m;\n }).map(forceLeft ? alignLeft : isLeftAligned ? isRightAligned ? alignRight : alignLeft : unAlign);\n\n function spaces(n) {\n return lang.stringRepeat(\" \", n);\n }\n\n function alignLeft(m) {\n return !m[2] ? m[0] : spaces(startW) + m[2] + spaces(textW - m[2].length + endW) + m[4].replace(/^([=:])\\s+/, \"$1 \");\n }\n\n function alignRight(m) {\n return !m[2] ? m[0] : spaces(startW + textW - m[2].length) + m[2] + spaces(endW) + m[4].replace(/^([=:])\\s+/, \"$1 \");\n }\n\n function unAlign(m) {\n return !m[2] ? m[0] : spaces(startW) + m[2] + spaces(endW) + m[4].replace(/^([=:])\\s+/, \"$1 \");\n }\n };\n }).call(Editor.prototype);\n\n function isSamePoint(p1, p2) {\n return p1.row == p2.row && p1.column == p2.column;\n }\n\n exports.onSessionChange = function (e) {\n var session = e.session;\n\n if (session && !session.multiSelect) {\n session.$selectionMarkers = [];\n session.selection.$initRangeList();\n session.multiSelect = session.selection;\n }\n\n this.multiSelect = session && session.multiSelect;\n var oldSession = e.oldSession;\n\n if (oldSession) {\n oldSession.multiSelect.off(\"addRange\", this.$onAddRange);\n oldSession.multiSelect.off(\"removeRange\", this.$onRemoveRange);\n oldSession.multiSelect.off(\"multiSelect\", this.$onMultiSelect);\n oldSession.multiSelect.off(\"singleSelect\", this.$onSingleSelect);\n oldSession.multiSelect.lead.off(\"change\", this.$checkMultiselectChange);\n oldSession.multiSelect.anchor.off(\"change\", this.$checkMultiselectChange);\n }\n\n if (session) {\n session.multiSelect.on(\"addRange\", this.$onAddRange);\n session.multiSelect.on(\"removeRange\", this.$onRemoveRange);\n session.multiSelect.on(\"multiSelect\", this.$onMultiSelect);\n session.multiSelect.on(\"singleSelect\", this.$onSingleSelect);\n session.multiSelect.lead.on(\"change\", this.$checkMultiselectChange);\n session.multiSelect.anchor.on(\"change\", this.$checkMultiselectChange);\n }\n\n if (session && this.inMultiSelectMode != session.selection.inMultiSelectMode) {\n if (session.selection.inMultiSelectMode) this.$onMultiSelect();else this.$onSingleSelect();\n }\n };\n\n function MultiSelect(editor) {\n if (editor.$multiselectOnSessionChange) return;\n editor.$onAddRange = editor.$onAddRange.bind(editor);\n editor.$onRemoveRange = editor.$onRemoveRange.bind(editor);\n editor.$onMultiSelect = editor.$onMultiSelect.bind(editor);\n editor.$onSingleSelect = editor.$onSingleSelect.bind(editor);\n editor.$multiselectOnSessionChange = exports.onSessionChange.bind(editor);\n editor.$checkMultiselectChange = editor.$checkMultiselectChange.bind(editor);\n editor.$multiselectOnSessionChange(editor);\n editor.on(\"changeSession\", editor.$multiselectOnSessionChange);\n editor.on(\"mousedown\", onMouseDown);\n editor.commands.addCommands(commands.defaultCommands);\n addAltCursorListeners(editor);\n }\n\n function addAltCursorListeners(editor) {\n if (!editor.textInput) return;\n var el = editor.textInput.getElement();\n var altCursor = false;\n event.addListener(el, \"keydown\", function (e) {\n var altDown = e.keyCode == 18 && !(e.ctrlKey || e.shiftKey || e.metaKey);\n\n if (editor.$blockSelectEnabled && altDown) {\n if (!altCursor) {\n editor.renderer.setMouseCursor(\"crosshair\");\n altCursor = true;\n }\n } else if (altCursor) {\n reset();\n }\n }, editor);\n event.addListener(el, \"keyup\", reset, editor);\n event.addListener(el, \"blur\", reset, editor);\n\n function reset(e) {\n if (altCursor) {\n editor.renderer.setMouseCursor(\"\");\n altCursor = false;\n }\n }\n }\n\n exports.MultiSelect = MultiSelect;\n\n require(\"./config\").defineOptions(Editor.prototype, \"editor\", {\n enableMultiselect: {\n set: function set(val) {\n MultiSelect(this);\n\n if (val) {\n this.on(\"changeSession\", this.$multiselectOnSessionChange);\n this.on(\"mousedown\", onMouseDown);\n } else {\n this.off(\"changeSession\", this.$multiselectOnSessionChange);\n this.off(\"mousedown\", onMouseDown);\n }\n },\n value: true\n },\n enableBlockSelect: {\n set: function set(val) {\n this.$blockSelectEnabled = val;\n },\n value: true\n }\n });\n});\nace.define(\"ace/mode/folding/fold_mode\", [\"require\", \"exports\", \"module\", \"ace/range\"], function (require, exports, module) {\n \"use strict\";\n\n var Range = require(\"../../range\").Range;\n\n var FoldMode = exports.FoldMode = function () {};\n\n (function () {\n this.foldingStartMarker = null;\n this.foldingStopMarker = null;\n\n this.getFoldWidget = function (session, foldStyle, row) {\n var line = session.getLine(row);\n if (this.foldingStartMarker.test(line)) return \"start\";\n if (foldStyle == \"markbeginend\" && this.foldingStopMarker && this.foldingStopMarker.test(line)) return \"end\";\n return \"\";\n };\n\n this.getFoldWidgetRange = function (session, foldStyle, row) {\n return null;\n };\n\n this.indentationBlock = function (session, row, column) {\n var re = /\\S/;\n var line = session.getLine(row);\n var startLevel = line.search(re);\n if (startLevel == -1) return;\n var startColumn = column || line.length;\n var maxRow = session.getLength();\n var startRow = row;\n var endRow = row;\n\n while (++row < maxRow) {\n var level = session.getLine(row).search(re);\n if (level == -1) continue;\n\n if (level <= startLevel) {\n var token = session.getTokenAt(row, 0);\n if (!token || token.type !== \"string\") break;\n }\n\n endRow = row;\n }\n\n if (endRow > startRow) {\n var endColumn = session.getLine(endRow).length;\n return new Range(startRow, startColumn, endRow, endColumn);\n }\n };\n\n this.openingBracketBlock = function (session, bracket, row, column, typeRe) {\n var start = {\n row: row,\n column: column + 1\n };\n var end = session.$findClosingBracket(bracket, start, typeRe);\n if (!end) return;\n var fw = session.foldWidgets[end.row];\n if (fw == null) fw = session.getFoldWidget(end.row);\n\n if (fw == \"start\" && end.row > start.row) {\n end.row--;\n end.column = session.getLine(end.row).length;\n }\n\n return Range.fromPoints(start, end);\n };\n\n this.closingBracketBlock = function (session, bracket, row, column, typeRe) {\n var end = {\n row: row,\n column: column\n };\n var start = session.$findOpeningBracket(bracket, end);\n if (!start) return;\n start.column++;\n end.column--;\n return Range.fromPoints(start, end);\n };\n }).call(FoldMode.prototype);\n});\nace.define(\"ace/theme/textmate\", [\"require\", \"exports\", \"module\", \"ace/lib/dom\"], function (require, exports, module) {\n \"use strict\";\n\n exports.isDark = false;\n exports.cssClass = \"ace-tm\";\n exports.cssText = \".ace-tm .ace_gutter {\\\nbackground: #f0f0f0;\\\ncolor: #333;\\\n}\\\n.ace-tm .ace_print-margin {\\\nwidth: 1px;\\\nbackground: #e8e8e8;\\\n}\\\n.ace-tm .ace_fold {\\\nbackground-color: #6B72E6;\\\n}\\\n.ace-tm {\\\nbackground-color: #FFFFFF;\\\ncolor: black;\\\n}\\\n.ace-tm .ace_cursor {\\\ncolor: black;\\\n}\\\n.ace-tm .ace_invisible {\\\ncolor: rgb(191, 191, 191);\\\n}\\\n.ace-tm .ace_storage,\\\n.ace-tm .ace_keyword {\\\ncolor: blue;\\\n}\\\n.ace-tm .ace_constant {\\\ncolor: rgb(197, 6, 11);\\\n}\\\n.ace-tm .ace_constant.ace_buildin {\\\ncolor: rgb(88, 72, 246);\\\n}\\\n.ace-tm .ace_constant.ace_language {\\\ncolor: rgb(88, 92, 246);\\\n}\\\n.ace-tm .ace_constant.ace_library {\\\ncolor: rgb(6, 150, 14);\\\n}\\\n.ace-tm .ace_invalid {\\\nbackground-color: rgba(255, 0, 0, 0.1);\\\ncolor: red;\\\n}\\\n.ace-tm .ace_support.ace_function {\\\ncolor: rgb(60, 76, 114);\\\n}\\\n.ace-tm .ace_support.ace_constant {\\\ncolor: rgb(6, 150, 14);\\\n}\\\n.ace-tm .ace_support.ace_type,\\\n.ace-tm .ace_support.ace_class {\\\ncolor: rgb(109, 121, 222);\\\n}\\\n.ace-tm .ace_keyword.ace_operator {\\\ncolor: rgb(104, 118, 135);\\\n}\\\n.ace-tm .ace_string {\\\ncolor: rgb(3, 106, 7);\\\n}\\\n.ace-tm .ace_comment {\\\ncolor: rgb(76, 136, 107);\\\n}\\\n.ace-tm .ace_comment.ace_doc {\\\ncolor: rgb(0, 102, 255);\\\n}\\\n.ace-tm .ace_comment.ace_doc.ace_tag {\\\ncolor: rgb(128, 159, 191);\\\n}\\\n.ace-tm .ace_constant.ace_numeric {\\\ncolor: rgb(0, 0, 205);\\\n}\\\n.ace-tm .ace_variable {\\\ncolor: rgb(49, 132, 149);\\\n}\\\n.ace-tm .ace_xml-pe {\\\ncolor: rgb(104, 104, 91);\\\n}\\\n.ace-tm .ace_entity.ace_name.ace_function {\\\ncolor: #0000A2;\\\n}\\\n.ace-tm .ace_heading {\\\ncolor: rgb(12, 7, 255);\\\n}\\\n.ace-tm .ace_list {\\\ncolor:rgb(185, 6, 144);\\\n}\\\n.ace-tm .ace_meta.ace_tag {\\\ncolor:rgb(0, 22, 142);\\\n}\\\n.ace-tm .ace_string.ace_regex {\\\ncolor: rgb(255, 0, 0)\\\n}\\\n.ace-tm .ace_marker-layer .ace_selection {\\\nbackground: rgb(181, 213, 255);\\\n}\\\n.ace-tm.ace_multiselect .ace_selection.ace_start {\\\nbox-shadow: 0 0 3px 0px white;\\\n}\\\n.ace-tm .ace_marker-layer .ace_step {\\\nbackground: rgb(252, 255, 0);\\\n}\\\n.ace-tm .ace_marker-layer .ace_stack {\\\nbackground: rgb(164, 229, 101);\\\n}\\\n.ace-tm .ace_marker-layer .ace_bracket {\\\nmargin: -1px 0 0 -1px;\\\nborder: 1px solid rgb(192, 192, 192);\\\n}\\\n.ace-tm .ace_marker-layer .ace_active-line {\\\nbackground: rgba(0, 0, 0, 0.07);\\\n}\\\n.ace-tm .ace_gutter-active-line {\\\nbackground-color : #dcdcdc;\\\n}\\\n.ace-tm .ace_marker-layer .ace_selected-word {\\\nbackground: rgb(250, 250, 255);\\\nborder: 1px solid rgb(200, 200, 250);\\\n}\\\n.ace-tm .ace_indent-guide {\\\nbackground: url(\\\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAYAAACZgbYnAAAAE0lEQVQImWP4////f4bLly//BwAmVgd1/w11/gAAAABJRU5ErkJggg==\\\") right repeat-y;\\\n}\\\n\";\n exports.$id = \"ace/theme/textmate\";\n\n var dom = require(\"../lib/dom\");\n\n dom.importCssString(exports.cssText, exports.cssClass, false);\n});\nace.define(\"ace/line_widgets\", [\"require\", \"exports\", \"module\", \"ace/lib/dom\"], function (require, exports, module) {\n \"use strict\";\n\n var dom = require(\"./lib/dom\");\n\n function LineWidgets(session) {\n this.session = session;\n this.session.widgetManager = this;\n this.session.getRowLength = this.getRowLength;\n this.session.$getWidgetScreenLength = this.$getWidgetScreenLength;\n this.updateOnChange = this.updateOnChange.bind(this);\n this.renderWidgets = this.renderWidgets.bind(this);\n this.measureWidgets = this.measureWidgets.bind(this);\n this.session._changedWidgets = [];\n this.$onChangeEditor = this.$onChangeEditor.bind(this);\n this.session.on(\"change\", this.updateOnChange);\n this.session.on(\"changeFold\", this.updateOnFold);\n this.session.on(\"changeEditor\", this.$onChangeEditor);\n }\n\n (function () {\n this.getRowLength = function (row) {\n var h;\n if (this.lineWidgets) h = this.lineWidgets[row] && this.lineWidgets[row].rowCount || 0;else h = 0;\n\n if (!this.$useWrapMode || !this.$wrapData[row]) {\n return 1 + h;\n } else {\n return this.$wrapData[row].length + 1 + h;\n }\n };\n\n this.$getWidgetScreenLength = function () {\n var screenRows = 0;\n this.lineWidgets.forEach(function (w) {\n if (w && w.rowCount && !w.hidden) screenRows += w.rowCount;\n });\n return screenRows;\n };\n\n this.$onChangeEditor = function (e) {\n this.attach(e.editor);\n };\n\n this.attach = function (editor) {\n if (editor && editor.widgetManager && editor.widgetManager != this) editor.widgetManager.detach();\n if (this.editor == editor) return;\n this.detach();\n this.editor = editor;\n\n if (editor) {\n editor.widgetManager = this;\n editor.renderer.on(\"beforeRender\", this.measureWidgets);\n editor.renderer.on(\"afterRender\", this.renderWidgets);\n }\n };\n\n this.detach = function (e) {\n var editor = this.editor;\n if (!editor) return;\n this.editor = null;\n editor.widgetManager = null;\n editor.renderer.off(\"beforeRender\", this.measureWidgets);\n editor.renderer.off(\"afterRender\", this.renderWidgets);\n var lineWidgets = this.session.lineWidgets;\n lineWidgets && lineWidgets.forEach(function (w) {\n if (w && w.el && w.el.parentNode) {\n w._inDocument = false;\n w.el.parentNode.removeChild(w.el);\n }\n });\n };\n\n this.updateOnFold = function (e, session) {\n var lineWidgets = session.lineWidgets;\n if (!lineWidgets || !e.action) return;\n var fold = e.data;\n var start = fold.start.row;\n var end = fold.end.row;\n var hide = e.action == \"add\";\n\n for (var i = start + 1; i < end; i++) {\n if (lineWidgets[i]) lineWidgets[i].hidden = hide;\n }\n\n if (lineWidgets[end]) {\n if (hide) {\n if (!lineWidgets[start]) lineWidgets[start] = lineWidgets[end];else lineWidgets[end].hidden = hide;\n } else {\n if (lineWidgets[start] == lineWidgets[end]) lineWidgets[start] = undefined;\n lineWidgets[end].hidden = hide;\n }\n }\n };\n\n this.updateOnChange = function (delta) {\n var lineWidgets = this.session.lineWidgets;\n if (!lineWidgets) return;\n var startRow = delta.start.row;\n var len = delta.end.row - startRow;\n\n if (len === 0) {} else if (delta.action == \"remove\") {\n var removed = lineWidgets.splice(startRow + 1, len);\n\n if (!lineWidgets[startRow] && removed[removed.length - 1]) {\n lineWidgets[startRow] = removed.pop();\n }\n\n removed.forEach(function (w) {\n w && this.removeLineWidget(w);\n }, this);\n this.$updateRows();\n } else {\n var args = new Array(len);\n\n if (lineWidgets[startRow] && lineWidgets[startRow].column != null) {\n if (delta.start.column > lineWidgets[startRow].column) startRow++;\n }\n\n args.unshift(startRow, 0);\n lineWidgets.splice.apply(lineWidgets, args);\n this.$updateRows();\n }\n };\n\n this.$updateRows = function () {\n var lineWidgets = this.session.lineWidgets;\n if (!lineWidgets) return;\n var noWidgets = true;\n lineWidgets.forEach(function (w, i) {\n if (w) {\n noWidgets = false;\n w.row = i;\n\n while (w.$oldWidget) {\n w.$oldWidget.row = i;\n w = w.$oldWidget;\n }\n }\n });\n if (noWidgets) this.session.lineWidgets = null;\n };\n\n this.$registerLineWidget = function (w) {\n if (!this.session.lineWidgets) this.session.lineWidgets = new Array(this.session.getLength());\n var old = this.session.lineWidgets[w.row];\n\n if (old) {\n w.$oldWidget = old;\n\n if (old.el && old.el.parentNode) {\n old.el.parentNode.removeChild(old.el);\n old._inDocument = false;\n }\n }\n\n this.session.lineWidgets[w.row] = w;\n return w;\n };\n\n this.addLineWidget = function (w) {\n this.$registerLineWidget(w);\n w.session = this.session;\n if (!this.editor) return w;\n var renderer = this.editor.renderer;\n\n if (w.html && !w.el) {\n w.el = dom.createElement(\"div\");\n w.el.innerHTML = w.html;\n }\n\n if (w.el) {\n dom.addCssClass(w.el, \"ace_lineWidgetContainer\");\n w.el.style.position = \"absolute\";\n w.el.style.zIndex = 5;\n renderer.container.appendChild(w.el);\n w._inDocument = true;\n\n if (!w.coverGutter) {\n w.el.style.zIndex = 3;\n }\n\n if (w.pixelHeight == null) {\n w.pixelHeight = w.el.offsetHeight;\n }\n }\n\n if (w.rowCount == null) {\n w.rowCount = w.pixelHeight / renderer.layerConfig.lineHeight;\n }\n\n var fold = this.session.getFoldAt(w.row, 0);\n w.$fold = fold;\n\n if (fold) {\n var lineWidgets = this.session.lineWidgets;\n if (w.row == fold.end.row && !lineWidgets[fold.start.row]) lineWidgets[fold.start.row] = w;else w.hidden = true;\n }\n\n this.session._emit(\"changeFold\", {\n data: {\n start: {\n row: w.row\n }\n }\n });\n\n this.$updateRows();\n this.renderWidgets(null, renderer);\n this.onWidgetChanged(w);\n return w;\n };\n\n this.removeLineWidget = function (w) {\n w._inDocument = false;\n w.session = null;\n if (w.el && w.el.parentNode) w.el.parentNode.removeChild(w.el);\n if (w.editor && w.editor.destroy) try {\n w.editor.destroy();\n } catch (e) {}\n\n if (this.session.lineWidgets) {\n var w1 = this.session.lineWidgets[w.row];\n\n if (w1 == w) {\n this.session.lineWidgets[w.row] = w.$oldWidget;\n if (w.$oldWidget) this.onWidgetChanged(w.$oldWidget);\n } else {\n while (w1) {\n if (w1.$oldWidget == w) {\n w1.$oldWidget = w.$oldWidget;\n break;\n }\n\n w1 = w1.$oldWidget;\n }\n }\n }\n\n this.session._emit(\"changeFold\", {\n data: {\n start: {\n row: w.row\n }\n }\n });\n\n this.$updateRows();\n };\n\n this.getWidgetsAtRow = function (row) {\n var lineWidgets = this.session.lineWidgets;\n var w = lineWidgets && lineWidgets[row];\n var list = [];\n\n while (w) {\n list.push(w);\n w = w.$oldWidget;\n }\n\n return list;\n };\n\n this.onWidgetChanged = function (w) {\n this.session._changedWidgets.push(w);\n\n this.editor && this.editor.renderer.updateFull();\n };\n\n this.measureWidgets = function (e, renderer) {\n var changedWidgets = this.session._changedWidgets;\n var config = renderer.layerConfig;\n if (!changedWidgets || !changedWidgets.length) return;\n var min = Infinity;\n\n for (var i = 0; i < changedWidgets.length; i++) {\n var w = changedWidgets[i];\n if (!w || !w.el) continue;\n if (w.session != this.session) continue;\n\n if (!w._inDocument) {\n if (this.session.lineWidgets[w.row] != w) continue;\n w._inDocument = true;\n renderer.container.appendChild(w.el);\n }\n\n w.h = w.el.offsetHeight;\n\n if (!w.fixedWidth) {\n w.w = w.el.offsetWidth;\n w.screenWidth = Math.ceil(w.w / config.characterWidth);\n }\n\n var rowCount = w.h / config.lineHeight;\n\n if (w.coverLine) {\n rowCount -= this.session.getRowLineCount(w.row);\n if (rowCount < 0) rowCount = 0;\n }\n\n if (w.rowCount != rowCount) {\n w.rowCount = rowCount;\n if (w.row < min) min = w.row;\n }\n }\n\n if (min != Infinity) {\n this.session._emit(\"changeFold\", {\n data: {\n start: {\n row: min\n }\n }\n });\n\n this.session.lineWidgetWidth = null;\n }\n\n this.session._changedWidgets = [];\n };\n\n this.renderWidgets = function (e, renderer) {\n var config = renderer.layerConfig;\n var lineWidgets = this.session.lineWidgets;\n if (!lineWidgets) return;\n var first = Math.min(this.firstRow, config.firstRow);\n var last = Math.max(this.lastRow, config.lastRow, lineWidgets.length);\n\n while (first > 0 && !lineWidgets[first]) {\n first--;\n }\n\n this.firstRow = config.firstRow;\n this.lastRow = config.lastRow;\n renderer.$cursorLayer.config = config;\n\n for (var i = first; i <= last; i++) {\n var w = lineWidgets[i];\n if (!w || !w.el) continue;\n\n if (w.hidden) {\n w.el.style.top = -100 - (w.pixelHeight || 0) + \"px\";\n continue;\n }\n\n if (!w._inDocument) {\n w._inDocument = true;\n renderer.container.appendChild(w.el);\n }\n\n var top = renderer.$cursorLayer.getPixelPosition({\n row: i,\n column: 0\n }, true).top;\n if (!w.coverLine) top += config.lineHeight * this.session.getRowLineCount(w.row);\n w.el.style.top = top - config.offset + \"px\";\n var left = w.coverGutter ? 0 : renderer.gutterWidth;\n if (!w.fixedWidth) left -= renderer.scrollLeft;\n w.el.style.left = left + \"px\";\n\n if (w.fullWidth && w.screenWidth) {\n w.el.style.minWidth = config.width + 2 * config.padding + \"px\";\n }\n\n if (w.fixedWidth) {\n w.el.style.right = renderer.scrollBar.getWidth() + \"px\";\n } else {\n w.el.style.right = \"\";\n }\n }\n };\n }).call(LineWidgets.prototype);\n exports.LineWidgets = LineWidgets;\n});\nace.define(\"ace/ext/error_marker\", [\"require\", \"exports\", \"module\", \"ace/line_widgets\", \"ace/lib/dom\", \"ace/range\"], function (require, exports, module) {\n \"use strict\";\n\n var LineWidgets = require(\"../line_widgets\").LineWidgets;\n\n var dom = require(\"../lib/dom\");\n\n var Range = require(\"../range\").Range;\n\n function binarySearch(array, needle, comparator) {\n var first = 0;\n var last = array.length - 1;\n\n while (first <= last) {\n var mid = first + last >> 1;\n var c = comparator(needle, array[mid]);\n if (c > 0) first = mid + 1;else if (c < 0) last = mid - 1;else return mid;\n }\n\n return -(first + 1);\n }\n\n function findAnnotations(session, row, dir) {\n var annotations = session.getAnnotations().sort(Range.comparePoints);\n if (!annotations.length) return;\n var i = binarySearch(annotations, {\n row: row,\n column: -1\n }, Range.comparePoints);\n if (i < 0) i = -i - 1;\n if (i >= annotations.length) i = dir > 0 ? 0 : annotations.length - 1;else if (i === 0 && dir < 0) i = annotations.length - 1;\n var annotation = annotations[i];\n if (!annotation || !dir) return;\n\n if (annotation.row === row) {\n do {\n annotation = annotations[i += dir];\n } while (annotation && annotation.row === row);\n\n if (!annotation) return annotations.slice();\n }\n\n var matched = [];\n row = annotation.row;\n\n do {\n matched[dir < 0 ? \"unshift\" : \"push\"](annotation);\n annotation = annotations[i += dir];\n } while (annotation && annotation.row == row);\n\n return matched.length && matched;\n }\n\n exports.showErrorMarker = function (editor, dir) {\n var session = editor.session;\n\n if (!session.widgetManager) {\n session.widgetManager = new LineWidgets(session);\n session.widgetManager.attach(editor);\n }\n\n var pos = editor.getCursorPosition();\n var row = pos.row;\n var oldWidget = session.widgetManager.getWidgetsAtRow(row).filter(function (w) {\n return w.type == \"errorMarker\";\n })[0];\n\n if (oldWidget) {\n oldWidget.destroy();\n } else {\n row -= dir;\n }\n\n var annotations = findAnnotations(session, row, dir);\n var gutterAnno;\n\n if (annotations) {\n var annotation = annotations[0];\n pos.column = (annotation.pos && typeof annotation.column != \"number\" ? annotation.pos.sc : annotation.column) || 0;\n pos.row = annotation.row;\n gutterAnno = editor.renderer.$gutterLayer.$annotations[pos.row];\n } else if (oldWidget) {\n return;\n } else {\n gutterAnno = {\n text: [\"Looks good!\"],\n className: \"ace_ok\"\n };\n }\n\n editor.session.unfold(pos.row);\n editor.selection.moveToPosition(pos);\n var w = {\n row: pos.row,\n fixedWidth: true,\n coverGutter: true,\n el: dom.createElement(\"div\"),\n type: \"errorMarker\"\n };\n var el = w.el.appendChild(dom.createElement(\"div\"));\n var arrow = w.el.appendChild(dom.createElement(\"div\"));\n arrow.className = \"error_widget_arrow \" + gutterAnno.className;\n var left = editor.renderer.$cursorLayer.getPixelPosition(pos).left;\n arrow.style.left = left + editor.renderer.gutterWidth - 5 + \"px\";\n w.el.className = \"error_widget_wrapper\";\n el.className = \"error_widget \" + gutterAnno.className;\n el.innerHTML = gutterAnno.text.join(\"
\");\n el.appendChild(dom.createElement(\"div\"));\n\n var kb = function kb(_, hashId, keyString) {\n if (hashId === 0 && (keyString === \"esc\" || keyString === \"return\")) {\n w.destroy();\n return {\n command: \"null\"\n };\n }\n };\n\n w.destroy = function () {\n if (editor.$mouseHandler.isMousePressed) return;\n editor.keyBinding.removeKeyboardHandler(kb);\n session.widgetManager.removeLineWidget(w);\n editor.off(\"changeSelection\", w.destroy);\n editor.off(\"changeSession\", w.destroy);\n editor.off(\"mouseup\", w.destroy);\n editor.off(\"change\", w.destroy);\n };\n\n editor.keyBinding.addKeyboardHandler(kb);\n editor.on(\"changeSelection\", w.destroy);\n editor.on(\"changeSession\", w.destroy);\n editor.on(\"mouseup\", w.destroy);\n editor.on(\"change\", w.destroy);\n editor.session.widgetManager.addLineWidget(w);\n w.el.onmousedown = editor.focus.bind(editor);\n editor.renderer.scrollCursorIntoView(null, 0.5, {\n bottom: w.el.offsetHeight\n });\n };\n\n dom.importCssString(\"\\\n .error_widget_wrapper {\\\n background: inherit;\\\n color: inherit;\\\n border:none\\\n }\\\n .error_widget {\\\n border-top: solid 2px;\\\n border-bottom: solid 2px;\\\n margin: 5px 0;\\\n padding: 10px 40px;\\\n white-space: pre-wrap;\\\n }\\\n .error_widget.ace_error, .error_widget_arrow.ace_error{\\\n border-color: #ff5a5a\\\n }\\\n .error_widget.ace_warning, .error_widget_arrow.ace_warning{\\\n border-color: #F1D817\\\n }\\\n .error_widget.ace_info, .error_widget_arrow.ace_info{\\\n border-color: #5a5a5a\\\n }\\\n .error_widget.ace_ok, .error_widget_arrow.ace_ok{\\\n border-color: #5aaa5a\\\n }\\\n .error_widget_arrow {\\\n position: absolute;\\\n border: solid 5px;\\\n border-top-color: transparent!important;\\\n border-right-color: transparent!important;\\\n border-left-color: transparent!important;\\\n top: -5px;\\\n }\\\n\", \"error_marker.css\", false);\n});\nace.define(\"ace/ace\", [\"require\", \"exports\", \"module\", \"ace/lib/fixoldbrowsers\", \"ace/lib/dom\", \"ace/lib/event\", \"ace/range\", \"ace/editor\", \"ace/edit_session\", \"ace/undomanager\", \"ace/virtual_renderer\", \"ace/worker/worker_client\", \"ace/keyboard/hash_handler\", \"ace/placeholder\", \"ace/multi_select\", \"ace/mode/folding/fold_mode\", \"ace/theme/textmate\", \"ace/ext/error_marker\", \"ace/config\"], function (require, exports, module) {\n \"use strict\";\n\n require(\"./lib/fixoldbrowsers\");\n\n var dom = require(\"./lib/dom\");\n\n var event = require(\"./lib/event\");\n\n var Range = require(\"./range\").Range;\n\n var Editor = require(\"./editor\").Editor;\n\n var EditSession = require(\"./edit_session\").EditSession;\n\n var UndoManager = require(\"./undomanager\").UndoManager;\n\n var Renderer = require(\"./virtual_renderer\").VirtualRenderer;\n\n require(\"./worker/worker_client\");\n\n require(\"./keyboard/hash_handler\");\n\n require(\"./placeholder\");\n\n require(\"./multi_select\");\n\n require(\"./mode/folding/fold_mode\");\n\n require(\"./theme/textmate\");\n\n require(\"./ext/error_marker\");\n\n exports.config = require(\"./config\");\n exports.require = require;\n if (typeof define === \"function\") exports.define = define;\n\n exports.edit = function (el, options) {\n if (typeof el == \"string\") {\n var _id = el;\n el = document.getElementById(_id);\n if (!el) throw new Error(\"ace.edit can't find div #\" + _id);\n }\n\n if (el && el.env && el.env.editor instanceof Editor) return el.env.editor;\n var value = \"\";\n\n if (el && /input|textarea/i.test(el.tagName)) {\n var oldNode = el;\n value = oldNode.value;\n el = dom.createElement(\"pre\");\n oldNode.parentNode.replaceChild(el, oldNode);\n } else if (el) {\n value = el.textContent;\n el.innerHTML = \"\";\n }\n\n var doc = exports.createEditSession(value);\n var editor = new Editor(new Renderer(el), doc, options);\n var env = {\n document: doc,\n editor: editor,\n onResize: editor.resize.bind(editor, null)\n };\n if (oldNode) env.textarea = oldNode;\n event.addListener(window, \"resize\", env.onResize);\n editor.on(\"destroy\", function () {\n event.removeListener(window, \"resize\", env.onResize);\n env.editor.container.env = null; // prevent memory leak on old ie\n });\n editor.container.env = editor.env = env;\n return editor;\n };\n\n exports.createEditSession = function (text, mode) {\n var doc = new EditSession(text, mode);\n doc.setUndoManager(new UndoManager());\n return doc;\n };\n\n exports.Range = Range;\n exports.Editor = Editor;\n exports.EditSession = EditSession;\n exports.UndoManager = UndoManager;\n exports.VirtualRenderer = Renderer;\n exports.version = exports.config.version;\n});\n\n(function () {\n ace.require([\"ace/ace\"], function (a) {\n if (a) {\n a.config.init(true);\n a.define = ace.define;\n }\n\n if (!window.ace) window.ace = a;\n\n for (var key in a) {\n if (a.hasOwnProperty(key)) window.ace[key] = a[key];\n }\n\n window.ace[\"default\"] = window.ace;\n\n if ((typeof module === \"undefined\" ? \"undefined\" : _typeof(module)) == \"object\" && (typeof exports === \"undefined\" ? \"undefined\" : _typeof(exports)) == \"object\" && module) {\n module.exports = window.ace;\n }\n });\n})();","function _typeof(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\nace.define(\"ace/mode/doc_comment_highlight_rules\", [\"require\", \"exports\", \"module\", \"ace/lib/oop\", \"ace/mode/text_highlight_rules\"], function (require, exports, module) {\n \"use strict\";\n\n var oop = require(\"../lib/oop\");\n\n var TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\n\n var DocCommentHighlightRules = function DocCommentHighlightRules() {\n this.$rules = {\n \"start\": [{\n token: \"comment.doc.tag\",\n regex: \"@[\\\\w\\\\d_]+\" // TODO: fix email addresses\n\n }, DocCommentHighlightRules.getTagRule(), {\n defaultToken: \"comment.doc\",\n caseInsensitive: true\n }]\n };\n };\n\n oop.inherits(DocCommentHighlightRules, TextHighlightRules);\n\n DocCommentHighlightRules.getTagRule = function (start) {\n return {\n token: \"comment.doc.tag.storage.type\",\n regex: \"\\\\b(?:TODO|FIXME|XXX|HACK)\\\\b\"\n };\n };\n\n DocCommentHighlightRules.getStartRule = function (start) {\n return {\n token: \"comment.doc\",\n // doc comment\n regex: \"\\\\/\\\\*(?=\\\\*)\",\n next: start\n };\n };\n\n DocCommentHighlightRules.getEndRule = function (start) {\n return {\n token: \"comment.doc\",\n // closing comment\n regex: \"\\\\*\\\\/\",\n next: start\n };\n };\n\n exports.DocCommentHighlightRules = DocCommentHighlightRules;\n});\nace.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) {\n \"use strict\";\n\n var oop = require(\"../lib/oop\");\n\n var DocCommentHighlightRules = require(\"./doc_comment_highlight_rules\").DocCommentHighlightRules;\n\n var TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\n\n var identifierRe = \"[a-zA-Z\\\\$_\\xA1-\\uFFFF][a-zA-Z\\\\d\\\\$_\\xA1-\\uFFFF]*\";\n\n var JavaScriptHighlightRules = function JavaScriptHighlightRules(options) {\n var keywordMapper = this.createKeywordMapper({\n \"variable.language\": \"Array|Boolean|Date|Function|Iterator|Number|Object|RegExp|String|Proxy|\" + // Constructors\n \"Namespace|QName|XML|XMLList|\" + // E4X\n \"ArrayBuffer|Float32Array|Float64Array|Int16Array|Int32Array|Int8Array|\" + \"Uint16Array|Uint32Array|Uint8Array|Uint8ClampedArray|\" + \"Error|EvalError|InternalError|RangeError|ReferenceError|StopIteration|\" + // Errors\n \"SyntaxError|TypeError|URIError|\" + \"decodeURI|decodeURIComponent|encodeURI|encodeURIComponent|eval|isFinite|\" + // Non-constructor functions\n \"isNaN|parseFloat|parseInt|\" + \"JSON|Math|\" + // Other\n \"this|arguments|prototype|window|document\",\n // Pseudo\n \"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\",\n \"storage.type\": \"const|let|var|function\",\n \"constant.language\": \"null|Infinity|NaN|undefined\",\n \"support.function\": \"alert\",\n \"constant.language.boolean\": \"true|false\"\n }, \"identifier\");\n var kwBeforeRe = \"case|do|else|finally|in|instanceof|return|throw|try|typeof|yield|void\";\n var escapedRe = \"\\\\\\\\(?:x[0-9a-fA-F]{2}|\" + // hex\n \"u[0-9a-fA-F]{4}|\" + // unicode\n \"u{[0-9a-fA-F]{1,6}}|\" + // es6 unicode\n \"[0-2][0-7]{0,2}|\" + // oct\n \"3[0-7][0-7]?|\" + // oct\n \"[4-7][0-7]?|\" + //oct\n \".)\";\n this.$rules = {\n \"no_regex\": [DocCommentHighlightRules.getStartRule(\"doc-start\"), comments(\"no_regex\"), {\n token: \"string\",\n regex: \"'(?=.)\",\n next: \"qstring\"\n }, {\n token: \"string\",\n regex: '\"(?=.)',\n next: \"qqstring\"\n }, {\n token: \"constant.numeric\",\n // hexadecimal, octal and binary\n regex: /0(?:[xX][0-9a-fA-F]+|[oO][0-7]+|[bB][01]+)\\b/\n }, {\n token: \"constant.numeric\",\n // decimal integers and floats\n regex: /(?:\\d\\d*(?:\\.\\d*)?|\\.\\d+)(?:[eE][+-]?\\d+\\b)?/\n }, {\n token: [\"storage.type\", \"punctuation.operator\", \"support.function\", \"punctuation.operator\", \"entity.name.function\", \"text\", \"keyword.operator\"],\n regex: \"(\" + identifierRe + \")(\\\\.)(prototype)(\\\\.)(\" + identifierRe + \")(\\\\s*)(=)\",\n next: \"function_arguments\"\n }, {\n token: [\"storage.type\", \"punctuation.operator\", \"entity.name.function\", \"text\", \"keyword.operator\", \"text\", \"storage.type\", \"text\", \"paren.lparen\"],\n regex: \"(\" + identifierRe + \")(\\\\.)(\" + identifierRe + \")(\\\\s*)(=)(\\\\s*)(function)(\\\\s*)(\\\\()\",\n next: \"function_arguments\"\n }, {\n token: [\"entity.name.function\", \"text\", \"keyword.operator\", \"text\", \"storage.type\", \"text\", \"paren.lparen\"],\n regex: \"(\" + identifierRe + \")(\\\\s*)(=)(\\\\s*)(function)(\\\\s*)(\\\\()\",\n next: \"function_arguments\"\n }, {\n token: [\"storage.type\", \"punctuation.operator\", \"entity.name.function\", \"text\", \"keyword.operator\", \"text\", \"storage.type\", \"text\", \"entity.name.function\", \"text\", \"paren.lparen\"],\n regex: \"(\" + identifierRe + \")(\\\\.)(\" + identifierRe + \")(\\\\s*)(=)(\\\\s*)(function)(\\\\s+)(\\\\w+)(\\\\s*)(\\\\()\",\n next: \"function_arguments\"\n }, {\n token: [\"storage.type\", \"text\", \"entity.name.function\", \"text\", \"paren.lparen\"],\n regex: \"(function)(\\\\s+)(\" + identifierRe + \")(\\\\s*)(\\\\()\",\n next: \"function_arguments\"\n }, {\n token: [\"entity.name.function\", \"text\", \"punctuation.operator\", \"text\", \"storage.type\", \"text\", \"paren.lparen\"],\n regex: \"(\" + identifierRe + \")(\\\\s*)(:)(\\\\s*)(function)(\\\\s*)(\\\\()\",\n next: \"function_arguments\"\n }, {\n token: [\"text\", \"text\", \"storage.type\", \"text\", \"paren.lparen\"],\n regex: \"(:)(\\\\s*)(function)(\\\\s*)(\\\\()\",\n next: \"function_arguments\"\n }, {\n token: \"keyword\",\n regex: \"from(?=\\\\s*('|\\\"))\"\n }, {\n token: \"keyword\",\n regex: \"(?:\" + kwBeforeRe + \")\\\\b\",\n next: \"start\"\n }, {\n token: [\"support.constant\"],\n regex: /that\\b/\n }, {\n token: [\"storage.type\", \"punctuation.operator\", \"support.function.firebug\"],\n regex: /(console)(\\.)(warn|info|log|error|time|trace|timeEnd|assert)\\b/\n }, {\n token: keywordMapper,\n regex: identifierRe\n }, {\n token: \"punctuation.operator\",\n regex: /[.](?![.])/,\n next: \"property\"\n }, {\n token: \"storage.type\",\n regex: /=>/,\n next: \"start\"\n }, {\n token: \"keyword.operator\",\n regex: /--|\\+\\+|\\.{3}|===|==|=|!=|!==|<+=?|>+=?|!|&&|\\|\\||\\?:|[!$%&*+\\-~\\/^]=?/,\n next: \"start\"\n }, {\n token: \"punctuation.operator\",\n regex: /[?:,;.]/,\n next: \"start\"\n }, {\n token: \"paren.lparen\",\n regex: /[\\[({]/,\n next: \"start\"\n }, {\n token: \"paren.rparen\",\n regex: /[\\])}]/\n }, {\n token: \"comment\",\n regex: /^#!.*$/\n }],\n property: [{\n token: \"text\",\n regex: \"\\\\s+\"\n }, {\n token: [\"storage.type\", \"punctuation.operator\", \"entity.name.function\", \"text\", \"keyword.operator\", \"text\", \"storage.type\", \"text\", \"entity.name.function\", \"text\", \"paren.lparen\"],\n regex: \"(\" + identifierRe + \")(\\\\.)(\" + identifierRe + \")(\\\\s*)(=)(\\\\s*)(function)(?:(\\\\s+)(\\\\w+))?(\\\\s*)(\\\\()\",\n next: \"function_arguments\"\n }, {\n token: \"punctuation.operator\",\n regex: /[.](?![.])/\n }, {\n token: \"support.function\",\n 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(?=\\()/\n }, {\n token: \"support.function.dom\",\n 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(?=\\()/\n }, {\n token: \"support.constant\",\n 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/\n }, {\n token: \"identifier\",\n regex: identifierRe\n }, {\n regex: \"\",\n token: \"empty\",\n next: \"no_regex\"\n }],\n \"start\": [DocCommentHighlightRules.getStartRule(\"doc-start\"), comments(\"start\"), {\n token: \"string.regexp\",\n regex: \"\\\\/\",\n next: \"regex\"\n }, {\n token: \"text\",\n regex: \"\\\\s+|^$\",\n next: \"start\"\n }, {\n token: \"empty\",\n regex: \"\",\n next: \"no_regex\"\n }],\n \"regex\": [{\n token: \"regexp.keyword.operator\",\n regex: \"\\\\\\\\(?:u[\\\\da-fA-F]{4}|x[\\\\da-fA-F]{2}|.)\"\n }, {\n token: \"string.regexp\",\n regex: \"/[sxngimy]*\",\n next: \"no_regex\"\n }, {\n token: \"invalid\",\n regex: /\\{\\d+\\b,?\\d*\\}[+*]|[+*$^?][+*]|[$^][?]|\\?{3,}/\n }, {\n token: \"constant.language.escape\",\n regex: /\\(\\?[:=!]|\\)|\\{\\d+\\b,?\\d*\\}|[+*]\\?|[()$^+*?.]/\n }, {\n token: \"constant.language.delimiter\",\n regex: /\\|/\n }, {\n token: \"constant.language.escape\",\n regex: /\\[\\^?/,\n next: \"regex_character_class\"\n }, {\n token: \"empty\",\n regex: \"$\",\n next: \"no_regex\"\n }, {\n defaultToken: \"string.regexp\"\n }],\n \"regex_character_class\": [{\n token: \"regexp.charclass.keyword.operator\",\n regex: \"\\\\\\\\(?:u[\\\\da-fA-F]{4}|x[\\\\da-fA-F]{2}|.)\"\n }, {\n token: \"constant.language.escape\",\n regex: \"]\",\n next: \"regex\"\n }, {\n token: \"constant.language.escape\",\n regex: \"-\"\n }, {\n token: \"empty\",\n regex: \"$\",\n next: \"no_regex\"\n }, {\n defaultToken: \"string.regexp.charachterclass\"\n }],\n \"function_arguments\": [{\n token: \"variable.parameter\",\n regex: identifierRe\n }, {\n token: \"punctuation.operator\",\n regex: \"[, ]+\"\n }, {\n token: \"punctuation.operator\",\n regex: \"$\"\n }, {\n token: \"empty\",\n regex: \"\",\n next: \"no_regex\"\n }],\n \"qqstring\": [{\n token: \"constant.language.escape\",\n regex: escapedRe\n }, {\n token: \"string\",\n regex: \"\\\\\\\\$\",\n consumeLineEnd: true\n }, {\n token: \"string\",\n regex: '\"|$',\n next: \"no_regex\"\n }, {\n defaultToken: \"string\"\n }],\n \"qstring\": [{\n token: \"constant.language.escape\",\n regex: escapedRe\n }, {\n token: \"string\",\n regex: \"\\\\\\\\$\",\n consumeLineEnd: true\n }, {\n token: \"string\",\n regex: \"'|$\",\n next: \"no_regex\"\n }, {\n defaultToken: \"string\"\n }]\n };\n\n if (!options || !options.noES6) {\n this.$rules.no_regex.unshift({\n regex: \"[{}]\",\n onMatch: function onMatch(val, state, stack) {\n this.next = val == \"{\" ? this.nextState : \"\";\n\n if (val == \"{\" && stack.length) {\n stack.unshift(\"start\", state);\n } else if (val == \"}\" && stack.length) {\n stack.shift();\n this.next = stack.shift();\n if (this.next.indexOf(\"string\") != -1 || this.next.indexOf(\"jsx\") != -1) return \"paren.quasi.end\";\n }\n\n return val == \"{\" ? \"paren.lparen\" : \"paren.rparen\";\n },\n nextState: \"start\"\n }, {\n token: \"string.quasi.start\",\n regex: /`/,\n push: [{\n token: \"constant.language.escape\",\n regex: escapedRe\n }, {\n token: \"paren.quasi.start\",\n regex: /\\${/,\n push: \"start\"\n }, {\n token: \"string.quasi.end\",\n regex: /`/,\n next: \"pop\"\n }, {\n defaultToken: \"string.quasi\"\n }]\n });\n if (!options || options.jsx != false) JSX.call(this);\n }\n\n this.embedRules(DocCommentHighlightRules, \"doc-\", [DocCommentHighlightRules.getEndRule(\"no_regex\")]);\n this.normalizeRules();\n };\n\n oop.inherits(JavaScriptHighlightRules, TextHighlightRules);\n\n function JSX() {\n var tagRegex = identifierRe.replace(\"\\\\d\", \"\\\\d\\\\-\");\n var jsxTag = {\n onMatch: function onMatch(val, state, stack) {\n var offset = val.charAt(1) == \"/\" ? 2 : 1;\n\n if (offset == 1) {\n if (state != this.nextState) stack.unshift(this.next, this.nextState, 0);else stack.unshift(this.next);\n stack[2]++;\n } else if (offset == 2) {\n if (state == this.nextState) {\n stack[1]--;\n\n if (!stack[1] || stack[1] < 0) {\n stack.shift();\n stack.shift();\n }\n }\n }\n\n return [{\n type: \"meta.tag.punctuation.\" + (offset == 1 ? \"\" : \"end-\") + \"tag-open.xml\",\n value: val.slice(0, offset)\n }, {\n type: \"meta.tag.tag-name.xml\",\n value: val.substr(offset)\n }];\n },\n regex: \"\",\n onMatch: function onMatch(value, currentState, stack) {\n if (currentState == stack[0]) stack.shift();\n\n if (value.length == 2) {\n if (stack[0] == this.nextState) stack[1]--;\n\n if (!stack[1] || stack[1] < 0) {\n stack.splice(0, 2);\n }\n }\n\n this.next = stack[0] || \"start\";\n return [{\n type: this.token,\n value: value\n }];\n },\n nextState: \"jsx\"\n }, jsxJsRule, comments(\"jsxAttributes\"), {\n token: \"entity.other.attribute-name.xml\",\n regex: tagRegex\n }, {\n token: \"keyword.operator.attribute-equals.xml\",\n regex: \"=\"\n }, {\n token: \"text.tag-whitespace.xml\",\n regex: \"\\\\s+\"\n }, {\n token: \"string.attribute-value.xml\",\n regex: \"'\",\n stateName: \"jsx_attr_q\",\n push: [{\n token: \"string.attribute-value.xml\",\n regex: \"'\",\n next: \"pop\"\n }, {\n include: \"reference\"\n }, {\n defaultToken: \"string.attribute-value.xml\"\n }]\n }, {\n token: \"string.attribute-value.xml\",\n regex: '\"',\n stateName: \"jsx_attr_qq\",\n push: [{\n token: \"string.attribute-value.xml\",\n regex: '\"',\n next: \"pop\"\n }, {\n include: \"reference\"\n }, {\n defaultToken: \"string.attribute-value.xml\"\n }]\n }, jsxTag];\n this.$rules.reference = [{\n token: \"constant.language.escape.reference.xml\",\n regex: \"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\\\.-]+;)\"\n }];\n }\n\n function comments(next) {\n return [{\n token: \"comment\",\n // multi line comment\n regex: /\\/\\*/,\n next: [DocCommentHighlightRules.getTagRule(), {\n token: \"comment\",\n regex: \"\\\\*\\\\/\",\n next: next || \"pop\"\n }, {\n defaultToken: \"comment\",\n caseInsensitive: true\n }]\n }, {\n token: \"comment\",\n regex: \"\\\\/\\\\/\",\n next: [DocCommentHighlightRules.getTagRule(), {\n token: \"comment\",\n regex: \"$|^\",\n next: next || \"pop\"\n }, {\n defaultToken: \"comment\",\n caseInsensitive: true\n }]\n }];\n }\n\n exports.JavaScriptHighlightRules = JavaScriptHighlightRules;\n});\nace.define(\"ace/mode/matching_brace_outdent\", [\"require\", \"exports\", \"module\", \"ace/range\"], function (require, exports, module) {\n \"use strict\";\n\n var Range = require(\"../range\").Range;\n\n var MatchingBraceOutdent = function MatchingBraceOutdent() {};\n\n (function () {\n this.checkOutdent = function (line, input) {\n if (!/^\\s+$/.test(line)) return false;\n return /^\\s*\\}/.test(input);\n };\n\n this.autoOutdent = function (doc, row) {\n var line = doc.getLine(row);\n var match = line.match(/^(\\s*\\})/);\n if (!match) return 0;\n var column = match[1].length;\n var openBracePos = doc.findMatchingBracket({\n row: row,\n column: column\n });\n if (!openBracePos || openBracePos.row == row) return 0;\n var indent = this.$getIndent(doc.getLine(openBracePos.row));\n doc.replace(new Range(row, 0, row, column - 1), indent);\n };\n\n this.$getIndent = function (line) {\n return line.match(/^\\s*/)[0];\n };\n }).call(MatchingBraceOutdent.prototype);\n exports.MatchingBraceOutdent = MatchingBraceOutdent;\n});\nace.define(\"ace/mode/folding/cstyle\", [\"require\", \"exports\", \"module\", \"ace/lib/oop\", \"ace/range\", \"ace/mode/folding/fold_mode\"], function (require, exports, module) {\n \"use strict\";\n\n var oop = require(\"../../lib/oop\");\n\n var Range = require(\"../../range\").Range;\n\n var BaseFoldMode = require(\"./fold_mode\").FoldMode;\n\n var FoldMode = exports.FoldMode = function (commentRegex) {\n if (commentRegex) {\n this.foldingStartMarker = new RegExp(this.foldingStartMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.start));\n this.foldingStopMarker = new RegExp(this.foldingStopMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.end));\n }\n };\n\n oop.inherits(FoldMode, BaseFoldMode);\n (function () {\n this.foldingStartMarker = /([\\{\\[\\(])[^\\}\\]\\)]*$|^\\s*(\\/\\*)/;\n this.foldingStopMarker = /^[^\\[\\{\\(]*([\\}\\]\\)])|^[\\s\\*]*(\\*\\/)/;\n this.singleLineBlockCommentRe = /^\\s*(\\/\\*).*\\*\\/\\s*$/;\n this.tripleStarBlockCommentRe = /^\\s*(\\/\\*\\*\\*).*\\*\\/\\s*$/;\n this.startRegionRe = /^\\s*(\\/\\*|\\/\\/)#?region\\b/;\n this._getFoldWidgetBase = this.getFoldWidget;\n\n this.getFoldWidget = function (session, foldStyle, row) {\n var line = session.getLine(row);\n\n if (this.singleLineBlockCommentRe.test(line)) {\n if (!this.startRegionRe.test(line) && !this.tripleStarBlockCommentRe.test(line)) return \"\";\n }\n\n var fw = this._getFoldWidgetBase(session, foldStyle, row);\n\n if (!fw && this.startRegionRe.test(line)) return \"start\"; // lineCommentRegionStart\n\n return fw;\n };\n\n this.getFoldWidgetRange = function (session, foldStyle, row, forceMultiline) {\n var line = session.getLine(row);\n if (this.startRegionRe.test(line)) return this.getCommentRegionBlock(session, line, row);\n var match = line.match(this.foldingStartMarker);\n\n if (match) {\n var i = match.index;\n if (match[1]) return this.openingBracketBlock(session, match[1], row, i);\n var range = session.getCommentFoldRange(row, i + match[0].length, 1);\n\n if (range && !range.isMultiLine()) {\n if (forceMultiline) {\n range = this.getSectionRange(session, row);\n } else if (foldStyle != \"all\") range = null;\n }\n\n return range;\n }\n\n if (foldStyle === \"markbegin\") return;\n var match = line.match(this.foldingStopMarker);\n\n if (match) {\n var i = match.index + match[0].length;\n if (match[1]) return this.closingBracketBlock(session, match[1], row, i);\n return session.getCommentFoldRange(row, i, -1);\n }\n };\n\n this.getSectionRange = function (session, row) {\n var line = session.getLine(row);\n var startIndent = line.search(/\\S/);\n var startRow = row;\n var startColumn = line.length;\n row = row + 1;\n var endRow = row;\n var maxRow = session.getLength();\n\n while (++row < maxRow) {\n line = session.getLine(row);\n var indent = line.search(/\\S/);\n if (indent === -1) continue;\n if (startIndent > indent) break;\n var subRange = this.getFoldWidgetRange(session, \"all\", row);\n\n if (subRange) {\n if (subRange.start.row <= startRow) {\n break;\n } else if (subRange.isMultiLine()) {\n row = subRange.end.row;\n } else if (startIndent == indent) {\n break;\n }\n }\n\n endRow = row;\n }\n\n return new Range(startRow, startColumn, endRow, session.getLine(endRow).length);\n };\n\n this.getCommentRegionBlock = function (session, line, row) {\n var startColumn = line.search(/\\s*$/);\n var maxRow = session.getLength();\n var startRow = row;\n var re = /^\\s*(?:\\/\\*|\\/\\/|--)#?(end)?region\\b/;\n var depth = 1;\n\n while (++row < maxRow) {\n line = session.getLine(row);\n var m = re.exec(line);\n if (!m) continue;\n if (m[1]) depth--;else depth++;\n if (!depth) break;\n }\n\n var endRow = row;\n\n if (endRow > startRow) {\n return new Range(startRow, startColumn, endRow, line.length);\n }\n };\n }).call(FoldMode.prototype);\n});\nace.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) {\n \"use strict\";\n\n var oop = require(\"../lib/oop\");\n\n var TextMode = require(\"./text\").Mode;\n\n var JavaScriptHighlightRules = require(\"./javascript_highlight_rules\").JavaScriptHighlightRules;\n\n var MatchingBraceOutdent = require(\"./matching_brace_outdent\").MatchingBraceOutdent;\n\n var WorkerClient = require(\"../worker/worker_client\").WorkerClient;\n\n var CstyleBehaviour = require(\"./behaviour/cstyle\").CstyleBehaviour;\n\n var CStyleFoldMode = require(\"./folding/cstyle\").FoldMode;\n\n var Mode = function Mode() {\n this.HighlightRules = JavaScriptHighlightRules;\n this.$outdent = new MatchingBraceOutdent();\n this.$behaviour = new CstyleBehaviour();\n this.foldingRules = new CStyleFoldMode();\n };\n\n oop.inherits(Mode, TextMode);\n (function () {\n this.lineCommentStart = \"//\";\n this.blockComment = {\n start: \"/*\",\n end: \"*/\"\n };\n this.$quotes = {\n '\"': '\"',\n \"'\": \"'\",\n \"`\": \"`\"\n };\n\n this.getNextLineIndent = function (state, line, tab) {\n var indent = this.$getIndent(line);\n var tokenizedLine = this.getTokenizer().getLineTokens(line, state);\n var tokens = tokenizedLine.tokens;\n var endState = tokenizedLine.state;\n\n if (tokens.length && tokens[tokens.length - 1].type == \"comment\") {\n return indent;\n }\n\n if (state == \"start\" || state == \"no_regex\") {\n var match = line.match(/^.*(?:\\bcase\\b.*:|[\\{\\(\\[])\\s*$/);\n\n if (match) {\n indent += tab;\n }\n } else if (state == \"doc-start\") {\n if (endState == \"start\" || endState == \"no_regex\") {\n return \"\";\n }\n\n var match = line.match(/^\\s*(\\/?)\\*/);\n\n if (match) {\n if (match[1]) {\n indent += \" \";\n }\n\n indent += \"* \";\n }\n }\n\n return indent;\n };\n\n this.checkOutdent = function (state, line, input) {\n return this.$outdent.checkOutdent(line, input);\n };\n\n this.autoOutdent = function (state, doc, row) {\n this.$outdent.autoOutdent(doc, row);\n };\n\n this.createWorker = function (session) {\n var worker = new WorkerClient([\"ace\"], \"ace/mode/javascript_worker\", \"JavaScriptWorker\");\n worker.attachToDocument(session.getDocument());\n worker.on(\"annotate\", function (results) {\n session.setAnnotations(results.data);\n });\n worker.on(\"terminate\", function () {\n session.clearAnnotations();\n });\n return worker;\n };\n\n this.$id = \"ace/mode/javascript\";\n this.snippetFileId = \"ace/snippets/javascript\";\n }).call(Mode.prototype);\n exports.Mode = Mode;\n});\n\n(function () {\n ace.require([\"ace/mode/javascript\"], function (m) {\n if ((typeof module === \"undefined\" ? \"undefined\" : _typeof(module)) == \"object\" && (typeof exports === \"undefined\" ? \"undefined\" : _typeof(exports)) == \"object\" && module) {\n module.exports = m;\n }\n });\n})();","function _typeof(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\nace.define(\"ace/mode/css_highlight_rules\", [\"require\", \"exports\", \"module\", \"ace/lib/oop\", \"ace/lib/lang\", \"ace/mode/text_highlight_rules\"], function (require, exports, module) {\n \"use strict\";\n\n var oop = require(\"../lib/oop\");\n\n var lang = require(\"../lib/lang\");\n\n var TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\n\n 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\";\n var supportFunction = exports.supportFunction = \"rgb|rgba|url|attr|counter|counters\";\n 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\";\n 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\";\n 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\";\n var numRe = exports.numRe = \"\\\\-?(?:(?:[0-9]+(?:\\\\.[0-9]+)?)|(?:\\\\.[0-9]+))\";\n var pseudoElements = exports.pseudoElements = \"(\\\\:+)\\\\b(after|before|first-letter|first-line|moz-selection|selection)\\\\b\";\n 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\";\n\n var CssHighlightRules = function CssHighlightRules() {\n var keywordMapper = this.createKeywordMapper({\n \"support.function\": supportFunction,\n \"support.constant\": supportConstant,\n \"support.type\": supportType,\n \"support.constant.color\": supportConstantColor,\n \"support.constant.fonts\": supportConstantFonts\n }, \"text\", true);\n this.$rules = {\n \"start\": [{\n include: [\"strings\", \"url\", \"comments\"]\n }, {\n token: \"paren.lparen\",\n regex: \"\\\\{\",\n next: \"ruleset\"\n }, {\n token: \"paren.rparen\",\n regex: \"\\\\}\"\n }, {\n token: \"string\",\n regex: \"@(?!viewport)\",\n next: \"media\"\n }, {\n token: \"keyword\",\n regex: \"#[a-z0-9-_]+\"\n }, {\n token: \"keyword\",\n regex: \"%\"\n }, {\n token: \"variable\",\n regex: \"\\\\.[a-z0-9-_]+\"\n }, {\n token: \"string\",\n regex: \":[a-z0-9-_]+\"\n }, {\n token: \"constant.numeric\",\n regex: numRe\n }, {\n token: \"constant\",\n regex: \"[a-z0-9-_]+\"\n }, {\n caseInsensitive: true\n }],\n \"media\": [{\n include: [\"strings\", \"url\", \"comments\"]\n }, {\n token: \"paren.lparen\",\n regex: \"\\\\{\",\n next: \"start\"\n }, {\n token: \"paren.rparen\",\n regex: \"\\\\}\",\n next: \"start\"\n }, {\n token: \"string\",\n regex: \";\",\n next: \"start\"\n }, {\n token: \"keyword\",\n 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)\"\n }],\n \"comments\": [{\n token: \"comment\",\n // multi line comment\n regex: \"\\\\/\\\\*\",\n push: [{\n token: \"comment\",\n regex: \"\\\\*\\\\/\",\n next: \"pop\"\n }, {\n defaultToken: \"comment\"\n }]\n }],\n \"ruleset\": [{\n regex: \"-(webkit|ms|moz|o)-\",\n token: \"text\"\n }, {\n token: \"punctuation.operator\",\n regex: \"[:;]\"\n }, {\n token: \"paren.rparen\",\n regex: \"\\\\}\",\n next: \"start\"\n }, {\n include: [\"strings\", \"url\", \"comments\"]\n }, {\n token: [\"constant.numeric\", \"keyword\"],\n 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|%)\"\n }, {\n token: \"constant.numeric\",\n regex: numRe\n }, {\n token: \"constant.numeric\",\n // hex6 color\n regex: \"#[a-f0-9]{6}\"\n }, {\n token: \"constant.numeric\",\n // hex3 color\n regex: \"#[a-f0-9]{3}\"\n }, {\n token: [\"punctuation\", \"entity.other.attribute-name.pseudo-element.css\"],\n regex: pseudoElements\n }, {\n token: [\"punctuation\", \"entity.other.attribute-name.pseudo-class.css\"],\n regex: pseudoClasses\n }, {\n include: \"url\"\n }, {\n token: keywordMapper,\n regex: \"\\\\-?[a-zA-Z_][a-zA-Z0-9_\\\\-]*\"\n }, {\n caseInsensitive: true\n }],\n url: [{\n token: \"support.function\",\n regex: \"(?:url(:?-prefix)?|domain|regexp)\\\\(\",\n push: [{\n token: \"support.function\",\n regex: \"\\\\)\",\n next: \"pop\"\n }, {\n defaultToken: \"string\"\n }]\n }],\n strings: [{\n token: \"string.start\",\n regex: \"'\",\n push: [{\n token: \"string.end\",\n regex: \"'|$\",\n next: \"pop\"\n }, {\n include: \"escapes\"\n }, {\n token: \"constant.language.escape\",\n regex: /\\\\$/,\n consumeLineEnd: true\n }, {\n defaultToken: \"string\"\n }]\n }, {\n token: \"string.start\",\n regex: '\"',\n push: [{\n token: \"string.end\",\n regex: '\"|$',\n next: \"pop\"\n }, {\n include: \"escapes\"\n }, {\n token: \"constant.language.escape\",\n regex: /\\\\$/,\n consumeLineEnd: true\n }, {\n defaultToken: \"string\"\n }]\n }],\n escapes: [{\n token: \"constant.language.escape\",\n regex: /\\\\([a-fA-F\\d]{1,6}|[^a-fA-F\\d])/\n }]\n };\n this.normalizeRules();\n };\n\n oop.inherits(CssHighlightRules, TextHighlightRules);\n exports.CssHighlightRules = CssHighlightRules;\n});\nace.define(\"ace/mode/matching_brace_outdent\", [\"require\", \"exports\", \"module\", \"ace/range\"], function (require, exports, module) {\n \"use strict\";\n\n var Range = require(\"../range\").Range;\n\n var MatchingBraceOutdent = function MatchingBraceOutdent() {};\n\n (function () {\n this.checkOutdent = function (line, input) {\n if (!/^\\s+$/.test(line)) return false;\n return /^\\s*\\}/.test(input);\n };\n\n this.autoOutdent = function (doc, row) {\n var line = doc.getLine(row);\n var match = line.match(/^(\\s*\\})/);\n if (!match) return 0;\n var column = match[1].length;\n var openBracePos = doc.findMatchingBracket({\n row: row,\n column: column\n });\n if (!openBracePos || openBracePos.row == row) return 0;\n var indent = this.$getIndent(doc.getLine(openBracePos.row));\n doc.replace(new Range(row, 0, row, column - 1), indent);\n };\n\n this.$getIndent = function (line) {\n return line.match(/^\\s*/)[0];\n };\n }).call(MatchingBraceOutdent.prototype);\n exports.MatchingBraceOutdent = MatchingBraceOutdent;\n});\nace.define(\"ace/mode/css_completions\", [\"require\", \"exports\", \"module\"], function (require, exports, module) {\n \"use strict\";\n\n var propertyMap = {\n \"background\": {\n \"#$0\": 1\n },\n \"background-color\": {\n \"#$0\": 1,\n \"transparent\": 1,\n \"fixed\": 1\n },\n \"background-image\": {\n \"url('/$0')\": 1\n },\n \"background-repeat\": {\n \"repeat\": 1,\n \"repeat-x\": 1,\n \"repeat-y\": 1,\n \"no-repeat\": 1,\n \"inherit\": 1\n },\n \"background-position\": {\n \"bottom\": 2,\n \"center\": 2,\n \"left\": 2,\n \"right\": 2,\n \"top\": 2,\n \"inherit\": 2\n },\n \"background-attachment\": {\n \"scroll\": 1,\n \"fixed\": 1\n },\n \"background-size\": {\n \"cover\": 1,\n \"contain\": 1\n },\n \"background-clip\": {\n \"border-box\": 1,\n \"padding-box\": 1,\n \"content-box\": 1\n },\n \"background-origin\": {\n \"border-box\": 1,\n \"padding-box\": 1,\n \"content-box\": 1\n },\n \"border\": {\n \"solid $0\": 1,\n \"dashed $0\": 1,\n \"dotted $0\": 1,\n \"#$0\": 1\n },\n \"border-color\": {\n \"#$0\": 1\n },\n \"border-style\": {\n \"solid\": 2,\n \"dashed\": 2,\n \"dotted\": 2,\n \"double\": 2,\n \"groove\": 2,\n \"hidden\": 2,\n \"inherit\": 2,\n \"inset\": 2,\n \"none\": 2,\n \"outset\": 2,\n \"ridged\": 2\n },\n \"border-collapse\": {\n \"collapse\": 1,\n \"separate\": 1\n },\n \"bottom\": {\n \"px\": 1,\n \"em\": 1,\n \"%\": 1\n },\n \"clear\": {\n \"left\": 1,\n \"right\": 1,\n \"both\": 1,\n \"none\": 1\n },\n \"color\": {\n \"#$0\": 1,\n \"rgb(#$00,0,0)\": 1\n },\n \"cursor\": {\n \"default\": 1,\n \"pointer\": 1,\n \"move\": 1,\n \"text\": 1,\n \"wait\": 1,\n \"help\": 1,\n \"progress\": 1,\n \"n-resize\": 1,\n \"ne-resize\": 1,\n \"e-resize\": 1,\n \"se-resize\": 1,\n \"s-resize\": 1,\n \"sw-resize\": 1,\n \"w-resize\": 1,\n \"nw-resize\": 1\n },\n \"display\": {\n \"none\": 1,\n \"block\": 1,\n \"inline\": 1,\n \"inline-block\": 1,\n \"table-cell\": 1\n },\n \"empty-cells\": {\n \"show\": 1,\n \"hide\": 1\n },\n \"float\": {\n \"left\": 1,\n \"right\": 1,\n \"none\": 1\n },\n \"font-family\": {\n \"Arial\": 2,\n \"Comic Sans MS\": 2,\n \"Consolas\": 2,\n \"Courier New\": 2,\n \"Courier\": 2,\n \"Georgia\": 2,\n \"Monospace\": 2,\n \"Sans-Serif\": 2,\n \"Segoe UI\": 2,\n \"Tahoma\": 2,\n \"Times New Roman\": 2,\n \"Trebuchet MS\": 2,\n \"Verdana\": 1\n },\n \"font-size\": {\n \"px\": 1,\n \"em\": 1,\n \"%\": 1\n },\n \"font-weight\": {\n \"bold\": 1,\n \"normal\": 1\n },\n \"font-style\": {\n \"italic\": 1,\n \"normal\": 1\n },\n \"font-variant\": {\n \"normal\": 1,\n \"small-caps\": 1\n },\n \"height\": {\n \"px\": 1,\n \"em\": 1,\n \"%\": 1\n },\n \"left\": {\n \"px\": 1,\n \"em\": 1,\n \"%\": 1\n },\n \"letter-spacing\": {\n \"normal\": 1\n },\n \"line-height\": {\n \"normal\": 1\n },\n \"list-style-type\": {\n \"none\": 1,\n \"disc\": 1,\n \"circle\": 1,\n \"square\": 1,\n \"decimal\": 1,\n \"decimal-leading-zero\": 1,\n \"lower-roman\": 1,\n \"upper-roman\": 1,\n \"lower-greek\": 1,\n \"lower-latin\": 1,\n \"upper-latin\": 1,\n \"georgian\": 1,\n \"lower-alpha\": 1,\n \"upper-alpha\": 1\n },\n \"margin\": {\n \"px\": 1,\n \"em\": 1,\n \"%\": 1\n },\n \"margin-right\": {\n \"px\": 1,\n \"em\": 1,\n \"%\": 1\n },\n \"margin-left\": {\n \"px\": 1,\n \"em\": 1,\n \"%\": 1\n },\n \"margin-top\": {\n \"px\": 1,\n \"em\": 1,\n \"%\": 1\n },\n \"margin-bottom\": {\n \"px\": 1,\n \"em\": 1,\n \"%\": 1\n },\n \"max-height\": {\n \"px\": 1,\n \"em\": 1,\n \"%\": 1\n },\n \"max-width\": {\n \"px\": 1,\n \"em\": 1,\n \"%\": 1\n },\n \"min-height\": {\n \"px\": 1,\n \"em\": 1,\n \"%\": 1\n },\n \"min-width\": {\n \"px\": 1,\n \"em\": 1,\n \"%\": 1\n },\n \"overflow\": {\n \"hidden\": 1,\n \"visible\": 1,\n \"auto\": 1,\n \"scroll\": 1\n },\n \"overflow-x\": {\n \"hidden\": 1,\n \"visible\": 1,\n \"auto\": 1,\n \"scroll\": 1\n },\n \"overflow-y\": {\n \"hidden\": 1,\n \"visible\": 1,\n \"auto\": 1,\n \"scroll\": 1\n },\n \"padding\": {\n \"px\": 1,\n \"em\": 1,\n \"%\": 1\n },\n \"padding-top\": {\n \"px\": 1,\n \"em\": 1,\n \"%\": 1\n },\n \"padding-right\": {\n \"px\": 1,\n \"em\": 1,\n \"%\": 1\n },\n \"padding-bottom\": {\n \"px\": 1,\n \"em\": 1,\n \"%\": 1\n },\n \"padding-left\": {\n \"px\": 1,\n \"em\": 1,\n \"%\": 1\n },\n \"page-break-after\": {\n \"auto\": 1,\n \"always\": 1,\n \"avoid\": 1,\n \"left\": 1,\n \"right\": 1\n },\n \"page-break-before\": {\n \"auto\": 1,\n \"always\": 1,\n \"avoid\": 1,\n \"left\": 1,\n \"right\": 1\n },\n \"position\": {\n \"absolute\": 1,\n \"relative\": 1,\n \"fixed\": 1,\n \"static\": 1\n },\n \"right\": {\n \"px\": 1,\n \"em\": 1,\n \"%\": 1\n },\n \"table-layout\": {\n \"fixed\": 1,\n \"auto\": 1\n },\n \"text-decoration\": {\n \"none\": 1,\n \"underline\": 1,\n \"line-through\": 1,\n \"blink\": 1\n },\n \"text-align\": {\n \"left\": 1,\n \"right\": 1,\n \"center\": 1,\n \"justify\": 1\n },\n \"text-transform\": {\n \"capitalize\": 1,\n \"uppercase\": 1,\n \"lowercase\": 1,\n \"none\": 1\n },\n \"top\": {\n \"px\": 1,\n \"em\": 1,\n \"%\": 1\n },\n \"vertical-align\": {\n \"top\": 1,\n \"bottom\": 1\n },\n \"visibility\": {\n \"hidden\": 1,\n \"visible\": 1\n },\n \"white-space\": {\n \"nowrap\": 1,\n \"normal\": 1,\n \"pre\": 1,\n \"pre-line\": 1,\n \"pre-wrap\": 1\n },\n \"width\": {\n \"px\": 1,\n \"em\": 1,\n \"%\": 1\n },\n \"word-spacing\": {\n \"normal\": 1\n },\n \"filter\": {\n \"alpha(opacity=$0100)\": 1\n },\n \"text-shadow\": {\n \"$02px 2px 2px #777\": 1\n },\n \"text-overflow\": {\n \"ellipsis-word\": 1,\n \"clip\": 1,\n \"ellipsis\": 1\n },\n \"-moz-border-radius\": 1,\n \"-moz-border-radius-topright\": 1,\n \"-moz-border-radius-bottomright\": 1,\n \"-moz-border-radius-topleft\": 1,\n \"-moz-border-radius-bottomleft\": 1,\n \"-webkit-border-radius\": 1,\n \"-webkit-border-top-right-radius\": 1,\n \"-webkit-border-top-left-radius\": 1,\n \"-webkit-border-bottom-right-radius\": 1,\n \"-webkit-border-bottom-left-radius\": 1,\n \"-moz-box-shadow\": 1,\n \"-webkit-box-shadow\": 1,\n \"transform\": {\n \"rotate($00deg)\": 1,\n \"skew($00deg)\": 1\n },\n \"-moz-transform\": {\n \"rotate($00deg)\": 1,\n \"skew($00deg)\": 1\n },\n \"-webkit-transform\": {\n \"rotate($00deg)\": 1,\n \"skew($00deg)\": 1\n }\n };\n\n var CssCompletions = function CssCompletions() {};\n\n (function () {\n this.completionsDefined = false;\n\n this.defineCompletions = function () {\n if (document) {\n var style = document.createElement('c').style;\n\n for (var i in style) {\n if (typeof style[i] !== 'string') continue;\n var name = i.replace(/[A-Z]/g, function (x) {\n return '-' + x.toLowerCase();\n });\n if (!propertyMap.hasOwnProperty(name)) propertyMap[name] = 1;\n }\n }\n\n this.completionsDefined = true;\n };\n\n this.getCompletions = function (state, session, pos, prefix) {\n if (!this.completionsDefined) {\n this.defineCompletions();\n }\n\n if (state === 'ruleset' || session.$mode.$id == \"ace/mode/scss\") {\n var line = session.getLine(pos.row).substr(0, pos.column);\n\n if (/:[^;]+$/.test(line)) {\n /([\\w\\-]+):[^:]*$/.test(line);\n return this.getPropertyValueCompletions(state, session, pos, prefix);\n } else {\n return this.getPropertyCompletions(state, session, pos, prefix);\n }\n }\n\n return [];\n };\n\n this.getPropertyCompletions = function (state, session, pos, prefix) {\n var properties = Object.keys(propertyMap);\n return properties.map(function (property) {\n return {\n caption: property,\n snippet: property + ': $0;',\n meta: \"property\",\n score: 1000000\n };\n });\n };\n\n this.getPropertyValueCompletions = function (state, session, pos, prefix) {\n var line = session.getLine(pos.row).substr(0, pos.column);\n var property = (/([\\w\\-]+):[^:]*$/.exec(line) || {})[1];\n if (!property) return [];\n var values = [];\n\n if (property in propertyMap && _typeof(propertyMap[property]) === \"object\") {\n values = Object.keys(propertyMap[property]);\n }\n\n return values.map(function (value) {\n return {\n caption: value,\n snippet: value,\n meta: \"property value\",\n score: 1000000\n };\n });\n };\n }).call(CssCompletions.prototype);\n exports.CssCompletions = CssCompletions;\n});\nace.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) {\n \"use strict\";\n\n var oop = require(\"../../lib/oop\");\n\n var Behaviour = require(\"../behaviour\").Behaviour;\n\n var CstyleBehaviour = require(\"./cstyle\").CstyleBehaviour;\n\n var TokenIterator = require(\"../../token_iterator\").TokenIterator;\n\n var CssBehaviour = function CssBehaviour() {\n this.inherit(CstyleBehaviour);\n this.add(\"colon\", \"insertion\", function (state, action, editor, session, text) {\n if (text === ':' && editor.selection.isEmpty()) {\n var cursor = editor.getCursorPosition();\n var iterator = new TokenIterator(session, cursor.row, cursor.column);\n var token = iterator.getCurrentToken();\n\n if (token && token.value.match(/\\s+/)) {\n token = iterator.stepBackward();\n }\n\n if (token && token.type === 'support.type') {\n var line = session.doc.getLine(cursor.row);\n var rightChar = line.substring(cursor.column, cursor.column + 1);\n\n if (rightChar === ':') {\n return {\n text: '',\n selection: [1, 1]\n };\n }\n\n if (/^(\\s+[^;]|\\s*$)/.test(line.substring(cursor.column))) {\n return {\n text: ':;',\n selection: [1, 1]\n };\n }\n }\n }\n });\n this.add(\"colon\", \"deletion\", function (state, action, editor, session, range) {\n var selected = session.doc.getTextRange(range);\n\n if (!range.isMultiLine() && selected === ':') {\n var cursor = editor.getCursorPosition();\n var iterator = new TokenIterator(session, cursor.row, cursor.column);\n var token = iterator.getCurrentToken();\n\n if (token && token.value.match(/\\s+/)) {\n token = iterator.stepBackward();\n }\n\n if (token && token.type === 'support.type') {\n var line = session.doc.getLine(range.start.row);\n var rightChar = line.substring(range.end.column, range.end.column + 1);\n\n if (rightChar === ';') {\n range.end.column++;\n return range;\n }\n }\n }\n });\n this.add(\"semicolon\", \"insertion\", function (state, action, editor, session, text) {\n if (text === ';' && editor.selection.isEmpty()) {\n var cursor = editor.getCursorPosition();\n var line = session.doc.getLine(cursor.row);\n var rightChar = line.substring(cursor.column, cursor.column + 1);\n\n if (rightChar === ';') {\n return {\n text: '',\n selection: [1, 1]\n };\n }\n }\n });\n this.add(\"!important\", \"insertion\", function (state, action, editor, session, text) {\n if (text === '!' && editor.selection.isEmpty()) {\n var cursor = editor.getCursorPosition();\n var line = session.doc.getLine(cursor.row);\n\n if (/^\\s*(;|}|$)/.test(line.substring(cursor.column))) {\n return {\n text: '!important',\n selection: [10, 10]\n };\n }\n }\n });\n };\n\n oop.inherits(CssBehaviour, CstyleBehaviour);\n exports.CssBehaviour = CssBehaviour;\n});\nace.define(\"ace/mode/folding/cstyle\", [\"require\", \"exports\", \"module\", \"ace/lib/oop\", \"ace/range\", \"ace/mode/folding/fold_mode\"], function (require, exports, module) {\n \"use strict\";\n\n var oop = require(\"../../lib/oop\");\n\n var Range = require(\"../../range\").Range;\n\n var BaseFoldMode = require(\"./fold_mode\").FoldMode;\n\n var FoldMode = exports.FoldMode = function (commentRegex) {\n if (commentRegex) {\n this.foldingStartMarker = new RegExp(this.foldingStartMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.start));\n this.foldingStopMarker = new RegExp(this.foldingStopMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.end));\n }\n };\n\n oop.inherits(FoldMode, BaseFoldMode);\n (function () {\n this.foldingStartMarker = /([\\{\\[\\(])[^\\}\\]\\)]*$|^\\s*(\\/\\*)/;\n this.foldingStopMarker = /^[^\\[\\{\\(]*([\\}\\]\\)])|^[\\s\\*]*(\\*\\/)/;\n this.singleLineBlockCommentRe = /^\\s*(\\/\\*).*\\*\\/\\s*$/;\n this.tripleStarBlockCommentRe = /^\\s*(\\/\\*\\*\\*).*\\*\\/\\s*$/;\n this.startRegionRe = /^\\s*(\\/\\*|\\/\\/)#?region\\b/;\n this._getFoldWidgetBase = this.getFoldWidget;\n\n this.getFoldWidget = function (session, foldStyle, row) {\n var line = session.getLine(row);\n\n if (this.singleLineBlockCommentRe.test(line)) {\n if (!this.startRegionRe.test(line) && !this.tripleStarBlockCommentRe.test(line)) return \"\";\n }\n\n var fw = this._getFoldWidgetBase(session, foldStyle, row);\n\n if (!fw && this.startRegionRe.test(line)) return \"start\"; // lineCommentRegionStart\n\n return fw;\n };\n\n this.getFoldWidgetRange = function (session, foldStyle, row, forceMultiline) {\n var line = session.getLine(row);\n if (this.startRegionRe.test(line)) return this.getCommentRegionBlock(session, line, row);\n var match = line.match(this.foldingStartMarker);\n\n if (match) {\n var i = match.index;\n if (match[1]) return this.openingBracketBlock(session, match[1], row, i);\n var range = session.getCommentFoldRange(row, i + match[0].length, 1);\n\n if (range && !range.isMultiLine()) {\n if (forceMultiline) {\n range = this.getSectionRange(session, row);\n } else if (foldStyle != \"all\") range = null;\n }\n\n return range;\n }\n\n if (foldStyle === \"markbegin\") return;\n var match = line.match(this.foldingStopMarker);\n\n if (match) {\n var i = match.index + match[0].length;\n if (match[1]) return this.closingBracketBlock(session, match[1], row, i);\n return session.getCommentFoldRange(row, i, -1);\n }\n };\n\n this.getSectionRange = function (session, row) {\n var line = session.getLine(row);\n var startIndent = line.search(/\\S/);\n var startRow = row;\n var startColumn = line.length;\n row = row + 1;\n var endRow = row;\n var maxRow = session.getLength();\n\n while (++row < maxRow) {\n line = session.getLine(row);\n var indent = line.search(/\\S/);\n if (indent === -1) continue;\n if (startIndent > indent) break;\n var subRange = this.getFoldWidgetRange(session, \"all\", row);\n\n if (subRange) {\n if (subRange.start.row <= startRow) {\n break;\n } else if (subRange.isMultiLine()) {\n row = subRange.end.row;\n } else if (startIndent == indent) {\n break;\n }\n }\n\n endRow = row;\n }\n\n return new Range(startRow, startColumn, endRow, session.getLine(endRow).length);\n };\n\n this.getCommentRegionBlock = function (session, line, row) {\n var startColumn = line.search(/\\s*$/);\n var maxRow = session.getLength();\n var startRow = row;\n var re = /^\\s*(?:\\/\\*|\\/\\/|--)#?(end)?region\\b/;\n var depth = 1;\n\n while (++row < maxRow) {\n line = session.getLine(row);\n var m = re.exec(line);\n if (!m) continue;\n if (m[1]) depth--;else depth++;\n if (!depth) break;\n }\n\n var endRow = row;\n\n if (endRow > startRow) {\n return new Range(startRow, startColumn, endRow, line.length);\n }\n };\n }).call(FoldMode.prototype);\n});\nace.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) {\n \"use strict\";\n\n var oop = require(\"../lib/oop\");\n\n var TextMode = require(\"./text\").Mode;\n\n var CssHighlightRules = require(\"./css_highlight_rules\").CssHighlightRules;\n\n var MatchingBraceOutdent = require(\"./matching_brace_outdent\").MatchingBraceOutdent;\n\n var WorkerClient = require(\"../worker/worker_client\").WorkerClient;\n\n var CssCompletions = require(\"./css_completions\").CssCompletions;\n\n var CssBehaviour = require(\"./behaviour/css\").CssBehaviour;\n\n var CStyleFoldMode = require(\"./folding/cstyle\").FoldMode;\n\n var Mode = function Mode() {\n this.HighlightRules = CssHighlightRules;\n this.$outdent = new MatchingBraceOutdent();\n this.$behaviour = new CssBehaviour();\n this.$completer = new CssCompletions();\n this.foldingRules = new CStyleFoldMode();\n };\n\n oop.inherits(Mode, TextMode);\n (function () {\n this.foldingRules = \"cStyle\";\n this.blockComment = {\n start: \"/*\",\n end: \"*/\"\n };\n\n this.getNextLineIndent = function (state, line, tab) {\n var indent = this.$getIndent(line);\n var tokens = this.getTokenizer().getLineTokens(line, state).tokens;\n\n if (tokens.length && tokens[tokens.length - 1].type == \"comment\") {\n return indent;\n }\n\n var match = line.match(/^.*\\{\\s*$/);\n\n if (match) {\n indent += tab;\n }\n\n return indent;\n };\n\n this.checkOutdent = function (state, line, input) {\n return this.$outdent.checkOutdent(line, input);\n };\n\n this.autoOutdent = function (state, doc, row) {\n this.$outdent.autoOutdent(doc, row);\n };\n\n this.getCompletions = function (state, session, pos, prefix) {\n return this.$completer.getCompletions(state, session, pos, prefix);\n };\n\n this.createWorker = function (session) {\n var worker = new WorkerClient([\"ace\"], \"ace/mode/css_worker\", \"Worker\");\n worker.attachToDocument(session.getDocument());\n worker.on(\"annotate\", function (e) {\n session.setAnnotations(e.data);\n });\n worker.on(\"terminate\", function () {\n session.clearAnnotations();\n });\n return worker;\n };\n\n this.$id = \"ace/mode/css\";\n this.snippetFileId = \"ace/snippets/css\";\n }).call(Mode.prototype);\n exports.Mode = Mode;\n});\n\n(function () {\n ace.require([\"ace/mode/css\"], function (m) {\n if ((typeof module === \"undefined\" ? \"undefined\" : _typeof(module)) == \"object\" && (typeof exports === \"undefined\" ? \"undefined\" : _typeof(exports)) == \"object\" && module) {\n module.exports = m;\n }\n });\n})();","function _typeof(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\nace.define(\"ace/mode/json_highlight_rules\", [\"require\", \"exports\", \"module\", \"ace/lib/oop\", \"ace/mode/text_highlight_rules\"], function (require, exports, module) {\n \"use strict\";\n\n var oop = require(\"../lib/oop\");\n\n var TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\n\n var JsonHighlightRules = function JsonHighlightRules() {\n this.$rules = {\n \"start\": [{\n token: \"variable\",\n // single line\n regex: '[\"](?:(?:\\\\\\\\.)|(?:[^\"\\\\\\\\]))*?[\"]\\\\s*(?=:)'\n }, {\n token: \"string\",\n // single line\n regex: '\"',\n next: \"string\"\n }, {\n token: \"constant.numeric\",\n // hex\n regex: \"0[xX][0-9a-fA-F]+\\\\b\"\n }, {\n token: \"constant.numeric\",\n // float\n regex: \"[+-]?\\\\d+(?:(?:\\\\.\\\\d*)?(?:[eE][+-]?\\\\d+)?)?\\\\b\"\n }, {\n token: \"constant.language.boolean\",\n regex: \"(?:true|false)\\\\b\"\n }, {\n token: \"text\",\n // single quoted strings are not allowed\n regex: \"['](?:(?:\\\\\\\\.)|(?:[^'\\\\\\\\]))*?[']\"\n }, {\n token: \"comment\",\n // comments are not allowed, but who cares?\n regex: \"\\\\/\\\\/.*$\"\n }, {\n token: \"comment.start\",\n // comments are not allowed, but who cares?\n regex: \"\\\\/\\\\*\",\n next: \"comment\"\n }, {\n token: \"paren.lparen\",\n regex: \"[[({]\"\n }, {\n token: \"paren.rparen\",\n regex: \"[\\\\])}]\"\n }, {\n token: \"text\",\n regex: \"\\\\s+\"\n }],\n \"string\": [{\n token: \"constant.language.escape\",\n regex: /\\\\(?:x[0-9a-fA-F]{2}|u[0-9a-fA-F]{4}|[\"\\\\\\/bfnrt])/\n }, {\n token: \"string\",\n regex: '\"|$',\n next: \"start\"\n }, {\n defaultToken: \"string\"\n }],\n \"comment\": [{\n token: \"comment.end\",\n // comments are not allowed, but who cares?\n regex: \"\\\\*\\\\/\",\n next: \"start\"\n }, {\n defaultToken: \"comment\"\n }]\n };\n };\n\n oop.inherits(JsonHighlightRules, TextHighlightRules);\n exports.JsonHighlightRules = JsonHighlightRules;\n});\nace.define(\"ace/mode/matching_brace_outdent\", [\"require\", \"exports\", \"module\", \"ace/range\"], function (require, exports, module) {\n \"use strict\";\n\n var Range = require(\"../range\").Range;\n\n var MatchingBraceOutdent = function MatchingBraceOutdent() {};\n\n (function () {\n this.checkOutdent = function (line, input) {\n if (!/^\\s+$/.test(line)) return false;\n return /^\\s*\\}/.test(input);\n };\n\n this.autoOutdent = function (doc, row) {\n var line = doc.getLine(row);\n var match = line.match(/^(\\s*\\})/);\n if (!match) return 0;\n var column = match[1].length;\n var openBracePos = doc.findMatchingBracket({\n row: row,\n column: column\n });\n if (!openBracePos || openBracePos.row == row) return 0;\n var indent = this.$getIndent(doc.getLine(openBracePos.row));\n doc.replace(new Range(row, 0, row, column - 1), indent);\n };\n\n this.$getIndent = function (line) {\n return line.match(/^\\s*/)[0];\n };\n }).call(MatchingBraceOutdent.prototype);\n exports.MatchingBraceOutdent = MatchingBraceOutdent;\n});\nace.define(\"ace/mode/folding/cstyle\", [\"require\", \"exports\", \"module\", \"ace/lib/oop\", \"ace/range\", \"ace/mode/folding/fold_mode\"], function (require, exports, module) {\n \"use strict\";\n\n var oop = require(\"../../lib/oop\");\n\n var Range = require(\"../../range\").Range;\n\n var BaseFoldMode = require(\"./fold_mode\").FoldMode;\n\n var FoldMode = exports.FoldMode = function (commentRegex) {\n if (commentRegex) {\n this.foldingStartMarker = new RegExp(this.foldingStartMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.start));\n this.foldingStopMarker = new RegExp(this.foldingStopMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.end));\n }\n };\n\n oop.inherits(FoldMode, BaseFoldMode);\n (function () {\n this.foldingStartMarker = /([\\{\\[\\(])[^\\}\\]\\)]*$|^\\s*(\\/\\*)/;\n this.foldingStopMarker = /^[^\\[\\{\\(]*([\\}\\]\\)])|^[\\s\\*]*(\\*\\/)/;\n this.singleLineBlockCommentRe = /^\\s*(\\/\\*).*\\*\\/\\s*$/;\n this.tripleStarBlockCommentRe = /^\\s*(\\/\\*\\*\\*).*\\*\\/\\s*$/;\n this.startRegionRe = /^\\s*(\\/\\*|\\/\\/)#?region\\b/;\n this._getFoldWidgetBase = this.getFoldWidget;\n\n this.getFoldWidget = function (session, foldStyle, row) {\n var line = session.getLine(row);\n\n if (this.singleLineBlockCommentRe.test(line)) {\n if (!this.startRegionRe.test(line) && !this.tripleStarBlockCommentRe.test(line)) return \"\";\n }\n\n var fw = this._getFoldWidgetBase(session, foldStyle, row);\n\n if (!fw && this.startRegionRe.test(line)) return \"start\"; // lineCommentRegionStart\n\n return fw;\n };\n\n this.getFoldWidgetRange = function (session, foldStyle, row, forceMultiline) {\n var line = session.getLine(row);\n if (this.startRegionRe.test(line)) return this.getCommentRegionBlock(session, line, row);\n var match = line.match(this.foldingStartMarker);\n\n if (match) {\n var i = match.index;\n if (match[1]) return this.openingBracketBlock(session, match[1], row, i);\n var range = session.getCommentFoldRange(row, i + match[0].length, 1);\n\n if (range && !range.isMultiLine()) {\n if (forceMultiline) {\n range = this.getSectionRange(session, row);\n } else if (foldStyle != \"all\") range = null;\n }\n\n return range;\n }\n\n if (foldStyle === \"markbegin\") return;\n var match = line.match(this.foldingStopMarker);\n\n if (match) {\n var i = match.index + match[0].length;\n if (match[1]) return this.closingBracketBlock(session, match[1], row, i);\n return session.getCommentFoldRange(row, i, -1);\n }\n };\n\n this.getSectionRange = function (session, row) {\n var line = session.getLine(row);\n var startIndent = line.search(/\\S/);\n var startRow = row;\n var startColumn = line.length;\n row = row + 1;\n var endRow = row;\n var maxRow = session.getLength();\n\n while (++row < maxRow) {\n line = session.getLine(row);\n var indent = line.search(/\\S/);\n if (indent === -1) continue;\n if (startIndent > indent) break;\n var subRange = this.getFoldWidgetRange(session, \"all\", row);\n\n if (subRange) {\n if (subRange.start.row <= startRow) {\n break;\n } else if (subRange.isMultiLine()) {\n row = subRange.end.row;\n } else if (startIndent == indent) {\n break;\n }\n }\n\n endRow = row;\n }\n\n return new Range(startRow, startColumn, endRow, session.getLine(endRow).length);\n };\n\n this.getCommentRegionBlock = function (session, line, row) {\n var startColumn = line.search(/\\s*$/);\n var maxRow = session.getLength();\n var startRow = row;\n var re = /^\\s*(?:\\/\\*|\\/\\/|--)#?(end)?region\\b/;\n var depth = 1;\n\n while (++row < maxRow) {\n line = session.getLine(row);\n var m = re.exec(line);\n if (!m) continue;\n if (m[1]) depth--;else depth++;\n if (!depth) break;\n }\n\n var endRow = row;\n\n if (endRow > startRow) {\n return new Range(startRow, startColumn, endRow, line.length);\n }\n };\n }).call(FoldMode.prototype);\n});\nace.define(\"ace/mode/json\", [\"require\", \"exports\", \"module\", \"ace/lib/oop\", \"ace/mode/text\", \"ace/mode/json_highlight_rules\", \"ace/mode/matching_brace_outdent\", \"ace/mode/behaviour/cstyle\", \"ace/mode/folding/cstyle\", \"ace/worker/worker_client\"], function (require, exports, module) {\n \"use strict\";\n\n var oop = require(\"../lib/oop\");\n\n var TextMode = require(\"./text\").Mode;\n\n var HighlightRules = require(\"./json_highlight_rules\").JsonHighlightRules;\n\n var MatchingBraceOutdent = require(\"./matching_brace_outdent\").MatchingBraceOutdent;\n\n var CstyleBehaviour = require(\"./behaviour/cstyle\").CstyleBehaviour;\n\n var CStyleFoldMode = require(\"./folding/cstyle\").FoldMode;\n\n var WorkerClient = require(\"../worker/worker_client\").WorkerClient;\n\n var Mode = function Mode() {\n this.HighlightRules = HighlightRules;\n this.$outdent = new MatchingBraceOutdent();\n this.$behaviour = new CstyleBehaviour();\n this.foldingRules = new CStyleFoldMode();\n };\n\n oop.inherits(Mode, TextMode);\n (function () {\n this.lineCommentStart = \"//\";\n this.blockComment = {\n start: \"/*\",\n end: \"*/\"\n };\n\n this.getNextLineIndent = function (state, line, tab) {\n var indent = this.$getIndent(line);\n\n if (state == \"start\") {\n var match = line.match(/^.*[\\{\\(\\[]\\s*$/);\n\n if (match) {\n indent += tab;\n }\n }\n\n return indent;\n };\n\n this.checkOutdent = function (state, line, input) {\n return this.$outdent.checkOutdent(line, input);\n };\n\n this.autoOutdent = function (state, doc, row) {\n this.$outdent.autoOutdent(doc, row);\n };\n\n this.createWorker = function (session) {\n var worker = new WorkerClient([\"ace\"], \"ace/mode/json_worker\", \"JsonWorker\");\n worker.attachToDocument(session.getDocument());\n worker.on(\"annotate\", function (e) {\n session.setAnnotations(e.data);\n });\n worker.on(\"terminate\", function () {\n session.clearAnnotations();\n });\n return worker;\n };\n\n this.$id = \"ace/mode/json\";\n }).call(Mode.prototype);\n exports.Mode = Mode;\n});\n\n(function () {\n ace.require([\"ace/mode/json\"], function (m) {\n if ((typeof module === \"undefined\" ? \"undefined\" : _typeof(module)) == \"object\" && (typeof exports === \"undefined\" ? \"undefined\" : _typeof(exports)) == \"object\" && module) {\n module.exports = m;\n }\n });\n})();","function _typeof(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\nace.define(\"ace/mode/doc_comment_highlight_rules\", [\"require\", \"exports\", \"module\", \"ace/lib/oop\", \"ace/mode/text_highlight_rules\"], function (require, exports, module) {\n \"use strict\";\n\n var oop = require(\"../lib/oop\");\n\n var TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\n\n var DocCommentHighlightRules = function DocCommentHighlightRules() {\n this.$rules = {\n \"start\": [{\n token: \"comment.doc.tag\",\n regex: \"@[\\\\w\\\\d_]+\" // TODO: fix email addresses\n\n }, DocCommentHighlightRules.getTagRule(), {\n defaultToken: \"comment.doc\",\n caseInsensitive: true\n }]\n };\n };\n\n oop.inherits(DocCommentHighlightRules, TextHighlightRules);\n\n DocCommentHighlightRules.getTagRule = function (start) {\n return {\n token: \"comment.doc.tag.storage.type\",\n regex: \"\\\\b(?:TODO|FIXME|XXX|HACK)\\\\b\"\n };\n };\n\n DocCommentHighlightRules.getStartRule = function (start) {\n return {\n token: \"comment.doc\",\n // doc comment\n regex: \"\\\\/\\\\*(?=\\\\*)\",\n next: start\n };\n };\n\n DocCommentHighlightRules.getEndRule = function (start) {\n return {\n token: \"comment.doc\",\n // closing comment\n regex: \"\\\\*\\\\/\",\n next: start\n };\n };\n\n exports.DocCommentHighlightRules = DocCommentHighlightRules;\n});\nace.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) {\n \"use strict\";\n\n var oop = require(\"../lib/oop\");\n\n var DocCommentHighlightRules = require(\"./doc_comment_highlight_rules\").DocCommentHighlightRules;\n\n var TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\n\n var identifierRe = \"[a-zA-Z\\\\$_\\xA1-\\uFFFF][a-zA-Z\\\\d\\\\$_\\xA1-\\uFFFF]*\";\n\n var JavaScriptHighlightRules = function JavaScriptHighlightRules(options) {\n var keywordMapper = this.createKeywordMapper({\n \"variable.language\": \"Array|Boolean|Date|Function|Iterator|Number|Object|RegExp|String|Proxy|\" + // Constructors\n \"Namespace|QName|XML|XMLList|\" + // E4X\n \"ArrayBuffer|Float32Array|Float64Array|Int16Array|Int32Array|Int8Array|\" + \"Uint16Array|Uint32Array|Uint8Array|Uint8ClampedArray|\" + \"Error|EvalError|InternalError|RangeError|ReferenceError|StopIteration|\" + // Errors\n \"SyntaxError|TypeError|URIError|\" + \"decodeURI|decodeURIComponent|encodeURI|encodeURIComponent|eval|isFinite|\" + // Non-constructor functions\n \"isNaN|parseFloat|parseInt|\" + \"JSON|Math|\" + // Other\n \"this|arguments|prototype|window|document\",\n // Pseudo\n \"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\",\n \"storage.type\": \"const|let|var|function\",\n \"constant.language\": \"null|Infinity|NaN|undefined\",\n \"support.function\": \"alert\",\n \"constant.language.boolean\": \"true|false\"\n }, \"identifier\");\n var kwBeforeRe = \"case|do|else|finally|in|instanceof|return|throw|try|typeof|yield|void\";\n var escapedRe = \"\\\\\\\\(?:x[0-9a-fA-F]{2}|\" + // hex\n \"u[0-9a-fA-F]{4}|\" + // unicode\n \"u{[0-9a-fA-F]{1,6}}|\" + // es6 unicode\n \"[0-2][0-7]{0,2}|\" + // oct\n \"3[0-7][0-7]?|\" + // oct\n \"[4-7][0-7]?|\" + //oct\n \".)\";\n this.$rules = {\n \"no_regex\": [DocCommentHighlightRules.getStartRule(\"doc-start\"), comments(\"no_regex\"), {\n token: \"string\",\n regex: \"'(?=.)\",\n next: \"qstring\"\n }, {\n token: \"string\",\n regex: '\"(?=.)',\n next: \"qqstring\"\n }, {\n token: \"constant.numeric\",\n // hexadecimal, octal and binary\n regex: /0(?:[xX][0-9a-fA-F]+|[oO][0-7]+|[bB][01]+)\\b/\n }, {\n token: \"constant.numeric\",\n // decimal integers and floats\n regex: /(?:\\d\\d*(?:\\.\\d*)?|\\.\\d+)(?:[eE][+-]?\\d+\\b)?/\n }, {\n token: [\"storage.type\", \"punctuation.operator\", \"support.function\", \"punctuation.operator\", \"entity.name.function\", \"text\", \"keyword.operator\"],\n regex: \"(\" + identifierRe + \")(\\\\.)(prototype)(\\\\.)(\" + identifierRe + \")(\\\\s*)(=)\",\n next: \"function_arguments\"\n }, {\n token: [\"storage.type\", \"punctuation.operator\", \"entity.name.function\", \"text\", \"keyword.operator\", \"text\", \"storage.type\", \"text\", \"paren.lparen\"],\n regex: \"(\" + identifierRe + \")(\\\\.)(\" + identifierRe + \")(\\\\s*)(=)(\\\\s*)(function)(\\\\s*)(\\\\()\",\n next: \"function_arguments\"\n }, {\n token: [\"entity.name.function\", \"text\", \"keyword.operator\", \"text\", \"storage.type\", \"text\", \"paren.lparen\"],\n regex: \"(\" + identifierRe + \")(\\\\s*)(=)(\\\\s*)(function)(\\\\s*)(\\\\()\",\n next: \"function_arguments\"\n }, {\n token: [\"storage.type\", \"punctuation.operator\", \"entity.name.function\", \"text\", \"keyword.operator\", \"text\", \"storage.type\", \"text\", \"entity.name.function\", \"text\", \"paren.lparen\"],\n regex: \"(\" + identifierRe + \")(\\\\.)(\" + identifierRe + \")(\\\\s*)(=)(\\\\s*)(function)(\\\\s+)(\\\\w+)(\\\\s*)(\\\\()\",\n next: \"function_arguments\"\n }, {\n token: [\"storage.type\", \"text\", \"entity.name.function\", \"text\", \"paren.lparen\"],\n regex: \"(function)(\\\\s+)(\" + identifierRe + \")(\\\\s*)(\\\\()\",\n next: \"function_arguments\"\n }, {\n token: [\"entity.name.function\", \"text\", \"punctuation.operator\", \"text\", \"storage.type\", \"text\", \"paren.lparen\"],\n regex: \"(\" + identifierRe + \")(\\\\s*)(:)(\\\\s*)(function)(\\\\s*)(\\\\()\",\n next: \"function_arguments\"\n }, {\n token: [\"text\", \"text\", \"storage.type\", \"text\", \"paren.lparen\"],\n regex: \"(:)(\\\\s*)(function)(\\\\s*)(\\\\()\",\n next: \"function_arguments\"\n }, {\n token: \"keyword\",\n regex: \"from(?=\\\\s*('|\\\"))\"\n }, {\n token: \"keyword\",\n regex: \"(?:\" + kwBeforeRe + \")\\\\b\",\n next: \"start\"\n }, {\n token: [\"support.constant\"],\n regex: /that\\b/\n }, {\n token: [\"storage.type\", \"punctuation.operator\", \"support.function.firebug\"],\n regex: /(console)(\\.)(warn|info|log|error|time|trace|timeEnd|assert)\\b/\n }, {\n token: keywordMapper,\n regex: identifierRe\n }, {\n token: \"punctuation.operator\",\n regex: /[.](?![.])/,\n next: \"property\"\n }, {\n token: \"storage.type\",\n regex: /=>/,\n next: \"start\"\n }, {\n token: \"keyword.operator\",\n regex: /--|\\+\\+|\\.{3}|===|==|=|!=|!==|<+=?|>+=?|!|&&|\\|\\||\\?:|[!$%&*+\\-~\\/^]=?/,\n next: \"start\"\n }, {\n token: \"punctuation.operator\",\n regex: /[?:,;.]/,\n next: \"start\"\n }, {\n token: \"paren.lparen\",\n regex: /[\\[({]/,\n next: \"start\"\n }, {\n token: \"paren.rparen\",\n regex: /[\\])}]/\n }, {\n token: \"comment\",\n regex: /^#!.*$/\n }],\n property: [{\n token: \"text\",\n regex: \"\\\\s+\"\n }, {\n token: [\"storage.type\", \"punctuation.operator\", \"entity.name.function\", \"text\", \"keyword.operator\", \"text\", \"storage.type\", \"text\", \"entity.name.function\", \"text\", \"paren.lparen\"],\n regex: \"(\" + identifierRe + \")(\\\\.)(\" + identifierRe + \")(\\\\s*)(=)(\\\\s*)(function)(?:(\\\\s+)(\\\\w+))?(\\\\s*)(\\\\()\",\n next: \"function_arguments\"\n }, {\n token: \"punctuation.operator\",\n regex: /[.](?![.])/\n }, {\n token: \"support.function\",\n 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(?=\\()/\n }, {\n token: \"support.function.dom\",\n 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(?=\\()/\n }, {\n token: \"support.constant\",\n 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/\n }, {\n token: \"identifier\",\n regex: identifierRe\n }, {\n regex: \"\",\n token: \"empty\",\n next: \"no_regex\"\n }],\n \"start\": [DocCommentHighlightRules.getStartRule(\"doc-start\"), comments(\"start\"), {\n token: \"string.regexp\",\n regex: \"\\\\/\",\n next: \"regex\"\n }, {\n token: \"text\",\n regex: \"\\\\s+|^$\",\n next: \"start\"\n }, {\n token: \"empty\",\n regex: \"\",\n next: \"no_regex\"\n }],\n \"regex\": [{\n token: \"regexp.keyword.operator\",\n regex: \"\\\\\\\\(?:u[\\\\da-fA-F]{4}|x[\\\\da-fA-F]{2}|.)\"\n }, {\n token: \"string.regexp\",\n regex: \"/[sxngimy]*\",\n next: \"no_regex\"\n }, {\n token: \"invalid\",\n regex: /\\{\\d+\\b,?\\d*\\}[+*]|[+*$^?][+*]|[$^][?]|\\?{3,}/\n }, {\n token: \"constant.language.escape\",\n regex: /\\(\\?[:=!]|\\)|\\{\\d+\\b,?\\d*\\}|[+*]\\?|[()$^+*?.]/\n }, {\n token: \"constant.language.delimiter\",\n regex: /\\|/\n }, {\n token: \"constant.language.escape\",\n regex: /\\[\\^?/,\n next: \"regex_character_class\"\n }, {\n token: \"empty\",\n regex: \"$\",\n next: \"no_regex\"\n }, {\n defaultToken: \"string.regexp\"\n }],\n \"regex_character_class\": [{\n token: \"regexp.charclass.keyword.operator\",\n regex: \"\\\\\\\\(?:u[\\\\da-fA-F]{4}|x[\\\\da-fA-F]{2}|.)\"\n }, {\n token: \"constant.language.escape\",\n regex: \"]\",\n next: \"regex\"\n }, {\n token: \"constant.language.escape\",\n regex: \"-\"\n }, {\n token: \"empty\",\n regex: \"$\",\n next: \"no_regex\"\n }, {\n defaultToken: \"string.regexp.charachterclass\"\n }],\n \"function_arguments\": [{\n token: \"variable.parameter\",\n regex: identifierRe\n }, {\n token: \"punctuation.operator\",\n regex: \"[, ]+\"\n }, {\n token: \"punctuation.operator\",\n regex: \"$\"\n }, {\n token: \"empty\",\n regex: \"\",\n next: \"no_regex\"\n }],\n \"qqstring\": [{\n token: \"constant.language.escape\",\n regex: escapedRe\n }, {\n token: \"string\",\n regex: \"\\\\\\\\$\",\n consumeLineEnd: true\n }, {\n token: \"string\",\n regex: '\"|$',\n next: \"no_regex\"\n }, {\n defaultToken: \"string\"\n }],\n \"qstring\": [{\n token: \"constant.language.escape\",\n regex: escapedRe\n }, {\n token: \"string\",\n regex: \"\\\\\\\\$\",\n consumeLineEnd: true\n }, {\n token: \"string\",\n regex: \"'|$\",\n next: \"no_regex\"\n }, {\n defaultToken: \"string\"\n }]\n };\n\n if (!options || !options.noES6) {\n this.$rules.no_regex.unshift({\n regex: \"[{}]\",\n onMatch: function onMatch(val, state, stack) {\n this.next = val == \"{\" ? this.nextState : \"\";\n\n if (val == \"{\" && stack.length) {\n stack.unshift(\"start\", state);\n } else if (val == \"}\" && stack.length) {\n stack.shift();\n this.next = stack.shift();\n if (this.next.indexOf(\"string\") != -1 || this.next.indexOf(\"jsx\") != -1) return \"paren.quasi.end\";\n }\n\n return val == \"{\" ? \"paren.lparen\" : \"paren.rparen\";\n },\n nextState: \"start\"\n }, {\n token: \"string.quasi.start\",\n regex: /`/,\n push: [{\n token: \"constant.language.escape\",\n regex: escapedRe\n }, {\n token: \"paren.quasi.start\",\n regex: /\\${/,\n push: \"start\"\n }, {\n token: \"string.quasi.end\",\n regex: /`/,\n next: \"pop\"\n }, {\n defaultToken: \"string.quasi\"\n }]\n });\n if (!options || options.jsx != false) JSX.call(this);\n }\n\n this.embedRules(DocCommentHighlightRules, \"doc-\", [DocCommentHighlightRules.getEndRule(\"no_regex\")]);\n this.normalizeRules();\n };\n\n oop.inherits(JavaScriptHighlightRules, TextHighlightRules);\n\n function JSX() {\n var tagRegex = identifierRe.replace(\"\\\\d\", \"\\\\d\\\\-\");\n var jsxTag = {\n onMatch: function onMatch(val, state, stack) {\n var offset = val.charAt(1) == \"/\" ? 2 : 1;\n\n if (offset == 1) {\n if (state != this.nextState) stack.unshift(this.next, this.nextState, 0);else stack.unshift(this.next);\n stack[2]++;\n } else if (offset == 2) {\n if (state == this.nextState) {\n stack[1]--;\n\n if (!stack[1] || stack[1] < 0) {\n stack.shift();\n stack.shift();\n }\n }\n }\n\n return [{\n type: \"meta.tag.punctuation.\" + (offset == 1 ? \"\" : \"end-\") + \"tag-open.xml\",\n value: val.slice(0, offset)\n }, {\n type: \"meta.tag.tag-name.xml\",\n value: val.substr(offset)\n }];\n },\n regex: \"\",\n onMatch: function onMatch(value, currentState, stack) {\n if (currentState == stack[0]) stack.shift();\n\n if (value.length == 2) {\n if (stack[0] == this.nextState) stack[1]--;\n\n if (!stack[1] || stack[1] < 0) {\n stack.splice(0, 2);\n }\n }\n\n this.next = stack[0] || \"start\";\n return [{\n type: this.token,\n value: value\n }];\n },\n nextState: \"jsx\"\n }, jsxJsRule, comments(\"jsxAttributes\"), {\n token: \"entity.other.attribute-name.xml\",\n regex: tagRegex\n }, {\n token: \"keyword.operator.attribute-equals.xml\",\n regex: \"=\"\n }, {\n token: \"text.tag-whitespace.xml\",\n regex: \"\\\\s+\"\n }, {\n token: \"string.attribute-value.xml\",\n regex: \"'\",\n stateName: \"jsx_attr_q\",\n push: [{\n token: \"string.attribute-value.xml\",\n regex: \"'\",\n next: \"pop\"\n }, {\n include: \"reference\"\n }, {\n defaultToken: \"string.attribute-value.xml\"\n }]\n }, {\n token: \"string.attribute-value.xml\",\n regex: '\"',\n stateName: \"jsx_attr_qq\",\n push: [{\n token: \"string.attribute-value.xml\",\n regex: '\"',\n next: \"pop\"\n }, {\n include: \"reference\"\n }, {\n defaultToken: \"string.attribute-value.xml\"\n }]\n }, jsxTag];\n this.$rules.reference = [{\n token: \"constant.language.escape.reference.xml\",\n regex: \"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\\\.-]+;)\"\n }];\n }\n\n function comments(next) {\n return [{\n token: \"comment\",\n // multi line comment\n regex: /\\/\\*/,\n next: [DocCommentHighlightRules.getTagRule(), {\n token: \"comment\",\n regex: \"\\\\*\\\\/\",\n next: next || \"pop\"\n }, {\n defaultToken: \"comment\",\n caseInsensitive: true\n }]\n }, {\n token: \"comment\",\n regex: \"\\\\/\\\\/\",\n next: [DocCommentHighlightRules.getTagRule(), {\n token: \"comment\",\n regex: \"$|^\",\n next: next || \"pop\"\n }, {\n defaultToken: \"comment\",\n caseInsensitive: true\n }]\n }];\n }\n\n exports.JavaScriptHighlightRules = JavaScriptHighlightRules;\n});\nace.define(\"ace/mode/matching_brace_outdent\", [\"require\", \"exports\", \"module\", \"ace/range\"], function (require, exports, module) {\n \"use strict\";\n\n var Range = require(\"../range\").Range;\n\n var MatchingBraceOutdent = function MatchingBraceOutdent() {};\n\n (function () {\n this.checkOutdent = function (line, input) {\n if (!/^\\s+$/.test(line)) return false;\n return /^\\s*\\}/.test(input);\n };\n\n this.autoOutdent = function (doc, row) {\n var line = doc.getLine(row);\n var match = line.match(/^(\\s*\\})/);\n if (!match) return 0;\n var column = match[1].length;\n var openBracePos = doc.findMatchingBracket({\n row: row,\n column: column\n });\n if (!openBracePos || openBracePos.row == row) return 0;\n var indent = this.$getIndent(doc.getLine(openBracePos.row));\n doc.replace(new Range(row, 0, row, column - 1), indent);\n };\n\n this.$getIndent = function (line) {\n return line.match(/^\\s*/)[0];\n };\n }).call(MatchingBraceOutdent.prototype);\n exports.MatchingBraceOutdent = MatchingBraceOutdent;\n});\nace.define(\"ace/mode/folding/cstyle\", [\"require\", \"exports\", \"module\", \"ace/lib/oop\", \"ace/range\", \"ace/mode/folding/fold_mode\"], function (require, exports, module) {\n \"use strict\";\n\n var oop = require(\"../../lib/oop\");\n\n var Range = require(\"../../range\").Range;\n\n var BaseFoldMode = require(\"./fold_mode\").FoldMode;\n\n var FoldMode = exports.FoldMode = function (commentRegex) {\n if (commentRegex) {\n this.foldingStartMarker = new RegExp(this.foldingStartMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.start));\n this.foldingStopMarker = new RegExp(this.foldingStopMarker.source.replace(/\\|[^|]*?$/, \"|\" + commentRegex.end));\n }\n };\n\n oop.inherits(FoldMode, BaseFoldMode);\n (function () {\n this.foldingStartMarker = /([\\{\\[\\(])[^\\}\\]\\)]*$|^\\s*(\\/\\*)/;\n this.foldingStopMarker = /^[^\\[\\{\\(]*([\\}\\]\\)])|^[\\s\\*]*(\\*\\/)/;\n this.singleLineBlockCommentRe = /^\\s*(\\/\\*).*\\*\\/\\s*$/;\n this.tripleStarBlockCommentRe = /^\\s*(\\/\\*\\*\\*).*\\*\\/\\s*$/;\n this.startRegionRe = /^\\s*(\\/\\*|\\/\\/)#?region\\b/;\n this._getFoldWidgetBase = this.getFoldWidget;\n\n this.getFoldWidget = function (session, foldStyle, row) {\n var line = session.getLine(row);\n\n if (this.singleLineBlockCommentRe.test(line)) {\n if (!this.startRegionRe.test(line) && !this.tripleStarBlockCommentRe.test(line)) return \"\";\n }\n\n var fw = this._getFoldWidgetBase(session, foldStyle, row);\n\n if (!fw && this.startRegionRe.test(line)) return \"start\"; // lineCommentRegionStart\n\n return fw;\n };\n\n this.getFoldWidgetRange = function (session, foldStyle, row, forceMultiline) {\n var line = session.getLine(row);\n if (this.startRegionRe.test(line)) return this.getCommentRegionBlock(session, line, row);\n var match = line.match(this.foldingStartMarker);\n\n if (match) {\n var i = match.index;\n if (match[1]) return this.openingBracketBlock(session, match[1], row, i);\n var range = session.getCommentFoldRange(row, i + match[0].length, 1);\n\n if (range && !range.isMultiLine()) {\n if (forceMultiline) {\n range = this.getSectionRange(session, row);\n } else if (foldStyle != \"all\") range = null;\n }\n\n return range;\n }\n\n if (foldStyle === \"markbegin\") return;\n var match = line.match(this.foldingStopMarker);\n\n if (match) {\n var i = match.index + match[0].length;\n if (match[1]) return this.closingBracketBlock(session, match[1], row, i);\n return session.getCommentFoldRange(row, i, -1);\n }\n };\n\n this.getSectionRange = function (session, row) {\n var line = session.getLine(row);\n var startIndent = line.search(/\\S/);\n var startRow = row;\n var startColumn = line.length;\n row = row + 1;\n var endRow = row;\n var maxRow = session.getLength();\n\n while (++row < maxRow) {\n line = session.getLine(row);\n var indent = line.search(/\\S/);\n if (indent === -1) continue;\n if (startIndent > indent) break;\n var subRange = this.getFoldWidgetRange(session, \"all\", row);\n\n if (subRange) {\n if (subRange.start.row <= startRow) {\n break;\n } else if (subRange.isMultiLine()) {\n row = subRange.end.row;\n } else if (startIndent == indent) {\n break;\n }\n }\n\n endRow = row;\n }\n\n return new Range(startRow, startColumn, endRow, session.getLine(endRow).length);\n };\n\n this.getCommentRegionBlock = function (session, line, row) {\n var startColumn = line.search(/\\s*$/);\n var maxRow = session.getLength();\n var startRow = row;\n var re = /^\\s*(?:\\/\\*|\\/\\/|--)#?(end)?region\\b/;\n var depth = 1;\n\n while (++row < maxRow) {\n line = session.getLine(row);\n var m = re.exec(line);\n if (!m) continue;\n if (m[1]) depth--;else depth++;\n if (!depth) break;\n }\n\n var endRow = row;\n\n if (endRow > startRow) {\n return new Range(startRow, startColumn, endRow, line.length);\n }\n };\n }).call(FoldMode.prototype);\n});\nace.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) {\n \"use strict\";\n\n var oop = require(\"../lib/oop\");\n\n var TextMode = require(\"./text\").Mode;\n\n var JavaScriptHighlightRules = require(\"./javascript_highlight_rules\").JavaScriptHighlightRules;\n\n var MatchingBraceOutdent = require(\"./matching_brace_outdent\").MatchingBraceOutdent;\n\n var WorkerClient = require(\"../worker/worker_client\").WorkerClient;\n\n var CstyleBehaviour = require(\"./behaviour/cstyle\").CstyleBehaviour;\n\n var CStyleFoldMode = require(\"./folding/cstyle\").FoldMode;\n\n var Mode = function Mode() {\n this.HighlightRules = JavaScriptHighlightRules;\n this.$outdent = new MatchingBraceOutdent();\n this.$behaviour = new CstyleBehaviour();\n this.foldingRules = new CStyleFoldMode();\n };\n\n oop.inherits(Mode, TextMode);\n (function () {\n this.lineCommentStart = \"//\";\n this.blockComment = {\n start: \"/*\",\n end: \"*/\"\n };\n this.$quotes = {\n '\"': '\"',\n \"'\": \"'\",\n \"`\": \"`\"\n };\n\n this.getNextLineIndent = function (state, line, tab) {\n var indent = this.$getIndent(line);\n var tokenizedLine = this.getTokenizer().getLineTokens(line, state);\n var tokens = tokenizedLine.tokens;\n var endState = tokenizedLine.state;\n\n if (tokens.length && tokens[tokens.length - 1].type == \"comment\") {\n return indent;\n }\n\n if (state == \"start\" || state == \"no_regex\") {\n var match = line.match(/^.*(?:\\bcase\\b.*:|[\\{\\(\\[])\\s*$/);\n\n if (match) {\n indent += tab;\n }\n } else if (state == \"doc-start\") {\n if (endState == \"start\" || endState == \"no_regex\") {\n return \"\";\n }\n\n var match = line.match(/^\\s*(\\/?)\\*/);\n\n if (match) {\n if (match[1]) {\n indent += \" \";\n }\n\n indent += \"* \";\n }\n }\n\n return indent;\n };\n\n this.checkOutdent = function (state, line, input) {\n return this.$outdent.checkOutdent(line, input);\n };\n\n this.autoOutdent = function (state, doc, row) {\n this.$outdent.autoOutdent(doc, row);\n };\n\n this.createWorker = function (session) {\n var worker = new WorkerClient([\"ace\"], \"ace/mode/javascript_worker\", \"JavaScriptWorker\");\n worker.attachToDocument(session.getDocument());\n worker.on(\"annotate\", function (results) {\n session.setAnnotations(results.data);\n });\n worker.on(\"terminate\", function () {\n session.clearAnnotations();\n });\n return worker;\n };\n\n this.$id = \"ace/mode/javascript\";\n this.snippetFileId = \"ace/snippets/javascript\";\n }).call(Mode.prototype);\n exports.Mode = Mode;\n});\nace.define(\"ace/mode/css_highlight_rules\", [\"require\", \"exports\", \"module\", \"ace/lib/oop\", \"ace/lib/lang\", \"ace/mode/text_highlight_rules\"], function (require, exports, module) {\n \"use strict\";\n\n var oop = require(\"../lib/oop\");\n\n var lang = require(\"../lib/lang\");\n\n var TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\n\n 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\";\n var supportFunction = exports.supportFunction = \"rgb|rgba|url|attr|counter|counters\";\n 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\";\n 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\";\n 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\";\n var numRe = exports.numRe = \"\\\\-?(?:(?:[0-9]+(?:\\\\.[0-9]+)?)|(?:\\\\.[0-9]+))\";\n var pseudoElements = exports.pseudoElements = \"(\\\\:+)\\\\b(after|before|first-letter|first-line|moz-selection|selection)\\\\b\";\n 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\";\n\n var CssHighlightRules = function CssHighlightRules() {\n var keywordMapper = this.createKeywordMapper({\n \"support.function\": supportFunction,\n \"support.constant\": supportConstant,\n \"support.type\": supportType,\n \"support.constant.color\": supportConstantColor,\n \"support.constant.fonts\": supportConstantFonts\n }, \"text\", true);\n this.$rules = {\n \"start\": [{\n include: [\"strings\", \"url\", \"comments\"]\n }, {\n token: \"paren.lparen\",\n regex: \"\\\\{\",\n next: \"ruleset\"\n }, {\n token: \"paren.rparen\",\n regex: \"\\\\}\"\n }, {\n token: \"string\",\n regex: \"@(?!viewport)\",\n next: \"media\"\n }, {\n token: \"keyword\",\n regex: \"#[a-z0-9-_]+\"\n }, {\n token: \"keyword\",\n regex: \"%\"\n }, {\n token: \"variable\",\n regex: \"\\\\.[a-z0-9-_]+\"\n }, {\n token: \"string\",\n regex: \":[a-z0-9-_]+\"\n }, {\n token: \"constant.numeric\",\n regex: numRe\n }, {\n token: \"constant\",\n regex: \"[a-z0-9-_]+\"\n }, {\n caseInsensitive: true\n }],\n \"media\": [{\n include: [\"strings\", \"url\", \"comments\"]\n }, {\n token: \"paren.lparen\",\n regex: \"\\\\{\",\n next: \"start\"\n }, {\n token: \"paren.rparen\",\n regex: \"\\\\}\",\n next: \"start\"\n }, {\n token: \"string\",\n regex: \";\",\n next: \"start\"\n }, {\n token: \"keyword\",\n 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)\"\n }],\n \"comments\": [{\n token: \"comment\",\n // multi line comment\n regex: \"\\\\/\\\\*\",\n push: [{\n token: \"comment\",\n regex: \"\\\\*\\\\/\",\n next: \"pop\"\n }, {\n defaultToken: \"comment\"\n }]\n }],\n \"ruleset\": [{\n regex: \"-(webkit|ms|moz|o)-\",\n token: \"text\"\n }, {\n token: \"punctuation.operator\",\n regex: \"[:;]\"\n }, {\n token: \"paren.rparen\",\n regex: \"\\\\}\",\n next: \"start\"\n }, {\n include: [\"strings\", \"url\", \"comments\"]\n }, {\n token: [\"constant.numeric\", \"keyword\"],\n 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|%)\"\n }, {\n token: \"constant.numeric\",\n regex: numRe\n }, {\n token: \"constant.numeric\",\n // hex6 color\n regex: \"#[a-f0-9]{6}\"\n }, {\n token: \"constant.numeric\",\n // hex3 color\n regex: \"#[a-f0-9]{3}\"\n }, {\n token: [\"punctuation\", \"entity.other.attribute-name.pseudo-element.css\"],\n regex: pseudoElements\n }, {\n token: [\"punctuation\", \"entity.other.attribute-name.pseudo-class.css\"],\n regex: pseudoClasses\n }, {\n include: \"url\"\n }, {\n token: keywordMapper,\n regex: \"\\\\-?[a-zA-Z_][a-zA-Z0-9_\\\\-]*\"\n }, {\n caseInsensitive: true\n }],\n url: [{\n token: \"support.function\",\n regex: \"(?:url(:?-prefix)?|domain|regexp)\\\\(\",\n push: [{\n token: \"support.function\",\n regex: \"\\\\)\",\n next: \"pop\"\n }, {\n defaultToken: \"string\"\n }]\n }],\n strings: [{\n token: \"string.start\",\n regex: \"'\",\n push: [{\n token: \"string.end\",\n regex: \"'|$\",\n next: \"pop\"\n }, {\n include: \"escapes\"\n }, {\n token: \"constant.language.escape\",\n regex: /\\\\$/,\n consumeLineEnd: true\n }, {\n defaultToken: \"string\"\n }]\n }, {\n token: \"string.start\",\n regex: '\"',\n push: [{\n token: \"string.end\",\n regex: '\"|$',\n next: \"pop\"\n }, {\n include: \"escapes\"\n }, {\n token: \"constant.language.escape\",\n regex: /\\\\$/,\n consumeLineEnd: true\n }, {\n defaultToken: \"string\"\n }]\n }],\n escapes: [{\n token: \"constant.language.escape\",\n regex: /\\\\([a-fA-F\\d]{1,6}|[^a-fA-F\\d])/\n }]\n };\n this.normalizeRules();\n };\n\n oop.inherits(CssHighlightRules, TextHighlightRules);\n exports.CssHighlightRules = CssHighlightRules;\n});\nace.define(\"ace/mode/css_completions\", [\"require\", \"exports\", \"module\"], function (require, exports, module) {\n \"use strict\";\n\n var propertyMap = {\n \"background\": {\n \"#$0\": 1\n },\n \"background-color\": {\n \"#$0\": 1,\n \"transparent\": 1,\n \"fixed\": 1\n },\n \"background-image\": {\n \"url('/$0')\": 1\n },\n \"background-repeat\": {\n \"repeat\": 1,\n \"repeat-x\": 1,\n \"repeat-y\": 1,\n \"no-repeat\": 1,\n \"inherit\": 1\n },\n \"background-position\": {\n \"bottom\": 2,\n \"center\": 2,\n \"left\": 2,\n \"right\": 2,\n \"top\": 2,\n \"inherit\": 2\n },\n \"background-attachment\": {\n \"scroll\": 1,\n \"fixed\": 1\n },\n \"background-size\": {\n \"cover\": 1,\n \"contain\": 1\n },\n \"background-clip\": {\n \"border-box\": 1,\n \"padding-box\": 1,\n \"content-box\": 1\n },\n \"background-origin\": {\n \"border-box\": 1,\n \"padding-box\": 1,\n \"content-box\": 1\n },\n \"border\": {\n \"solid $0\": 1,\n \"dashed $0\": 1,\n \"dotted $0\": 1,\n \"#$0\": 1\n },\n \"border-color\": {\n \"#$0\": 1\n },\n \"border-style\": {\n \"solid\": 2,\n \"dashed\": 2,\n \"dotted\": 2,\n \"double\": 2,\n \"groove\": 2,\n \"hidden\": 2,\n \"inherit\": 2,\n \"inset\": 2,\n \"none\": 2,\n \"outset\": 2,\n \"ridged\": 2\n },\n \"border-collapse\": {\n \"collapse\": 1,\n \"separate\": 1\n },\n \"bottom\": {\n \"px\": 1,\n \"em\": 1,\n \"%\": 1\n },\n \"clear\": {\n \"left\": 1,\n \"right\": 1,\n \"both\": 1,\n \"none\": 1\n },\n \"color\": {\n \"#$0\": 1,\n \"rgb(#$00,0,0)\": 1\n },\n \"cursor\": {\n \"default\": 1,\n \"pointer\": 1,\n \"move\": 1,\n \"text\": 1,\n \"wait\": 1,\n \"help\": 1,\n \"progress\": 1,\n \"n-resize\": 1,\n \"ne-resize\": 1,\n \"e-resize\": 1,\n \"se-resize\": 1,\n \"s-resize\": 1,\n \"sw-resize\": 1,\n \"w-resize\": 1,\n \"nw-resize\": 1\n },\n \"display\": {\n \"none\": 1,\n \"block\": 1,\n \"inline\": 1,\n \"inline-block\": 1,\n \"table-cell\": 1\n },\n \"empty-cells\": {\n \"show\": 1,\n \"hide\": 1\n },\n \"float\": {\n \"left\": 1,\n \"right\": 1,\n \"none\": 1\n },\n \"font-family\": {\n \"Arial\": 2,\n \"Comic Sans MS\": 2,\n \"Consolas\": 2,\n \"Courier New\": 2,\n \"Courier\": 2,\n \"Georgia\": 2,\n \"Monospace\": 2,\n \"Sans-Serif\": 2,\n \"Segoe UI\": 2,\n \"Tahoma\": 2,\n \"Times New Roman\": 2,\n \"Trebuchet MS\": 2,\n \"Verdana\": 1\n },\n \"font-size\": {\n \"px\": 1,\n \"em\": 1,\n \"%\": 1\n },\n \"font-weight\": {\n \"bold\": 1,\n \"normal\": 1\n },\n \"font-style\": {\n \"italic\": 1,\n \"normal\": 1\n },\n \"font-variant\": {\n \"normal\": 1,\n \"small-caps\": 1\n },\n \"height\": {\n \"px\": 1,\n \"em\": 1,\n \"%\": 1\n },\n \"left\": {\n \"px\": 1,\n \"em\": 1,\n \"%\": 1\n },\n \"letter-spacing\": {\n \"normal\": 1\n },\n \"line-height\": {\n \"normal\": 1\n },\n \"list-style-type\": {\n \"none\": 1,\n \"disc\": 1,\n \"circle\": 1,\n \"square\": 1,\n \"decimal\": 1,\n \"decimal-leading-zero\": 1,\n \"lower-roman\": 1,\n \"upper-roman\": 1,\n \"lower-greek\": 1,\n \"lower-latin\": 1,\n \"upper-latin\": 1,\n \"georgian\": 1,\n \"lower-alpha\": 1,\n \"upper-alpha\": 1\n },\n \"margin\": {\n \"px\": 1,\n \"em\": 1,\n \"%\": 1\n },\n \"margin-right\": {\n \"px\": 1,\n \"em\": 1,\n \"%\": 1\n },\n \"margin-left\": {\n \"px\": 1,\n \"em\": 1,\n \"%\": 1\n },\n \"margin-top\": {\n \"px\": 1,\n \"em\": 1,\n \"%\": 1\n },\n \"margin-bottom\": {\n \"px\": 1,\n \"em\": 1,\n \"%\": 1\n },\n \"max-height\": {\n \"px\": 1,\n \"em\": 1,\n \"%\": 1\n },\n \"max-width\": {\n \"px\": 1,\n \"em\": 1,\n \"%\": 1\n },\n \"min-height\": {\n \"px\": 1,\n \"em\": 1,\n \"%\": 1\n },\n \"min-width\": {\n \"px\": 1,\n \"em\": 1,\n \"%\": 1\n },\n \"overflow\": {\n \"hidden\": 1,\n \"visible\": 1,\n \"auto\": 1,\n \"scroll\": 1\n },\n \"overflow-x\": {\n \"hidden\": 1,\n \"visible\": 1,\n \"auto\": 1,\n \"scroll\": 1\n },\n \"overflow-y\": {\n \"hidden\": 1,\n \"visible\": 1,\n \"auto\": 1,\n \"scroll\": 1\n },\n \"padding\": {\n \"px\": 1,\n \"em\": 1,\n \"%\": 1\n },\n \"padding-top\": {\n \"px\": 1,\n \"em\": 1,\n \"%\": 1\n },\n \"padding-right\": {\n \"px\": 1,\n \"em\": 1,\n \"%\": 1\n },\n \"padding-bottom\": {\n \"px\": 1,\n \"em\": 1,\n \"%\": 1\n },\n \"padding-left\": {\n \"px\": 1,\n \"em\": 1,\n \"%\": 1\n },\n \"page-break-after\": {\n \"auto\": 1,\n \"always\": 1,\n \"avoid\": 1,\n \"left\": 1,\n \"right\": 1\n },\n \"page-break-before\": {\n \"auto\": 1,\n \"always\": 1,\n \"avoid\": 1,\n \"left\": 1,\n \"right\": 1\n },\n \"position\": {\n \"absolute\": 1,\n \"relative\": 1,\n \"fixed\": 1,\n \"static\": 1\n },\n \"right\": {\n \"px\": 1,\n \"em\": 1,\n \"%\": 1\n },\n \"table-layout\": {\n \"fixed\": 1,\n \"auto\": 1\n },\n \"text-decoration\": {\n \"none\": 1,\n \"underline\": 1,\n \"line-through\": 1,\n \"blink\": 1\n },\n \"text-align\": {\n \"left\": 1,\n \"right\": 1,\n \"center\": 1,\n \"justify\": 1\n },\n \"text-transform\": {\n \"capitalize\": 1,\n \"uppercase\": 1,\n \"lowercase\": 1,\n \"none\": 1\n },\n \"top\": {\n \"px\": 1,\n \"em\": 1,\n \"%\": 1\n },\n \"vertical-align\": {\n \"top\": 1,\n \"bottom\": 1\n },\n \"visibility\": {\n \"hidden\": 1,\n \"visible\": 1\n },\n \"white-space\": {\n \"nowrap\": 1,\n \"normal\": 1,\n \"pre\": 1,\n \"pre-line\": 1,\n \"pre-wrap\": 1\n },\n \"width\": {\n \"px\": 1,\n \"em\": 1,\n \"%\": 1\n },\n \"word-spacing\": {\n \"normal\": 1\n },\n \"filter\": {\n \"alpha(opacity=$0100)\": 1\n },\n \"text-shadow\": {\n \"$02px 2px 2px #777\": 1\n },\n \"text-overflow\": {\n \"ellipsis-word\": 1,\n \"clip\": 1,\n \"ellipsis\": 1\n },\n \"-moz-border-radius\": 1,\n \"-moz-border-radius-topright\": 1,\n \"-moz-border-radius-bottomright\": 1,\n \"-moz-border-radius-topleft\": 1,\n \"-moz-border-radius-bottomleft\": 1,\n \"-webkit-border-radius\": 1,\n \"-webkit-border-top-right-radius\": 1,\n \"-webkit-border-top-left-radius\": 1,\n \"-webkit-border-bottom-right-radius\": 1,\n \"-webkit-border-bottom-left-radius\": 1,\n \"-moz-box-shadow\": 1,\n \"-webkit-box-shadow\": 1,\n \"transform\": {\n \"rotate($00deg)\": 1,\n \"skew($00deg)\": 1\n },\n \"-moz-transform\": {\n \"rotate($00deg)\": 1,\n \"skew($00deg)\": 1\n },\n \"-webkit-transform\": {\n \"rotate($00deg)\": 1,\n \"skew($00deg)\": 1\n }\n };\n\n var CssCompletions = function CssCompletions() {};\n\n (function () {\n this.completionsDefined = false;\n\n this.defineCompletions = function () {\n if (document) {\n var style = document.createElement('c').style;\n\n for (var i in style) {\n if (typeof style[i] !== 'string') continue;\n var name = i.replace(/[A-Z]/g, function (x) {\n return '-' + x.toLowerCase();\n });\n if (!propertyMap.hasOwnProperty(name)) propertyMap[name] = 1;\n }\n }\n\n this.completionsDefined = true;\n };\n\n this.getCompletions = function (state, session, pos, prefix) {\n if (!this.completionsDefined) {\n this.defineCompletions();\n }\n\n if (state === 'ruleset' || session.$mode.$id == \"ace/mode/scss\") {\n var line = session.getLine(pos.row).substr(0, pos.column);\n\n if (/:[^;]+$/.test(line)) {\n /([\\w\\-]+):[^:]*$/.test(line);\n return this.getPropertyValueCompletions(state, session, pos, prefix);\n } else {\n return this.getPropertyCompletions(state, session, pos, prefix);\n }\n }\n\n return [];\n };\n\n this.getPropertyCompletions = function (state, session, pos, prefix) {\n var properties = Object.keys(propertyMap);\n return properties.map(function (property) {\n return {\n caption: property,\n snippet: property + ': $0;',\n meta: \"property\",\n score: 1000000\n };\n });\n };\n\n this.getPropertyValueCompletions = function (state, session, pos, prefix) {\n var line = session.getLine(pos.row).substr(0, pos.column);\n var property = (/([\\w\\-]+):[^:]*$/.exec(line) || {})[1];\n if (!property) return [];\n var values = [];\n\n if (property in propertyMap && _typeof(propertyMap[property]) === \"object\") {\n values = Object.keys(propertyMap[property]);\n }\n\n return values.map(function (value) {\n return {\n caption: value,\n snippet: value,\n meta: \"property value\",\n score: 1000000\n };\n });\n };\n }).call(CssCompletions.prototype);\n exports.CssCompletions = CssCompletions;\n});\nace.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) {\n \"use strict\";\n\n var oop = require(\"../../lib/oop\");\n\n var Behaviour = require(\"../behaviour\").Behaviour;\n\n var CstyleBehaviour = require(\"./cstyle\").CstyleBehaviour;\n\n var TokenIterator = require(\"../../token_iterator\").TokenIterator;\n\n var CssBehaviour = function CssBehaviour() {\n this.inherit(CstyleBehaviour);\n this.add(\"colon\", \"insertion\", function (state, action, editor, session, text) {\n if (text === ':' && editor.selection.isEmpty()) {\n var cursor = editor.getCursorPosition();\n var iterator = new TokenIterator(session, cursor.row, cursor.column);\n var token = iterator.getCurrentToken();\n\n if (token && token.value.match(/\\s+/)) {\n token = iterator.stepBackward();\n }\n\n if (token && token.type === 'support.type') {\n var line = session.doc.getLine(cursor.row);\n var rightChar = line.substring(cursor.column, cursor.column + 1);\n\n if (rightChar === ':') {\n return {\n text: '',\n selection: [1, 1]\n };\n }\n\n if (/^(\\s+[^;]|\\s*$)/.test(line.substring(cursor.column))) {\n return {\n text: ':;',\n selection: [1, 1]\n };\n }\n }\n }\n });\n this.add(\"colon\", \"deletion\", function (state, action, editor, session, range) {\n var selected = session.doc.getTextRange(range);\n\n if (!range.isMultiLine() && selected === ':') {\n var cursor = editor.getCursorPosition();\n var iterator = new TokenIterator(session, cursor.row, cursor.column);\n var token = iterator.getCurrentToken();\n\n if (token && token.value.match(/\\s+/)) {\n token = iterator.stepBackward();\n }\n\n if (token && token.type === 'support.type') {\n var line = session.doc.getLine(range.start.row);\n var rightChar = line.substring(range.end.column, range.end.column + 1);\n\n if (rightChar === ';') {\n range.end.column++;\n return range;\n }\n }\n }\n });\n this.add(\"semicolon\", \"insertion\", function (state, action, editor, session, text) {\n if (text === ';' && editor.selection.isEmpty()) {\n var cursor = editor.getCursorPosition();\n var line = session.doc.getLine(cursor.row);\n var rightChar = line.substring(cursor.column, cursor.column + 1);\n\n if (rightChar === ';') {\n return {\n text: '',\n selection: [1, 1]\n };\n }\n }\n });\n this.add(\"!important\", \"insertion\", function (state, action, editor, session, text) {\n if (text === '!' && editor.selection.isEmpty()) {\n var cursor = editor.getCursorPosition();\n var line = session.doc.getLine(cursor.row);\n\n if (/^\\s*(;|}|$)/.test(line.substring(cursor.column))) {\n return {\n text: '!important',\n selection: [10, 10]\n };\n }\n }\n });\n };\n\n oop.inherits(CssBehaviour, CstyleBehaviour);\n exports.CssBehaviour = CssBehaviour;\n});\nace.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) {\n \"use strict\";\n\n var oop = require(\"../lib/oop\");\n\n var TextMode = require(\"./text\").Mode;\n\n var CssHighlightRules = require(\"./css_highlight_rules\").CssHighlightRules;\n\n var MatchingBraceOutdent = require(\"./matching_brace_outdent\").MatchingBraceOutdent;\n\n var WorkerClient = require(\"../worker/worker_client\").WorkerClient;\n\n var CssCompletions = require(\"./css_completions\").CssCompletions;\n\n var CssBehaviour = require(\"./behaviour/css\").CssBehaviour;\n\n var CStyleFoldMode = require(\"./folding/cstyle\").FoldMode;\n\n var Mode = function Mode() {\n this.HighlightRules = CssHighlightRules;\n this.$outdent = new MatchingBraceOutdent();\n this.$behaviour = new CssBehaviour();\n this.$completer = new CssCompletions();\n this.foldingRules = new CStyleFoldMode();\n };\n\n oop.inherits(Mode, TextMode);\n (function () {\n this.foldingRules = \"cStyle\";\n this.blockComment = {\n start: \"/*\",\n end: \"*/\"\n };\n\n this.getNextLineIndent = function (state, line, tab) {\n var indent = this.$getIndent(line);\n var tokens = this.getTokenizer().getLineTokens(line, state).tokens;\n\n if (tokens.length && tokens[tokens.length - 1].type == \"comment\") {\n return indent;\n }\n\n var match = line.match(/^.*\\{\\s*$/);\n\n if (match) {\n indent += tab;\n }\n\n return indent;\n };\n\n this.checkOutdent = function (state, line, input) {\n return this.$outdent.checkOutdent(line, input);\n };\n\n this.autoOutdent = function (state, doc, row) {\n this.$outdent.autoOutdent(doc, row);\n };\n\n this.getCompletions = function (state, session, pos, prefix) {\n return this.$completer.getCompletions(state, session, pos, prefix);\n };\n\n this.createWorker = function (session) {\n var worker = new WorkerClient([\"ace\"], \"ace/mode/css_worker\", \"Worker\");\n worker.attachToDocument(session.getDocument());\n worker.on(\"annotate\", function (e) {\n session.setAnnotations(e.data);\n });\n worker.on(\"terminate\", function () {\n session.clearAnnotations();\n });\n return worker;\n };\n\n this.$id = \"ace/mode/css\";\n this.snippetFileId = \"ace/snippets/css\";\n }).call(Mode.prototype);\n exports.Mode = Mode;\n});\nace.define(\"ace/mode/xml_highlight_rules\", [\"require\", \"exports\", \"module\", \"ace/lib/oop\", \"ace/mode/text_highlight_rules\"], function (require, exports, module) {\n \"use strict\";\n\n var oop = require(\"../lib/oop\");\n\n var TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\n\n var XmlHighlightRules = function XmlHighlightRules(normalize) {\n var tagRegex = \"[_:a-zA-Z\\xC0-\\uFFFF][-_:.a-zA-Z0-9\\xC0-\\uFFFF]*\";\n this.$rules = {\n start: [{\n token: \"string.cdata.xml\",\n regex: \"<\\\\!\\\\[CDATA\\\\[\",\n next: \"cdata\"\n }, {\n token: [\"punctuation.instruction.xml\", \"keyword.instruction.xml\"],\n regex: \"(<\\\\?)(\" + tagRegex + \")\",\n next: \"processing_instruction\"\n }, {\n token: \"comment.start.xml\",\n regex: \"<\\\\!--\",\n next: \"comment\"\n }, {\n token: [\"xml-pe.doctype.xml\", \"xml-pe.doctype.xml\"],\n regex: \"(<\\\\!)(DOCTYPE)(?=[\\\\s])\",\n next: \"doctype\",\n caseInsensitive: true\n }, {\n include: \"tag\"\n }, {\n token: \"text.end-tag-open.xml\",\n regex: \"\",\n next: \"start\"\n }],\n doctype: [{\n include: \"whitespace\"\n }, {\n include: \"string\"\n }, {\n token: \"xml-pe.doctype.xml\",\n regex: \">\",\n next: \"start\"\n }, {\n token: \"xml-pe.xml\",\n regex: \"[-_a-zA-Z0-9:]+\"\n }, {\n token: \"punctuation.int-subset\",\n regex: \"\\\\[\",\n push: \"int_subset\"\n }],\n int_subset: [{\n token: \"text.xml\",\n regex: \"\\\\s+\"\n }, {\n token: \"punctuation.int-subset.xml\",\n regex: \"]\",\n next: \"pop\"\n }, {\n token: [\"punctuation.markup-decl.xml\", \"keyword.markup-decl.xml\"],\n regex: \"(<\\\\!)(\" + tagRegex + \")\",\n push: [{\n token: \"text\",\n regex: \"\\\\s+\"\n }, {\n token: \"punctuation.markup-decl.xml\",\n regex: \">\",\n next: \"pop\"\n }, {\n include: \"string\"\n }]\n }],\n cdata: [{\n token: \"string.cdata.xml\",\n regex: \"\\\\]\\\\]>\",\n next: \"start\"\n }, {\n token: \"text.xml\",\n regex: \"\\\\s+\"\n }, {\n token: \"text.xml\",\n regex: \"(?:[^\\\\]]|\\\\](?!\\\\]>))+\"\n }],\n comment: [{\n token: \"comment.end.xml\",\n regex: \"-->\",\n next: \"start\"\n }, {\n defaultToken: \"comment.xml\"\n }],\n reference: [{\n token: \"constant.language.escape.reference.xml\",\n regex: \"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\\\.-]+;)\"\n }],\n attr_reference: [{\n token: \"constant.language.escape.reference.attribute-value.xml\",\n regex: \"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\\\.-]+;)\"\n }],\n tag: [{\n token: [\"meta.tag.punctuation.tag-open.xml\", \"meta.tag.punctuation.end-tag-open.xml\", \"meta.tag.tag-name.xml\"],\n regex: \"(?:(<)|(\",\n next: \"start\"\n }]\n }],\n tag_whitespace: [{\n token: \"text.tag-whitespace.xml\",\n regex: \"\\\\s+\"\n }],\n whitespace: [{\n token: \"text.whitespace.xml\",\n regex: \"\\\\s+\"\n }],\n string: [{\n token: \"string.xml\",\n regex: \"'\",\n push: [{\n token: \"string.xml\",\n regex: \"'\",\n next: \"pop\"\n }, {\n defaultToken: \"string.xml\"\n }]\n }, {\n token: \"string.xml\",\n regex: '\"',\n push: [{\n token: \"string.xml\",\n regex: '\"',\n next: \"pop\"\n }, {\n defaultToken: \"string.xml\"\n }]\n }],\n attributes: [{\n token: \"entity.other.attribute-name.xml\",\n regex: tagRegex\n }, {\n token: \"keyword.operator.attribute-equals.xml\",\n regex: \"=\"\n }, {\n include: \"tag_whitespace\"\n }, {\n include: \"attribute_value\"\n }],\n attribute_value: [{\n token: \"string.attribute-value.xml\",\n regex: \"'\",\n push: [{\n token: \"string.attribute-value.xml\",\n regex: \"'\",\n next: \"pop\"\n }, {\n include: \"attr_reference\"\n }, {\n defaultToken: \"string.attribute-value.xml\"\n }]\n }, {\n token: \"string.attribute-value.xml\",\n regex: '\"',\n push: [{\n token: \"string.attribute-value.xml\",\n regex: '\"',\n next: \"pop\"\n }, {\n include: \"attr_reference\"\n }, {\n defaultToken: \"string.attribute-value.xml\"\n }]\n }]\n };\n if (this.constructor === XmlHighlightRules) this.normalizeRules();\n };\n\n (function () {\n this.embedTagRules = function (HighlightRules, prefix, tag) {\n this.$rules.tag.unshift({\n token: [\"meta.tag.punctuation.tag-open.xml\", \"meta.tag.\" + tag + \".tag-name.xml\"],\n regex: \"(<)(\" + tag + \"(?=\\\\s|>|$))\",\n next: [{\n include: \"attributes\"\n }, {\n token: \"meta.tag.punctuation.tag-close.xml\",\n regex: \"/?>\",\n next: prefix + \"start\"\n }]\n });\n this.$rules[tag + \"-end\"] = [{\n include: \"attributes\"\n }, {\n token: \"meta.tag.punctuation.tag-close.xml\",\n regex: \"/?>\",\n next: \"start\",\n onMatch: function onMatch(value, currentState, stack) {\n stack.splice(0);\n return this.token;\n }\n }];\n this.embedRules(HighlightRules, prefix, [{\n token: [\"meta.tag.punctuation.end-tag-open.xml\", \"meta.tag.\" + tag + \".tag-name.xml\"],\n regex: \"(|$))\",\n next: tag + \"-end\"\n }, {\n token: \"string.cdata.xml\",\n regex: \"<\\\\!\\\\[CDATA\\\\[\"\n }, {\n token: \"string.cdata.xml\",\n regex: \"\\\\]\\\\]>\"\n }]);\n };\n }).call(TextHighlightRules.prototype);\n oop.inherits(XmlHighlightRules, TextHighlightRules);\n exports.XmlHighlightRules = XmlHighlightRules;\n});\nace.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) {\n \"use strict\";\n\n var oop = require(\"../lib/oop\");\n\n var lang = require(\"../lib/lang\");\n\n var CssHighlightRules = require(\"./css_highlight_rules\").CssHighlightRules;\n\n var JavaScriptHighlightRules = require(\"./javascript_highlight_rules\").JavaScriptHighlightRules;\n\n var XmlHighlightRules = require(\"./xml_highlight_rules\").XmlHighlightRules;\n\n var tagMap = lang.createMap({\n a: 'anchor',\n button: 'form',\n form: 'form',\n img: 'image',\n input: 'form',\n label: 'form',\n option: 'form',\n script: 'script',\n select: 'form',\n textarea: 'form',\n style: 'style',\n table: 'table',\n tbody: 'table',\n td: 'table',\n tfoot: 'table',\n th: 'table',\n tr: 'table'\n });\n\n var HtmlHighlightRules = function HtmlHighlightRules() {\n XmlHighlightRules.call(this);\n this.addRules({\n attributes: [{\n include: \"tag_whitespace\"\n }, {\n token: \"entity.other.attribute-name.xml\",\n regex: \"[-_a-zA-Z0-9:.]+\"\n }, {\n token: \"keyword.operator.attribute-equals.xml\",\n regex: \"=\",\n push: [{\n include: \"tag_whitespace\"\n }, {\n token: \"string.unquoted.attribute-value.html\",\n regex: \"[^<>='\\\"`\\\\s]+\",\n next: \"pop\"\n }, {\n token: \"empty\",\n regex: \"\",\n next: \"pop\"\n }]\n }, {\n include: \"attribute_value\"\n }],\n tag: [{\n token: function token(start, tag) {\n var group = tagMap[tag];\n return [\"meta.tag.punctuation.\" + (start == \"<\" ? \"\" : \"end-\") + \"tag-open.xml\", \"meta.tag\" + (group ? \".\" + group : \"\") + \".tag-name.xml\"];\n },\n regex: \"(\",\n next: \"start\"\n }]\n });\n this.embedTagRules(CssHighlightRules, \"css-\", \"style\");\n this.embedTagRules(new JavaScriptHighlightRules({\n jsx: false\n }).getRules(), \"js-\", \"script\");\n if (this.constructor === HtmlHighlightRules) this.normalizeRules();\n };\n\n oop.inherits(HtmlHighlightRules, XmlHighlightRules);\n exports.HtmlHighlightRules = HtmlHighlightRules;\n});\nace.define(\"ace/mode/behaviour/xml\", [\"require\", \"exports\", \"module\", \"ace/lib/oop\", \"ace/mode/behaviour\", \"ace/token_iterator\", \"ace/lib/lang\"], function (require, exports, module) {\n \"use strict\";\n\n var oop = require(\"../../lib/oop\");\n\n var Behaviour = require(\"../behaviour\").Behaviour;\n\n var TokenIterator = require(\"../../token_iterator\").TokenIterator;\n\n var lang = require(\"../../lib/lang\");\n\n function is(token, type) {\n return token && token.type.lastIndexOf(type + \".xml\") > -1;\n }\n\n var XmlBehaviour = function XmlBehaviour() {\n this.add(\"string_dquotes\", \"insertion\", function (state, action, editor, session, text) {\n if (text == '\"' || text == \"'\") {\n var quote = text;\n var selected = session.doc.getTextRange(editor.getSelectionRange());\n\n if (selected !== \"\" && selected !== \"'\" && selected != '\"' && editor.getWrapBehavioursEnabled()) {\n return {\n text: quote + selected + quote,\n selection: false\n };\n }\n\n var cursor = editor.getCursorPosition();\n var line = session.doc.getLine(cursor.row);\n var rightChar = line.substring(cursor.column, cursor.column + 1);\n var iterator = new TokenIterator(session, cursor.row, cursor.column);\n var token = iterator.getCurrentToken();\n\n if (rightChar == quote && (is(token, \"attribute-value\") || is(token, \"string\"))) {\n return {\n text: \"\",\n selection: [1, 1]\n };\n }\n\n if (!token) token = iterator.stepBackward();\n if (!token) return;\n\n while (is(token, \"tag-whitespace\") || is(token, \"whitespace\")) {\n token = iterator.stepBackward();\n }\n\n var rightSpace = !rightChar || rightChar.match(/\\s/);\n\n if (is(token, \"attribute-equals\") && (rightSpace || rightChar == '>') || is(token, \"decl-attribute-equals\") && (rightSpace || rightChar == '?')) {\n return {\n text: quote + quote,\n selection: [1, 1]\n };\n }\n }\n });\n this.add(\"string_dquotes\", \"deletion\", function (state, action, editor, session, range) {\n var selected = session.doc.getTextRange(range);\n\n if (!range.isMultiLine() && (selected == '\"' || selected == \"'\")) {\n var line = session.doc.getLine(range.start.row);\n var rightChar = line.substring(range.start.column + 1, range.start.column + 2);\n\n if (rightChar == selected) {\n range.end.column++;\n return range;\n }\n }\n });\n this.add(\"autoclosing\", \"insertion\", function (state, action, editor, session, text) {\n if (text == '>') {\n var position = editor.getSelectionRange().start;\n var iterator = new TokenIterator(session, position.row, position.column);\n var token = iterator.getCurrentToken() || iterator.stepBackward();\n if (!token || !(is(token, \"tag-name\") || is(token, \"tag-whitespace\") || is(token, \"attribute-name\") || is(token, \"attribute-equals\") || is(token, \"attribute-value\"))) return;\n if (is(token, \"reference.attribute-value\")) return;\n\n if (is(token, \"attribute-value\")) {\n var tokenEndColumn = iterator.getCurrentTokenColumn() + token.value.length;\n if (position.column < tokenEndColumn) return;\n\n if (position.column == tokenEndColumn) {\n var nextToken = iterator.stepForward();\n if (nextToken && is(nextToken, \"attribute-value\")) return;\n iterator.stepBackward();\n }\n }\n\n if (/^\\s*>/.test(session.getLine(position.row).slice(position.column))) return;\n\n while (!is(token, \"tag-name\")) {\n token = iterator.stepBackward();\n\n if (token.value == \"<\") {\n token = iterator.stepForward();\n break;\n }\n }\n\n var tokenRow = iterator.getCurrentTokenRow();\n var tokenColumn = iterator.getCurrentTokenColumn();\n if (is(iterator.stepBackward(), \"end-tag-open\")) return;\n var element = token.value;\n if (tokenRow == position.row) element = element.substring(0, position.column - tokenColumn);\n if (this.voidElements.hasOwnProperty(element.toLowerCase())) return;\n return {\n text: \">\" + \"\",\n selection: [1, 1]\n };\n }\n });\n this.add(\"autoindent\", \"insertion\", function (state, action, editor, session, text) {\n if (text == \"\\n\") {\n var cursor = editor.getCursorPosition();\n var line = session.getLine(cursor.row);\n var iterator = new TokenIterator(session, cursor.row, cursor.column);\n var token = iterator.getCurrentToken();\n\n if (token && token.type.indexOf(\"tag-close\") !== -1) {\n if (token.value == \"/>\") return;\n\n while (token && token.type.indexOf(\"tag-name\") === -1) {\n token = iterator.stepBackward();\n }\n\n if (!token) {\n return;\n }\n\n var tag = token.value;\n var row = iterator.getCurrentTokenRow();\n token = iterator.stepBackward();\n\n if (!token || token.type.indexOf(\"end-tag\") !== -1) {\n return;\n }\n\n if (this.voidElements && !this.voidElements[tag]) {\n var nextToken = session.getTokenAt(cursor.row, cursor.column + 1);\n var line = session.getLine(row);\n var nextIndent = this.$getIndent(line);\n var indent = nextIndent + session.getTabString();\n\n if (nextToken && nextToken.value === \" -1;\n }\n\n (function () {\n this.getFoldWidget = function (session, foldStyle, row) {\n var tag = this._getFirstTagInLine(session, row);\n\n if (!tag) return this.getCommentFoldWidget(session, row);\n if (tag.closing || !tag.tagName && tag.selfClosing) return foldStyle == \"markbeginend\" ? \"end\" : \"\";\n if (!tag.tagName || tag.selfClosing || this.voidElements.hasOwnProperty(tag.tagName.toLowerCase())) return \"\";\n if (this._findEndTagInLine(session, row, tag.tagName, tag.end.column)) return \"\";\n return \"start\";\n };\n\n this.getCommentFoldWidget = function (session, row) {\n if (/comment/.test(session.getState(row)) && /';\n break;\n }\n }\n\n return tag;\n } else if (is(token, \"tag-close\")) {\n tag.selfClosing = token.value == '/>';\n return tag;\n }\n\n tag.start.column += token.value.length;\n }\n\n return null;\n };\n\n this._findEndTagInLine = function (session, row, tagName, startColumn) {\n var tokens = session.getTokens(row);\n var column = 0;\n\n for (var i = 0; i < tokens.length; i++) {\n var token = tokens[i];\n column += token.value.length;\n if (column < startColumn) continue;\n\n if (is(token, \"end-tag-open\")) {\n token = tokens[i + 1];\n if (token && token.value == tagName) return true;\n }\n }\n\n return false;\n };\n\n this._readTagForward = function (iterator) {\n var token = iterator.getCurrentToken();\n if (!token) return null;\n var tag = new Tag();\n\n do {\n if (is(token, \"tag-open\")) {\n tag.closing = is(token, \"end-tag-open\");\n tag.start.row = iterator.getCurrentTokenRow();\n tag.start.column = iterator.getCurrentTokenColumn();\n } else if (is(token, \"tag-name\")) {\n tag.tagName = token.value;\n } else if (is(token, \"tag-close\")) {\n tag.selfClosing = token.value == \"/>\";\n tag.end.row = iterator.getCurrentTokenRow();\n tag.end.column = iterator.getCurrentTokenColumn() + token.value.length;\n iterator.stepForward();\n return tag;\n }\n } while (token = iterator.stepForward());\n\n return null;\n };\n\n this._readTagBackward = function (iterator) {\n var token = iterator.getCurrentToken();\n if (!token) return null;\n var tag = new Tag();\n\n do {\n if (is(token, \"tag-open\")) {\n tag.closing = is(token, \"end-tag-open\");\n tag.start.row = iterator.getCurrentTokenRow();\n tag.start.column = iterator.getCurrentTokenColumn();\n iterator.stepBackward();\n return tag;\n } else if (is(token, \"tag-name\")) {\n tag.tagName = token.value;\n } else if (is(token, \"tag-close\")) {\n tag.selfClosing = token.value == \"/>\";\n tag.end.row = iterator.getCurrentTokenRow();\n tag.end.column = iterator.getCurrentTokenColumn() + token.value.length;\n }\n } while (token = iterator.stepBackward());\n\n return null;\n };\n\n this._pop = function (stack, tag) {\n while (stack.length) {\n var top = stack[stack.length - 1];\n\n if (!tag || top.tagName == tag.tagName) {\n return stack.pop();\n } else if (this.optionalEndTags.hasOwnProperty(top.tagName)) {\n stack.pop();\n continue;\n } else {\n return null;\n }\n }\n };\n\n this.getFoldWidgetRange = function (session, foldStyle, row) {\n var firstTag = this._getFirstTagInLine(session, row);\n\n if (!firstTag) {\n return this.getCommentFoldWidget(session, row) && session.getCommentFoldRange(row, session.getLine(row).length);\n }\n\n var isBackward = firstTag.closing || firstTag.selfClosing;\n var stack = [];\n var tag;\n\n if (!isBackward) {\n var iterator = new TokenIterator(session, row, firstTag.start.column);\n var start = {\n row: row,\n column: firstTag.start.column + firstTag.tagName.length + 2\n };\n if (firstTag.start.row == firstTag.end.row) start.column = firstTag.end.column;\n\n while (tag = this._readTagForward(iterator)) {\n if (tag.selfClosing) {\n if (!stack.length) {\n tag.start.column += tag.tagName.length + 2;\n tag.end.column -= 2;\n return Range.fromPoints(tag.start, tag.end);\n } else continue;\n }\n\n if (tag.closing) {\n this._pop(stack, tag);\n\n if (stack.length == 0) return Range.fromPoints(start, tag.start);\n } else {\n stack.push(tag);\n }\n }\n } else {\n var iterator = new TokenIterator(session, row, firstTag.end.column);\n var end = {\n row: row,\n column: firstTag.start.column\n };\n\n while (tag = this._readTagBackward(iterator)) {\n if (tag.selfClosing) {\n if (!stack.length) {\n tag.start.column += tag.tagName.length + 2;\n tag.end.column -= 2;\n return Range.fromPoints(tag.start, tag.end);\n } else continue;\n }\n\n if (!tag.closing) {\n this._pop(stack, tag);\n\n if (stack.length == 0) {\n tag.start.column += tag.tagName.length + 2;\n if (tag.start.row == tag.end.row && tag.start.column < tag.end.column) tag.start.column = tag.end.column;\n return Range.fromPoints(tag.start, end);\n }\n } else {\n stack.push(tag);\n }\n }\n }\n };\n }).call(FoldMode.prototype);\n});\nace.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) {\n \"use strict\";\n\n var oop = require(\"../../lib/oop\");\n\n var MixedFoldMode = require(\"./mixed\").FoldMode;\n\n var XmlFoldMode = require(\"./xml\").FoldMode;\n\n var CStyleFoldMode = require(\"./cstyle\").FoldMode;\n\n var FoldMode = exports.FoldMode = function (voidElements, optionalTags) {\n MixedFoldMode.call(this, new XmlFoldMode(voidElements, optionalTags), {\n \"js-\": new CStyleFoldMode(),\n \"css-\": new CStyleFoldMode()\n });\n };\n\n oop.inherits(FoldMode, MixedFoldMode);\n});\nace.define(\"ace/mode/html_completions\", [\"require\", \"exports\", \"module\", \"ace/token_iterator\"], function (require, exports, module) {\n \"use strict\";\n\n var TokenIterator = require(\"../token_iterator\").TokenIterator;\n\n var commonAttributes = [\"accesskey\", \"class\", \"contenteditable\", \"contextmenu\", \"dir\", \"draggable\", \"dropzone\", \"hidden\", \"id\", \"inert\", \"itemid\", \"itemprop\", \"itemref\", \"itemscope\", \"itemtype\", \"lang\", \"spellcheck\", \"style\", \"tabindex\", \"title\", \"translate\"];\n 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\"];\n var globalAttributes = commonAttributes.concat(eventAttributes);\n var attributeMap = {\n \"a\": {\n \"href\": 1,\n \"target\": {\n \"_blank\": 1,\n \"top\": 1\n },\n \"ping\": 1,\n \"rel\": {\n \"nofollow\": 1,\n \"alternate\": 1,\n \"author\": 1,\n \"bookmark\": 1,\n \"help\": 1,\n \"license\": 1,\n \"next\": 1,\n \"noreferrer\": 1,\n \"prefetch\": 1,\n \"prev\": 1,\n \"search\": 1,\n \"tag\": 1\n },\n \"media\": 1,\n \"hreflang\": 1,\n \"type\": 1\n },\n \"abbr\": {},\n \"address\": {},\n \"area\": {\n \"shape\": 1,\n \"coords\": 1,\n \"href\": 1,\n \"hreflang\": 1,\n \"alt\": 1,\n \"target\": 1,\n \"media\": 1,\n \"rel\": 1,\n \"ping\": 1,\n \"type\": 1\n },\n \"article\": {\n \"pubdate\": 1\n },\n \"aside\": {},\n \"audio\": {\n \"src\": 1,\n \"autobuffer\": 1,\n \"autoplay\": {\n \"autoplay\": 1\n },\n \"loop\": {\n \"loop\": 1\n },\n \"controls\": {\n \"controls\": 1\n },\n \"muted\": {\n \"muted\": 1\n },\n \"preload\": {\n \"auto\": 1,\n \"metadata\": 1,\n \"none\": 1\n }\n },\n \"b\": {},\n \"base\": {\n \"href\": 1,\n \"target\": 1\n },\n \"bdi\": {},\n \"bdo\": {},\n \"blockquote\": {\n \"cite\": 1\n },\n \"body\": {\n \"onafterprint\": 1,\n \"onbeforeprint\": 1,\n \"onbeforeunload\": 1,\n \"onhashchange\": 1,\n \"onmessage\": 1,\n \"onoffline\": 1,\n \"onpopstate\": 1,\n \"onredo\": 1,\n \"onresize\": 1,\n \"onstorage\": 1,\n \"onundo\": 1,\n \"onunload\": 1\n },\n \"br\": {},\n \"button\": {\n \"autofocus\": 1,\n \"disabled\": {\n \"disabled\": 1\n },\n \"form\": 1,\n \"formaction\": 1,\n \"formenctype\": 1,\n \"formmethod\": 1,\n \"formnovalidate\": 1,\n \"formtarget\": 1,\n \"name\": 1,\n \"value\": 1,\n \"type\": {\n \"button\": 1,\n \"submit\": 1\n }\n },\n \"canvas\": {\n \"width\": 1,\n \"height\": 1\n },\n \"caption\": {},\n \"cite\": {},\n \"code\": {},\n \"col\": {\n \"span\": 1\n },\n \"colgroup\": {\n \"span\": 1\n },\n \"command\": {\n \"type\": 1,\n \"label\": 1,\n \"icon\": 1,\n \"disabled\": 1,\n \"checked\": 1,\n \"radiogroup\": 1,\n \"command\": 1\n },\n \"data\": {},\n \"datalist\": {},\n \"dd\": {},\n \"del\": {\n \"cite\": 1,\n \"datetime\": 1\n },\n \"details\": {\n \"open\": 1\n },\n \"dfn\": {},\n \"dialog\": {\n \"open\": 1\n },\n \"div\": {},\n \"dl\": {},\n \"dt\": {},\n \"em\": {},\n \"embed\": {\n \"src\": 1,\n \"height\": 1,\n \"width\": 1,\n \"type\": 1\n },\n \"fieldset\": {\n \"disabled\": 1,\n \"form\": 1,\n \"name\": 1\n },\n \"figcaption\": {},\n \"figure\": {},\n \"footer\": {},\n \"form\": {\n \"accept-charset\": 1,\n \"action\": 1,\n \"autocomplete\": 1,\n \"enctype\": {\n \"multipart/form-data\": 1,\n \"application/x-www-form-urlencoded\": 1\n },\n \"method\": {\n \"get\": 1,\n \"post\": 1\n },\n \"name\": 1,\n \"novalidate\": 1,\n \"target\": {\n \"_blank\": 1,\n \"top\": 1\n }\n },\n \"h1\": {},\n \"h2\": {},\n \"h3\": {},\n \"h4\": {},\n \"h5\": {},\n \"h6\": {},\n \"head\": {},\n \"header\": {},\n \"hr\": {},\n \"html\": {\n \"manifest\": 1\n },\n \"i\": {},\n \"iframe\": {\n \"name\": 1,\n \"src\": 1,\n \"height\": 1,\n \"width\": 1,\n \"sandbox\": {\n \"allow-same-origin\": 1,\n \"allow-top-navigation\": 1,\n \"allow-forms\": 1,\n \"allow-scripts\": 1\n },\n \"seamless\": {\n \"seamless\": 1\n }\n },\n \"img\": {\n \"alt\": 1,\n \"src\": 1,\n \"height\": 1,\n \"width\": 1,\n \"usemap\": 1,\n \"ismap\": 1\n },\n \"input\": {\n \"type\": {\n \"text\": 1,\n \"password\": 1,\n \"hidden\": 1,\n \"checkbox\": 1,\n \"submit\": 1,\n \"radio\": 1,\n \"file\": 1,\n \"button\": 1,\n \"reset\": 1,\n \"image\": 31,\n \"color\": 1,\n \"date\": 1,\n \"datetime\": 1,\n \"datetime-local\": 1,\n \"email\": 1,\n \"month\": 1,\n \"number\": 1,\n \"range\": 1,\n \"search\": 1,\n \"tel\": 1,\n \"time\": 1,\n \"url\": 1,\n \"week\": 1\n },\n \"accept\": 1,\n \"alt\": 1,\n \"autocomplete\": {\n \"on\": 1,\n \"off\": 1\n },\n \"autofocus\": {\n \"autofocus\": 1\n },\n \"checked\": {\n \"checked\": 1\n },\n \"disabled\": {\n \"disabled\": 1\n },\n \"form\": 1,\n \"formaction\": 1,\n \"formenctype\": {\n \"application/x-www-form-urlencoded\": 1,\n \"multipart/form-data\": 1,\n \"text/plain\": 1\n },\n \"formmethod\": {\n \"get\": 1,\n \"post\": 1\n },\n \"formnovalidate\": {\n \"formnovalidate\": 1\n },\n \"formtarget\": {\n \"_blank\": 1,\n \"_self\": 1,\n \"_parent\": 1,\n \"_top\": 1\n },\n \"height\": 1,\n \"list\": 1,\n \"max\": 1,\n \"maxlength\": 1,\n \"min\": 1,\n \"multiple\": {\n \"multiple\": 1\n },\n \"name\": 1,\n \"pattern\": 1,\n \"placeholder\": 1,\n \"readonly\": {\n \"readonly\": 1\n },\n \"required\": {\n \"required\": 1\n },\n \"size\": 1,\n \"src\": 1,\n \"step\": 1,\n \"width\": 1,\n \"files\": 1,\n \"value\": 1\n },\n \"ins\": {\n \"cite\": 1,\n \"datetime\": 1\n },\n \"kbd\": {},\n \"keygen\": {\n \"autofocus\": 1,\n \"challenge\": {\n \"challenge\": 1\n },\n \"disabled\": {\n \"disabled\": 1\n },\n \"form\": 1,\n \"keytype\": {\n \"rsa\": 1,\n \"dsa\": 1,\n \"ec\": 1\n },\n \"name\": 1\n },\n \"label\": {\n \"form\": 1,\n \"for\": 1\n },\n \"legend\": {},\n \"li\": {\n \"value\": 1\n },\n \"link\": {\n \"href\": 1,\n \"hreflang\": 1,\n \"rel\": {\n \"stylesheet\": 1,\n \"icon\": 1\n },\n \"media\": {\n \"all\": 1,\n \"screen\": 1,\n \"print\": 1\n },\n \"type\": {\n \"text/css\": 1,\n \"image/png\": 1,\n \"image/jpeg\": 1,\n \"image/gif\": 1\n },\n \"sizes\": 1\n },\n \"main\": {},\n \"map\": {\n \"name\": 1\n },\n \"mark\": {},\n \"math\": {},\n \"menu\": {\n \"type\": 1,\n \"label\": 1\n },\n \"meta\": {\n \"http-equiv\": {\n \"content-type\": 1\n },\n \"name\": {\n \"description\": 1,\n \"keywords\": 1\n },\n \"content\": {\n \"text/html; charset=UTF-8\": 1\n },\n \"charset\": 1\n },\n \"meter\": {\n \"value\": 1,\n \"min\": 1,\n \"max\": 1,\n \"low\": 1,\n \"high\": 1,\n \"optimum\": 1\n },\n \"nav\": {},\n \"noscript\": {\n \"href\": 1\n },\n \"object\": {\n \"param\": 1,\n \"data\": 1,\n \"type\": 1,\n \"height\": 1,\n \"width\": 1,\n \"usemap\": 1,\n \"name\": 1,\n \"form\": 1,\n \"classid\": 1\n },\n \"ol\": {\n \"start\": 1,\n \"reversed\": 1\n },\n \"optgroup\": {\n \"disabled\": 1,\n \"label\": 1\n },\n \"option\": {\n \"disabled\": 1,\n \"selected\": 1,\n \"label\": 1,\n \"value\": 1\n },\n \"output\": {\n \"for\": 1,\n \"form\": 1,\n \"name\": 1\n },\n \"p\": {},\n \"param\": {\n \"name\": 1,\n \"value\": 1\n },\n \"pre\": {},\n \"progress\": {\n \"value\": 1,\n \"max\": 1\n },\n \"q\": {\n \"cite\": 1\n },\n \"rp\": {},\n \"rt\": {},\n \"ruby\": {},\n \"s\": {},\n \"samp\": {},\n \"script\": {\n \"charset\": 1,\n \"type\": {\n \"text/javascript\": 1\n },\n \"src\": 1,\n \"defer\": 1,\n \"async\": 1\n },\n \"select\": {\n \"autofocus\": 1,\n \"disabled\": 1,\n \"form\": 1,\n \"multiple\": {\n \"multiple\": 1\n },\n \"name\": 1,\n \"size\": 1,\n \"readonly\": {\n \"readonly\": 1\n }\n },\n \"small\": {},\n \"source\": {\n \"src\": 1,\n \"type\": 1,\n \"media\": 1\n },\n \"span\": {},\n \"strong\": {},\n \"style\": {\n \"type\": 1,\n \"media\": {\n \"all\": 1,\n \"screen\": 1,\n \"print\": 1\n },\n \"scoped\": 1\n },\n \"sub\": {},\n \"sup\": {},\n \"svg\": {},\n \"table\": {\n \"summary\": 1\n },\n \"tbody\": {},\n \"td\": {\n \"headers\": 1,\n \"rowspan\": 1,\n \"colspan\": 1\n },\n \"textarea\": {\n \"autofocus\": {\n \"autofocus\": 1\n },\n \"disabled\": {\n \"disabled\": 1\n },\n \"form\": 1,\n \"maxlength\": 1,\n \"name\": 1,\n \"placeholder\": 1,\n \"readonly\": {\n \"readonly\": 1\n },\n \"required\": {\n \"required\": 1\n },\n \"rows\": 1,\n \"cols\": 1,\n \"wrap\": {\n \"on\": 1,\n \"off\": 1,\n \"hard\": 1,\n \"soft\": 1\n }\n },\n \"tfoot\": {},\n \"th\": {\n \"headers\": 1,\n \"rowspan\": 1,\n \"colspan\": 1,\n \"scope\": 1\n },\n \"thead\": {},\n \"time\": {\n \"datetime\": 1\n },\n \"title\": {},\n \"tr\": {},\n \"track\": {\n \"kind\": 1,\n \"src\": 1,\n \"srclang\": 1,\n \"label\": 1,\n \"default\": 1\n },\n \"section\": {},\n \"summary\": {},\n \"u\": {},\n \"ul\": {},\n \"var\": {},\n \"video\": {\n \"src\": 1,\n \"autobuffer\": 1,\n \"autoplay\": {\n \"autoplay\": 1\n },\n \"loop\": {\n \"loop\": 1\n },\n \"controls\": {\n \"controls\": 1\n },\n \"width\": 1,\n \"height\": 1,\n \"poster\": 1,\n \"muted\": {\n \"muted\": 1\n },\n \"preload\": {\n \"auto\": 1,\n \"metadata\": 1,\n \"none\": 1\n }\n },\n \"wbr\": {}\n };\n var elements = Object.keys(attributeMap);\n\n function is(token, type) {\n return token.type.lastIndexOf(type + \".xml\") > -1;\n }\n\n function findTagName(session, pos) {\n var iterator = new TokenIterator(session, pos.row, pos.column);\n var token = iterator.getCurrentToken();\n\n while (token && !is(token, \"tag-name\")) {\n token = iterator.stepBackward();\n }\n\n if (token) return token.value;\n }\n\n function findAttributeName(session, pos) {\n var iterator = new TokenIterator(session, pos.row, pos.column);\n var token = iterator.getCurrentToken();\n\n while (token && !is(token, \"attribute-name\")) {\n token = iterator.stepBackward();\n }\n\n if (token) return token.value;\n }\n\n var HtmlCompletions = function HtmlCompletions() {};\n\n (function () {\n this.getCompletions = function (state, session, pos, prefix) {\n var token = session.getTokenAt(pos.row, pos.column);\n if (!token) return [];\n if (is(token, \"tag-name\") || is(token, \"tag-open\") || is(token, \"end-tag-open\")) return this.getTagCompletions(state, session, pos, prefix);\n if (is(token, \"tag-whitespace\") || is(token, \"attribute-name\")) return this.getAttributeCompletions(state, session, pos, prefix);\n if (is(token, \"attribute-value\")) return this.getAttributeValueCompletions(state, session, pos, prefix);\n var line = session.getLine(pos.row).substr(0, pos.column);\n if (/&[a-z]*$/i.test(line)) return this.getHTMLEntityCompletions(state, session, pos, prefix);\n return [];\n };\n\n this.getTagCompletions = function (state, session, pos, prefix) {\n return elements.map(function (element) {\n return {\n value: element,\n meta: \"tag\",\n score: 1000000\n };\n });\n };\n\n this.getAttributeCompletions = function (state, session, pos, prefix) {\n var tagName = findTagName(session, pos);\n if (!tagName) return [];\n var attributes = globalAttributes;\n\n if (tagName in attributeMap) {\n attributes = attributes.concat(Object.keys(attributeMap[tagName]));\n }\n\n return attributes.map(function (attribute) {\n return {\n caption: attribute,\n snippet: attribute + '=\"$0\"',\n meta: \"attribute\",\n score: 1000000\n };\n });\n };\n\n this.getAttributeValueCompletions = function (state, session, pos, prefix) {\n var tagName = findTagName(session, pos);\n var attributeName = findAttributeName(session, pos);\n if (!tagName) return [];\n var values = [];\n\n if (tagName in attributeMap && attributeName in attributeMap[tagName] && _typeof(attributeMap[tagName][attributeName]) === \"object\") {\n values = Object.keys(attributeMap[tagName][attributeName]);\n }\n\n return values.map(function (value) {\n return {\n caption: value,\n snippet: value,\n meta: \"attribute value\",\n score: 1000000\n };\n });\n };\n\n this.getHTMLEntityCompletions = function (state, session, pos, prefix) {\n 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;'];\n return values.map(function (value) {\n return {\n caption: value,\n snippet: value,\n meta: \"html entity\",\n score: 1000000\n };\n });\n };\n }).call(HtmlCompletions.prototype);\n exports.HtmlCompletions = HtmlCompletions;\n});\nace.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) {\n \"use strict\";\n\n var oop = require(\"../lib/oop\");\n\n var lang = require(\"../lib/lang\");\n\n var TextMode = require(\"./text\").Mode;\n\n var JavaScriptMode = require(\"./javascript\").Mode;\n\n var CssMode = require(\"./css\").Mode;\n\n var HtmlHighlightRules = require(\"./html_highlight_rules\").HtmlHighlightRules;\n\n var XmlBehaviour = require(\"./behaviour/xml\").XmlBehaviour;\n\n var HtmlFoldMode = require(\"./folding/html\").FoldMode;\n\n var HtmlCompletions = require(\"./html_completions\").HtmlCompletions;\n\n var WorkerClient = require(\"../worker/worker_client\").WorkerClient;\n\n var voidElements = [\"area\", \"base\", \"br\", \"col\", \"embed\", \"hr\", \"img\", \"input\", \"keygen\", \"link\", \"meta\", \"menuitem\", \"param\", \"source\", \"track\", \"wbr\"];\n var optionalEndTags = [\"li\", \"dt\", \"dd\", \"p\", \"rt\", \"rp\", \"optgroup\", \"option\", \"colgroup\", \"td\", \"th\"];\n\n var Mode = function Mode(options) {\n this.fragmentContext = options && options.fragmentContext;\n this.HighlightRules = HtmlHighlightRules;\n this.$behaviour = new XmlBehaviour();\n this.$completer = new HtmlCompletions();\n this.createModeDelegates({\n \"js-\": JavaScriptMode,\n \"css-\": CssMode\n });\n this.foldingRules = new HtmlFoldMode(this.voidElements, lang.arrayToMap(optionalEndTags));\n };\n\n oop.inherits(Mode, TextMode);\n (function () {\n this.blockComment = {\n start: \"\"\n };\n this.voidElements = lang.arrayToMap(voidElements);\n\n this.getNextLineIndent = function (state, line, tab) {\n return this.$getIndent(line);\n };\n\n this.checkOutdent = function (state, line, input) {\n return false;\n };\n\n this.getCompletions = function (state, session, pos, prefix) {\n return this.$completer.getCompletions(state, session, pos, prefix);\n };\n\n this.createWorker = function (session) {\n if (this.constructor != Mode) return;\n var worker = new WorkerClient([\"ace\"], \"ace/mode/html_worker\", \"Worker\");\n worker.attachToDocument(session.getDocument());\n if (this.fragmentContext) worker.call(\"setOptions\", [{\n context: this.fragmentContext\n }]);\n worker.on(\"error\", function (e) {\n session.setAnnotations(e.data);\n });\n worker.on(\"terminate\", function () {\n session.clearAnnotations();\n });\n return worker;\n };\n\n this.$id = \"ace/mode/html\";\n this.snippetFileId = \"ace/snippets/html\";\n }).call(Mode.prototype);\n exports.Mode = Mode;\n});\n\n(function () {\n ace.require([\"ace/mode/html\"], function (m) {\n if ((typeof module === \"undefined\" ? \"undefined\" : _typeof(module)) == \"object\" && (typeof exports === \"undefined\" ? \"undefined\" : _typeof(exports)) == \"object\" && module) {\n module.exports = m;\n }\n });\n})();","function _typeof(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\nace.define(\"ace/theme/monokai\", [\"require\", \"exports\", \"module\", \"ace/lib/dom\"], function (require, exports, module) {\n exports.isDark = true;\n exports.cssClass = \"ace-monokai\";\n exports.cssText = \".ace-monokai .ace_gutter {\\\nbackground: #2F3129;\\\ncolor: #8F908A\\\n}\\\n.ace-monokai .ace_print-margin {\\\nwidth: 1px;\\\nbackground: #555651\\\n}\\\n.ace-monokai {\\\nbackground-color: #272822;\\\ncolor: #F8F8F2\\\n}\\\n.ace-monokai .ace_cursor {\\\ncolor: #F8F8F0\\\n}\\\n.ace-monokai .ace_marker-layer .ace_selection {\\\nbackground: #49483E\\\n}\\\n.ace-monokai.ace_multiselect .ace_selection.ace_start {\\\nbox-shadow: 0 0 3px 0px #272822;\\\n}\\\n.ace-monokai .ace_marker-layer .ace_step {\\\nbackground: rgb(102, 82, 0)\\\n}\\\n.ace-monokai .ace_marker-layer .ace_bracket {\\\nmargin: -1px 0 0 -1px;\\\nborder: 1px solid #49483E\\\n}\\\n.ace-monokai .ace_marker-layer .ace_active-line {\\\nbackground: #202020\\\n}\\\n.ace-monokai .ace_gutter-active-line {\\\nbackground-color: #272727\\\n}\\\n.ace-monokai .ace_marker-layer .ace_selected-word {\\\nborder: 1px solid #49483E\\\n}\\\n.ace-monokai .ace_invisible {\\\ncolor: #52524d\\\n}\\\n.ace-monokai .ace_entity.ace_name.ace_tag,\\\n.ace-monokai .ace_keyword,\\\n.ace-monokai .ace_meta.ace_tag,\\\n.ace-monokai .ace_storage {\\\ncolor: #F92672\\\n}\\\n.ace-monokai .ace_punctuation,\\\n.ace-monokai .ace_punctuation.ace_tag {\\\ncolor: #fff\\\n}\\\n.ace-monokai .ace_constant.ace_character,\\\n.ace-monokai .ace_constant.ace_language,\\\n.ace-monokai .ace_constant.ace_numeric,\\\n.ace-monokai .ace_constant.ace_other {\\\ncolor: #AE81FF\\\n}\\\n.ace-monokai .ace_invalid {\\\ncolor: #F8F8F0;\\\nbackground-color: #F92672\\\n}\\\n.ace-monokai .ace_invalid.ace_deprecated {\\\ncolor: #F8F8F0;\\\nbackground-color: #AE81FF\\\n}\\\n.ace-monokai .ace_support.ace_constant,\\\n.ace-monokai .ace_support.ace_function {\\\ncolor: #66D9EF\\\n}\\\n.ace-monokai .ace_fold {\\\nbackground-color: #A6E22E;\\\nborder-color: #F8F8F2\\\n}\\\n.ace-monokai .ace_storage.ace_type,\\\n.ace-monokai .ace_support.ace_class,\\\n.ace-monokai .ace_support.ace_type {\\\nfont-style: italic;\\\ncolor: #66D9EF\\\n}\\\n.ace-monokai .ace_entity.ace_name.ace_function,\\\n.ace-monokai .ace_entity.ace_other,\\\n.ace-monokai .ace_entity.ace_other.ace_attribute-name,\\\n.ace-monokai .ace_variable {\\\ncolor: #A6E22E\\\n}\\\n.ace-monokai .ace_variable.ace_parameter {\\\nfont-style: italic;\\\ncolor: #FD971F\\\n}\\\n.ace-monokai .ace_string {\\\ncolor: #E6DB74\\\n}\\\n.ace-monokai .ace_comment {\\\ncolor: #75715E\\\n}\\\n.ace-monokai .ace_indent-guide {\\\nbackground: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAYAAACZgbYnAAAAEklEQVQImWPQ0FD0ZXBzd/wPAAjVAoxeSgNeAAAAAElFTkSuQmCC) right repeat-y\\\n}\";\n\n var dom = require(\"../lib/dom\");\n\n dom.importCssString(exports.cssText, exports.cssClass, false);\n});\n\n(function () {\n ace.require([\"ace/theme/monokai\"], function (m) {\n if ((typeof module === \"undefined\" ? \"undefined\" : _typeof(module)) == \"object\" && (typeof exports === \"undefined\" ? \"undefined\" : _typeof(exports)) == \"object\" && module) {\n module.exports = m;\n }\n });\n})();","function _typeof(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\nace.define(\"ace/theme/iplastic\", [\"require\", \"exports\", \"module\", \"ace/lib/dom\"], function (require, exports, module) {\n exports.isDark = false;\n exports.cssClass = \"ace-iplastic\";\n exports.cssText = \".ace-iplastic .ace_gutter {\\\nbackground: #dddddd;\\\ncolor: #666666\\\n}\\\n.ace-iplastic .ace_print-margin {\\\nwidth: 1px;\\\nbackground: #bbbbbb\\\n}\\\n.ace-iplastic {\\\nbackground-color: #eeeeee;\\\ncolor: #333333\\\n}\\\n.ace-iplastic .ace_cursor {\\\ncolor: #333\\\n}\\\n.ace-iplastic .ace_marker-layer .ace_selection {\\\nbackground: #BAD6FD;\\\n}\\\n.ace-iplastic.ace_multiselect .ace_selection.ace_start {\\\nborder-radius: 4px\\\n}\\\n.ace-iplastic .ace_marker-layer .ace_step {\\\nbackground: #444444\\\n}\\\n.ace-iplastic .ace_marker-layer .ace_bracket {\\\nmargin: -1px 0 0 -1px;\\\nborder: 1px solid #49483E;\\\nbackground: #FFF799\\\n}\\\n.ace-iplastic .ace_marker-layer .ace_active-line {\\\nbackground: #e5e5e5\\\n}\\\n.ace-iplastic .ace_gutter-active-line {\\\nbackground-color: #eeeeee\\\n}\\\n.ace-iplastic .ace_marker-layer .ace_selected-word {\\\nborder: 1px solid #555555;\\\nborder-radius:4px\\\n}\\\n.ace-iplastic .ace_invisible {\\\ncolor: #999999\\\n}\\\n.ace-iplastic .ace_entity.ace_name.ace_tag,\\\n.ace-iplastic .ace_keyword,\\\n.ace-iplastic .ace_meta.ace_tag,\\\n.ace-iplastic .ace_storage {\\\ncolor: #0000FF\\\n}\\\n.ace-iplastic .ace_punctuation,\\\n.ace-iplastic .ace_punctuation.ace_tag {\\\ncolor: #000\\\n}\\\n.ace-iplastic .ace_constant {\\\ncolor: #333333;\\\nfont-weight: 700\\\n}\\\n.ace-iplastic .ace_constant.ace_character,\\\n.ace-iplastic .ace_constant.ace_language,\\\n.ace-iplastic .ace_constant.ace_numeric,\\\n.ace-iplastic .ace_constant.ace_other {\\\ncolor: #0066FF;\\\nfont-weight: 700\\\n}\\\n.ace-iplastic .ace_constant.ace_numeric{\\\nfont-weight: 100\\\n}\\\n.ace-iplastic .ace_invalid {\\\ncolor: #F8F8F0;\\\nbackground-color: #F92672\\\n}\\\n.ace-iplastic .ace_invalid.ace_deprecated {\\\ncolor: #F8F8F0;\\\nbackground-color: #AE81FF\\\n}\\\n.ace-iplastic .ace_support.ace_constant,\\\n.ace-iplastic .ace_support.ace_function {\\\ncolor: #333333;\\\nfont-weight: 700\\\n}\\\n.ace-iplastic .ace_fold {\\\nbackground-color: #464646;\\\nborder-color: #F8F8F2\\\n}\\\n.ace-iplastic .ace_storage.ace_type,\\\n.ace-iplastic .ace_support.ace_class,\\\n.ace-iplastic .ace_support.ace_type {\\\ncolor: #3333fc;\\\nfont-weight: 700\\\n}\\\n.ace-iplastic .ace_entity.ace_name.ace_function,\\\n.ace-iplastic .ace_entity.ace_other,\\\n.ace-iplastic .ace_entity.ace_other.ace_attribute-name,\\\n.ace-iplastic .ace_variable {\\\ncolor: #3366cc;\\\nfont-style: italic\\\n}\\\n.ace-iplastic .ace_variable.ace_parameter {\\\nfont-style: italic;\\\ncolor: #2469E0\\\n}\\\n.ace-iplastic .ace_string {\\\ncolor: #a55f03\\\n}\\\n.ace-iplastic .ace_comment {\\\ncolor: #777777;\\\nfont-style: italic\\\n}\\\n.ace-iplastic .ace_fold-widget {\\\nbackground-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAYAAACNbyblAAAANElEQVR42mWKsQ0AMAzC8ixLlrzQjzmBiEjp0A6WwBCSPgKAXoLkqSot7nN3yMwR7pZ32NzpKkVoDBUxKAAAAABJRU5ErkJggg==);\\\n}\\\n.ace-iplastic .ace_indent-guide {\\\nbackground: url(data:image/png;base64,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) right repeat-y\\\n}\";\n\n var dom = require(\"../lib/dom\");\n\n dom.importCssString(exports.cssText, exports.cssClass, false);\n});\n\n(function () {\n ace.require([\"ace/theme/iplastic\"], function (m) {\n if ((typeof module === \"undefined\" ? \"undefined\" : _typeof(module)) == \"object\" && (typeof exports === \"undefined\" ? \"undefined\" : _typeof(exports)) == \"object\" && module) {\n module.exports = m;\n }\n });\n})();","ace.config.setModuleUrl('ace/ext/beautify', require('file-loader?esModule=false!./src-noconflict/ext-beautify.js'));\nace.config.setModuleUrl('ace/ext/code_lens', require('file-loader?esModule=false!./src-noconflict/ext-code_lens.js'));\nace.config.setModuleUrl('ace/ext/elastic_tabstops_lite', require('file-loader?esModule=false!./src-noconflict/ext-elastic_tabstops_lite.js'));\nace.config.setModuleUrl('ace/ext/emmet', require('file-loader?esModule=false!./src-noconflict/ext-emmet.js'));\nace.config.setModuleUrl('ace/ext/error_marker', require('file-loader?esModule=false!./src-noconflict/ext-error_marker.js'));\nace.config.setModuleUrl('ace/ext/keyboard_menu', require('file-loader?esModule=false!./src-noconflict/ext-keybinding_menu.js'));\nace.config.setModuleUrl('ace/ext/language_tools', require('file-loader?esModule=false!./src-noconflict/ext-language_tools.js'));\nace.config.setModuleUrl('ace/ext/linking', require('file-loader?esModule=false!./src-noconflict/ext-linking.js'));\nace.config.setModuleUrl('ace/ext/modelist', require('file-loader?esModule=false!./src-noconflict/ext-modelist.js'));\nace.config.setModuleUrl('ace/ext/options', require('file-loader?esModule=false!./src-noconflict/ext-options.js'));\nace.config.setModuleUrl('ace/ext/prompt', require('file-loader?esModule=false!./src-noconflict/ext-prompt.js'));\nace.config.setModuleUrl('ace/ext/rtl', require('file-loader?esModule=false!./src-noconflict/ext-rtl.js'));\nace.config.setModuleUrl('ace/ext/searchbox', require('file-loader?esModule=false!./src-noconflict/ext-searchbox.js'));\nace.config.setModuleUrl('ace/ext/settings_menu', require('file-loader?esModule=false!./src-noconflict/ext-settings_menu.js'));\nace.config.setModuleUrl('ace/ext/spellcheck', require('file-loader?esModule=false!./src-noconflict/ext-spellcheck.js'));\nace.config.setModuleUrl('ace/ext/split', require('file-loader?esModule=false!./src-noconflict/ext-split.js'));\nace.config.setModuleUrl('ace/ext/static_highlight', require('file-loader?esModule=false!./src-noconflict/ext-static_highlight.js'));\nace.config.setModuleUrl('ace/ext/statusbar', require('file-loader?esModule=false!./src-noconflict/ext-statusbar.js'));\nace.config.setModuleUrl('ace/ext/textarea', require('file-loader?esModule=false!./src-noconflict/ext-textarea.js'));\nace.config.setModuleUrl('ace/ext/themelist', require('file-loader?esModule=false!./src-noconflict/ext-themelist.js'));\nace.config.setModuleUrl('ace/ext/whitespace', require('file-loader?esModule=false!./src-noconflict/ext-whitespace.js'));\nace.config.setModuleUrl('ace/keyboard/emacs', require('file-loader?esModule=false!./src-noconflict/keybinding-emacs.js'));\nace.config.setModuleUrl('ace/keyboard/sublime', require('file-loader?esModule=false!./src-noconflict/keybinding-sublime.js'));\nace.config.setModuleUrl('ace/keyboard/vim', require('file-loader?esModule=false!./src-noconflict/keybinding-vim.js'));\nace.config.setModuleUrl('ace/keyboard/vscode', require('file-loader?esModule=false!./src-noconflict/keybinding-vscode.js'));\nace.config.setModuleUrl('ace/mode/abap', require('file-loader?esModule=false!./src-noconflict/mode-abap.js'));\nace.config.setModuleUrl('ace/mode/abc', require('file-loader?esModule=false!./src-noconflict/mode-abc.js'));\nace.config.setModuleUrl('ace/mode/actionscript', require('file-loader?esModule=false!./src-noconflict/mode-actionscript.js'));\nace.config.setModuleUrl('ace/mode/ada', require('file-loader?esModule=false!./src-noconflict/mode-ada.js'));\nace.config.setModuleUrl('ace/mode/alda', require('file-loader?esModule=false!./src-noconflict/mode-alda.js'));\nace.config.setModuleUrl('ace/mode/apache_conf', require('file-loader?esModule=false!./src-noconflict/mode-apache_conf.js'));\nace.config.setModuleUrl('ace/mode/apex', require('file-loader?esModule=false!./src-noconflict/mode-apex.js'));\nace.config.setModuleUrl('ace/mode/applescript', require('file-loader?esModule=false!./src-noconflict/mode-applescript.js'));\nace.config.setModuleUrl('ace/mode/aql', require('file-loader?esModule=false!./src-noconflict/mode-aql.js'));\nace.config.setModuleUrl('ace/mode/asciidoc', require('file-loader?esModule=false!./src-noconflict/mode-asciidoc.js'));\nace.config.setModuleUrl('ace/mode/asl', require('file-loader?esModule=false!./src-noconflict/mode-asl.js'));\nace.config.setModuleUrl('ace/mode/assembly_x86', require('file-loader?esModule=false!./src-noconflict/mode-assembly_x86.js'));\nace.config.setModuleUrl('ace/mode/autohotkey', require('file-loader?esModule=false!./src-noconflict/mode-autohotkey.js'));\nace.config.setModuleUrl('ace/mode/batchfile', require('file-loader?esModule=false!./src-noconflict/mode-batchfile.js'));\nace.config.setModuleUrl('ace/mode/c9search', require('file-loader?esModule=false!./src-noconflict/mode-c9search.js'));\nace.config.setModuleUrl('ace/mode/cirru', require('file-loader?esModule=false!./src-noconflict/mode-cirru.js'));\nace.config.setModuleUrl('ace/mode/clojure', require('file-loader?esModule=false!./src-noconflict/mode-clojure.js'));\nace.config.setModuleUrl('ace/mode/cobol', require('file-loader?esModule=false!./src-noconflict/mode-cobol.js'));\nace.config.setModuleUrl('ace/mode/coffee', require('file-loader?esModule=false!./src-noconflict/mode-coffee.js'));\nace.config.setModuleUrl('ace/mode/coldfusion', require('file-loader?esModule=false!./src-noconflict/mode-coldfusion.js'));\nace.config.setModuleUrl('ace/mode/crystal', require('file-loader?esModule=false!./src-noconflict/mode-crystal.js'));\nace.config.setModuleUrl('ace/mode/csharp', require('file-loader?esModule=false!./src-noconflict/mode-csharp.js'));\nace.config.setModuleUrl('ace/mode/csound_document', require('file-loader?esModule=false!./src-noconflict/mode-csound_document.js'));\nace.config.setModuleUrl('ace/mode/csound_orchestra', require('file-loader?esModule=false!./src-noconflict/mode-csound_orchestra.js'));\nace.config.setModuleUrl('ace/mode/csound_score', require('file-loader?esModule=false!./src-noconflict/mode-csound_score.js'));\nace.config.setModuleUrl('ace/mode/csp', require('file-loader?esModule=false!./src-noconflict/mode-csp.js'));\nace.config.setModuleUrl('ace/mode/css', require('file-loader?esModule=false!./src-noconflict/mode-css.js'));\nace.config.setModuleUrl('ace/mode/curly', require('file-loader?esModule=false!./src-noconflict/mode-curly.js'));\nace.config.setModuleUrl('ace/mode/c_cpp', require('file-loader?esModule=false!./src-noconflict/mode-c_cpp.js'));\nace.config.setModuleUrl('ace/mode/d', require('file-loader?esModule=false!./src-noconflict/mode-d.js'));\nace.config.setModuleUrl('ace/mode/dart', require('file-loader?esModule=false!./src-noconflict/mode-dart.js'));\nace.config.setModuleUrl('ace/mode/diff', require('file-loader?esModule=false!./src-noconflict/mode-diff.js'));\nace.config.setModuleUrl('ace/mode/django', require('file-loader?esModule=false!./src-noconflict/mode-django.js'));\nace.config.setModuleUrl('ace/mode/dockerfile', require('file-loader?esModule=false!./src-noconflict/mode-dockerfile.js'));\nace.config.setModuleUrl('ace/mode/dot', require('file-loader?esModule=false!./src-noconflict/mode-dot.js'));\nace.config.setModuleUrl('ace/mode/drools', require('file-loader?esModule=false!./src-noconflict/mode-drools.js'));\nace.config.setModuleUrl('ace/mode/edifact', require('file-loader?esModule=false!./src-noconflict/mode-edifact.js'));\nace.config.setModuleUrl('ace/mode/eiffel', require('file-loader?esModule=false!./src-noconflict/mode-eiffel.js'));\nace.config.setModuleUrl('ace/mode/ejs', require('file-loader?esModule=false!./src-noconflict/mode-ejs.js'));\nace.config.setModuleUrl('ace/mode/elixir', require('file-loader?esModule=false!./src-noconflict/mode-elixir.js'));\nace.config.setModuleUrl('ace/mode/elm', require('file-loader?esModule=false!./src-noconflict/mode-elm.js'));\nace.config.setModuleUrl('ace/mode/erlang', require('file-loader?esModule=false!./src-noconflict/mode-erlang.js'));\nace.config.setModuleUrl('ace/mode/forth', require('file-loader?esModule=false!./src-noconflict/mode-forth.js'));\nace.config.setModuleUrl('ace/mode/fortran', require('file-loader?esModule=false!./src-noconflict/mode-fortran.js'));\nace.config.setModuleUrl('ace/mode/fsharp', require('file-loader?esModule=false!./src-noconflict/mode-fsharp.js'));\nace.config.setModuleUrl('ace/mode/fsl', require('file-loader?esModule=false!./src-noconflict/mode-fsl.js'));\nace.config.setModuleUrl('ace/mode/ftl', require('file-loader?esModule=false!./src-noconflict/mode-ftl.js'));\nace.config.setModuleUrl('ace/mode/gcode', require('file-loader?esModule=false!./src-noconflict/mode-gcode.js'));\nace.config.setModuleUrl('ace/mode/gherkin', require('file-loader?esModule=false!./src-noconflict/mode-gherkin.js'));\nace.config.setModuleUrl('ace/mode/gitignore', require('file-loader?esModule=false!./src-noconflict/mode-gitignore.js'));\nace.config.setModuleUrl('ace/mode/glsl', require('file-loader?esModule=false!./src-noconflict/mode-glsl.js'));\nace.config.setModuleUrl('ace/mode/gobstones', require('file-loader?esModule=false!./src-noconflict/mode-gobstones.js'));\nace.config.setModuleUrl('ace/mode/golang', require('file-loader?esModule=false!./src-noconflict/mode-golang.js'));\nace.config.setModuleUrl('ace/mode/graphqlschema', require('file-loader?esModule=false!./src-noconflict/mode-graphqlschema.js'));\nace.config.setModuleUrl('ace/mode/groovy', require('file-loader?esModule=false!./src-noconflict/mode-groovy.js'));\nace.config.setModuleUrl('ace/mode/haml', require('file-loader?esModule=false!./src-noconflict/mode-haml.js'));\nace.config.setModuleUrl('ace/mode/handlebars', require('file-loader?esModule=false!./src-noconflict/mode-handlebars.js'));\nace.config.setModuleUrl('ace/mode/haskell', require('file-loader?esModule=false!./src-noconflict/mode-haskell.js'));\nace.config.setModuleUrl('ace/mode/haskell_cabal', require('file-loader?esModule=false!./src-noconflict/mode-haskell_cabal.js'));\nace.config.setModuleUrl('ace/mode/haxe', require('file-loader?esModule=false!./src-noconflict/mode-haxe.js'));\nace.config.setModuleUrl('ace/mode/hjson', require('file-loader?esModule=false!./src-noconflict/mode-hjson.js'));\nace.config.setModuleUrl('ace/mode/html', require('file-loader?esModule=false!./src-noconflict/mode-html.js'));\nace.config.setModuleUrl('ace/mode/html_elixir', require('file-loader?esModule=false!./src-noconflict/mode-html_elixir.js'));\nace.config.setModuleUrl('ace/mode/html_ruby', require('file-loader?esModule=false!./src-noconflict/mode-html_ruby.js'));\nace.config.setModuleUrl('ace/mode/ini', require('file-loader?esModule=false!./src-noconflict/mode-ini.js'));\nace.config.setModuleUrl('ace/mode/io', require('file-loader?esModule=false!./src-noconflict/mode-io.js'));\nace.config.setModuleUrl('ace/mode/jack', require('file-loader?esModule=false!./src-noconflict/mode-jack.js'));\nace.config.setModuleUrl('ace/mode/jade', require('file-loader?esModule=false!./src-noconflict/mode-jade.js'));\nace.config.setModuleUrl('ace/mode/java', require('file-loader?esModule=false!./src-noconflict/mode-java.js'));\nace.config.setModuleUrl('ace/mode/javascript', require('file-loader?esModule=false!./src-noconflict/mode-javascript.js'));\nace.config.setModuleUrl('ace/mode/json', require('file-loader?esModule=false!./src-noconflict/mode-json.js'));\nace.config.setModuleUrl('ace/mode/json5', require('file-loader?esModule=false!./src-noconflict/mode-json5.js'));\nace.config.setModuleUrl('ace/mode/jsoniq', require('file-loader?esModule=false!./src-noconflict/mode-jsoniq.js'));\nace.config.setModuleUrl('ace/mode/jsp', require('file-loader?esModule=false!./src-noconflict/mode-jsp.js'));\nace.config.setModuleUrl('ace/mode/jssm', require('file-loader?esModule=false!./src-noconflict/mode-jssm.js'));\nace.config.setModuleUrl('ace/mode/jsx', require('file-loader?esModule=false!./src-noconflict/mode-jsx.js'));\nace.config.setModuleUrl('ace/mode/julia', require('file-loader?esModule=false!./src-noconflict/mode-julia.js'));\nace.config.setModuleUrl('ace/mode/kotlin', require('file-loader?esModule=false!./src-noconflict/mode-kotlin.js'));\nace.config.setModuleUrl('ace/mode/latex', require('file-loader?esModule=false!./src-noconflict/mode-latex.js'));\nace.config.setModuleUrl('ace/mode/less', require('file-loader?esModule=false!./src-noconflict/mode-less.js'));\nace.config.setModuleUrl('ace/mode/liquid', require('file-loader?esModule=false!./src-noconflict/mode-liquid.js'));\nace.config.setModuleUrl('ace/mode/lisp', require('file-loader?esModule=false!./src-noconflict/mode-lisp.js'));\nace.config.setModuleUrl('ace/mode/livescript', require('file-loader?esModule=false!./src-noconflict/mode-livescript.js'));\nace.config.setModuleUrl('ace/mode/logiql', require('file-loader?esModule=false!./src-noconflict/mode-logiql.js'));\nace.config.setModuleUrl('ace/mode/logtalk', require('file-loader?esModule=false!./src-noconflict/mode-logtalk.js'));\nace.config.setModuleUrl('ace/mode/lsl', require('file-loader?esModule=false!./src-noconflict/mode-lsl.js'));\nace.config.setModuleUrl('ace/mode/lua', require('file-loader?esModule=false!./src-noconflict/mode-lua.js'));\nace.config.setModuleUrl('ace/mode/luapage', require('file-loader?esModule=false!./src-noconflict/mode-luapage.js'));\nace.config.setModuleUrl('ace/mode/lucene', require('file-loader?esModule=false!./src-noconflict/mode-lucene.js'));\nace.config.setModuleUrl('ace/mode/makefile', require('file-loader?esModule=false!./src-noconflict/mode-makefile.js'));\nace.config.setModuleUrl('ace/mode/markdown', require('file-loader?esModule=false!./src-noconflict/mode-markdown.js'));\nace.config.setModuleUrl('ace/mode/mask', require('file-loader?esModule=false!./src-noconflict/mode-mask.js'));\nace.config.setModuleUrl('ace/mode/matlab', require('file-loader?esModule=false!./src-noconflict/mode-matlab.js'));\nace.config.setModuleUrl('ace/mode/maze', require('file-loader?esModule=false!./src-noconflict/mode-maze.js'));\nace.config.setModuleUrl('ace/mode/mediawiki', require('file-loader?esModule=false!./src-noconflict/mode-mediawiki.js'));\nace.config.setModuleUrl('ace/mode/mel', require('file-loader?esModule=false!./src-noconflict/mode-mel.js'));\nace.config.setModuleUrl('ace/mode/mixal', require('file-loader?esModule=false!./src-noconflict/mode-mixal.js'));\nace.config.setModuleUrl('ace/mode/mushcode', require('file-loader?esModule=false!./src-noconflict/mode-mushcode.js'));\nace.config.setModuleUrl('ace/mode/mysql', require('file-loader?esModule=false!./src-noconflict/mode-mysql.js'));\nace.config.setModuleUrl('ace/mode/nginx', require('file-loader?esModule=false!./src-noconflict/mode-nginx.js'));\nace.config.setModuleUrl('ace/mode/nim', require('file-loader?esModule=false!./src-noconflict/mode-nim.js'));\nace.config.setModuleUrl('ace/mode/nix', require('file-loader?esModule=false!./src-noconflict/mode-nix.js'));\nace.config.setModuleUrl('ace/mode/nsis', require('file-loader?esModule=false!./src-noconflict/mode-nsis.js'));\nace.config.setModuleUrl('ace/mode/nunjucks', require('file-loader?esModule=false!./src-noconflict/mode-nunjucks.js'));\nace.config.setModuleUrl('ace/mode/objectivec', require('file-loader?esModule=false!./src-noconflict/mode-objectivec.js'));\nace.config.setModuleUrl('ace/mode/ocaml', require('file-loader?esModule=false!./src-noconflict/mode-ocaml.js'));\nace.config.setModuleUrl('ace/mode/pascal', require('file-loader?esModule=false!./src-noconflict/mode-pascal.js'));\nace.config.setModuleUrl('ace/mode/perl', require('file-loader?esModule=false!./src-noconflict/mode-perl.js'));\nace.config.setModuleUrl('ace/mode/pgsql', require('file-loader?esModule=false!./src-noconflict/mode-pgsql.js'));\nace.config.setModuleUrl('ace/mode/php', require('file-loader?esModule=false!./src-noconflict/mode-php.js'));\nace.config.setModuleUrl('ace/mode/php_laravel_blade', require('file-loader?esModule=false!./src-noconflict/mode-php_laravel_blade.js'));\nace.config.setModuleUrl('ace/mode/pig', require('file-loader?esModule=false!./src-noconflict/mode-pig.js'));\nace.config.setModuleUrl('ace/mode/plain_text', require('file-loader?esModule=false!./src-noconflict/mode-plain_text.js'));\nace.config.setModuleUrl('ace/mode/powershell', require('file-loader?esModule=false!./src-noconflict/mode-powershell.js'));\nace.config.setModuleUrl('ace/mode/praat', require('file-loader?esModule=false!./src-noconflict/mode-praat.js'));\nace.config.setModuleUrl('ace/mode/prisma', require('file-loader?esModule=false!./src-noconflict/mode-prisma.js'));\nace.config.setModuleUrl('ace/mode/prolog', require('file-loader?esModule=false!./src-noconflict/mode-prolog.js'));\nace.config.setModuleUrl('ace/mode/properties', require('file-loader?esModule=false!./src-noconflict/mode-properties.js'));\nace.config.setModuleUrl('ace/mode/protobuf', require('file-loader?esModule=false!./src-noconflict/mode-protobuf.js'));\nace.config.setModuleUrl('ace/mode/puppet', require('file-loader?esModule=false!./src-noconflict/mode-puppet.js'));\nace.config.setModuleUrl('ace/mode/python', require('file-loader?esModule=false!./src-noconflict/mode-python.js'));\nace.config.setModuleUrl('ace/mode/qml', require('file-loader?esModule=false!./src-noconflict/mode-qml.js'));\nace.config.setModuleUrl('ace/mode/r', require('file-loader?esModule=false!./src-noconflict/mode-r.js'));\nace.config.setModuleUrl('ace/mode/razor', require('file-loader?esModule=false!./src-noconflict/mode-razor.js'));\nace.config.setModuleUrl('ace/mode/rdoc', require('file-loader?esModule=false!./src-noconflict/mode-rdoc.js'));\nace.config.setModuleUrl('ace/mode/red', require('file-loader?esModule=false!./src-noconflict/mode-red.js'));\nace.config.setModuleUrl('ace/mode/redshift', require('file-loader?esModule=false!./src-noconflict/mode-redshift.js'));\nace.config.setModuleUrl('ace/mode/rhtml', require('file-loader?esModule=false!./src-noconflict/mode-rhtml.js'));\nace.config.setModuleUrl('ace/mode/rst', require('file-loader?esModule=false!./src-noconflict/mode-rst.js'));\nace.config.setModuleUrl('ace/mode/ruby', require('file-loader?esModule=false!./src-noconflict/mode-ruby.js'));\nace.config.setModuleUrl('ace/mode/rust', require('file-loader?esModule=false!./src-noconflict/mode-rust.js'));\nace.config.setModuleUrl('ace/mode/sass', require('file-loader?esModule=false!./src-noconflict/mode-sass.js'));\nace.config.setModuleUrl('ace/mode/scad', require('file-loader?esModule=false!./src-noconflict/mode-scad.js'));\nace.config.setModuleUrl('ace/mode/scala', require('file-loader?esModule=false!./src-noconflict/mode-scala.js'));\nace.config.setModuleUrl('ace/mode/scheme', require('file-loader?esModule=false!./src-noconflict/mode-scheme.js'));\nace.config.setModuleUrl('ace/mode/scss', require('file-loader?esModule=false!./src-noconflict/mode-scss.js'));\nace.config.setModuleUrl('ace/mode/sh', require('file-loader?esModule=false!./src-noconflict/mode-sh.js'));\nace.config.setModuleUrl('ace/mode/sjs', require('file-loader?esModule=false!./src-noconflict/mode-sjs.js'));\nace.config.setModuleUrl('ace/mode/slim', require('file-loader?esModule=false!./src-noconflict/mode-slim.js'));\nace.config.setModuleUrl('ace/mode/smarty', require('file-loader?esModule=false!./src-noconflict/mode-smarty.js'));\nace.config.setModuleUrl('ace/mode/snippets', require('file-loader?esModule=false!./src-noconflict/mode-snippets.js'));\nace.config.setModuleUrl('ace/mode/soy_template', require('file-loader?esModule=false!./src-noconflict/mode-soy_template.js'));\nace.config.setModuleUrl('ace/mode/space', require('file-loader?esModule=false!./src-noconflict/mode-space.js'));\nace.config.setModuleUrl('ace/mode/sparql', require('file-loader?esModule=false!./src-noconflict/mode-sparql.js'));\nace.config.setModuleUrl('ace/mode/sql', require('file-loader?esModule=false!./src-noconflict/mode-sql.js'));\nace.config.setModuleUrl('ace/mode/sqlserver', require('file-loader?esModule=false!./src-noconflict/mode-sqlserver.js'));\nace.config.setModuleUrl('ace/mode/stylus', require('file-loader?esModule=false!./src-noconflict/mode-stylus.js'));\nace.config.setModuleUrl('ace/mode/svg', require('file-loader?esModule=false!./src-noconflict/mode-svg.js'));\nace.config.setModuleUrl('ace/mode/swift', require('file-loader?esModule=false!./src-noconflict/mode-swift.js'));\nace.config.setModuleUrl('ace/mode/tcl', require('file-loader?esModule=false!./src-noconflict/mode-tcl.js'));\nace.config.setModuleUrl('ace/mode/terraform', require('file-loader?esModule=false!./src-noconflict/mode-terraform.js'));\nace.config.setModuleUrl('ace/mode/tex', require('file-loader?esModule=false!./src-noconflict/mode-tex.js'));\nace.config.setModuleUrl('ace/mode/text', require('file-loader?esModule=false!./src-noconflict/mode-text.js'));\nace.config.setModuleUrl('ace/mode/textile', require('file-loader?esModule=false!./src-noconflict/mode-textile.js'));\nace.config.setModuleUrl('ace/mode/toml', require('file-loader?esModule=false!./src-noconflict/mode-toml.js'));\nace.config.setModuleUrl('ace/mode/tsx', require('file-loader?esModule=false!./src-noconflict/mode-tsx.js'));\nace.config.setModuleUrl('ace/mode/turtle', require('file-loader?esModule=false!./src-noconflict/mode-turtle.js'));\nace.config.setModuleUrl('ace/mode/twig', require('file-loader?esModule=false!./src-noconflict/mode-twig.js'));\nace.config.setModuleUrl('ace/mode/typescript', require('file-loader?esModule=false!./src-noconflict/mode-typescript.js'));\nace.config.setModuleUrl('ace/mode/vala', require('file-loader?esModule=false!./src-noconflict/mode-vala.js'));\nace.config.setModuleUrl('ace/mode/vbscript', require('file-loader?esModule=false!./src-noconflict/mode-vbscript.js'));\nace.config.setModuleUrl('ace/mode/velocity', require('file-loader?esModule=false!./src-noconflict/mode-velocity.js'));\nace.config.setModuleUrl('ace/mode/verilog', require('file-loader?esModule=false!./src-noconflict/mode-verilog.js'));\nace.config.setModuleUrl('ace/mode/vhdl', require('file-loader?esModule=false!./src-noconflict/mode-vhdl.js'));\nace.config.setModuleUrl('ace/mode/visualforce', require('file-loader?esModule=false!./src-noconflict/mode-visualforce.js'));\nace.config.setModuleUrl('ace/mode/wollok', require('file-loader?esModule=false!./src-noconflict/mode-wollok.js'));\nace.config.setModuleUrl('ace/mode/xml', require('file-loader?esModule=false!./src-noconflict/mode-xml.js'));\nace.config.setModuleUrl('ace/mode/xquery', require('file-loader?esModule=false!./src-noconflict/mode-xquery.js'));\nace.config.setModuleUrl('ace/mode/yaml', require('file-loader?esModule=false!./src-noconflict/mode-yaml.js'));\nace.config.setModuleUrl('ace/mode/zeek', require('file-loader?esModule=false!./src-noconflict/mode-zeek.js'));\nace.config.setModuleUrl('ace/theme/ambiance', require('file-loader?esModule=false!./src-noconflict/theme-ambiance.js'));\nace.config.setModuleUrl('ace/theme/chaos', require('file-loader?esModule=false!./src-noconflict/theme-chaos.js'));\nace.config.setModuleUrl('ace/theme/chrome', require('file-loader?esModule=false!./src-noconflict/theme-chrome.js'));\nace.config.setModuleUrl('ace/theme/clouds', require('file-loader?esModule=false!./src-noconflict/theme-clouds.js'));\nace.config.setModuleUrl('ace/theme/clouds_midnight', require('file-loader?esModule=false!./src-noconflict/theme-clouds_midnight.js'));\nace.config.setModuleUrl('ace/theme/cobalt', require('file-loader?esModule=false!./src-noconflict/theme-cobalt.js'));\nace.config.setModuleUrl('ace/theme/crimson_editor', require('file-loader?esModule=false!./src-noconflict/theme-crimson_editor.js'));\nace.config.setModuleUrl('ace/theme/dawn', require('file-loader?esModule=false!./src-noconflict/theme-dawn.js'));\nace.config.setModuleUrl('ace/theme/dracula', require('file-loader?esModule=false!./src-noconflict/theme-dracula.js'));\nace.config.setModuleUrl('ace/theme/dreamweaver', require('file-loader?esModule=false!./src-noconflict/theme-dreamweaver.js'));\nace.config.setModuleUrl('ace/theme/eclipse', require('file-loader?esModule=false!./src-noconflict/theme-eclipse.js'));\nace.config.setModuleUrl('ace/theme/github', require('file-loader?esModule=false!./src-noconflict/theme-github.js'));\nace.config.setModuleUrl('ace/theme/gob', require('file-loader?esModule=false!./src-noconflict/theme-gob.js'));\nace.config.setModuleUrl('ace/theme/gruvbox', require('file-loader?esModule=false!./src-noconflict/theme-gruvbox.js'));\nace.config.setModuleUrl('ace/theme/idle_fingers', require('file-loader?esModule=false!./src-noconflict/theme-idle_fingers.js'));\nace.config.setModuleUrl('ace/theme/iplastic', require('file-loader?esModule=false!./src-noconflict/theme-iplastic.js'));\nace.config.setModuleUrl('ace/theme/katzenmilch', require('file-loader?esModule=false!./src-noconflict/theme-katzenmilch.js'));\nace.config.setModuleUrl('ace/theme/kr_theme', require('file-loader?esModule=false!./src-noconflict/theme-kr_theme.js'));\nace.config.setModuleUrl('ace/theme/kuroir', require('file-loader?esModule=false!./src-noconflict/theme-kuroir.js'));\nace.config.setModuleUrl('ace/theme/merbivore', require('file-loader?esModule=false!./src-noconflict/theme-merbivore.js'));\nace.config.setModuleUrl('ace/theme/merbivore_soft', require('file-loader?esModule=false!./src-noconflict/theme-merbivore_soft.js'));\nace.config.setModuleUrl('ace/theme/monokai', require('file-loader?esModule=false!./src-noconflict/theme-monokai.js'));\nace.config.setModuleUrl('ace/theme/mono_industrial', require('file-loader?esModule=false!./src-noconflict/theme-mono_industrial.js'));\nace.config.setModuleUrl('ace/theme/nord_dark', require('file-loader?esModule=false!./src-noconflict/theme-nord_dark.js'));\nace.config.setModuleUrl('ace/theme/pastel_on_dark', require('file-loader?esModule=false!./src-noconflict/theme-pastel_on_dark.js'));\nace.config.setModuleUrl('ace/theme/solarized_dark', require('file-loader?esModule=false!./src-noconflict/theme-solarized_dark.js'));\nace.config.setModuleUrl('ace/theme/solarized_light', require('file-loader?esModule=false!./src-noconflict/theme-solarized_light.js'));\nace.config.setModuleUrl('ace/theme/sqlserver', require('file-loader?esModule=false!./src-noconflict/theme-sqlserver.js'));\nace.config.setModuleUrl('ace/theme/terminal', require('file-loader?esModule=false!./src-noconflict/theme-terminal.js'));\nace.config.setModuleUrl('ace/theme/textmate', require('file-loader?esModule=false!./src-noconflict/theme-textmate.js'));\nace.config.setModuleUrl('ace/theme/tomorrow', require('file-loader?esModule=false!./src-noconflict/theme-tomorrow.js'));\nace.config.setModuleUrl('ace/theme/tomorrow_night', require('file-loader?esModule=false!./src-noconflict/theme-tomorrow_night.js'));\nace.config.setModuleUrl('ace/theme/tomorrow_night_blue', require('file-loader?esModule=false!./src-noconflict/theme-tomorrow_night_blue.js'));\nace.config.setModuleUrl('ace/theme/tomorrow_night_bright', require('file-loader?esModule=false!./src-noconflict/theme-tomorrow_night_bright.js'));\nace.config.setModuleUrl('ace/theme/tomorrow_night_eighties', require('file-loader?esModule=false!./src-noconflict/theme-tomorrow_night_eighties.js'));\nace.config.setModuleUrl('ace/theme/twilight', require('file-loader?esModule=false!./src-noconflict/theme-twilight.js'));\nace.config.setModuleUrl('ace/theme/vibrant_ink', require('file-loader?esModule=false!./src-noconflict/theme-vibrant_ink.js'));\nace.config.setModuleUrl('ace/theme/xcode', require('file-loader?esModule=false!./src-noconflict/theme-xcode.js'));\nace.config.setModuleUrl('ace/mode/base_worker', require('file-loader?esModule=false!./src-noconflict/worker-base.js'));\nace.config.setModuleUrl('ace/mode/coffee_worker', require('file-loader?esModule=false!./src-noconflict/worker-coffee.js'));\nace.config.setModuleUrl('ace/mode/css_worker', require('file-loader?esModule=false!./src-noconflict/worker-css.js'));\nace.config.setModuleUrl('ace/mode/html_worker', require('file-loader?esModule=false!./src-noconflict/worker-html.js'));\nace.config.setModuleUrl('ace/mode/javascript_worker', require('file-loader?esModule=false!./src-noconflict/worker-javascript.js'));\nace.config.setModuleUrl('ace/mode/json_worker', require('file-loader?esModule=false!./src-noconflict/worker-json.js'));\nace.config.setModuleUrl('ace/mode/lua_worker', require('file-loader?esModule=false!./src-noconflict/worker-lua.js'));\nace.config.setModuleUrl('ace/mode/php_worker', require('file-loader?esModule=false!./src-noconflict/worker-php.js'));\nace.config.setModuleUrl('ace/mode/xml_worker', require('file-loader?esModule=false!./src-noconflict/worker-xml.js'));\nace.config.setModuleUrl('ace/mode/xquery_worker', require('file-loader?esModule=false!./src-noconflict/worker-xquery.js'));\nace.config.setModuleUrl('ace/snippets/abap', require('file-loader?esModule=false!./src-noconflict/snippets/abap.js'));\nace.config.setModuleUrl('ace/snippets/abc', require('file-loader?esModule=false!./src-noconflict/snippets/abc.js'));\nace.config.setModuleUrl('ace/snippets/actionscript', require('file-loader?esModule=false!./src-noconflict/snippets/actionscript.js'));\nace.config.setModuleUrl('ace/snippets/ada', require('file-loader?esModule=false!./src-noconflict/snippets/ada.js'));\nace.config.setModuleUrl('ace/snippets/alda', require('file-loader?esModule=false!./src-noconflict/snippets/alda.js'));\nace.config.setModuleUrl('ace/snippets/apache_conf', require('file-loader?esModule=false!./src-noconflict/snippets/apache_conf.js'));\nace.config.setModuleUrl('ace/snippets/apex', require('file-loader?esModule=false!./src-noconflict/snippets/apex.js'));\nace.config.setModuleUrl('ace/snippets/applescript', require('file-loader?esModule=false!./src-noconflict/snippets/applescript.js'));\nace.config.setModuleUrl('ace/snippets/aql', require('file-loader?esModule=false!./src-noconflict/snippets/aql.js'));\nace.config.setModuleUrl('ace/snippets/asciidoc', require('file-loader?esModule=false!./src-noconflict/snippets/asciidoc.js'));\nace.config.setModuleUrl('ace/snippets/asl', require('file-loader?esModule=false!./src-noconflict/snippets/asl.js'));\nace.config.setModuleUrl('ace/snippets/assembly_x86', require('file-loader?esModule=false!./src-noconflict/snippets/assembly_x86.js'));\nace.config.setModuleUrl('ace/snippets/autohotkey', require('file-loader?esModule=false!./src-noconflict/snippets/autohotkey.js'));\nace.config.setModuleUrl('ace/snippets/batchfile', require('file-loader?esModule=false!./src-noconflict/snippets/batchfile.js'));\nace.config.setModuleUrl('ace/snippets/c9search', require('file-loader?esModule=false!./src-noconflict/snippets/c9search.js'));\nace.config.setModuleUrl('ace/snippets/cirru', require('file-loader?esModule=false!./src-noconflict/snippets/cirru.js'));\nace.config.setModuleUrl('ace/snippets/clojure', require('file-loader?esModule=false!./src-noconflict/snippets/clojure.js'));\nace.config.setModuleUrl('ace/snippets/cobol', require('file-loader?esModule=false!./src-noconflict/snippets/cobol.js'));\nace.config.setModuleUrl('ace/snippets/coffee', require('file-loader?esModule=false!./src-noconflict/snippets/coffee.js'));\nace.config.setModuleUrl('ace/snippets/coldfusion', require('file-loader?esModule=false!./src-noconflict/snippets/coldfusion.js'));\nace.config.setModuleUrl('ace/snippets/crystal', require('file-loader?esModule=false!./src-noconflict/snippets/crystal.js'));\nace.config.setModuleUrl('ace/snippets/csharp', require('file-loader?esModule=false!./src-noconflict/snippets/csharp.js'));\nace.config.setModuleUrl('ace/snippets/csound_document', require('file-loader?esModule=false!./src-noconflict/snippets/csound_document.js'));\nace.config.setModuleUrl('ace/snippets/csound_orchestra', require('file-loader?esModule=false!./src-noconflict/snippets/csound_orchestra.js'));\nace.config.setModuleUrl('ace/snippets/csound_score', require('file-loader?esModule=false!./src-noconflict/snippets/csound_score.js'));\nace.config.setModuleUrl('ace/snippets/csp', require('file-loader?esModule=false!./src-noconflict/snippets/csp.js'));\nace.config.setModuleUrl('ace/snippets/css', require('file-loader?esModule=false!./src-noconflict/snippets/css.js'));\nace.config.setModuleUrl('ace/snippets/curly', require('file-loader?esModule=false!./src-noconflict/snippets/curly.js'));\nace.config.setModuleUrl('ace/snippets/c_cpp', require('file-loader?esModule=false!./src-noconflict/snippets/c_cpp.js'));\nace.config.setModuleUrl('ace/snippets/d', require('file-loader?esModule=false!./src-noconflict/snippets/d.js'));\nace.config.setModuleUrl('ace/snippets/dart', require('file-loader?esModule=false!./src-noconflict/snippets/dart.js'));\nace.config.setModuleUrl('ace/snippets/diff', require('file-loader?esModule=false!./src-noconflict/snippets/diff.js'));\nace.config.setModuleUrl('ace/snippets/django', require('file-loader?esModule=false!./src-noconflict/snippets/django.js'));\nace.config.setModuleUrl('ace/snippets/dockerfile', require('file-loader?esModule=false!./src-noconflict/snippets/dockerfile.js'));\nace.config.setModuleUrl('ace/snippets/dot', require('file-loader?esModule=false!./src-noconflict/snippets/dot.js'));\nace.config.setModuleUrl('ace/snippets/drools', require('file-loader?esModule=false!./src-noconflict/snippets/drools.js'));\nace.config.setModuleUrl('ace/snippets/edifact', require('file-loader?esModule=false!./src-noconflict/snippets/edifact.js'));\nace.config.setModuleUrl('ace/snippets/eiffel', require('file-loader?esModule=false!./src-noconflict/snippets/eiffel.js'));\nace.config.setModuleUrl('ace/snippets/ejs', require('file-loader?esModule=false!./src-noconflict/snippets/ejs.js'));\nace.config.setModuleUrl('ace/snippets/elixir', require('file-loader?esModule=false!./src-noconflict/snippets/elixir.js'));\nace.config.setModuleUrl('ace/snippets/elm', require('file-loader?esModule=false!./src-noconflict/snippets/elm.js'));\nace.config.setModuleUrl('ace/snippets/erlang', require('file-loader?esModule=false!./src-noconflict/snippets/erlang.js'));\nace.config.setModuleUrl('ace/snippets/forth', require('file-loader?esModule=false!./src-noconflict/snippets/forth.js'));\nace.config.setModuleUrl('ace/snippets/fortran', require('file-loader?esModule=false!./src-noconflict/snippets/fortran.js'));\nace.config.setModuleUrl('ace/snippets/fsharp', require('file-loader?esModule=false!./src-noconflict/snippets/fsharp.js'));\nace.config.setModuleUrl('ace/snippets/fsl', require('file-loader?esModule=false!./src-noconflict/snippets/fsl.js'));\nace.config.setModuleUrl('ace/snippets/ftl', require('file-loader?esModule=false!./src-noconflict/snippets/ftl.js'));\nace.config.setModuleUrl('ace/snippets/gcode', require('file-loader?esModule=false!./src-noconflict/snippets/gcode.js'));\nace.config.setModuleUrl('ace/snippets/gherkin', require('file-loader?esModule=false!./src-noconflict/snippets/gherkin.js'));\nace.config.setModuleUrl('ace/snippets/gitignore', require('file-loader?esModule=false!./src-noconflict/snippets/gitignore.js'));\nace.config.setModuleUrl('ace/snippets/glsl', require('file-loader?esModule=false!./src-noconflict/snippets/glsl.js'));\nace.config.setModuleUrl('ace/snippets/gobstones', require('file-loader?esModule=false!./src-noconflict/snippets/gobstones.js'));\nace.config.setModuleUrl('ace/snippets/golang', require('file-loader?esModule=false!./src-noconflict/snippets/golang.js'));\nace.config.setModuleUrl('ace/snippets/graphqlschema', require('file-loader?esModule=false!./src-noconflict/snippets/graphqlschema.js'));\nace.config.setModuleUrl('ace/snippets/groovy', require('file-loader?esModule=false!./src-noconflict/snippets/groovy.js'));\nace.config.setModuleUrl('ace/snippets/haml', require('file-loader?esModule=false!./src-noconflict/snippets/haml.js'));\nace.config.setModuleUrl('ace/snippets/handlebars', require('file-loader?esModule=false!./src-noconflict/snippets/handlebars.js'));\nace.config.setModuleUrl('ace/snippets/haskell', require('file-loader?esModule=false!./src-noconflict/snippets/haskell.js'));\nace.config.setModuleUrl('ace/snippets/haskell_cabal', require('file-loader?esModule=false!./src-noconflict/snippets/haskell_cabal.js'));\nace.config.setModuleUrl('ace/snippets/haxe', require('file-loader?esModule=false!./src-noconflict/snippets/haxe.js'));\nace.config.setModuleUrl('ace/snippets/hjson', require('file-loader?esModule=false!./src-noconflict/snippets/hjson.js'));\nace.config.setModuleUrl('ace/snippets/html', require('file-loader?esModule=false!./src-noconflict/snippets/html.js'));\nace.config.setModuleUrl('ace/snippets/html_elixir', require('file-loader?esModule=false!./src-noconflict/snippets/html_elixir.js'));\nace.config.setModuleUrl('ace/snippets/html_ruby', require('file-loader?esModule=false!./src-noconflict/snippets/html_ruby.js'));\nace.config.setModuleUrl('ace/snippets/ini', require('file-loader?esModule=false!./src-noconflict/snippets/ini.js'));\nace.config.setModuleUrl('ace/snippets/io', require('file-loader?esModule=false!./src-noconflict/snippets/io.js'));\nace.config.setModuleUrl('ace/snippets/jack', require('file-loader?esModule=false!./src-noconflict/snippets/jack.js'));\nace.config.setModuleUrl('ace/snippets/jade', require('file-loader?esModule=false!./src-noconflict/snippets/jade.js'));\nace.config.setModuleUrl('ace/snippets/java', require('file-loader?esModule=false!./src-noconflict/snippets/java.js'));\nace.config.setModuleUrl('ace/snippets/javascript', require('file-loader?esModule=false!./src-noconflict/snippets/javascript.js'));\nace.config.setModuleUrl('ace/snippets/json', require('file-loader?esModule=false!./src-noconflict/snippets/json.js'));\nace.config.setModuleUrl('ace/snippets/json5', require('file-loader?esModule=false!./src-noconflict/snippets/json5.js'));\nace.config.setModuleUrl('ace/snippets/jsoniq', require('file-loader?esModule=false!./src-noconflict/snippets/jsoniq.js'));\nace.config.setModuleUrl('ace/snippets/jsp', require('file-loader?esModule=false!./src-noconflict/snippets/jsp.js'));\nace.config.setModuleUrl('ace/snippets/jssm', require('file-loader?esModule=false!./src-noconflict/snippets/jssm.js'));\nace.config.setModuleUrl('ace/snippets/jsx', require('file-loader?esModule=false!./src-noconflict/snippets/jsx.js'));\nace.config.setModuleUrl('ace/snippets/julia', require('file-loader?esModule=false!./src-noconflict/snippets/julia.js'));\nace.config.setModuleUrl('ace/snippets/kotlin', require('file-loader?esModule=false!./src-noconflict/snippets/kotlin.js'));\nace.config.setModuleUrl('ace/snippets/latex', require('file-loader?esModule=false!./src-noconflict/snippets/latex.js'));\nace.config.setModuleUrl('ace/snippets/less', require('file-loader?esModule=false!./src-noconflict/snippets/less.js'));\nace.config.setModuleUrl('ace/snippets/liquid', require('file-loader?esModule=false!./src-noconflict/snippets/liquid.js'));\nace.config.setModuleUrl('ace/snippets/lisp', require('file-loader?esModule=false!./src-noconflict/snippets/lisp.js'));\nace.config.setModuleUrl('ace/snippets/livescript', require('file-loader?esModule=false!./src-noconflict/snippets/livescript.js'));\nace.config.setModuleUrl('ace/snippets/logiql', require('file-loader?esModule=false!./src-noconflict/snippets/logiql.js'));\nace.config.setModuleUrl('ace/snippets/logtalk', require('file-loader?esModule=false!./src-noconflict/snippets/logtalk.js'));\nace.config.setModuleUrl('ace/snippets/lsl', require('file-loader?esModule=false!./src-noconflict/snippets/lsl.js'));\nace.config.setModuleUrl('ace/snippets/lua', require('file-loader?esModule=false!./src-noconflict/snippets/lua.js'));\nace.config.setModuleUrl('ace/snippets/luapage', require('file-loader?esModule=false!./src-noconflict/snippets/luapage.js'));\nace.config.setModuleUrl('ace/snippets/lucene', require('file-loader?esModule=false!./src-noconflict/snippets/lucene.js'));\nace.config.setModuleUrl('ace/snippets/makefile', require('file-loader?esModule=false!./src-noconflict/snippets/makefile.js'));\nace.config.setModuleUrl('ace/snippets/markdown', require('file-loader?esModule=false!./src-noconflict/snippets/markdown.js'));\nace.config.setModuleUrl('ace/snippets/mask', require('file-loader?esModule=false!./src-noconflict/snippets/mask.js'));\nace.config.setModuleUrl('ace/snippets/matlab', require('file-loader?esModule=false!./src-noconflict/snippets/matlab.js'));\nace.config.setModuleUrl('ace/snippets/maze', require('file-loader?esModule=false!./src-noconflict/snippets/maze.js'));\nace.config.setModuleUrl('ace/snippets/mediawiki', require('file-loader?esModule=false!./src-noconflict/snippets/mediawiki.js'));\nace.config.setModuleUrl('ace/snippets/mel', require('file-loader?esModule=false!./src-noconflict/snippets/mel.js'));\nace.config.setModuleUrl('ace/snippets/mixal', require('file-loader?esModule=false!./src-noconflict/snippets/mixal.js'));\nace.config.setModuleUrl('ace/snippets/mushcode', require('file-loader?esModule=false!./src-noconflict/snippets/mushcode.js'));\nace.config.setModuleUrl('ace/snippets/mysql', require('file-loader?esModule=false!./src-noconflict/snippets/mysql.js'));\nace.config.setModuleUrl('ace/snippets/nginx', require('file-loader?esModule=false!./src-noconflict/snippets/nginx.js'));\nace.config.setModuleUrl('ace/snippets/nim', require('file-loader?esModule=false!./src-noconflict/snippets/nim.js'));\nace.config.setModuleUrl('ace/snippets/nix', require('file-loader?esModule=false!./src-noconflict/snippets/nix.js'));\nace.config.setModuleUrl('ace/snippets/nsis', require('file-loader?esModule=false!./src-noconflict/snippets/nsis.js'));\nace.config.setModuleUrl('ace/snippets/nunjucks', require('file-loader?esModule=false!./src-noconflict/snippets/nunjucks.js'));\nace.config.setModuleUrl('ace/snippets/objectivec', require('file-loader?esModule=false!./src-noconflict/snippets/objectivec.js'));\nace.config.setModuleUrl('ace/snippets/ocaml', require('file-loader?esModule=false!./src-noconflict/snippets/ocaml.js'));\nace.config.setModuleUrl('ace/snippets/pascal', require('file-loader?esModule=false!./src-noconflict/snippets/pascal.js'));\nace.config.setModuleUrl('ace/snippets/perl', require('file-loader?esModule=false!./src-noconflict/snippets/perl.js'));\nace.config.setModuleUrl('ace/snippets/pgsql', require('file-loader?esModule=false!./src-noconflict/snippets/pgsql.js'));\nace.config.setModuleUrl('ace/snippets/php', require('file-loader?esModule=false!./src-noconflict/snippets/php.js'));\nace.config.setModuleUrl('ace/snippets/php_laravel_blade', require('file-loader?esModule=false!./src-noconflict/snippets/php_laravel_blade.js'));\nace.config.setModuleUrl('ace/snippets/pig', require('file-loader?esModule=false!./src-noconflict/snippets/pig.js'));\nace.config.setModuleUrl('ace/snippets/plain_text', require('file-loader?esModule=false!./src-noconflict/snippets/plain_text.js'));\nace.config.setModuleUrl('ace/snippets/powershell', require('file-loader?esModule=false!./src-noconflict/snippets/powershell.js'));\nace.config.setModuleUrl('ace/snippets/praat', require('file-loader?esModule=false!./src-noconflict/snippets/praat.js'));\nace.config.setModuleUrl('ace/snippets/prisma', require('file-loader?esModule=false!./src-noconflict/snippets/prisma.js'));\nace.config.setModuleUrl('ace/snippets/prolog', require('file-loader?esModule=false!./src-noconflict/snippets/prolog.js'));\nace.config.setModuleUrl('ace/snippets/properties', require('file-loader?esModule=false!./src-noconflict/snippets/properties.js'));\nace.config.setModuleUrl('ace/snippets/protobuf', require('file-loader?esModule=false!./src-noconflict/snippets/protobuf.js'));\nace.config.setModuleUrl('ace/snippets/puppet', require('file-loader?esModule=false!./src-noconflict/snippets/puppet.js'));\nace.config.setModuleUrl('ace/snippets/python', require('file-loader?esModule=false!./src-noconflict/snippets/python.js'));\nace.config.setModuleUrl('ace/snippets/qml', require('file-loader?esModule=false!./src-noconflict/snippets/qml.js'));\nace.config.setModuleUrl('ace/snippets/r', require('file-loader?esModule=false!./src-noconflict/snippets/r.js'));\nace.config.setModuleUrl('ace/snippets/razor', require('file-loader?esModule=false!./src-noconflict/snippets/razor.js'));\nace.config.setModuleUrl('ace/snippets/rdoc', require('file-loader?esModule=false!./src-noconflict/snippets/rdoc.js'));\nace.config.setModuleUrl('ace/snippets/red', require('file-loader?esModule=false!./src-noconflict/snippets/red.js'));\nace.config.setModuleUrl('ace/snippets/redshift', require('file-loader?esModule=false!./src-noconflict/snippets/redshift.js'));\nace.config.setModuleUrl('ace/snippets/rhtml', require('file-loader?esModule=false!./src-noconflict/snippets/rhtml.js'));\nace.config.setModuleUrl('ace/snippets/rst', require('file-loader?esModule=false!./src-noconflict/snippets/rst.js'));\nace.config.setModuleUrl('ace/snippets/ruby', require('file-loader?esModule=false!./src-noconflict/snippets/ruby.js'));\nace.config.setModuleUrl('ace/snippets/rust', require('file-loader?esModule=false!./src-noconflict/snippets/rust.js'));\nace.config.setModuleUrl('ace/snippets/sass', require('file-loader?esModule=false!./src-noconflict/snippets/sass.js'));\nace.config.setModuleUrl('ace/snippets/scad', require('file-loader?esModule=false!./src-noconflict/snippets/scad.js'));\nace.config.setModuleUrl('ace/snippets/scala', require('file-loader?esModule=false!./src-noconflict/snippets/scala.js'));\nace.config.setModuleUrl('ace/snippets/scheme', require('file-loader?esModule=false!./src-noconflict/snippets/scheme.js'));\nace.config.setModuleUrl('ace/snippets/scss', require('file-loader?esModule=false!./src-noconflict/snippets/scss.js'));\nace.config.setModuleUrl('ace/snippets/sh', require('file-loader?esModule=false!./src-noconflict/snippets/sh.js'));\nace.config.setModuleUrl('ace/snippets/sjs', require('file-loader?esModule=false!./src-noconflict/snippets/sjs.js'));\nace.config.setModuleUrl('ace/snippets/slim', require('file-loader?esModule=false!./src-noconflict/snippets/slim.js'));\nace.config.setModuleUrl('ace/snippets/smarty', require('file-loader?esModule=false!./src-noconflict/snippets/smarty.js'));\nace.config.setModuleUrl('ace/snippets/snippets', require('file-loader?esModule=false!./src-noconflict/snippets/snippets.js'));\nace.config.setModuleUrl('ace/snippets/soy_template', require('file-loader?esModule=false!./src-noconflict/snippets/soy_template.js'));\nace.config.setModuleUrl('ace/snippets/space', require('file-loader?esModule=false!./src-noconflict/snippets/space.js'));\nace.config.setModuleUrl('ace/snippets/sparql', require('file-loader?esModule=false!./src-noconflict/snippets/sparql.js'));\nace.config.setModuleUrl('ace/snippets/sql', require('file-loader?esModule=false!./src-noconflict/snippets/sql.js'));\nace.config.setModuleUrl('ace/snippets/sqlserver', require('file-loader?esModule=false!./src-noconflict/snippets/sqlserver.js'));\nace.config.setModuleUrl('ace/snippets/stylus', require('file-loader?esModule=false!./src-noconflict/snippets/stylus.js'));\nace.config.setModuleUrl('ace/snippets/svg', require('file-loader?esModule=false!./src-noconflict/snippets/svg.js'));\nace.config.setModuleUrl('ace/snippets/swift', require('file-loader?esModule=false!./src-noconflict/snippets/swift.js'));\nace.config.setModuleUrl('ace/snippets/tcl', require('file-loader?esModule=false!./src-noconflict/snippets/tcl.js'));\nace.config.setModuleUrl('ace/snippets/terraform', require('file-loader?esModule=false!./src-noconflict/snippets/terraform.js'));\nace.config.setModuleUrl('ace/snippets/tex', require('file-loader?esModule=false!./src-noconflict/snippets/tex.js'));\nace.config.setModuleUrl('ace/snippets/text', require('file-loader?esModule=false!./src-noconflict/snippets/text.js'));\nace.config.setModuleUrl('ace/snippets/textile', require('file-loader?esModule=false!./src-noconflict/snippets/textile.js'));\nace.config.setModuleUrl('ace/snippets/toml', require('file-loader?esModule=false!./src-noconflict/snippets/toml.js'));\nace.config.setModuleUrl('ace/snippets/tsx', require('file-loader?esModule=false!./src-noconflict/snippets/tsx.js'));\nace.config.setModuleUrl('ace/snippets/turtle', require('file-loader?esModule=false!./src-noconflict/snippets/turtle.js'));\nace.config.setModuleUrl('ace/snippets/twig', require('file-loader?esModule=false!./src-noconflict/snippets/twig.js'));\nace.config.setModuleUrl('ace/snippets/typescript', require('file-loader?esModule=false!./src-noconflict/snippets/typescript.js'));\nace.config.setModuleUrl('ace/snippets/vala', require('file-loader?esModule=false!./src-noconflict/snippets/vala.js'));\nace.config.setModuleUrl('ace/snippets/vbscript', require('file-loader?esModule=false!./src-noconflict/snippets/vbscript.js'));\nace.config.setModuleUrl('ace/snippets/velocity', require('file-loader?esModule=false!./src-noconflict/snippets/velocity.js'));\nace.config.setModuleUrl('ace/snippets/verilog', require('file-loader?esModule=false!./src-noconflict/snippets/verilog.js'));\nace.config.setModuleUrl('ace/snippets/vhdl', require('file-loader?esModule=false!./src-noconflict/snippets/vhdl.js'));\nace.config.setModuleUrl('ace/snippets/visualforce', require('file-loader?esModule=false!./src-noconflict/snippets/visualforce.js'));\nace.config.setModuleUrl('ace/snippets/wollok', require('file-loader?esModule=false!./src-noconflict/snippets/wollok.js'));\nace.config.setModuleUrl('ace/snippets/xml', require('file-loader?esModule=false!./src-noconflict/snippets/xml.js'));\nace.config.setModuleUrl('ace/snippets/xquery', require('file-loader?esModule=false!./src-noconflict/snippets/xquery.js'));\nace.config.setModuleUrl('ace/snippets/yaml', require('file-loader?esModule=false!./src-noconflict/snippets/yaml.js'));\nace.config.setModuleUrl('ace/snippets/zeek', require('file-loader?esModule=false!./src-noconflict/snippets/zeek.js'));","module.exports = __webpack_public_path__ + \"c396444cfe87439dc4c8790e9b751ac7.js\";","module.exports = __webpack_public_path__ + \"4b2c07ad5d5e4af96a96c2c97a1c3c2b.js\";","module.exports = __webpack_public_path__ + \"3e6545d8186404070ee2db43faed24cc.js\";","module.exports = __webpack_public_path__ + \"b36700dca0f45aaea21a3a38e38d6e17.js\";","module.exports = __webpack_public_path__ + \"6838641f1cb5c618a26a6d2eb1efa46a.js\";","module.exports = __webpack_public_path__ + \"72fdfabd6dfc2a2e30d1dc3c834d7dc9.js\";","module.exports = __webpack_public_path__ + \"c09110ba90a5118209bdbcb7cfadaeb3.js\";","module.exports = __webpack_public_path__ + \"aadc56761e50d8f2ee8b7fa7d77d10c7.js\";","module.exports = __webpack_public_path__ + \"c1b3bfc0850bc6ce981f876fc30eea3c.js\";","module.exports = __webpack_public_path__ + \"80a67705c9752b681bb81995caca529f.js\";","module.exports = __webpack_public_path__ + \"dd08b08cddaa2779661b5d77a2ec773d.js\";","module.exports = __webpack_public_path__ + \"228a91a1bcda8dbba9175f40122237ba.js\";","module.exports = __webpack_public_path__ + \"057252f26ea1648605bb4761ff9ba111.js\";","module.exports = __webpack_public_path__ + \"0e406adc384f12d0a62680a559d43046.js\";","module.exports = __webpack_public_path__ + \"793279965a04d09a37ad2c75a183cab0.js\";","module.exports = __webpack_public_path__ + \"9b44110ef7f21de72fff728d9fb0fae9.js\";","module.exports = __webpack_public_path__ + \"4f113f2fca38ab75d43639a483e6023d.js\";","module.exports = __webpack_public_path__ + \"281ba7da32226bacec5f7721c19742be.js\";","module.exports = __webpack_public_path__ + \"415c933c0ab8f0767bf8b1489bb216cf.js\";","module.exports = __webpack_public_path__ + \"08ad4208dd79a364f35bedc2a5f0faf8.js\";","module.exports = __webpack_public_path__ + \"28f7c6d603735a90811867a88a57ead7.js\";","module.exports = __webpack_public_path__ + \"38557635eeeda318a437bcfa4fd0d617.js\";","module.exports = __webpack_public_path__ + \"2ca929726a72b908e53cf9b6cbf47e9a.js\";","module.exports = __webpack_public_path__ + \"449e4b84e093925583780e21a2d950d7.js\";","module.exports = __webpack_public_path__ + \"157bacea95a86b906eca1bd014b14216.js\";","module.exports = __webpack_public_path__ + \"9842dd0e41bf7d2138e1b3a865733f73.js\";","module.exports = __webpack_public_path__ + \"bb608cbacfd6cdae049e11d4f6542ec8.js\";","module.exports = __webpack_public_path__ + \"f02bb44387c9d34748778ef1766beb0b.js\";","module.exports = __webpack_public_path__ + \"43859c9b70566a13a76680369a749971.js\";","module.exports = __webpack_public_path__ + \"a144513f08bd66e94e987312b0578009.js\";","module.exports = __webpack_public_path__ + \"cbceb25104f020e73b6580707cf2d5b8.js\";","module.exports = __webpack_public_path__ + \"ecbdec58f6ddd567df891e9ef8108d1f.js\";","module.exports = __webpack_public_path__ + \"0c47a480d445954f9e5ea483a76bbaec.js\";","module.exports = __webpack_public_path__ + \"a42da8e57dcc3222ac6b97497036cf48.js\";","module.exports = __webpack_public_path__ + \"550c20b3399475e7819b475386822be8.js\";","module.exports = __webpack_public_path__ + \"1233ecf8cd8ad9bdb00df0d5b1e57cb9.js\";","module.exports = __webpack_public_path__ + \"1a479f2d022a60c55d537615020e9f45.js\";","module.exports = __webpack_public_path__ + \"34270e3f0d28e177809b8b24667ceb09.js\";","module.exports = __webpack_public_path__ + \"d43b0bc6723e1bf49e3227ab9ea43c9b.js\";","module.exports = __webpack_public_path__ + \"c5306128873c39b4d9a2fb89c8963c9b.js\";","module.exports = __webpack_public_path__ + \"8ce9f431e81c44dd395febb4a26d069e.js\";","module.exports = __webpack_public_path__ + \"f6e7ab04dff06e2f33b307810bed6007.js\";","module.exports = __webpack_public_path__ + \"e8bc273adaface26db0c3aa0fc80dadd.js\";","module.exports = __webpack_public_path__ + \"d99694cac82260a36f2c64a45112cab4.js\";","module.exports = __webpack_public_path__ + \"ec3149156dd714f30af2b73170385ffd.js\";","module.exports = __webpack_public_path__ + \"a16525bdfee2a2ce8f4f901dbd35cc41.js\";","module.exports = __webpack_public_path__ + \"0728547977d91545ef61123d00325469.js\";","module.exports = __webpack_public_path__ + \"48d0e3916f249830cde65e1d552f5847.js\";","module.exports = __webpack_public_path__ + \"c47a02bd505adff8fa6a3456a8a1f84b.js\";","module.exports = __webpack_public_path__ + \"2c79c58cf6da03e4b952c3e993a00072.js\";","module.exports = __webpack_public_path__ + \"28cb38fabc9de5eb65f0cbd46d8e5da7.js\";","module.exports = __webpack_public_path__ + \"489b08a4c50426f8dc0ef63dda60fb1d.js\";","module.exports = __webpack_public_path__ + \"6f7b741defd4710135e94ddb96c472e9.js\";","module.exports = __webpack_public_path__ + \"48f4e03ddf789c325fc4e12a63596ed5.js\";","module.exports = __webpack_public_path__ + \"75e3b2216184a9f9838bf2236ddf247c.js\";","module.exports = __webpack_public_path__ + \"7e8acbf279214089d8f4908591baf8cc.js\";","module.exports = __webpack_public_path__ + \"59486822d8f7cae7b57c082d03ff5e3d.js\";","module.exports = __webpack_public_path__ + \"88c148ae8279b3db8d9d58a6ac05203b.js\";","module.exports = __webpack_public_path__ + \"7e0a1044a7ba2350017772a7ced4b65e.js\";","module.exports = __webpack_public_path__ + \"027847d13a0d5f5b9488108568567fd3.js\";","module.exports = __webpack_public_path__ + \"bd6ddc44e5d72442a7d9ad0370bb5f75.js\";","module.exports = __webpack_public_path__ + \"e8817c9b3f3555e5f94f0339d9cb51cd.js\";","module.exports = __webpack_public_path__ + \"a3738b975e0a68bb631d285a84ccd39e.js\";","module.exports = __webpack_public_path__ + \"796e263e40c84ec1a9f7d0acec5bcdff.js\";","module.exports = __webpack_public_path__ + \"968287aea36a30eb75e872ec7aba5fb7.js\";","module.exports = __webpack_public_path__ + \"1f735a3bfa687abc1fc81bdd0bbbb382.js\";","module.exports = __webpack_public_path__ + \"d8c6d44e1c25dd08a81da7fddb545c7c.js\";","module.exports = __webpack_public_path__ + \"96a6776a2b2c7630e2a912252ccba215.js\";","module.exports = __webpack_public_path__ + \"f1cb3c60c67760c92e765697c3d65779.js\";","module.exports = __webpack_public_path__ + \"d6fab02ab50ff41b4db88ec9fa9a8c54.js\";","module.exports = __webpack_public_path__ + \"82bdf37cb7703d86e9eb6c2a43da001f.js\";","module.exports = __webpack_public_path__ + \"b12a6a0b74c3e9fb1e36a3c3276bfcbf.js\";","module.exports = __webpack_public_path__ + \"36fec0b62819938905a1176f6e887545.js\";","module.exports = __webpack_public_path__ + \"a004cdb198e861bdc4929087e3659149.js\";","module.exports = __webpack_public_path__ + \"99701b824d8867f68676540e848561b8.js\";","module.exports = __webpack_public_path__ + \"1c444d31aeb6b38d6f643ef94a2c7535.js\";","module.exports = __webpack_public_path__ + \"c7f6d581906f9ecfb955bcb7e79bdfbb.js\";","module.exports = __webpack_public_path__ + \"7aa3c2b3c07214cd43074b61338e1885.js\";","module.exports = __webpack_public_path__ + \"d1a9868d08ef8f2ec9a303a5853d5c29.js\";","module.exports = __webpack_public_path__ + \"d3d41cab596ee303df402ce4a82a2cf0.js\";","module.exports = __webpack_public_path__ + \"a71cf43decf1dcc3cdfcda95204dc743.js\";","module.exports = __webpack_public_path__ + \"b95375029b38dbe1e5bfb9d8e36095eb.js\";","module.exports = __webpack_public_path__ + \"cf3067cf81ccc69e151e893bd43ac43b.js\";","module.exports = __webpack_public_path__ + \"1da5f4a7561a11e21f2e9f4a95e44858.js\";","module.exports = __webpack_public_path__ + \"059ed8dea895ab370bfd13e97b68e8de.js\";","module.exports = __webpack_public_path__ + \"8e14d5987c6d5866ce2d227ff8f63e22.js\";","module.exports = __webpack_public_path__ + \"0040fff4fe78915b8ae54adb898e3395.js\";","module.exports = __webpack_public_path__ + \"27823261035369f745f519a2d2f539ba.js\";","module.exports = __webpack_public_path__ + \"95a0308be670cf928d695bc7fbb918a9.js\";","module.exports = __webpack_public_path__ + \"80f1529f5a1c0dc76f1e9b7ce31509a2.js\";","module.exports = __webpack_public_path__ + \"42d09e4b4ef141172db30e2c056f9844.js\";","module.exports = __webpack_public_path__ + \"8f23fdaab0678c480ba9e3e118378547.js\";","module.exports = __webpack_public_path__ + \"4d4af61fa42089cdcf39d6a6b265e390.js\";","module.exports = __webpack_public_path__ + \"5ed314a4ccc1e3bb58f7a1fe4ff71de5.js\";","module.exports = __webpack_public_path__ + \"e0660cb609f9fabe1f0314cfa967e37f.js\";","module.exports = __webpack_public_path__ + \"fed339102f2ca8f711eee2f9d8b05067.js\";","module.exports = __webpack_public_path__ + \"b53fc830e65db7c9ccbe8fdf4fc367d7.js\";","module.exports = __webpack_public_path__ + \"cc9d8439f533a444e73a5d4f27c9eea6.js\";","module.exports = __webpack_public_path__ + \"bc0df83cf7d3d6a84e72aacfa1ebd87e.js\";","module.exports = __webpack_public_path__ + \"76b0f91afe3b63647910801c2e5a1c00.js\";","module.exports = __webpack_public_path__ + \"014acccdff9ee439db319d8ce1d8d94d.js\";","module.exports = __webpack_public_path__ + \"61bd7f53534c8c4d86841fc19cfe07ea.js\";","module.exports = __webpack_public_path__ + \"7151cd109be0f82b653ca84d65ba5821.js\";","module.exports = __webpack_public_path__ + \"3b7dcbc17b6ebc7ccb16a91c673328ec.js\";","module.exports = __webpack_public_path__ + \"dc2974c514ca1d2a97ae2ab084ecbd7a.js\";","module.exports = __webpack_public_path__ + \"06ec7e36205d2bdae980f02e4b66291a.js\";","module.exports = __webpack_public_path__ + \"82faaf33adc4803e874fa6865feadc94.js\";","module.exports = __webpack_public_path__ + \"b9c9a8f59fca5081deb19547590a7cda.js\";","module.exports = __webpack_public_path__ + \"38b2409b63e87e5a5439b0b3b1f6aea2.js\";","module.exports = __webpack_public_path__ + \"20346f9fe58a0858a281e78d3f218ddf.js\";","module.exports = __webpack_public_path__ + \"7215ea327f655dd30dee014f4d0aa857.js\";","module.exports = __webpack_public_path__ + \"742046fea1663d36afbb5a4813bf8965.js\";","module.exports = __webpack_public_path__ + \"1e5056da2d3fb0dcfb72897865a3436b.js\";","module.exports = __webpack_public_path__ + \"ff6f2140a4b7c550af0fde1f78138880.js\";","module.exports = __webpack_public_path__ + \"767f440bb90eec63510cf7943a6d5790.js\";","module.exports = __webpack_public_path__ + \"b3aad4f4be9cf085dab9a9228c8c9e0d.js\";","module.exports = __webpack_public_path__ + \"d33e85d7a422db5271fe35c739829970.js\";","module.exports = __webpack_public_path__ + \"aee6616285a846be10d8a7612a372ce3.js\";","module.exports = __webpack_public_path__ + \"df5437f65baf358a950d7cf0cb2937b2.js\";","module.exports = __webpack_public_path__ + \"7c5e8cb86d1cd237821a2cd6c5f47218.js\";","module.exports = __webpack_public_path__ + \"40beea513234ef96ce2e2bae750d16e3.js\";","module.exports = __webpack_public_path__ + \"a67744aaad8861699a5dd5ce7d52644d.js\";","module.exports = __webpack_public_path__ + \"8808ad4aa5ddcae6675cbb46a8714e01.js\";","module.exports = __webpack_public_path__ + \"644c9e14b44905255347393b174203f0.js\";","module.exports = __webpack_public_path__ + \"3e5a417f4e9aae31642cc51abe02539e.js\";","module.exports = __webpack_public_path__ + \"1f16b3de5c5b3ace99656e73c5f36a74.js\";","module.exports = __webpack_public_path__ + \"5fcf6f5120f6e0947466dd8b889ad64d.js\";","module.exports = __webpack_public_path__ + \"5ca0abad7bc227478fd0b42986881b47.js\";","module.exports = __webpack_public_path__ + \"aaaba3ce3556f643d630706b13bc5838.js\";","module.exports = __webpack_public_path__ + \"dec68044cf2bdfa15c99dbb43d566eed.js\";","module.exports = __webpack_public_path__ + \"52a6401ca62b8c5a2d0d252d0cda11a0.js\";","module.exports = __webpack_public_path__ + \"ecb84d67df4643ba17b30ece00624f34.js\";","module.exports = __webpack_public_path__ + \"822c9b60abde8ecf333b1d5c1df07202.js\";","module.exports = __webpack_public_path__ + \"42d01bb60db8136f4907bb67febdeb09.js\";","module.exports = __webpack_public_path__ + \"add37fe5b5089f83efd81c640722876c.js\";","module.exports = __webpack_public_path__ + \"7f4aea84e1945b25f35b0616f6453265.js\";","module.exports = __webpack_public_path__ + \"9ac89fe6ec46caf1889fd6d00ea429c7.js\";","module.exports = __webpack_public_path__ + \"4f53a23467e3186681b784267adf72d0.js\";","module.exports = __webpack_public_path__ + \"311c1a1b2e0670caa182300530d4326a.js\";","module.exports = __webpack_public_path__ + \"af0de0fe37340c3a223cc8c453dba126.js\";","module.exports = __webpack_public_path__ + \"cea0daf879941fbe58fdd6a6c05191db.js\";","module.exports = __webpack_public_path__ + \"840703e7fa46c4b240bb70102eb28558.js\";","module.exports = __webpack_public_path__ + \"a1377761ce5d1c5ac3044e8454bd6212.js\";","module.exports = __webpack_public_path__ + \"dd30f9769530088809b09963925a46b2.js\";","module.exports = __webpack_public_path__ + \"d7997d216210613f7b8936c9c1a42de2.js\";","module.exports = __webpack_public_path__ + \"74f611d1b495f1e7f975d8c073b6476a.js\";","module.exports = __webpack_public_path__ + \"2e7dc6b314e3e72fd6fe3fd461313e08.js\";","module.exports = __webpack_public_path__ + \"7b9b2b7d7d34c370a6fc856f10b31c51.js\";","module.exports = __webpack_public_path__ + \"f29ea7db86798cb85e2fa39e13ada29d.js\";","module.exports = __webpack_public_path__ + \"5b45732503580183bc720a92fb9f713a.js\";","module.exports = __webpack_public_path__ + \"eabed926cc344ba5e150358793024c86.js\";","module.exports = __webpack_public_path__ + \"c765ea8f7c9de5ea741b4fc57aa5dc29.js\";","module.exports = __webpack_public_path__ + \"085944507068807b8d5817b4443b7b73.js\";","module.exports = __webpack_public_path__ + \"4a5779d143fc0551aa02af58549353bd.js\";","module.exports = __webpack_public_path__ + \"ec0467ee38d098ca57a4d004435538f1.js\";","module.exports = __webpack_public_path__ + \"8498dc48aa2fdebe1f9603b41c86ea0e.js\";","module.exports = __webpack_public_path__ + \"004017a05f050274bbb3b5398ab0fa64.js\";","module.exports = __webpack_public_path__ + \"1c6e6f8cb15d37c63b9906c83f5ae888.js\";","module.exports = __webpack_public_path__ + \"aaf4723c4d00ecd3b47afc943c4b6353.js\";","module.exports = __webpack_public_path__ + \"2443e5adfad7b7216ccb6a7a0099b422.js\";","module.exports = __webpack_public_path__ + \"c2830d74c83c9b53b2b2f3859edb77be.js\";","module.exports = __webpack_public_path__ + \"e8da9305c2caec1e38c0a8e38efe6806.js\";","module.exports = __webpack_public_path__ + \"a6c54172de4280b0098bc770b01cd4d3.js\";","module.exports = __webpack_public_path__ + \"7470a91212dd79ba2da919355197eb10.js\";","module.exports = __webpack_public_path__ + \"419c281334764ce193dac6a1a14bef86.js\";","module.exports = __webpack_public_path__ + \"cc8804eb756a165bfabcd5b9af865168.js\";","module.exports = __webpack_public_path__ + \"650b6d4b87bf9deedcd960e8c921fb4c.js\";","module.exports = __webpack_public_path__ + \"db78426053e7347b2c68a780093d984f.js\";","module.exports = __webpack_public_path__ + \"2a1ccd770a564f5338711c37f37b2866.js\";","module.exports = __webpack_public_path__ + \"42c4dd1f1e8308c9922342ecd193c2d2.js\";","module.exports = __webpack_public_path__ + \"6499dbdb62e89f02d094284f828cfb6a.js\";","module.exports = __webpack_public_path__ + \"c190d0850622343a405de84a659417fc.js\";","module.exports = __webpack_public_path__ + \"0175995089f8fb14500873d39d063593.js\";","module.exports = __webpack_public_path__ + \"5eceb4784279bca5ba00019992358508.js\";","module.exports = __webpack_public_path__ + \"d8fa48e9ac0764385fec2eb9a8ad4039.js\";","module.exports = __webpack_public_path__ + \"01eef979348a7b0c2e806c808c5399ed.js\";","module.exports = __webpack_public_path__ + \"34e949b49916d41d3411548a2bf89ba4.js\";","module.exports = __webpack_public_path__ + \"98eb1e5b5211fcf292cea55e96003c60.js\";","module.exports = __webpack_public_path__ + \"a8e5f7d0059ad3953bedf1b2cb1b21c2.js\";","module.exports = __webpack_public_path__ + \"10d59b3a8418dca4fed327d4c4dd742a.js\";","module.exports = __webpack_public_path__ + \"aac7c0cac8287775dfc69a79a9e7af5e.js\";","module.exports = __webpack_public_path__ + \"8cfea26b04679f9cc0a859d81d9cec9d.js\";","module.exports = __webpack_public_path__ + \"dc8818a395b9afd1322a0ff106088640.js\";","module.exports = __webpack_public_path__ + \"d10aa25f94510ac66eeba7ddd6efb1b6.js\";","module.exports = __webpack_public_path__ + \"2664747c733c4b301e8b9732bde227ba.js\";","module.exports = __webpack_public_path__ + \"42acde3e2999e71f00d3091e86d3cc7b.js\";","module.exports = __webpack_public_path__ + \"06474c6485158d46d65fa5e14d0e559c.js\";","module.exports = __webpack_public_path__ + \"ea62b0ba1cc55de431ced3e2464f7785.js\";","module.exports = __webpack_public_path__ + \"41e31d49469188060e9dbd2877bf3005.js\";","module.exports = __webpack_public_path__ + \"c65f44d0dad6459c753a9757fa31bad8.js\";","module.exports = __webpack_public_path__ + \"9bc90658520c3db0edca069ba017beb9.js\";","module.exports = __webpack_public_path__ + \"6f7e614be5aedb21e71d5299afacbc89.js\";","module.exports = __webpack_public_path__ + \"ffdf7c9fbc12742cc28257bf02b83d88.js\";","module.exports = __webpack_public_path__ + \"8a5cf401073f658be0fff1536c2b3bc9.js\";","module.exports = __webpack_public_path__ + \"2d1c81f874d85dc919006edc9f9d314d.js\";","module.exports = __webpack_public_path__ + \"63996ee1f7b923f76c12ad36ef7b4008.js\";","module.exports = __webpack_public_path__ + \"9944f751791388917f19128fc1ce7dca.js\";","module.exports = __webpack_public_path__ + \"970a5b43e78a3b84121b1646f2f32383.js\";","module.exports = __webpack_public_path__ + \"b94b27f6943204e516fea024358d96fd.js\";","module.exports = __webpack_public_path__ + \"5c7175c0a69449aaec0897e95e96b9e5.js\";","module.exports = __webpack_public_path__ + \"e35b5e30056cab234f4b4c3430b59258.js\";","module.exports = __webpack_public_path__ + \"1223123fd31642c54d1d74ee1ee402b5.js\";","module.exports = __webpack_public_path__ + \"61a3db4412965b212d2e6c17ff85d37d.js\";","module.exports = __webpack_public_path__ + \"f7cf527802a97d287145705fdb92819a.js\";","module.exports = __webpack_public_path__ + \"9458153599ec5f57a17147be474334ae.js\";","module.exports = __webpack_public_path__ + \"e6df3bba426967bdf72fd5e116d74241.js\";","module.exports = __webpack_public_path__ + \"dae895998db426ad3f707b2755a4323b.js\";","module.exports = __webpack_public_path__ + \"08bc61d98d9dcc0dafd833bfe8877f9b.js\";","module.exports = __webpack_public_path__ + \"d9feb98b3f15fcc45275f67f8712008e.js\";","module.exports = __webpack_public_path__ + \"e2e2958c19e3f31b649528adda6f33aa.js\";","module.exports = __webpack_public_path__ + \"776e640bec395f4d5c24499a0c159ecf.js\";","module.exports = __webpack_public_path__ + \"6ff1adeb8c758c20e66b3792612d9f71.js\";","module.exports = __webpack_public_path__ + \"6016c44cc750257c79facb211bc0e72d.js\";","module.exports = __webpack_public_path__ + \"a6bd7ae1873427c3f4ebdcacd7e721ba.js\";","module.exports = __webpack_public_path__ + \"50c79b9589159980a2b9952d4bcfec96.js\";","module.exports = __webpack_public_path__ + \"0a66d4e392437582c79cd48cc48bbd6a.js\";","module.exports = __webpack_public_path__ + \"dd436da6f3239ee73acb3b4c0cd3d9a8.js\";","module.exports = __webpack_public_path__ + \"9e5f84f8cb9e9e57148898317aacaae5.js\";","module.exports = __webpack_public_path__ + \"8f5be8b51f594bb36bc57a1c1f03ba1e.js\";","module.exports = __webpack_public_path__ + \"b8361eea2527f47008768e6c85b5c2da.js\";","module.exports = __webpack_public_path__ + \"da432fad318e5e94b672fdcb7dc90fcf.js\";","module.exports = __webpack_public_path__ + \"ac4bb5de60537bd7ad29893568f2a24d.js\";","module.exports = __webpack_public_path__ + \"e848108ff159d7025b398332f435381b.js\";","module.exports = __webpack_public_path__ + \"ef2723858b059c29a472ee3dfa852436.js\";","module.exports = __webpack_public_path__ + \"fc19dc9baf026ed520fae8817c7020dc.js\";","module.exports = __webpack_public_path__ + \"956d7c7e10cb03405c6a5bc33d1a166e.js\";","module.exports = __webpack_public_path__ + \"13b2c5a40519b2f2860f6244204a4e6c.js\";","module.exports = __webpack_public_path__ + \"77eae379241dc25eb4769049a0275355.js\";","module.exports = __webpack_public_path__ + \"7f3a36b1e22f7df40bd2eb9e9a44812a.js\";","module.exports = __webpack_public_path__ + \"d00bc8b00e7c2775e6a57bf812aba113.js\";","module.exports = __webpack_public_path__ + \"5089974791b10552ffcabcd0339bb907.js\";","module.exports = __webpack_public_path__ + \"a9939f1fffcab8b8a33e3f6b3b3a85cd.js\";","module.exports = __webpack_public_path__ + \"11685cd347e70f6ddd9132b8b41dbe10.js\";","module.exports = __webpack_public_path__ + \"f15fd42c2e567f607aa251e8ffd0cae9.js\";","module.exports = __webpack_public_path__ + \"de2e46bbdafe15f9f22fe966b478c852.js\";","module.exports = __webpack_public_path__ + \"4ddbca767aec9a2f15f71c1f7a7ea75c.js\";","module.exports = __webpack_public_path__ + \"c1af90da50b5a8e8d3e26381bb1bfe65.js\";","module.exports = __webpack_public_path__ + \"53e1d84a3929b441cfd289363e9ffc21.js\";","module.exports = __webpack_public_path__ + \"dfed40b32682ce8e435308b535cd476f.js\";","module.exports = __webpack_public_path__ + \"283f0b691ce7b53559c7fb1db66a1d74.js\";","module.exports = __webpack_public_path__ + \"ed0eb73bcf7ac73f8ebb9b1d08ee8b86.js\";","module.exports = __webpack_public_path__ + \"66cf742e186b17c8b35533566d4f0a86.js\";","module.exports = __webpack_public_path__ + \"e75a83d9f975c2757f7c94077fbb6b72.js\";","module.exports = __webpack_public_path__ + \"648d53be9eef03c38cb33fb5641d5360.js\";","module.exports = __webpack_public_path__ + \"aa849a15335dd139ace4092f4b74d3ee.js\";","module.exports = __webpack_public_path__ + \"dba64bde4e312e415261a38eaade833d.js\";","module.exports = __webpack_public_path__ + \"94147b1d795a3194aaee012e9fed6b9d.js\";","module.exports = __webpack_public_path__ + \"579ae9e591480b8fc1e2a16570c09813.js\";","module.exports = __webpack_public_path__ + \"78c996c930470853d2c62d02012c9051.js\";","module.exports = __webpack_public_path__ + \"aa05d1997dfaf1269a7875cae711a4a6.js\";","module.exports = __webpack_public_path__ + \"2e3d7d984d705eadd13c5cbe828e9e68.js\";","module.exports = __webpack_public_path__ + \"cc949e1eef92b45b3550f560215b2381.js\";","module.exports = __webpack_public_path__ + \"8970e2cb11ccb48099a0a5732c87b60a.js\";","module.exports = __webpack_public_path__ + \"054cdf6b668e7b07ef5f4ff711faef68.js\";","module.exports = __webpack_public_path__ + \"a2737aaf6a2d780955660add61729fec.js\";","module.exports = __webpack_public_path__ + \"f60462bc22f53d51432ef14e410a4901.js\";","module.exports = __webpack_public_path__ + \"cd86ff91f7643150b893adf12e7bb36a.js\";","module.exports = __webpack_public_path__ + \"53bb68a56630324fd8afec6df321033b.js\";","module.exports = __webpack_public_path__ + \"5ac9954ba185cf7bd1960387e53bf946.js\";","module.exports = __webpack_public_path__ + \"4fac1f540c3170e59c7d6f5973441114.js\";","module.exports = __webpack_public_path__ + \"6d5eb7965601f8c75620d2bcb4222657.js\";","module.exports = __webpack_public_path__ + \"a7b8a590d511c0b9ec1cf28d5ea5c4b5.js\";","module.exports = __webpack_public_path__ + \"00d6ac9f7943e92082ff5da3ccbcc1fb.js\";","module.exports = __webpack_public_path__ + \"d4059ca027a6df42cafd075fd0161c63.js\";","module.exports = __webpack_public_path__ + \"e8612184d12acd5c6a8ccc01d5552e76.js\";","module.exports = __webpack_public_path__ + \"7a9284906939a2bb724440f5c8a0f0fd.js\";","module.exports = __webpack_public_path__ + \"33acc8d621ac9fd84cae5390b11420c7.js\";","module.exports = __webpack_public_path__ + \"e25c17147d419f44874025cca1c5b59c.js\";","module.exports = __webpack_public_path__ + \"a03a2bee6c62d8dc483a28b8873e43f1.js\";","module.exports = __webpack_public_path__ + \"73f8e1fe44af44db28ec965623c043d1.js\";","module.exports = __webpack_public_path__ + \"12c38ce86a90c3fe1dd6653903722b65.js\";","module.exports = __webpack_public_path__ + \"6ac32634d900fed52b6b21ada8f70570.js\";","module.exports = __webpack_public_path__ + \"f8df3250f257f4685aff09af33af791d.js\";","module.exports = __webpack_public_path__ + \"da590541e6ee990a13203e5b48908af4.js\";","module.exports = __webpack_public_path__ + \"0217b2a7c7f918dd094c2ef4b15e3e3e.js\";","module.exports = __webpack_public_path__ + \"bf010959484753708e0a897b04918dca.js\";","module.exports = __webpack_public_path__ + \"3dc8796121ca70285f7ac0f7c04739f7.js\";","module.exports = __webpack_public_path__ + \"47aeab6d593cca707c1b3c684641097c.js\";","module.exports = __webpack_public_path__ + \"e6f721c7d341dbf6dc5e54a679c98188.js\";","module.exports = __webpack_public_path__ + \"834ad9a5f54d0aaf58c1533ab4f33986.js\";","module.exports = __webpack_public_path__ + \"26a1bab945182ea1de6a281afaea148c.js\";","module.exports = __webpack_public_path__ + \"c53960e6bdcd6a8e722b1f92caf25013.js\";","module.exports = __webpack_public_path__ + \"0d49a44eda591b45ec8e30192bbda140.js\";","module.exports = __webpack_public_path__ + \"a9f7fb2076bcf2516a41f7c7d936ea65.js\";","module.exports = __webpack_public_path__ + \"50f4853b49d5e38ad23f1b734005c84d.js\";","module.exports = __webpack_public_path__ + \"4a6003e70f9d48d63e8856fb27490ab4.js\";","module.exports = __webpack_public_path__ + \"bd75589c6d6c625760401ba2090b0f61.js\";","module.exports = __webpack_public_path__ + \"4bde99a16ce5222c7271007e805c9af8.js\";","module.exports = __webpack_public_path__ + \"2f25af8110df4c37c3e365a054ae57f4.js\";","module.exports = __webpack_public_path__ + \"a620428a7ae7a8e60534dcfbc7cfd24a.js\";","module.exports = __webpack_public_path__ + \"0b58d053b1c1eda595c8a5166413b999.js\";","module.exports = __webpack_public_path__ + \"4fda381121a8c7447dba54d9f9ae7a2a.js\";","module.exports = __webpack_public_path__ + \"75381900aaf05a41e00f59335ff035c1.js\";","module.exports = __webpack_public_path__ + \"26225808b3ee72daf008b01aeb6aa9fe.js\";","module.exports = __webpack_public_path__ + \"1598623511fa7ac01d7335c3524dc22a.js\";","module.exports = __webpack_public_path__ + \"0cea510b77a74defe38b75f9379ad8f0.js\";","module.exports = __webpack_public_path__ + \"0d7fcfad6dc619730e2d3ec3c3c97915.js\";","module.exports = __webpack_public_path__ + \"16699554b9737ccd9b2a791434e485b7.js\";","module.exports = __webpack_public_path__ + \"07de7bc9dd48f85fddc6e246cdc3eeb7.js\";","module.exports = __webpack_public_path__ + \"f5c85cdba2b5e210a1ce8a6576504d9c.js\";","module.exports = __webpack_public_path__ + \"1679659072ce7dbbc66e69a341c64652.js\";","module.exports = __webpack_public_path__ + \"630e60743a4cdc40127f7b4ac9aab37e.js\";","module.exports = __webpack_public_path__ + \"ad494c82a278781dd5cc49e1e46dc626.js\";","module.exports = __webpack_public_path__ + \"481fd08bbdd1cad31b184be80d9e5998.js\";","module.exports = __webpack_public_path__ + \"86646e814bc243b9c72d394c8d7cd04f.js\";","module.exports = __webpack_public_path__ + \"dd1e1c7f6f2dcf5f2713d52266a4cc90.js\";","module.exports = __webpack_public_path__ + \"f31b37953222a4c23d5e5b24a7156a7d.js\";","module.exports = __webpack_public_path__ + \"388cedbe5b1e8ea13cea2b778e20c334.js\";","module.exports = __webpack_public_path__ + \"2a6d9c3976fb487790c663c8ccd78c36.js\";","module.exports = __webpack_public_path__ + \"122610528b6c1d46a68d12a5574ef7b5.js\";","module.exports = __webpack_public_path__ + \"538ec729ec521a3cf10e5445cbc480bd.js\";","module.exports = __webpack_public_path__ + \"1e609ce3c689caf46e20382bb1e0ca94.js\";","module.exports = __webpack_public_path__ + \"dee10b112dabcc99939c0499e6c5c9a7.js\";","module.exports = __webpack_public_path__ + \"47a259185f4a5f126d08566068141c7a.js\";","module.exports = __webpack_public_path__ + \"4c2443481c4b406b9bb4b4c999488b03.js\";","module.exports = __webpack_public_path__ + \"75829006e7de6ea6b0b95d0780715c30.js\";","module.exports = __webpack_public_path__ + \"08b53f7e8dc599dd159d91064b48d489.js\";","module.exports = __webpack_public_path__ + \"c505cc4654235a568d4082344e50f882.js\";","module.exports = __webpack_public_path__ + \"d7129661dd16cd2e736da034df04f0a7.js\";","module.exports = __webpack_public_path__ + \"f77997e506f78f60cc2b9970932ea530.js\";","module.exports = __webpack_public_path__ + \"a6a4d04ded0a5fcac3f8592ee914df46.js\";","module.exports = __webpack_public_path__ + \"c5ea6dac9d7a9bbedbf0327e9dadff3a.js\";","module.exports = __webpack_public_path__ + \"57cd8b162f6c425a57117e29c93cfbff.js\";","module.exports = __webpack_public_path__ + \"7c3f991b5838a7cf12ab6ac556083764.js\";","module.exports = __webpack_public_path__ + \"c05c4bdb6979c078ac23f9d1119d0be0.js\";","module.exports = __webpack_public_path__ + \"af1943923f49ed71ad074b1fa6c5ebf3.js\";","module.exports = __webpack_public_path__ + \"8a82da307f1b7bcc905e286f28f61d10.js\";","module.exports = __webpack_public_path__ + \"da0020fb7f5aa14c7db4f1dd2d9a1622.js\";","module.exports = __webpack_public_path__ + \"4cef5a413d8d0d8bc73b0005ccf21bde.js\";","module.exports = __webpack_public_path__ + \"bc7c6c3ff45daa0ceeb4ca2debe47415.js\";","module.exports = __webpack_public_path__ + \"1b1b861d00be8a8cf936e56ca7b18537.js\";","module.exports = __webpack_public_path__ + \"ae0cd375a7800f536283dcf8220f3606.js\";","module.exports = __webpack_public_path__ + \"7852f9bdfbf636c3080b0813d13fd420.js\";","module.exports = __webpack_public_path__ + \"3c92a70dccf8d482d73ad87347b80e80.js\";","module.exports = __webpack_public_path__ + \"7dbf9ad92978fe35dc5114e37ce8f812.js\";","module.exports = __webpack_public_path__ + \"7e712023ccdff97db538081f159885f4.js\";","module.exports = __webpack_public_path__ + \"f5a35f5cac75b025816b9e092ba317b3.js\";","module.exports = __webpack_public_path__ + \"a3601c2a2a725ca154b2ac60cee9cbcc.js\";","module.exports = __webpack_public_path__ + \"66376f6950a58d9843c7ddc4e6cd26bc.js\";","module.exports = __webpack_public_path__ + \"1d214fef6e9c21ea534768e563e216a0.js\";","module.exports = __webpack_public_path__ + \"3aa27ffc2e973c035e256ffa9ddac6e0.js\";","module.exports = __webpack_public_path__ + \"58a538b2efb3054efe65d6958be0bf77.js\";","module.exports = __webpack_public_path__ + \"0edbdbb710202d1ae9c8d18a44b0704d.js\";","module.exports = __webpack_public_path__ + \"6c3a2c1c6e40dfce489d713ea6910d08.js\";","module.exports = __webpack_public_path__ + \"01a39c134f6c50f7b5a8b4ac8d13692e.js\";","module.exports = __webpack_public_path__ + \"b59622fea85843f029eab218c83b96c3.js\";","module.exports = __webpack_public_path__ + \"8e8264181bfdb3054627e7fd7e865d6a.js\";","module.exports = __webpack_public_path__ + \"ed6907feac318e278fff8cc7472b05e6.js\";","module.exports = __webpack_public_path__ + \"6ed3d838d2e937bc76d475ce981dca13.js\";","module.exports = __webpack_public_path__ + \"a5698c6d3c1e1a049cade4d595da8694.js\";","module.exports = __webpack_public_path__ + \"3ac055471f66e40fe7210f328fdbf4f6.js\";","module.exports = __webpack_public_path__ + \"b0f798d712c235b20ec38b1336c17a69.js\";","module.exports = __webpack_public_path__ + \"4e85d36688f07bea8f8b288eb5019483.js\";","module.exports = __webpack_public_path__ + \"ae2b27780a8b432a878535e74ee30e9c.js\";","module.exports = __webpack_public_path__ + \"2b0b58eedb15ddd3ac39530a66c56791.js\";","module.exports = __webpack_public_path__ + \"efdf40095f0f24b1ea98c9457e448e6d.js\";","module.exports = __webpack_public_path__ + \"052514c998aec3fe4e8a0aee2a8fca87.js\";","module.exports = __webpack_public_path__ + \"2a49009532807074018839ac3348637c.js\";","module.exports = __webpack_public_path__ + \"75334ffed7785227974937a936f6feed.js\";","module.exports = __webpack_public_path__ + \"52b97a71c48980b0dfac77871138b77f.js\";","module.exports = __webpack_public_path__ + \"3290a60aa648dd319ca6c13fd0b01604.js\";","module.exports = __webpack_public_path__ + \"7465063ea4d87aaff08c397e558ee803.js\";","module.exports = __webpack_public_path__ + \"e6359f88f94e2132bf5c13c323cdd8b0.js\";","module.exports = __webpack_public_path__ + \"af69ce3672b1bf869040ec7fe828b537.js\";","module.exports = __webpack_public_path__ + \"959409e85fb7f74a2a85c18a3b12c7a0.js\";","module.exports = __webpack_public_path__ + \"3a338778972525067fe6a576f5605115.js\";","module.exports = __webpack_public_path__ + \"f0c2658221b765ba5dcae0aff1e8019c.js\";","module.exports = __webpack_public_path__ + \"ba2ba4617ae22d09ad9ddb54a8c50c0a.js\";","module.exports = __webpack_public_path__ + \"664ada23009c04d106e2ab0364611e46.js\";","module.exports = __webpack_public_path__ + \"2032cff5fab03119bb8f21780fbc991a.js\";","module.exports = __webpack_public_path__ + \"28caea2db6333bbdcb97b9544e0d86e5.js\";","module.exports = __webpack_public_path__ + \"9327dec85d9f4951f52415d6b1c109c7.js\";","module.exports = __webpack_public_path__ + \"73454099811bd4855501ad43233e95e6.js\";","module.exports = __webpack_public_path__ + \"67a43e18b299add12f573c59d7753b1c.js\";","module.exports = __webpack_public_path__ + \"bee5179126efb27183f33e29262209c6.js\";","module.exports = __webpack_public_path__ + \"fbd50e7ce9278a3476552d712b769fc5.js\";","module.exports = __webpack_public_path__ + \"0fbc3480fb9a58c3693118da8967d15b.js\";","module.exports = __webpack_public_path__ + \"70b330dd4c1d62d2cab0efd047f0d82d.js\";","module.exports = __webpack_public_path__ + \"e254fc80cd2eb96d39d11c4a8aa7cdbf.js\";","module.exports = __webpack_public_path__ + \"4072596de1b3b58f9ec6c529d231a26b.js\";","module.exports = __webpack_public_path__ + \"247ac4ddccb32cab4ed41318f7f67355.js\";","module.exports = __webpack_public_path__ + \"98042a188adb665c3d38cd04ffcf43ac.js\";","module.exports = __webpack_public_path__ + \"2edc2521216fbbe6aa1c7088cdb51d10.js\";","module.exports = __webpack_public_path__ + \"f02973099b8a78da9a1cbf0c311bea88.js\";","module.exports = __webpack_public_path__ + \"a09603467dadc6e54363d3d0143c90ae.js\";","module.exports = __webpack_public_path__ + \"65b3eba2b247038ccd85691f2baad196.js\";","module.exports = __webpack_public_path__ + \"b8e92df86db1553bc083795934ac2545.js\";","module.exports = __webpack_public_path__ + \"f07a1a1df427466aeca76c1abac664a6.js\";","module.exports = __webpack_public_path__ + \"e4cda30808bb65150a0f42d6f4011359.js\";","module.exports = __webpack_public_path__ + \"805fd176a875fb57de69aff553e98bec.js\";","module.exports = __webpack_public_path__ + \"b5e41cbbfb85d73354ad945bf5b726c2.js\";","module.exports = __webpack_public_path__ + \"54fad863ddf481e5583de62d624a879c.js\";","module.exports = __webpack_public_path__ + \"e813e914baed6f1483e530ba4333e602.js\";","module.exports = __webpack_public_path__ + \"6ed1a06ec64a319d40a03e58638d2bb2.js\";","module.exports = __webpack_public_path__ + \"9c17de1215c2c9475b94c7f327935a32.js\";","module.exports = __webpack_public_path__ + \"0357ee4e48e8e994567ec60102916a2d.js\";","module.exports = __webpack_public_path__ + \"40e07d0bc678e07b8b54fc8dac644f8b.js\";","module.exports = __webpack_public_path__ + \"012f6db1a00d1459f797eef15aa43339.js\";","module.exports = __webpack_public_path__ + \"d5371dd4a7580f7428e098e8498e8682.js\";","module.exports = __webpack_public_path__ + \"4999e4b44e9b20ea7a32111ceee04595.js\";","module.exports = __webpack_public_path__ + \"e993ecff9a3aa7795495d7f64cbe3f36.js\";","module.exports = __webpack_public_path__ + \"f19a27623e5ea898b5bfd206a4688484.js\";","module.exports = __webpack_public_path__ + \"b54c29abe2af2b62910e92ae22d55ce1.js\";","module.exports = __webpack_public_path__ + \"d39e34e212eccad373b5b89487b8fce3.js\";","module.exports = __webpack_public_path__ + \"bd7af8faf320c1a3e9d2ab693af0b9da.js\";","module.exports = __webpack_public_path__ + \"8842422468fbc3103382ce7e0c9d7ebe.js\";","module.exports = __webpack_public_path__ + \"240712ceff4620a9435d519c4a73821f.js\";","module.exports = __webpack_public_path__ + \"15e3e1c58489525b3ca4dd59664503e6.js\";","module.exports = __webpack_public_path__ + \"30d5f17ef3921aecd91fd4f152fd27c6.js\";","module.exports = __webpack_public_path__ + \"36cf634b8c0aa5a6e49b465168e1f7c7.js\";","module.exports = __webpack_public_path__ + \"d90693457885a380f71dfeb9126672ed.js\";","module.exports = __webpack_public_path__ + \"8f5262a3aaaf619b2f66697f9043e7ab.js\";","module.exports = __webpack_public_path__ + \"8d724f5c719b438949b9470e6699b9d6.js\";","function _typeof(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\nace.define(\"ace/snippets\", [\"require\", \"exports\", \"module\", \"ace/lib/dom\", \"ace/lib/oop\", \"ace/lib/event_emitter\", \"ace/lib/lang\", \"ace/range\", \"ace/range_list\", \"ace/keyboard/hash_handler\", \"ace/tokenizer\", \"ace/clipboard\", \"ace/editor\"], function (require, exports, module) {\n \"use strict\";\n\n var dom = require(\"./lib/dom\");\n\n var oop = require(\"./lib/oop\");\n\n var EventEmitter = require(\"./lib/event_emitter\").EventEmitter;\n\n var lang = require(\"./lib/lang\");\n\n var Range = require(\"./range\").Range;\n\n var RangeList = require(\"./range_list\").RangeList;\n\n var HashHandler = require(\"./keyboard/hash_handler\").HashHandler;\n\n var Tokenizer = require(\"./tokenizer\").Tokenizer;\n\n var clipboard = require(\"./clipboard\");\n\n var VARIABLES = {\n CURRENT_WORD: function CURRENT_WORD(editor) {\n return editor.session.getTextRange(editor.session.getWordRange());\n },\n SELECTION: function SELECTION(editor, name, indentation) {\n var text = editor.session.getTextRange();\n if (indentation) return text.replace(/\\n\\r?([ \\t]*\\S)/g, \"\\n\" + indentation + \"$1\");\n return text;\n },\n CURRENT_LINE: function CURRENT_LINE(editor) {\n return editor.session.getLine(editor.getCursorPosition().row);\n },\n PREV_LINE: function PREV_LINE(editor) {\n return editor.session.getLine(editor.getCursorPosition().row - 1);\n },\n LINE_INDEX: function LINE_INDEX(editor) {\n return editor.getCursorPosition().row;\n },\n LINE_NUMBER: function LINE_NUMBER(editor) {\n return editor.getCursorPosition().row + 1;\n },\n SOFT_TABS: function SOFT_TABS(editor) {\n return editor.session.getUseSoftTabs() ? \"YES\" : \"NO\";\n },\n TAB_SIZE: function TAB_SIZE(editor) {\n return editor.session.getTabSize();\n },\n CLIPBOARD: function CLIPBOARD(editor) {\n return clipboard.getText && clipboard.getText();\n },\n FILENAME: function FILENAME(editor) {\n return /[^/\\\\]*$/.exec(this.FILEPATH(editor))[0];\n },\n FILENAME_BASE: function FILENAME_BASE(editor) {\n return /[^/\\\\]*$/.exec(this.FILEPATH(editor))[0].replace(/\\.[^.]*$/, \"\");\n },\n DIRECTORY: function DIRECTORY(editor) {\n return this.FILEPATH(editor).replace(/[^/\\\\]*$/, \"\");\n },\n FILEPATH: function FILEPATH(editor) {\n return \"/not implemented.txt\";\n },\n WORKSPACE_NAME: function WORKSPACE_NAME() {\n return \"Unknown\";\n },\n FULLNAME: function FULLNAME() {\n return \"Unknown\";\n },\n BLOCK_COMMENT_START: function BLOCK_COMMENT_START(editor) {\n var mode = editor.session.$mode || {};\n return mode.blockComment && mode.blockComment.start || \"\";\n },\n BLOCK_COMMENT_END: function BLOCK_COMMENT_END(editor) {\n var mode = editor.session.$mode || {};\n return mode.blockComment && mode.blockComment.end || \"\";\n },\n LINE_COMMENT: function LINE_COMMENT(editor) {\n var mode = editor.session.$mode || {};\n return mode.lineCommentStart || \"\";\n },\n CURRENT_YEAR: date.bind(null, {\n year: \"numeric\"\n }),\n CURRENT_YEAR_SHORT: date.bind(null, {\n year: \"2-digit\"\n }),\n CURRENT_MONTH: date.bind(null, {\n month: \"numeric\"\n }),\n CURRENT_MONTH_NAME: date.bind(null, {\n month: \"long\"\n }),\n CURRENT_MONTH_NAME_SHORT: date.bind(null, {\n month: \"short\"\n }),\n CURRENT_DATE: date.bind(null, {\n day: \"2-digit\"\n }),\n CURRENT_DAY_NAME: date.bind(null, {\n weekday: \"long\"\n }),\n CURRENT_DAY_NAME_SHORT: date.bind(null, {\n weekday: \"short\"\n }),\n CURRENT_HOUR: date.bind(null, {\n hour: \"2-digit\",\n hour12: false\n }),\n CURRENT_MINUTE: date.bind(null, {\n minute: \"2-digit\"\n }),\n CURRENT_SECOND: date.bind(null, {\n second: \"2-digit\"\n })\n };\n VARIABLES.SELECTED_TEXT = VARIABLES.SELECTION;\n\n function date(dateFormat) {\n var str = new Date().toLocaleString(\"en-us\", dateFormat);\n return str.length == 1 ? \"0\" + str : str;\n }\n\n var SnippetManager = function SnippetManager() {\n this.snippetMap = {};\n this.snippetNameMap = {};\n };\n\n (function () {\n oop.implement(this, EventEmitter);\n\n this.getTokenizer = function () {\n return SnippetManager.$tokenizer || this.createTokenizer();\n };\n\n this.createTokenizer = function () {\n function TabstopToken(str) {\n str = str.substr(1);\n if (/^\\d+$/.test(str)) return [{\n tabstopId: parseInt(str, 10)\n }];\n return [{\n text: str\n }];\n }\n\n function escape(ch) {\n return \"(?:[^\\\\\\\\\" + ch + \"]|\\\\\\\\.)\";\n }\n\n var formatMatcher = {\n regex: \"/(\" + escape(\"/\") + \"+)/\",\n onMatch: function onMatch(val, state, stack) {\n var ts = stack[0];\n ts.fmtString = true;\n ts.guard = val.slice(1, -1);\n ts.flag = \"\";\n return \"\";\n },\n next: \"formatString\"\n };\n SnippetManager.$tokenizer = new Tokenizer({\n start: [{\n regex: /\\\\./,\n onMatch: function onMatch(val, state, stack) {\n var ch = val[1];\n\n if (ch == \"}\" && stack.length) {\n val = ch;\n } else if (\"`$\\\\\".indexOf(ch) != -1) {\n val = ch;\n }\n\n return [val];\n }\n }, {\n regex: /}/,\n onMatch: function onMatch(val, state, stack) {\n return [stack.length ? stack.shift() : val];\n }\n }, {\n regex: /\\$(?:\\d+|\\w+)/,\n onMatch: TabstopToken\n }, {\n regex: /\\$\\{[\\dA-Z_a-z]+/,\n onMatch: function onMatch(str, state, stack) {\n var t = TabstopToken(str.substr(1));\n stack.unshift(t[0]);\n return t;\n },\n next: \"snippetVar\"\n }, {\n regex: /\\n/,\n token: \"newline\",\n merge: false\n }],\n snippetVar: [{\n regex: \"\\\\|\" + escape(\"\\\\|\") + \"*\\\\|\",\n onMatch: function onMatch(val, state, stack) {\n var choices = val.slice(1, -1).replace(/\\\\[,|\\\\]|,/g, function (operator) {\n return operator.length == 2 ? operator[1] : \"\\x00\";\n }).split(\"\\x00\").map(function (value) {\n return {\n value: value\n };\n });\n stack[0].choices = choices;\n return [choices[0]];\n },\n next: \"start\"\n }, formatMatcher, {\n regex: \"([^:}\\\\\\\\]|\\\\\\\\.)*:?\",\n token: \"\",\n next: \"start\"\n }],\n formatString: [{\n regex: /:/,\n onMatch: function onMatch(val, state, stack) {\n if (stack.length && stack[0].expectElse) {\n stack[0].expectElse = false;\n stack[0].ifEnd = {\n elseEnd: stack[0]\n };\n return [stack[0].ifEnd];\n }\n\n return \":\";\n }\n }, {\n regex: /\\\\./,\n onMatch: function onMatch(val, state, stack) {\n var ch = val[1];\n if (ch == \"}\" && stack.length) val = ch;else if (\"`$\\\\\".indexOf(ch) != -1) val = ch;else if (ch == \"n\") val = \"\\n\";else if (ch == \"t\") val = \"\\t\";else if (\"ulULE\".indexOf(ch) != -1) val = {\n changeCase: ch,\n local: ch > \"a\"\n };\n return [val];\n }\n }, {\n regex: \"/\\\\w*}\",\n onMatch: function onMatch(val, state, stack) {\n var next = stack.shift();\n if (next) next.flag = val.slice(1, -1);\n this.next = next && next.tabstopId ? \"start\" : \"\";\n return [next || val];\n },\n next: \"start\"\n }, {\n regex: /\\$(?:\\d+|\\w+)/,\n onMatch: function onMatch(val, state, stack) {\n return [{\n text: val.slice(1)\n }];\n }\n }, {\n regex: /\\${\\w+/,\n onMatch: function onMatch(val, state, stack) {\n var token = {\n text: val.slice(2)\n };\n stack.unshift(token);\n return [token];\n },\n next: \"formatStringVar\"\n }, {\n regex: /\\n/,\n token: \"newline\",\n merge: false\n }, {\n regex: /}/,\n onMatch: function onMatch(val, state, stack) {\n var next = stack.shift();\n this.next = next && next.tabstopId ? \"start\" : \"\";\n return [next || val];\n },\n next: \"start\"\n }],\n formatStringVar: [{\n regex: /:\\/\\w+}/,\n onMatch: function onMatch(val, state, stack) {\n var ts = stack[0];\n ts.formatFunction = val.slice(2, -1);\n return [stack.shift()];\n },\n next: \"formatString\"\n }, formatMatcher, {\n regex: /:[\\?\\-+]?/,\n onMatch: function onMatch(val, state, stack) {\n if (val[1] == \"+\") stack[0].ifEnd = stack[0];\n if (val[1] == \"?\") stack[0].expectElse = true;\n },\n next: \"formatString\"\n }, {\n regex: \"([^:}\\\\\\\\]|\\\\\\\\.)*:?\",\n token: \"\",\n next: \"formatString\"\n }]\n });\n return SnippetManager.$tokenizer;\n };\n\n this.tokenizeTmSnippet = function (str, startState) {\n return this.getTokenizer().getLineTokens(str, startState).tokens.map(function (x) {\n return x.value || x;\n });\n };\n\n this.getVariableValue = function (editor, name, indentation) {\n if (/^\\d+$/.test(name)) return (this.variables.__ || {})[name] || \"\";\n if (/^[A-Z]\\d+$/.test(name)) return (this.variables[name[0] + \"__\"] || {})[name.substr(1)] || \"\";\n name = name.replace(/^TM_/, \"\");\n if (!this.variables.hasOwnProperty(name)) return \"\";\n var value = this.variables[name];\n if (typeof value == \"function\") value = this.variables[name](editor, name, indentation);\n return value == null ? \"\" : value;\n };\n\n this.variables = VARIABLES;\n\n this.tmStrFormat = function (str, ch, editor) {\n if (!ch.fmt) return str;\n var flag = ch.flag || \"\";\n var re = ch.guard;\n re = new RegExp(re, flag.replace(/[^gim]/g, \"\"));\n var fmtTokens = typeof ch.fmt == \"string\" ? this.tokenizeTmSnippet(ch.fmt, \"formatString\") : ch.fmt;\n\n var _self = this;\n\n var formatted = str.replace(re, function () {\n var oldArgs = _self.variables.__;\n _self.variables.__ = [].slice.call(arguments);\n\n var fmtParts = _self.resolveVariables(fmtTokens, editor);\n\n var gChangeCase = \"E\";\n\n for (var i = 0; i < fmtParts.length; i++) {\n var ch = fmtParts[i];\n\n if (_typeof(ch) == \"object\") {\n fmtParts[i] = \"\";\n\n if (ch.changeCase && ch.local) {\n var next = fmtParts[i + 1];\n\n if (next && typeof next == \"string\") {\n if (ch.changeCase == \"u\") fmtParts[i] = next[0].toUpperCase();else fmtParts[i] = next[0].toLowerCase();\n fmtParts[i + 1] = next.substr(1);\n }\n } else if (ch.changeCase) {\n gChangeCase = ch.changeCase;\n }\n } else if (gChangeCase == \"U\") {\n fmtParts[i] = ch.toUpperCase();\n } else if (gChangeCase == \"L\") {\n fmtParts[i] = ch.toLowerCase();\n }\n }\n\n _self.variables.__ = oldArgs;\n return fmtParts.join(\"\");\n });\n return formatted;\n };\n\n this.tmFormatFunction = function (str, ch, editor) {\n if (ch.formatFunction == \"upcase\") return str.toUpperCase();\n if (ch.formatFunction == \"downcase\") return str.toLowerCase();\n return str;\n };\n\n this.resolveVariables = function (snippet, editor) {\n var result = [];\n var indentation = \"\";\n var afterNewLine = true;\n\n for (var i = 0; i < snippet.length; i++) {\n var ch = snippet[i];\n\n if (typeof ch == \"string\") {\n result.push(ch);\n\n if (ch == \"\\n\") {\n afterNewLine = true;\n indentation = \"\";\n } else if (afterNewLine) {\n indentation = /^\\t*/.exec(ch)[0];\n afterNewLine = /\\S/.test(ch);\n }\n\n continue;\n }\n\n if (!ch) continue;\n afterNewLine = false;\n\n if (ch.fmtString) {\n var j = snippet.indexOf(ch, i + 1);\n if (j == -1) j = snippet.length;\n ch.fmt = snippet.slice(i + 1, j);\n i = j;\n }\n\n if (ch.text) {\n var value = this.getVariableValue(editor, ch.text, indentation) + \"\";\n if (ch.fmtString) value = this.tmStrFormat(value, ch, editor);\n if (ch.formatFunction) value = this.tmFormatFunction(value, ch, editor);\n\n if (value && !ch.ifEnd) {\n result.push(value);\n gotoNext(ch);\n } else if (!value && ch.ifEnd) {\n gotoNext(ch.ifEnd);\n }\n } else if (ch.elseEnd) {\n gotoNext(ch.elseEnd);\n } else if (ch.tabstopId != null) {\n result.push(ch);\n } else if (ch.changeCase != null) {\n result.push(ch);\n }\n }\n\n function gotoNext(ch) {\n var i1 = snippet.indexOf(ch, i + 1);\n if (i1 != -1) i = i1;\n }\n\n return result;\n };\n\n this.insertSnippetForSelection = function (editor, snippetText) {\n var cursor = editor.getCursorPosition();\n var line = editor.session.getLine(cursor.row);\n var tabString = editor.session.getTabString();\n var indentString = line.match(/^\\s*/)[0];\n if (cursor.column < indentString.length) indentString = indentString.slice(0, cursor.column);\n snippetText = snippetText.replace(/\\r/g, \"\");\n var tokens = this.tokenizeTmSnippet(snippetText);\n tokens = this.resolveVariables(tokens, editor);\n tokens = tokens.map(function (x) {\n if (x == \"\\n\") return x + indentString;\n if (typeof x == \"string\") return x.replace(/\\t/g, tabString);\n return x;\n });\n var tabstops = [];\n tokens.forEach(function (p, i) {\n if (_typeof(p) != \"object\") return;\n var id = p.tabstopId;\n var ts = tabstops[id];\n\n if (!ts) {\n ts = tabstops[id] = [];\n ts.index = id;\n ts.value = \"\";\n ts.parents = {};\n }\n\n if (ts.indexOf(p) !== -1) return;\n if (p.choices && !ts.choices) ts.choices = p.choices;\n ts.push(p);\n var i1 = tokens.indexOf(p, i + 1);\n if (i1 === -1) return;\n var value = tokens.slice(i + 1, i1);\n var isNested = value.some(function (t) {\n return _typeof(t) === \"object\";\n });\n\n if (isNested && !ts.value) {\n ts.value = value;\n } else if (value.length && (!ts.value || typeof ts.value !== \"string\")) {\n ts.value = value.join(\"\");\n }\n });\n tabstops.forEach(function (ts) {\n ts.length = 0;\n });\n var expanding = {};\n\n function copyValue(val) {\n var copy = [];\n\n for (var i = 0; i < val.length; i++) {\n var p = val[i];\n\n if (_typeof(p) == \"object\") {\n if (expanding[p.tabstopId]) continue;\n var j = val.lastIndexOf(p, i - 1);\n p = copy[j] || {\n tabstopId: p.tabstopId\n };\n }\n\n copy[i] = p;\n }\n\n return copy;\n }\n\n for (var i = 0; i < tokens.length; i++) {\n var p = tokens[i];\n if (_typeof(p) != \"object\") continue;\n var id = p.tabstopId;\n var ts = tabstops[id];\n var i1 = tokens.indexOf(p, i + 1);\n\n if (expanding[id]) {\n if (expanding[id] === p) {\n delete expanding[id];\n Object.keys(expanding).forEach(function (parentId) {\n ts.parents[parentId] = true;\n });\n }\n\n continue;\n }\n\n expanding[id] = p;\n var value = ts.value;\n if (typeof value !== \"string\") value = copyValue(value);else if (p.fmt) value = this.tmStrFormat(value, p, editor);\n tokens.splice.apply(tokens, [i + 1, Math.max(0, i1 - i)].concat(value, p));\n if (ts.indexOf(p) === -1) ts.push(p);\n }\n\n var row = 0,\n column = 0;\n var text = \"\";\n tokens.forEach(function (t) {\n if (typeof t === \"string\") {\n var lines = t.split(\"\\n\");\n\n if (lines.length > 1) {\n column = lines[lines.length - 1].length;\n row += lines.length - 1;\n } else column += t.length;\n\n text += t;\n } else if (t) {\n if (!t.start) t.start = {\n row: row,\n column: column\n };else t.end = {\n row: row,\n column: column\n };\n }\n });\n var range = editor.getSelectionRange();\n var end = editor.session.replace(range, text);\n var tabstopManager = new TabstopManager(editor);\n var selectionId = editor.inVirtualSelectionMode && editor.selection.index;\n tabstopManager.addTabstops(tabstops, range.start, end, selectionId);\n };\n\n this.insertSnippet = function (editor, snippetText) {\n var self = this;\n if (editor.inVirtualSelectionMode) return self.insertSnippetForSelection(editor, snippetText);\n editor.forEachSelection(function () {\n self.insertSnippetForSelection(editor, snippetText);\n }, null, {\n keepOrder: true\n });\n if (editor.tabstopManager) editor.tabstopManager.tabNext();\n };\n\n this.$getScope = function (editor) {\n var scope = editor.session.$mode.$id || \"\";\n scope = scope.split(\"/\").pop();\n\n if (scope === \"html\" || scope === \"php\") {\n if (scope === \"php\" && !editor.session.$mode.inlinePhp) scope = \"html\";\n var c = editor.getCursorPosition();\n var state = editor.session.getState(c.row);\n\n if (_typeof(state) === \"object\") {\n state = state[0];\n }\n\n if (state.substring) {\n if (state.substring(0, 3) == \"js-\") scope = \"javascript\";else if (state.substring(0, 4) == \"css-\") scope = \"css\";else if (state.substring(0, 4) == \"php-\") scope = \"php\";\n }\n }\n\n return scope;\n };\n\n this.getActiveScopes = function (editor) {\n var scope = this.$getScope(editor);\n var scopes = [scope];\n var snippetMap = this.snippetMap;\n\n if (snippetMap[scope] && snippetMap[scope].includeScopes) {\n scopes.push.apply(scopes, snippetMap[scope].includeScopes);\n }\n\n scopes.push(\"_\");\n return scopes;\n };\n\n this.expandWithTab = function (editor, options) {\n var self = this;\n var result = editor.forEachSelection(function () {\n return self.expandSnippetForSelection(editor, options);\n }, null, {\n keepOrder: true\n });\n if (result && editor.tabstopManager) editor.tabstopManager.tabNext();\n return result;\n };\n\n this.expandSnippetForSelection = function (editor, options) {\n var cursor = editor.getCursorPosition();\n var line = editor.session.getLine(cursor.row);\n var before = line.substring(0, cursor.column);\n var after = line.substr(cursor.column);\n var snippetMap = this.snippetMap;\n var snippet;\n this.getActiveScopes(editor).some(function (scope) {\n var snippets = snippetMap[scope];\n if (snippets) snippet = this.findMatchingSnippet(snippets, before, after);\n return !!snippet;\n }, this);\n if (!snippet) return false;\n if (options && options.dryRun) return true;\n editor.session.doc.removeInLine(cursor.row, cursor.column - snippet.replaceBefore.length, cursor.column + snippet.replaceAfter.length);\n this.variables.M__ = snippet.matchBefore;\n this.variables.T__ = snippet.matchAfter;\n this.insertSnippetForSelection(editor, snippet.content);\n this.variables.M__ = this.variables.T__ = null;\n return true;\n };\n\n this.findMatchingSnippet = function (snippetList, before, after) {\n for (var i = snippetList.length; i--;) {\n var s = snippetList[i];\n if (s.startRe && !s.startRe.test(before)) continue;\n if (s.endRe && !s.endRe.test(after)) continue;\n if (!s.startRe && !s.endRe) continue;\n s.matchBefore = s.startRe ? s.startRe.exec(before) : [\"\"];\n s.matchAfter = s.endRe ? s.endRe.exec(after) : [\"\"];\n s.replaceBefore = s.triggerRe ? s.triggerRe.exec(before)[0] : \"\";\n s.replaceAfter = s.endTriggerRe ? s.endTriggerRe.exec(after)[0] : \"\";\n return s;\n }\n };\n\n this.snippetMap = {};\n this.snippetNameMap = {};\n\n this.register = function (snippets, scope) {\n var snippetMap = this.snippetMap;\n var snippetNameMap = this.snippetNameMap;\n var self = this;\n if (!snippets) snippets = [];\n\n function wrapRegexp(src) {\n if (src && !/^\\^?\\(.*\\)\\$?$|^\\\\b$/.test(src)) src = \"(?:\" + src + \")\";\n return src || \"\";\n }\n\n function guardedRegexp(re, guard, opening) {\n re = wrapRegexp(re);\n guard = wrapRegexp(guard);\n\n if (opening) {\n re = guard + re;\n if (re && re[re.length - 1] != \"$\") re = re + \"$\";\n } else {\n re = re + guard;\n if (re && re[0] != \"^\") re = \"^\" + re;\n }\n\n return new RegExp(re);\n }\n\n function addSnippet(s) {\n if (!s.scope) s.scope = scope || \"_\";\n scope = s.scope;\n\n if (!snippetMap[scope]) {\n snippetMap[scope] = [];\n snippetNameMap[scope] = {};\n }\n\n var map = snippetNameMap[scope];\n\n if (s.name) {\n var old = map[s.name];\n if (old) self.unregister(old);\n map[s.name] = s;\n }\n\n snippetMap[scope].push(s);\n if (s.prefix) s.tabTrigger = s.prefix;\n if (!s.content && s.body) s.content = Array.isArray(s.body) ? s.body.join(\"\\n\") : s.body;\n\n if (s.tabTrigger && !s.trigger) {\n if (!s.guard && /^\\w/.test(s.tabTrigger)) s.guard = \"\\\\b\";\n s.trigger = lang.escapeRegExp(s.tabTrigger);\n }\n\n if (!s.trigger && !s.guard && !s.endTrigger && !s.endGuard) return;\n s.startRe = guardedRegexp(s.trigger, s.guard, true);\n s.triggerRe = new RegExp(s.trigger);\n s.endRe = guardedRegexp(s.endTrigger, s.endGuard, true);\n s.endTriggerRe = new RegExp(s.endTrigger);\n }\n\n if (Array.isArray(snippets)) {\n snippets.forEach(addSnippet);\n } else {\n Object.keys(snippets).forEach(function (key) {\n addSnippet(snippets[key]);\n });\n }\n\n this._signal(\"registerSnippets\", {\n scope: scope\n });\n };\n\n this.unregister = function (snippets, scope) {\n var snippetMap = this.snippetMap;\n var snippetNameMap = this.snippetNameMap;\n\n function removeSnippet(s) {\n var nameMap = snippetNameMap[s.scope || scope];\n\n if (nameMap && nameMap[s.name]) {\n delete nameMap[s.name];\n var map = snippetMap[s.scope || scope];\n var i = map && map.indexOf(s);\n if (i >= 0) map.splice(i, 1);\n }\n }\n\n if (snippets.content) removeSnippet(snippets);else if (Array.isArray(snippets)) snippets.forEach(removeSnippet);\n };\n\n this.parseSnippetFile = function (str) {\n str = str.replace(/\\r/g, \"\");\n var list = [],\n snippet = {};\n var re = /^#.*|^({[\\s\\S]*})\\s*$|^(\\S+) (.*)$|^((?:\\n*\\t.*)+)/gm;\n var m;\n\n while (m = re.exec(str)) {\n if (m[1]) {\n try {\n snippet = JSON.parse(m[1]);\n list.push(snippet);\n } catch (e) {}\n }\n\n if (m[4]) {\n snippet.content = m[4].replace(/^\\t/gm, \"\");\n list.push(snippet);\n snippet = {};\n } else {\n var key = m[2],\n val = m[3];\n\n if (key == \"regex\") {\n var guardRe = /\\/((?:[^\\/\\\\]|\\\\.)*)|$/g;\n snippet.guard = guardRe.exec(val)[1];\n snippet.trigger = guardRe.exec(val)[1];\n snippet.endTrigger = guardRe.exec(val)[1];\n snippet.endGuard = guardRe.exec(val)[1];\n } else if (key == \"snippet\") {\n snippet.tabTrigger = val.match(/^\\S*/)[0];\n if (!snippet.name) snippet.name = val;\n } else if (key) {\n snippet[key] = val;\n }\n }\n }\n\n return list;\n };\n\n this.getSnippetByName = function (name, editor) {\n var snippetMap = this.snippetNameMap;\n var snippet;\n this.getActiveScopes(editor).some(function (scope) {\n var snippets = snippetMap[scope];\n if (snippets) snippet = snippets[name];\n return !!snippet;\n }, this);\n return snippet;\n };\n }).call(SnippetManager.prototype);\n\n var TabstopManager = function TabstopManager(editor) {\n if (editor.tabstopManager) return editor.tabstopManager;\n editor.tabstopManager = this;\n this.$onChange = this.onChange.bind(this);\n this.$onChangeSelection = lang.delayedCall(this.onChangeSelection.bind(this)).schedule;\n this.$onChangeSession = this.onChangeSession.bind(this);\n this.$onAfterExec = this.onAfterExec.bind(this);\n this.attach(editor);\n };\n\n (function () {\n this.attach = function (editor) {\n this.index = 0;\n this.ranges = [];\n this.tabstops = [];\n this.$openTabstops = null;\n this.selectedTabstop = null;\n this.editor = editor;\n this.editor.on(\"change\", this.$onChange);\n this.editor.on(\"changeSelection\", this.$onChangeSelection);\n this.editor.on(\"changeSession\", this.$onChangeSession);\n this.editor.commands.on(\"afterExec\", this.$onAfterExec);\n this.editor.keyBinding.addKeyboardHandler(this.keyboardHandler);\n };\n\n this.detach = function () {\n this.tabstops.forEach(this.removeTabstopMarkers, this);\n this.ranges = null;\n this.tabstops = null;\n this.selectedTabstop = null;\n this.editor.removeListener(\"change\", this.$onChange);\n this.editor.removeListener(\"changeSelection\", this.$onChangeSelection);\n this.editor.removeListener(\"changeSession\", this.$onChangeSession);\n this.editor.commands.removeListener(\"afterExec\", this.$onAfterExec);\n this.editor.keyBinding.removeKeyboardHandler(this.keyboardHandler);\n this.editor.tabstopManager = null;\n this.editor = null;\n };\n\n this.onChange = function (delta) {\n var isRemove = delta.action[0] == \"r\";\n var selectedTabstop = this.selectedTabstop || {};\n var parents = selectedTabstop.parents || {};\n var tabstops = (this.tabstops || []).slice();\n\n for (var i = 0; i < tabstops.length; i++) {\n var ts = tabstops[i];\n var active = ts == selectedTabstop || parents[ts.index];\n ts.rangeList.$bias = active ? 0 : 1;\n\n if (delta.action == \"remove\" && ts !== selectedTabstop) {\n var parentActive = ts.parents && ts.parents[selectedTabstop.index];\n var startIndex = ts.rangeList.pointIndex(delta.start, parentActive);\n startIndex = startIndex < 0 ? -startIndex - 1 : startIndex + 1;\n var endIndex = ts.rangeList.pointIndex(delta.end, parentActive);\n endIndex = endIndex < 0 ? -endIndex - 1 : endIndex - 1;\n var toRemove = ts.rangeList.ranges.slice(startIndex, endIndex);\n\n for (var j = 0; j < toRemove.length; j++) {\n this.removeRange(toRemove[j]);\n }\n }\n\n ts.rangeList.$onChange(delta);\n }\n\n var session = this.editor.session;\n if (!this.$inChange && isRemove && session.getLength() == 1 && !session.getValue()) this.detach();\n };\n\n this.updateLinkedFields = function () {\n var ts = this.selectedTabstop;\n if (!ts || !ts.hasLinkedRanges || !ts.firstNonLinked) return;\n this.$inChange = true;\n var session = this.editor.session;\n var text = session.getTextRange(ts.firstNonLinked);\n\n for (var i = 0; i < ts.length; i++) {\n var range = ts[i];\n if (!range.linked) continue;\n var original = range.original;\n var fmt = exports.snippetManager.tmStrFormat(text, original, this.editor);\n session.replace(range, fmt);\n }\n\n this.$inChange = false;\n };\n\n this.onAfterExec = function (e) {\n if (e.command && !e.command.readOnly) this.updateLinkedFields();\n };\n\n this.onChangeSelection = function () {\n if (!this.editor) return;\n var lead = this.editor.selection.lead;\n var anchor = this.editor.selection.anchor;\n var isEmpty = this.editor.selection.isEmpty();\n\n for (var i = 0; i < this.ranges.length; i++) {\n if (this.ranges[i].linked) continue;\n var containsLead = this.ranges[i].contains(lead.row, lead.column);\n var containsAnchor = isEmpty || this.ranges[i].contains(anchor.row, anchor.column);\n if (containsLead && containsAnchor) return;\n }\n\n this.detach();\n };\n\n this.onChangeSession = function () {\n this.detach();\n };\n\n this.tabNext = function (dir) {\n var max = this.tabstops.length;\n var index = this.index + (dir || 1);\n index = Math.min(Math.max(index, 1), max);\n if (index == max) index = 0;\n this.selectTabstop(index);\n if (index === 0) this.detach();\n };\n\n this.selectTabstop = function (index) {\n this.$openTabstops = null;\n var ts = this.tabstops[this.index];\n if (ts) this.addTabstopMarkers(ts);\n this.index = index;\n ts = this.tabstops[this.index];\n if (!ts || !ts.length) return;\n this.selectedTabstop = ts;\n var range = ts.firstNonLinked || ts;\n if (ts.choices) range.cursor = range.start;\n\n if (!this.editor.inVirtualSelectionMode) {\n var sel = this.editor.multiSelect;\n sel.toSingleRange(range);\n\n for (var i = 0; i < ts.length; i++) {\n if (ts.hasLinkedRanges && ts[i].linked) continue;\n sel.addRange(ts[i].clone(), true);\n }\n } else {\n this.editor.selection.fromOrientedRange(range);\n }\n\n this.editor.keyBinding.addKeyboardHandler(this.keyboardHandler);\n if (this.selectedTabstop && this.selectedTabstop.choices) this.editor.execCommand(\"startAutocomplete\", {\n matches: this.selectedTabstop.choices\n });\n };\n\n this.addTabstops = function (tabstops, start, end) {\n var useLink = this.useLink || !this.editor.getOption(\"enableMultiselect\");\n if (!this.$openTabstops) this.$openTabstops = [];\n\n if (!tabstops[0]) {\n var p = Range.fromPoints(end, end);\n moveRelative(p.start, start);\n moveRelative(p.end, start);\n tabstops[0] = [p];\n tabstops[0].index = 0;\n }\n\n var i = this.index;\n var arg = [i + 1, 0];\n var ranges = this.ranges;\n tabstops.forEach(function (ts, index) {\n var dest = this.$openTabstops[index] || ts;\n\n for (var i = 0; i < ts.length; i++) {\n var p = ts[i];\n var range = Range.fromPoints(p.start, p.end || p.start);\n movePoint(range.start, start);\n movePoint(range.end, start);\n range.original = p;\n range.tabstop = dest;\n ranges.push(range);\n if (dest != ts) dest.unshift(range);else dest[i] = range;\n\n if (p.fmtString || dest.firstNonLinked && useLink) {\n range.linked = true;\n dest.hasLinkedRanges = true;\n } else if (!dest.firstNonLinked) dest.firstNonLinked = range;\n }\n\n if (!dest.firstNonLinked) dest.hasLinkedRanges = false;\n\n if (dest === ts) {\n arg.push(dest);\n this.$openTabstops[index] = dest;\n }\n\n this.addTabstopMarkers(dest);\n dest.rangeList = dest.rangeList || new RangeList();\n dest.rangeList.$bias = 0;\n dest.rangeList.addList(dest);\n }, this);\n\n if (arg.length > 2) {\n if (this.tabstops.length) arg.push(arg.splice(2, 1)[0]);\n this.tabstops.splice.apply(this.tabstops, arg);\n }\n };\n\n this.addTabstopMarkers = function (ts) {\n var session = this.editor.session;\n ts.forEach(function (range) {\n if (!range.markerId) range.markerId = session.addMarker(range, \"ace_snippet-marker\", \"text\");\n });\n };\n\n this.removeTabstopMarkers = function (ts) {\n var session = this.editor.session;\n ts.forEach(function (range) {\n session.removeMarker(range.markerId);\n range.markerId = null;\n });\n };\n\n this.removeRange = function (range) {\n var i = range.tabstop.indexOf(range);\n if (i != -1) range.tabstop.splice(i, 1);\n i = this.ranges.indexOf(range);\n if (i != -1) this.ranges.splice(i, 1);\n i = range.tabstop.rangeList.ranges.indexOf(range);\n if (i != -1) range.tabstop.splice(i, 1);\n this.editor.session.removeMarker(range.markerId);\n\n if (!range.tabstop.length) {\n i = this.tabstops.indexOf(range.tabstop);\n if (i != -1) this.tabstops.splice(i, 1);\n if (!this.tabstops.length) this.detach();\n }\n };\n\n this.keyboardHandler = new HashHandler();\n this.keyboardHandler.bindKeys({\n \"Tab\": function Tab(editor) {\n if (exports.snippetManager && exports.snippetManager.expandWithTab(editor)) return;\n editor.tabstopManager.tabNext(1);\n editor.renderer.scrollCursorIntoView();\n },\n \"Shift-Tab\": function ShiftTab(editor) {\n editor.tabstopManager.tabNext(-1);\n editor.renderer.scrollCursorIntoView();\n },\n \"Esc\": function Esc(editor) {\n editor.tabstopManager.detach();\n }\n });\n }).call(TabstopManager.prototype);\n\n var movePoint = function movePoint(point, diff) {\n if (point.row == 0) point.column += diff.column;\n point.row += diff.row;\n };\n\n var moveRelative = function moveRelative(point, start) {\n if (point.row == start.row) point.column -= start.column;\n point.row -= start.row;\n };\n\n dom.importCssString(\"\\\n.ace_snippet-marker {\\\n -moz-box-sizing: border-box;\\\n box-sizing: border-box;\\\n background: rgba(194, 193, 208, 0.09);\\\n border: 1px dotted rgba(211, 208, 235, 0.62);\\\n position: absolute;\\\n}\", \"snippets.css\", false);\n exports.snippetManager = new SnippetManager();\n\n var Editor = require(\"./editor\").Editor;\n\n (function () {\n this.insertSnippet = function (content, options) {\n return exports.snippetManager.insertSnippet(this, content, options);\n };\n\n this.expandSnippet = function (options) {\n return exports.snippetManager.expandWithTab(this, options);\n };\n }).call(Editor.prototype);\n});\nace.define(\"ace/autocomplete/popup\", [\"require\", \"exports\", \"module\", \"ace/virtual_renderer\", \"ace/editor\", \"ace/range\", \"ace/lib/event\", \"ace/lib/lang\", \"ace/lib/dom\"], function (require, exports, module) {\n \"use strict\";\n\n var Renderer = require(\"../virtual_renderer\").VirtualRenderer;\n\n var Editor = require(\"../editor\").Editor;\n\n var Range = require(\"../range\").Range;\n\n var event = require(\"../lib/event\");\n\n var lang = require(\"../lib/lang\");\n\n var dom = require(\"../lib/dom\");\n\n var $singleLineEditor = function $singleLineEditor(el) {\n var renderer = new Renderer(el);\n renderer.$maxLines = 4;\n var editor = new Editor(renderer);\n editor.setHighlightActiveLine(false);\n editor.setShowPrintMargin(false);\n editor.renderer.setShowGutter(false);\n editor.renderer.setHighlightGutterLine(false);\n editor.$mouseHandler.$focusTimeout = 0;\n editor.$highlightTagPending = true;\n return editor;\n };\n\n var AcePopup = function AcePopup(parentNode) {\n var el = dom.createElement(\"div\");\n var popup = new $singleLineEditor(el);\n if (parentNode) parentNode.appendChild(el);\n el.style.display = \"none\";\n popup.renderer.content.style.cursor = \"default\";\n popup.renderer.setStyle(\"ace_autocomplete\");\n popup.setOption(\"displayIndentGuides\", false);\n popup.setOption(\"dragDelay\", 150);\n\n var noop = function noop() {};\n\n popup.focus = noop;\n popup.$isFocused = true;\n popup.renderer.$cursorLayer.restartTimer = noop;\n popup.renderer.$cursorLayer.element.style.opacity = 0;\n popup.renderer.$maxLines = 8;\n popup.renderer.$keepTextAreaAtCursor = false;\n popup.setHighlightActiveLine(false);\n popup.session.highlight(\"\");\n popup.session.$searchHighlight.clazz = \"ace_highlight-marker\";\n popup.on(\"mousedown\", function (e) {\n var pos = e.getDocumentPosition();\n popup.selection.moveToPosition(pos);\n selectionMarker.start.row = selectionMarker.end.row = pos.row;\n e.stop();\n });\n var lastMouseEvent;\n var hoverMarker = new Range(-1, 0, -1, Infinity);\n var selectionMarker = new Range(-1, 0, -1, Infinity);\n selectionMarker.id = popup.session.addMarker(selectionMarker, \"ace_active-line\", \"fullLine\");\n\n popup.setSelectOnHover = function (val) {\n if (!val) {\n hoverMarker.id = popup.session.addMarker(hoverMarker, \"ace_line-hover\", \"fullLine\");\n } else if (hoverMarker.id) {\n popup.session.removeMarker(hoverMarker.id);\n hoverMarker.id = null;\n }\n };\n\n popup.setSelectOnHover(false);\n popup.on(\"mousemove\", function (e) {\n if (!lastMouseEvent) {\n lastMouseEvent = e;\n return;\n }\n\n if (lastMouseEvent.x == e.x && lastMouseEvent.y == e.y) {\n return;\n }\n\n lastMouseEvent = e;\n lastMouseEvent.scrollTop = popup.renderer.scrollTop;\n var row = lastMouseEvent.getDocumentPosition().row;\n\n if (hoverMarker.start.row != row) {\n if (!hoverMarker.id) popup.setRow(row);\n setHoverMarker(row);\n }\n });\n popup.renderer.on(\"beforeRender\", function () {\n if (lastMouseEvent && hoverMarker.start.row != -1) {\n lastMouseEvent.$pos = null;\n var row = lastMouseEvent.getDocumentPosition().row;\n if (!hoverMarker.id) popup.setRow(row);\n setHoverMarker(row, true);\n }\n });\n popup.renderer.on(\"afterRender\", function () {\n var row = popup.getRow();\n var t = popup.renderer.$textLayer;\n var selected = t.element.childNodes[row - t.config.firstRow];\n if (selected !== t.selectedNode && t.selectedNode) dom.removeCssClass(t.selectedNode, \"ace_selected\");\n t.selectedNode = selected;\n if (selected) dom.addCssClass(selected, \"ace_selected\");\n });\n\n var hideHoverMarker = function hideHoverMarker() {\n setHoverMarker(-1);\n };\n\n var setHoverMarker = function setHoverMarker(row, suppressRedraw) {\n if (row !== hoverMarker.start.row) {\n hoverMarker.start.row = hoverMarker.end.row = row;\n if (!suppressRedraw) popup.session._emit(\"changeBackMarker\");\n\n popup._emit(\"changeHoverMarker\");\n }\n };\n\n popup.getHoveredRow = function () {\n return hoverMarker.start.row;\n };\n\n event.addListener(popup.container, \"mouseout\", hideHoverMarker);\n popup.on(\"hide\", hideHoverMarker);\n popup.on(\"changeSelection\", hideHoverMarker);\n\n popup.session.doc.getLength = function () {\n return popup.data.length;\n };\n\n popup.session.doc.getLine = function (i) {\n var data = popup.data[i];\n if (typeof data == \"string\") return data;\n return data && data.value || \"\";\n };\n\n var bgTokenizer = popup.session.bgTokenizer;\n\n bgTokenizer.$tokenizeRow = function (row) {\n var data = popup.data[row];\n var tokens = [];\n if (!data) return tokens;\n if (typeof data == \"string\") data = {\n value: data\n };\n var caption = data.caption || data.value || data.name;\n\n function addToken(value, className) {\n value && tokens.push({\n type: (data.className || \"\") + (className || \"\"),\n value: value\n });\n }\n\n var lower = caption.toLowerCase();\n var filterText = (popup.filterText || \"\").toLowerCase();\n var lastIndex = 0;\n var lastI = 0;\n\n for (var i = 0; i <= filterText.length; i++) {\n if (i != lastI && (data.matchMask & 1 << i || i == filterText.length)) {\n var sub = filterText.slice(lastI, i);\n lastI = i;\n var index = lower.indexOf(sub, lastIndex);\n if (index == -1) continue;\n addToken(caption.slice(lastIndex, index), \"\");\n lastIndex = index + sub.length;\n addToken(caption.slice(index, lastIndex), \"completion-highlight\");\n }\n }\n\n addToken(caption.slice(lastIndex, caption.length), \"\");\n if (data.meta) tokens.push({\n type: \"completion-meta\",\n value: data.meta\n });\n if (data.message) tokens.push({\n type: \"completion-message\",\n value: data.message\n });\n return tokens;\n };\n\n bgTokenizer.$updateOnChange = noop;\n bgTokenizer.start = noop;\n\n popup.session.$computeWidth = function () {\n return this.screenWidth = 0;\n };\n\n popup.isOpen = false;\n popup.isTopdown = false;\n popup.autoSelect = true;\n popup.filterText = \"\";\n popup.data = [];\n\n popup.setData = function (list, filterText) {\n popup.filterText = filterText || \"\";\n popup.setValue(lang.stringRepeat(\"\\n\", list.length), -1);\n popup.data = list || [];\n popup.setRow(0);\n };\n\n popup.getData = function (row) {\n return popup.data[row];\n };\n\n popup.getRow = function () {\n return selectionMarker.start.row;\n };\n\n popup.setRow = function (line) {\n line = Math.max(this.autoSelect ? 0 : -1, Math.min(this.data.length, line));\n\n if (selectionMarker.start.row != line) {\n popup.selection.clearSelection();\n selectionMarker.start.row = selectionMarker.end.row = line || 0;\n\n popup.session._emit(\"changeBackMarker\");\n\n popup.moveCursorTo(line || 0, 0);\n if (popup.isOpen) popup._signal(\"select\");\n }\n };\n\n popup.on(\"changeSelection\", function () {\n if (popup.isOpen) popup.setRow(popup.selection.lead.row);\n popup.renderer.scrollCursorIntoView();\n });\n\n popup.hide = function () {\n this.container.style.display = \"none\";\n\n this._signal(\"hide\");\n\n popup.isOpen = false;\n };\n\n popup.show = function (pos, lineHeight, topdownOnly) {\n var el = this.container;\n var screenHeight = window.innerHeight;\n var screenWidth = window.innerWidth;\n var renderer = this.renderer;\n var maxH = renderer.$maxLines * lineHeight * 1.4;\n var top = pos.top + this.$borderSize;\n var allowTopdown = top > screenHeight / 2 && !topdownOnly;\n\n if (allowTopdown && top + lineHeight + maxH > screenHeight) {\n renderer.$maxPixelHeight = top - 2 * this.$borderSize;\n el.style.top = \"\";\n el.style.bottom = screenHeight - top + \"px\";\n popup.isTopdown = false;\n } else {\n top += lineHeight;\n renderer.$maxPixelHeight = screenHeight - top - 0.2 * lineHeight;\n el.style.top = top + \"px\";\n el.style.bottom = \"\";\n popup.isTopdown = true;\n }\n\n el.style.display = \"\";\n var left = pos.left;\n if (left + el.offsetWidth > screenWidth) left = screenWidth - el.offsetWidth;\n el.style.left = left + \"px\";\n\n this._signal(\"show\");\n\n lastMouseEvent = null;\n popup.isOpen = true;\n };\n\n popup.goTo = function (where) {\n var row = this.getRow();\n var max = this.session.getLength() - 1;\n\n switch (where) {\n case \"up\":\n row = row <= 0 ? max : row - 1;\n break;\n\n case \"down\":\n row = row >= max ? -1 : row + 1;\n break;\n\n case \"start\":\n row = 0;\n break;\n\n case \"end\":\n row = max;\n break;\n }\n\n this.setRow(row);\n };\n\n popup.getTextLeftOffset = function () {\n return this.$borderSize + this.renderer.$padding + this.$imageSize;\n };\n\n popup.$imageSize = 0;\n popup.$borderSize = 1;\n return popup;\n };\n\n dom.importCssString(\"\\\n.ace_editor.ace_autocomplete .ace_marker-layer .ace_active-line {\\\n background-color: #CAD6FA;\\\n z-index: 1;\\\n}\\\n.ace_dark.ace_editor.ace_autocomplete .ace_marker-layer .ace_active-line {\\\n background-color: #3a674e;\\\n}\\\n.ace_editor.ace_autocomplete .ace_line-hover {\\\n border: 1px solid #abbffe;\\\n margin-top: -1px;\\\n background: rgba(233,233,253,0.4);\\\n position: absolute;\\\n z-index: 2;\\\n}\\\n.ace_dark.ace_editor.ace_autocomplete .ace_line-hover {\\\n border: 1px solid rgba(109, 150, 13, 0.8);\\\n background: rgba(58, 103, 78, 0.62);\\\n}\\\n.ace_completion-meta {\\\n opacity: 0.5;\\\n margin: 0.9em;\\\n}\\\n.ace_completion-message {\\\n color: blue;\\\n}\\\n.ace_editor.ace_autocomplete .ace_completion-highlight{\\\n color: #2d69c7;\\\n}\\\n.ace_dark.ace_editor.ace_autocomplete .ace_completion-highlight{\\\n color: #93ca12;\\\n}\\\n.ace_editor.ace_autocomplete {\\\n width: 300px;\\\n z-index: 200000;\\\n border: 1px lightgray solid;\\\n position: fixed;\\\n box-shadow: 2px 3px 5px rgba(0,0,0,.2);\\\n line-height: 1.4;\\\n background: #fefefe;\\\n color: #111;\\\n}\\\n.ace_dark.ace_editor.ace_autocomplete {\\\n border: 1px #484747 solid;\\\n box-shadow: 2px 3px 5px rgba(0, 0, 0, 0.51);\\\n line-height: 1.4;\\\n background: #25282c;\\\n color: #c1c1c1;\\\n}\", \"autocompletion.css\", false);\n exports.AcePopup = AcePopup;\n exports.$singleLineEditor = $singleLineEditor;\n});\nace.define(\"ace/autocomplete/util\", [\"require\", \"exports\", \"module\"], function (require, exports, module) {\n \"use strict\";\n\n exports.parForEach = function (array, fn, callback) {\n var completed = 0;\n var arLength = array.length;\n if (arLength === 0) callback();\n\n for (var i = 0; i < arLength; i++) {\n fn(array[i], function (result, err) {\n completed++;\n if (completed === arLength) callback(result, err);\n });\n }\n };\n\n var ID_REGEX = /[a-zA-Z_0-9\\$\\-\\u00A2-\\u2000\\u2070-\\uFFFF]/;\n\n exports.retrievePrecedingIdentifier = function (text, pos, regex) {\n regex = regex || ID_REGEX;\n var buf = [];\n\n for (var i = pos - 1; i >= 0; i--) {\n if (regex.test(text[i])) buf.push(text[i]);else break;\n }\n\n return buf.reverse().join(\"\");\n };\n\n exports.retrieveFollowingIdentifier = function (text, pos, regex) {\n regex = regex || ID_REGEX;\n var buf = [];\n\n for (var i = pos; i < text.length; i++) {\n if (regex.test(text[i])) buf.push(text[i]);else break;\n }\n\n return buf;\n };\n\n exports.getCompletionPrefix = function (editor) {\n var pos = editor.getCursorPosition();\n var line = editor.session.getLine(pos.row);\n var prefix;\n editor.completers.forEach(function (completer) {\n if (completer.identifierRegexps) {\n completer.identifierRegexps.forEach(function (identifierRegex) {\n if (!prefix && identifierRegex) prefix = this.retrievePrecedingIdentifier(line, pos.column, identifierRegex);\n }.bind(this));\n }\n }.bind(this));\n return prefix || this.retrievePrecedingIdentifier(line, pos.column);\n };\n});\nace.define(\"ace/autocomplete\", [\"require\", \"exports\", \"module\", \"ace/keyboard/hash_handler\", \"ace/autocomplete/popup\", \"ace/autocomplete/util\", \"ace/lib/lang\", \"ace/lib/dom\", \"ace/snippets\", \"ace/config\"], function (require, exports, module) {\n \"use strict\";\n\n var HashHandler = require(\"./keyboard/hash_handler\").HashHandler;\n\n var AcePopup = require(\"./autocomplete/popup\").AcePopup;\n\n var util = require(\"./autocomplete/util\");\n\n var lang = require(\"./lib/lang\");\n\n var dom = require(\"./lib/dom\");\n\n var snippetManager = require(\"./snippets\").snippetManager;\n\n var config = require(\"./config\");\n\n var Autocomplete = function Autocomplete() {\n this.autoInsert = false;\n this.autoSelect = true;\n this.exactMatch = false;\n this.gatherCompletionsId = 0;\n this.keyboardHandler = new HashHandler();\n this.keyboardHandler.bindKeys(this.commands);\n this.blurListener = this.blurListener.bind(this);\n this.changeListener = this.changeListener.bind(this);\n this.mousedownListener = this.mousedownListener.bind(this);\n this.mousewheelListener = this.mousewheelListener.bind(this);\n this.changeTimer = lang.delayedCall(function () {\n this.updateCompletions(true);\n }.bind(this));\n this.tooltipTimer = lang.delayedCall(this.updateDocTooltip.bind(this), 50);\n };\n\n (function () {\n this.$init = function () {\n this.popup = new AcePopup(document.body || document.documentElement);\n this.popup.on(\"click\", function (e) {\n this.insertMatch();\n e.stop();\n }.bind(this));\n this.popup.focus = this.editor.focus.bind(this.editor);\n this.popup.on(\"show\", this.tooltipTimer.bind(null, null));\n this.popup.on(\"select\", this.tooltipTimer.bind(null, null));\n this.popup.on(\"changeHoverMarker\", this.tooltipTimer.bind(null, null));\n return this.popup;\n };\n\n this.getPopup = function () {\n return this.popup || this.$init();\n };\n\n this.openPopup = function (editor, prefix, keepPopupPosition) {\n if (!this.popup) this.$init();\n this.popup.autoSelect = this.autoSelect;\n this.popup.setData(this.completions.filtered, this.completions.filterText);\n editor.keyBinding.addKeyboardHandler(this.keyboardHandler);\n var renderer = editor.renderer;\n this.popup.setRow(this.autoSelect ? 0 : -1);\n\n if (!keepPopupPosition) {\n this.popup.setTheme(editor.getTheme());\n this.popup.setFontSize(editor.getFontSize());\n var lineHeight = renderer.layerConfig.lineHeight;\n var pos = renderer.$cursorLayer.getPixelPosition(this.base, true);\n pos.left -= this.popup.getTextLeftOffset();\n var rect = editor.container.getBoundingClientRect();\n pos.top += rect.top - renderer.layerConfig.offset;\n pos.left += rect.left - editor.renderer.scrollLeft;\n pos.left += renderer.gutterWidth;\n this.popup.show(pos, lineHeight);\n } else if (keepPopupPosition && !prefix) {\n this.detach();\n }\n\n this.changeTimer.cancel();\n };\n\n this.detach = function () {\n this.editor.keyBinding.removeKeyboardHandler(this.keyboardHandler);\n this.editor.off(\"changeSelection\", this.changeListener);\n this.editor.off(\"blur\", this.blurListener);\n this.editor.off(\"mousedown\", this.mousedownListener);\n this.editor.off(\"mousewheel\", this.mousewheelListener);\n this.changeTimer.cancel();\n this.hideDocTooltip();\n this.gatherCompletionsId += 1;\n if (this.popup && this.popup.isOpen) this.popup.hide();\n if (this.base) this.base.detach();\n this.activated = false;\n this.completions = this.base = null;\n };\n\n this.changeListener = function (e) {\n var cursor = this.editor.selection.lead;\n\n if (cursor.row != this.base.row || cursor.column < this.base.column) {\n this.detach();\n }\n\n if (this.activated) this.changeTimer.schedule();else this.detach();\n };\n\n this.blurListener = function (e) {\n var el = document.activeElement;\n var text = this.editor.textInput.getElement();\n var fromTooltip = e.relatedTarget && this.tooltipNode && this.tooltipNode.contains(e.relatedTarget);\n var container = this.popup && this.popup.container;\n\n if (el != text && el.parentNode != container && !fromTooltip && el != this.tooltipNode && e.relatedTarget != text) {\n this.detach();\n }\n };\n\n this.mousedownListener = function (e) {\n this.detach();\n };\n\n this.mousewheelListener = function (e) {\n this.detach();\n };\n\n this.goTo = function (where) {\n this.popup.goTo(where);\n };\n\n this.insertMatch = function (data, options) {\n if (!data) data = this.popup.getData(this.popup.getRow());\n if (!data) return false;\n var completions = this.completions;\n this.editor.startOperation({\n command: {\n name: \"insertMatch\"\n }\n });\n\n if (data.completer && data.completer.insertMatch) {\n data.completer.insertMatch(this.editor, data);\n } else {\n if (completions.filterText) {\n var ranges = this.editor.selection.getAllRanges();\n\n for (var i = 0, range; range = ranges[i]; i++) {\n range.start.column -= completions.filterText.length;\n this.editor.session.remove(range);\n }\n }\n\n if (data.snippet) snippetManager.insertSnippet(this.editor, data.snippet);else this.editor.execCommand(\"insertstring\", data.value || data);\n }\n\n if (this.completions == completions) this.detach();\n this.editor.endOperation();\n };\n\n this.commands = {\n \"Up\": function Up(editor) {\n editor.completer.goTo(\"up\");\n },\n \"Down\": function Down(editor) {\n editor.completer.goTo(\"down\");\n },\n \"Ctrl-Up|Ctrl-Home\": function CtrlUpCtrlHome(editor) {\n editor.completer.goTo(\"start\");\n },\n \"Ctrl-Down|Ctrl-End\": function CtrlDownCtrlEnd(editor) {\n editor.completer.goTo(\"end\");\n },\n \"Esc\": function Esc(editor) {\n editor.completer.detach();\n },\n \"Return\": function Return(editor) {\n return editor.completer.insertMatch();\n },\n \"Shift-Return\": function ShiftReturn(editor) {\n editor.completer.insertMatch(null, {\n deleteSuffix: true\n });\n },\n \"Tab\": function Tab(editor) {\n var result = editor.completer.insertMatch();\n if (!result && !editor.tabstopManager) editor.completer.goTo(\"down\");else return result;\n },\n \"PageUp\": function PageUp(editor) {\n editor.completer.popup.gotoPageUp();\n },\n \"PageDown\": function PageDown(editor) {\n editor.completer.popup.gotoPageDown();\n }\n };\n\n this.gatherCompletions = function (editor, callback) {\n var session = editor.getSession();\n var pos = editor.getCursorPosition();\n var prefix = util.getCompletionPrefix(editor);\n this.base = session.doc.createAnchor(pos.row, pos.column - prefix.length);\n this.base.$insertRight = true;\n var matches = [];\n var total = editor.completers.length;\n editor.completers.forEach(function (completer, i) {\n completer.getCompletions(editor, session, pos, prefix, function (err, results) {\n if (!err && results) matches = matches.concat(results);\n callback(null, {\n prefix: util.getCompletionPrefix(editor),\n matches: matches,\n finished: --total === 0\n });\n });\n });\n return true;\n };\n\n this.showPopup = function (editor, options) {\n if (this.editor) this.detach();\n this.activated = true;\n this.editor = editor;\n\n if (editor.completer != this) {\n if (editor.completer) editor.completer.detach();\n editor.completer = this;\n }\n\n editor.on(\"changeSelection\", this.changeListener);\n editor.on(\"blur\", this.blurListener);\n editor.on(\"mousedown\", this.mousedownListener);\n editor.on(\"mousewheel\", this.mousewheelListener);\n this.updateCompletions(false, options);\n };\n\n this.updateCompletions = function (keepPopupPosition, options) {\n if (keepPopupPosition && this.base && this.completions) {\n var pos = this.editor.getCursorPosition();\n var prefix = this.editor.session.getTextRange({\n start: this.base,\n end: pos\n });\n if (prefix == this.completions.filterText) return;\n this.completions.setFilter(prefix);\n if (!this.completions.filtered.length) return this.detach();\n if (this.completions.filtered.length == 1 && this.completions.filtered[0].value == prefix && !this.completions.filtered[0].snippet) return this.detach();\n this.openPopup(this.editor, prefix, keepPopupPosition);\n return;\n }\n\n if (options && options.matches) {\n var pos = this.editor.getSelectionRange().start;\n this.base = this.editor.session.doc.createAnchor(pos.row, pos.column);\n this.base.$insertRight = true;\n this.completions = new FilteredList(options.matches);\n return this.openPopup(this.editor, \"\", keepPopupPosition);\n }\n\n var _id = this.gatherCompletionsId;\n\n var detachIfFinished = function (results) {\n if (!results.finished) return;\n return this.detach();\n }.bind(this);\n\n var processResults = function (results) {\n var prefix = results.prefix;\n var matches = results.matches;\n this.completions = new FilteredList(matches);\n if (this.exactMatch) this.completions.exactMatch = true;\n this.completions.setFilter(prefix);\n var filtered = this.completions.filtered;\n if (!filtered.length) return detachIfFinished(results);\n if (filtered.length == 1 && filtered[0].value == prefix && !filtered[0].snippet) return detachIfFinished(results);\n if (this.autoInsert && filtered.length == 1 && results.finished) return this.insertMatch(filtered[0]);\n this.openPopup(this.editor, prefix, keepPopupPosition);\n }.bind(this);\n\n var isImmediate = true;\n var immediateResults = null;\n this.gatherCompletions(this.editor, function (err, results) {\n var prefix = results.prefix;\n var matches = results && results.matches;\n if (!matches || !matches.length) return detachIfFinished(results);\n if (prefix.indexOf(results.prefix) !== 0 || _id != this.gatherCompletionsId) return;\n\n if (isImmediate) {\n immediateResults = results;\n return;\n }\n\n processResults(results);\n }.bind(this));\n isImmediate = false;\n\n if (immediateResults) {\n var results = immediateResults;\n immediateResults = null;\n processResults(results);\n }\n };\n\n this.cancelContextMenu = function () {\n this.editor.$mouseHandler.cancelContextMenu();\n };\n\n this.updateDocTooltip = function () {\n var popup = this.popup;\n var all = popup.data;\n var selected = all && (all[popup.getHoveredRow()] || all[popup.getRow()]);\n var doc = null;\n if (!selected || !this.editor || !this.popup.isOpen) return this.hideDocTooltip();\n this.editor.completers.some(function (completer) {\n if (completer.getDocTooltip) doc = completer.getDocTooltip(selected);\n return doc;\n });\n if (!doc && typeof selected != \"string\") doc = selected;\n if (typeof doc == \"string\") doc = {\n docText: doc\n };\n if (!doc || !(doc.docHTML || doc.docText)) return this.hideDocTooltip();\n this.showDocTooltip(doc);\n };\n\n this.showDocTooltip = function (item) {\n if (!this.tooltipNode) {\n this.tooltipNode = dom.createElement(\"div\");\n this.tooltipNode.className = \"ace_tooltip ace_doc-tooltip\";\n this.tooltipNode.style.margin = 0;\n this.tooltipNode.style.pointerEvents = \"auto\";\n this.tooltipNode.tabIndex = -1;\n this.tooltipNode.onblur = this.blurListener.bind(this);\n this.tooltipNode.onclick = this.onTooltipClick.bind(this);\n }\n\n var tooltipNode = this.tooltipNode;\n\n if (item.docHTML) {\n tooltipNode.innerHTML = item.docHTML;\n } else if (item.docText) {\n tooltipNode.textContent = item.docText;\n }\n\n if (!tooltipNode.parentNode) document.body.appendChild(tooltipNode);\n var popup = this.popup;\n var rect = popup.container.getBoundingClientRect();\n tooltipNode.style.top = popup.container.style.top;\n tooltipNode.style.bottom = popup.container.style.bottom;\n tooltipNode.style.display = \"block\";\n\n if (window.innerWidth - rect.right < 320) {\n if (rect.left < 320) {\n if (popup.isTopdown) {\n tooltipNode.style.top = rect.bottom + \"px\";\n tooltipNode.style.left = rect.left + \"px\";\n tooltipNode.style.right = \"\";\n tooltipNode.style.bottom = \"\";\n } else {\n tooltipNode.style.top = popup.container.offsetTop - tooltipNode.offsetHeight + \"px\";\n tooltipNode.style.left = rect.left + \"px\";\n tooltipNode.style.right = \"\";\n tooltipNode.style.bottom = \"\";\n }\n } else {\n tooltipNode.style.right = window.innerWidth - rect.left + \"px\";\n tooltipNode.style.left = \"\";\n }\n } else {\n tooltipNode.style.left = rect.right + 1 + \"px\";\n tooltipNode.style.right = \"\";\n }\n };\n\n this.hideDocTooltip = function () {\n this.tooltipTimer.cancel();\n if (!this.tooltipNode) return;\n var el = this.tooltipNode;\n if (!this.editor.isFocused() && document.activeElement == el) this.editor.focus();\n this.tooltipNode = null;\n if (el.parentNode) el.parentNode.removeChild(el);\n };\n\n this.onTooltipClick = function (e) {\n var a = e.target;\n\n while (a && a != this.tooltipNode) {\n if (a.nodeName == \"A\" && a.href) {\n a.rel = \"noreferrer\";\n a.target = \"_blank\";\n break;\n }\n\n a = a.parentNode;\n }\n };\n\n this.destroy = function () {\n this.detach();\n\n if (this.popup) {\n this.popup.destroy();\n var el = this.popup.container;\n if (el && el.parentNode) el.parentNode.removeChild(el);\n }\n\n if (this.editor && this.editor.completer == this) this.editor.completer == null;\n this.popup = null;\n };\n }).call(Autocomplete.prototype);\n\n Autocomplete.for = function (editor) {\n if (editor.completer) {\n return editor.completer;\n }\n\n if (config.get(\"sharedPopups\")) {\n if (!Autocomplete.$shared) Autocomplete.$sharedInstance = new Autocomplete();\n editor.completer = Autocomplete.$sharedInstance;\n } else {\n editor.completer = new Autocomplete();\n editor.once(\"destroy\", function (e, editor) {\n editor.completer.destroy();\n });\n }\n\n return editor.completer;\n };\n\n Autocomplete.startCommand = {\n name: \"startAutocomplete\",\n exec: function exec(editor, options) {\n var completer = Autocomplete.for(editor);\n completer.autoInsert = false;\n completer.autoSelect = true;\n completer.showPopup(editor, options);\n completer.cancelContextMenu();\n },\n bindKey: \"Ctrl-Space|Ctrl-Shift-Space|Alt-Space\"\n };\n\n var FilteredList = function FilteredList(array, filterText) {\n this.all = array;\n this.filtered = array;\n this.filterText = filterText || \"\";\n this.exactMatch = false;\n };\n\n (function () {\n this.setFilter = function (str) {\n if (str.length > this.filterText && str.lastIndexOf(this.filterText, 0) === 0) var matches = this.filtered;else var matches = this.all;\n this.filterText = str;\n matches = this.filterCompletions(matches, this.filterText);\n matches = matches.sort(function (a, b) {\n return b.exactMatch - a.exactMatch || b.$score - a.$score || (a.caption || a.value).localeCompare(b.caption || b.value);\n });\n var prev = null;\n matches = matches.filter(function (item) {\n var caption = item.snippet || item.caption || item.value;\n if (caption === prev) return false;\n prev = caption;\n return true;\n });\n this.filtered = matches;\n };\n\n this.filterCompletions = function (items, needle) {\n var results = [];\n var upper = needle.toUpperCase();\n var lower = needle.toLowerCase();\n\n loop: for (var i = 0, item; item = items[i]; i++) {\n var caption = item.caption || item.value || item.snippet;\n if (!caption) continue;\n var lastIndex = -1;\n var matchMask = 0;\n var penalty = 0;\n var index, distance;\n\n if (this.exactMatch) {\n if (needle !== caption.substr(0, needle.length)) continue loop;\n } else {\n var fullMatchIndex = caption.toLowerCase().indexOf(lower);\n\n if (fullMatchIndex > -1) {\n penalty = fullMatchIndex;\n } else {\n for (var j = 0; j < needle.length; j++) {\n var i1 = caption.indexOf(lower[j], lastIndex + 1);\n var i2 = caption.indexOf(upper[j], lastIndex + 1);\n index = i1 >= 0 ? i2 < 0 || i1 < i2 ? i1 : i2 : i2;\n if (index < 0) continue loop;\n distance = index - lastIndex - 1;\n\n if (distance > 0) {\n if (lastIndex === -1) penalty += 10;\n penalty += distance;\n matchMask = matchMask | 1 << j;\n }\n\n lastIndex = index;\n }\n }\n }\n\n item.matchMask = matchMask;\n item.exactMatch = penalty ? 0 : 1;\n item.$score = (item.score || 0) - penalty;\n results.push(item);\n }\n\n return results;\n };\n }).call(FilteredList.prototype);\n exports.Autocomplete = Autocomplete;\n exports.FilteredList = FilteredList;\n});\nace.define(\"ace/autocomplete/text_completer\", [\"require\", \"exports\", \"module\", \"ace/range\"], function (require, exports, module) {\n var Range = require(\"../range\").Range;\n\n var splitRegex = /[^a-zA-Z_0-9\\$\\-\\u00C0-\\u1FFF\\u2C00-\\uD7FF\\w]+/;\n\n function getWordIndex(doc, pos) {\n var textBefore = doc.getTextRange(Range.fromPoints({\n row: 0,\n column: 0\n }, pos));\n return textBefore.split(splitRegex).length - 1;\n }\n\n function wordDistance(doc, pos) {\n var prefixPos = getWordIndex(doc, pos);\n var words = doc.getValue().split(splitRegex);\n var wordScores = Object.create(null);\n var currentWord = words[prefixPos];\n words.forEach(function (word, idx) {\n if (!word || word === currentWord) return;\n var distance = Math.abs(prefixPos - idx);\n var score = words.length - distance;\n\n if (wordScores[word]) {\n wordScores[word] = Math.max(score, wordScores[word]);\n } else {\n wordScores[word] = score;\n }\n });\n return wordScores;\n }\n\n exports.getCompletions = function (editor, session, pos, prefix, callback) {\n var wordScore = wordDistance(session, pos);\n var wordList = Object.keys(wordScore);\n callback(null, wordList.map(function (word) {\n return {\n caption: word,\n value: word,\n score: wordScore[word],\n meta: \"local\"\n };\n }));\n };\n});\nace.define(\"ace/ext/language_tools\", [\"require\", \"exports\", \"module\", \"ace/snippets\", \"ace/autocomplete\", \"ace/config\", \"ace/lib/lang\", \"ace/autocomplete/util\", \"ace/autocomplete/text_completer\", \"ace/editor\", \"ace/config\"], function (require, exports, module) {\n \"use strict\";\n\n var snippetManager = require(\"../snippets\").snippetManager;\n\n var Autocomplete = require(\"../autocomplete\").Autocomplete;\n\n var config = require(\"../config\");\n\n var lang = require(\"../lib/lang\");\n\n var util = require(\"../autocomplete/util\");\n\n var textCompleter = require(\"../autocomplete/text_completer\");\n\n var keyWordCompleter = {\n getCompletions: function getCompletions(editor, session, pos, prefix, callback) {\n if (session.$mode.completer) {\n return session.$mode.completer.getCompletions(editor, session, pos, prefix, callback);\n }\n\n var state = editor.session.getState(pos.row);\n var completions = session.$mode.getCompletions(state, session, pos, prefix);\n callback(null, completions);\n }\n };\n var snippetCompleter = {\n getCompletions: function getCompletions(editor, session, pos, prefix, callback) {\n var scopes = [];\n var token = session.getTokenAt(pos.row, pos.column);\n if (token && token.type.match(/(tag-name|tag-open|tag-whitespace|attribute-name|attribute-value)\\.xml$/)) scopes.push('html-tag');else scopes = snippetManager.getActiveScopes(editor);\n var snippetMap = snippetManager.snippetMap;\n var completions = [];\n scopes.forEach(function (scope) {\n var snippets = snippetMap[scope] || [];\n\n for (var i = snippets.length; i--;) {\n var s = snippets[i];\n var caption = s.name || s.tabTrigger;\n if (!caption) continue;\n completions.push({\n caption: caption,\n snippet: s.content,\n meta: s.tabTrigger && !s.name ? s.tabTrigger + \"\\u21E5 \" : \"snippet\",\n type: \"snippet\"\n });\n }\n }, this);\n callback(null, completions);\n },\n getDocTooltip: function getDocTooltip(item) {\n if (item.type == \"snippet\" && !item.docHTML) {\n item.docHTML = [\"\", lang.escapeHTML(item.caption), \"\", \"
\", lang.escapeHTML(item.snippet)].join(\"\");\n }\n }\n };\n var completers = [snippetCompleter, textCompleter, keyWordCompleter];\n\n exports.setCompleters = function (val) {\n completers.length = 0;\n if (val) completers.push.apply(completers, val);\n };\n\n exports.addCompleter = function (completer) {\n completers.push(completer);\n };\n\n exports.textCompleter = textCompleter;\n exports.keyWordCompleter = keyWordCompleter;\n exports.snippetCompleter = snippetCompleter;\n var expandSnippet = {\n name: \"expandSnippet\",\n exec: function exec(editor) {\n return snippetManager.expandWithTab(editor);\n },\n bindKey: \"Tab\"\n };\n\n var onChangeMode = function onChangeMode(e, editor) {\n loadSnippetsForMode(editor.session.$mode);\n };\n\n var loadSnippetsForMode = function loadSnippetsForMode(mode) {\n if (typeof mode == \"string\") mode = config.$modes[mode];\n if (!mode) return;\n if (!snippetManager.files) snippetManager.files = {};\n loadSnippetFile(mode.$id, mode.snippetFileId);\n if (mode.modes) mode.modes.forEach(loadSnippetsForMode);\n };\n\n var loadSnippetFile = function loadSnippetFile(id, snippetFilePath) {\n if (!snippetFilePath || !id || snippetManager.files[id]) return;\n snippetManager.files[id] = {};\n config.loadModule(snippetFilePath, function (m) {\n if (!m) return;\n snippetManager.files[id] = m;\n if (!m.snippets && m.snippetText) m.snippets = snippetManager.parseSnippetFile(m.snippetText);\n snippetManager.register(m.snippets || [], m.scope);\n\n if (m.includeScopes) {\n snippetManager.snippetMap[m.scope].includeScopes = m.includeScopes;\n m.includeScopes.forEach(function (x) {\n loadSnippetsForMode(\"ace/mode/\" + x);\n });\n }\n });\n };\n\n var doLiveAutocomplete = function doLiveAutocomplete(e) {\n var editor = e.editor;\n var hasCompleter = editor.completer && editor.completer.activated;\n\n if (e.command.name === \"backspace\") {\n if (hasCompleter && !util.getCompletionPrefix(editor)) editor.completer.detach();\n } else if (e.command.name === \"insertstring\") {\n var prefix = util.getCompletionPrefix(editor);\n\n if (prefix && !hasCompleter) {\n var completer = Autocomplete.for(editor);\n completer.autoInsert = false;\n completer.showPopup(editor);\n }\n }\n };\n\n var Editor = require(\"../editor\").Editor;\n\n require(\"../config\").defineOptions(Editor.prototype, \"editor\", {\n enableBasicAutocompletion: {\n set: function set(val) {\n if (val) {\n if (!this.completers) this.completers = Array.isArray(val) ? val : completers;\n this.commands.addCommand(Autocomplete.startCommand);\n } else {\n this.commands.removeCommand(Autocomplete.startCommand);\n }\n },\n value: false\n },\n enableLiveAutocompletion: {\n set: function set(val) {\n if (val) {\n if (!this.completers) this.completers = Array.isArray(val) ? val : completers;\n this.commands.on('afterExec', doLiveAutocomplete);\n } else {\n this.commands.removeListener('afterExec', doLiveAutocomplete);\n }\n },\n value: false\n },\n enableSnippets: {\n set: function set(val) {\n if (val) {\n this.commands.addCommand(expandSnippet);\n this.on(\"changeMode\", onChangeMode);\n onChangeMode(null, this);\n } else {\n this.commands.removeCommand(expandSnippet);\n this.off(\"changeMode\", onChangeMode);\n }\n },\n value: false\n }\n });\n});\n\n(function () {\n ace.require([\"ace/ext/language_tools\"], function (m) {\n if ((typeof module === \"undefined\" ? \"undefined\" : _typeof(module)) == \"object\" && (typeof exports === \"undefined\" ? \"undefined\" : _typeof(exports)) == \"object\" && module) {\n module.exports = m;\n }\n });\n})();","function _typeof(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\n/*!\n\nJSZip v3.7.1 - A JavaScript class for generating and reading zip files\n\n\n(c) 2009-2016 Stuart Knightley \nDual licenced under the MIT license or GPLv3. See https://raw.github.com/Stuk/jszip/master/LICENSE.markdown.\n\nJSZip uses the library pako released under the MIT license :\nhttps://github.com/nodeca/pako/blob/master/LICENSE\n*/\n!function (t) {\n if (\"object\" == (typeof exports === \"undefined\" ? \"undefined\" : _typeof(exports)) && \"undefined\" != typeof module) module.exports = t();else if (\"function\" == typeof define && define.amd) define([], t);else {\n (\"undefined\" != typeof window ? window : \"undefined\" != typeof global ? global : \"undefined\" != typeof self ? self : this).JSZip = t();\n }\n}(function () {\n return function s(a, o, h) {\n function u(r, t) {\n if (!o[r]) {\n if (!a[r]) {\n var e = \"function\" == typeof require && require;\n if (!t && e) return e(r, !0);\n if (l) return l(r, !0);\n var i = new Error(\"Cannot find module '\" + r + \"'\");\n throw i.code = \"MODULE_NOT_FOUND\", i;\n }\n\n var n = o[r] = {\n exports: {}\n };\n a[r][0].call(n.exports, function (t) {\n var e = a[r][1][t];\n return u(e || t);\n }, n, n.exports, s, a, o, h);\n }\n\n return o[r].exports;\n }\n\n for (var l = \"function\" == typeof require && require, t = 0; t < h.length; t++) {\n u(h[t]);\n }\n\n return u;\n }({\n 1: [function (t, e, r) {\n \"use strict\";\n\n var c = t(\"./utils\"),\n d = t(\"./support\"),\n p = \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=\";\n r.encode = function (t) {\n for (var e, r, i, n, s, a, o, h = [], u = 0, l = t.length, f = l, d = \"string\" !== c.getTypeOf(t); u < t.length;) {\n f = l - u, i = d ? (e = t[u++], r = u < l ? t[u++] : 0, u < l ? t[u++] : 0) : (e = t.charCodeAt(u++), r = u < l ? t.charCodeAt(u++) : 0, u < l ? t.charCodeAt(u++) : 0), n = e >> 2, s = (3 & e) << 4 | r >> 4, a = 1 < f ? (15 & r) << 2 | i >> 6 : 64, o = 2 < f ? 63 & i : 64, h.push(p.charAt(n) + p.charAt(s) + p.charAt(a) + p.charAt(o));\n }\n\n return h.join(\"\");\n }, r.decode = function (t) {\n var e,\n r,\n i,\n n,\n s,\n a,\n o = 0,\n h = 0,\n u = \"data:\";\n if (t.substr(0, u.length) === u) throw new Error(\"Invalid base64 input, it looks like a data url.\");\n var l,\n f = 3 * (t = t.replace(/[^A-Za-z0-9\\+\\/\\=]/g, \"\")).length / 4;\n if (t.charAt(t.length - 1) === p.charAt(64) && f--, t.charAt(t.length - 2) === p.charAt(64) && f--, f % 1 != 0) throw new Error(\"Invalid base64 input, bad content length.\");\n\n for (l = d.uint8array ? new Uint8Array(0 | f) : new Array(0 | f); o < t.length;) {\n e = p.indexOf(t.charAt(o++)) << 2 | (n = p.indexOf(t.charAt(o++))) >> 4, r = (15 & n) << 4 | (s = p.indexOf(t.charAt(o++))) >> 2, i = (3 & s) << 6 | (a = p.indexOf(t.charAt(o++))), l[h++] = e, 64 !== s && (l[h++] = r), 64 !== a && (l[h++] = i);\n }\n\n return l;\n };\n }, {\n \"./support\": 30,\n \"./utils\": 32\n }],\n 2: [function (t, e, r) {\n \"use strict\";\n\n var i = t(\"./external\"),\n n = t(\"./stream/DataWorker\"),\n s = t(\"./stream/Crc32Probe\"),\n a = t(\"./stream/DataLengthProbe\");\n\n function o(t, e, r, i, n) {\n this.compressedSize = t, this.uncompressedSize = e, this.crc32 = r, this.compression = i, this.compressedContent = n;\n }\n\n o.prototype = {\n getContentWorker: function getContentWorker() {\n var t = new n(i.Promise.resolve(this.compressedContent)).pipe(this.compression.uncompressWorker()).pipe(new a(\"data_length\")),\n e = this;\n return t.on(\"end\", function () {\n if (this.streamInfo.data_length !== e.uncompressedSize) throw new Error(\"Bug : uncompressed data size mismatch\");\n }), t;\n },\n getCompressedWorker: function getCompressedWorker() {\n return new n(i.Promise.resolve(this.compressedContent)).withStreamInfo(\"compressedSize\", this.compressedSize).withStreamInfo(\"uncompressedSize\", this.uncompressedSize).withStreamInfo(\"crc32\", this.crc32).withStreamInfo(\"compression\", this.compression);\n }\n }, o.createWorkerFrom = function (t, e, r) {\n return t.pipe(new s()).pipe(new a(\"uncompressedSize\")).pipe(e.compressWorker(r)).pipe(new a(\"compressedSize\")).withStreamInfo(\"compression\", e);\n }, e.exports = o;\n }, {\n \"./external\": 6,\n \"./stream/Crc32Probe\": 25,\n \"./stream/DataLengthProbe\": 26,\n \"./stream/DataWorker\": 27\n }],\n 3: [function (t, e, r) {\n \"use strict\";\n\n var i = t(\"./stream/GenericWorker\");\n r.STORE = {\n magic: \"\\0\\0\",\n compressWorker: function compressWorker(t) {\n return new i(\"STORE compression\");\n },\n uncompressWorker: function uncompressWorker() {\n return new i(\"STORE decompression\");\n }\n }, r.DEFLATE = t(\"./flate\");\n }, {\n \"./flate\": 7,\n \"./stream/GenericWorker\": 28\n }],\n 4: [function (t, e, r) {\n \"use strict\";\n\n var i = t(\"./utils\");\n\n var o = function () {\n for (var t, e = [], r = 0; r < 256; r++) {\n t = r;\n\n for (var i = 0; i < 8; i++) {\n t = 1 & t ? 3988292384 ^ t >>> 1 : t >>> 1;\n }\n\n e[r] = t;\n }\n\n return e;\n }();\n\n e.exports = function (t, e) {\n return void 0 !== t && t.length ? \"string\" !== i.getTypeOf(t) ? function (t, e, r, i) {\n var n = o,\n s = i + r;\n t ^= -1;\n\n for (var a = i; a < s; a++) {\n t = t >>> 8 ^ n[255 & (t ^ e[a])];\n }\n\n return -1 ^ t;\n }(0 | e, t, t.length, 0) : function (t, e, r, i) {\n var n = o,\n s = i + r;\n t ^= -1;\n\n for (var a = i; a < s; a++) {\n t = t >>> 8 ^ n[255 & (t ^ e.charCodeAt(a))];\n }\n\n return -1 ^ t;\n }(0 | e, t, t.length, 0) : 0;\n };\n }, {\n \"./utils\": 32\n }],\n 5: [function (t, e, r) {\n \"use strict\";\n\n r.base64 = !1, r.binary = !1, r.dir = !1, r.createFolders = !0, r.date = null, r.compression = null, r.compressionOptions = null, r.comment = null, r.unixPermissions = null, r.dosPermissions = null;\n }, {}],\n 6: [function (t, e, r) {\n \"use strict\";\n\n var i = null;\n i = \"undefined\" != typeof Promise ? Promise : t(\"lie\"), e.exports = {\n Promise: i\n };\n }, {\n lie: 37\n }],\n 7: [function (t, e, r) {\n \"use strict\";\n\n var i = \"undefined\" != typeof Uint8Array && \"undefined\" != typeof Uint16Array && \"undefined\" != typeof Uint32Array,\n n = t(\"pako\"),\n s = t(\"./utils\"),\n a = t(\"./stream/GenericWorker\"),\n o = i ? \"uint8array\" : \"array\";\n\n function h(t, e) {\n a.call(this, \"FlateWorker/\" + t), this._pako = null, this._pakoAction = t, this._pakoOptions = e, this.meta = {};\n }\n\n r.magic = \"\\b\\0\", s.inherits(h, a), h.prototype.processChunk = function (t) {\n this.meta = t.meta, null === this._pako && this._createPako(), this._pako.push(s.transformTo(o, t.data), !1);\n }, h.prototype.flush = function () {\n a.prototype.flush.call(this), null === this._pako && this._createPako(), this._pako.push([], !0);\n }, h.prototype.cleanUp = function () {\n a.prototype.cleanUp.call(this), this._pako = null;\n }, h.prototype._createPako = function () {\n this._pako = new n[this._pakoAction]({\n raw: !0,\n level: this._pakoOptions.level || -1\n });\n var e = this;\n\n this._pako.onData = function (t) {\n e.push({\n data: t,\n meta: e.meta\n });\n };\n }, r.compressWorker = function (t) {\n return new h(\"Deflate\", t);\n }, r.uncompressWorker = function () {\n return new h(\"Inflate\", {});\n };\n }, {\n \"./stream/GenericWorker\": 28,\n \"./utils\": 32,\n pako: 38\n }],\n 8: [function (t, e, r) {\n \"use strict\";\n\n function A(t, e) {\n var r,\n i = \"\";\n\n for (r = 0; r < e; r++) {\n i += String.fromCharCode(255 & t), t >>>= 8;\n }\n\n return i;\n }\n\n function i(t, e, r, i, n, s) {\n var a,\n o,\n h = t.file,\n u = t.compression,\n l = s !== O.utf8encode,\n f = I.transformTo(\"string\", s(h.name)),\n d = I.transformTo(\"string\", O.utf8encode(h.name)),\n c = h.comment,\n p = I.transformTo(\"string\", s(c)),\n m = I.transformTo(\"string\", O.utf8encode(c)),\n _ = d.length !== h.name.length,\n g = m.length !== c.length,\n b = \"\",\n v = \"\",\n y = \"\",\n w = h.dir,\n k = h.date,\n x = {\n crc32: 0,\n compressedSize: 0,\n uncompressedSize: 0\n };\n\n e && !r || (x.crc32 = t.crc32, x.compressedSize = t.compressedSize, x.uncompressedSize = t.uncompressedSize);\n var S = 0;\n e && (S |= 8), l || !_ && !g || (S |= 2048);\n var z = 0,\n C = 0;\n w && (z |= 16), \"UNIX\" === n ? (C = 798, z |= function (t, e) {\n var r = t;\n return t || (r = e ? 16893 : 33204), (65535 & r) << 16;\n }(h.unixPermissions, w)) : (C = 20, z |= function (t) {\n return 63 & (t || 0);\n }(h.dosPermissions)), a = k.getUTCHours(), a <<= 6, a |= k.getUTCMinutes(), a <<= 5, a |= k.getUTCSeconds() / 2, o = k.getUTCFullYear() - 1980, o <<= 4, o |= k.getUTCMonth() + 1, o <<= 5, o |= k.getUTCDate(), _ && (v = A(1, 1) + A(B(f), 4) + d, b += \"up\" + A(v.length, 2) + v), g && (y = A(1, 1) + A(B(p), 4) + m, b += \"uc\" + A(y.length, 2) + y);\n var E = \"\";\n return E += \"\\n\\0\", E += A(S, 2), E += u.magic, E += A(a, 2), E += A(o, 2), E += A(x.crc32, 4), E += A(x.compressedSize, 4), E += A(x.uncompressedSize, 4), E += A(f.length, 2), E += A(b.length, 2), {\n fileRecord: R.LOCAL_FILE_HEADER + E + f + b,\n dirRecord: R.CENTRAL_FILE_HEADER + A(C, 2) + E + A(p.length, 2) + \"\\0\\0\\0\\0\" + A(z, 4) + A(i, 4) + f + b + p\n };\n }\n\n var I = t(\"../utils\"),\n n = t(\"../stream/GenericWorker\"),\n O = t(\"../utf8\"),\n B = t(\"../crc32\"),\n R = t(\"../signature\");\n\n function s(t, e, r, i) {\n n.call(this, \"ZipFileWorker\"), this.bytesWritten = 0, this.zipComment = e, this.zipPlatform = r, this.encodeFileName = i, this.streamFiles = t, this.accumulate = !1, this.contentBuffer = [], this.dirRecords = [], this.currentSourceOffset = 0, this.entriesCount = 0, this.currentFile = null, this._sources = [];\n }\n\n I.inherits(s, n), s.prototype.push = function (t) {\n var e = t.meta.percent || 0,\n r = this.entriesCount,\n i = this._sources.length;\n this.accumulate ? this.contentBuffer.push(t) : (this.bytesWritten += t.data.length, n.prototype.push.call(this, {\n data: t.data,\n meta: {\n currentFile: this.currentFile,\n percent: r ? (e + 100 * (r - i - 1)) / r : 100\n }\n }));\n }, s.prototype.openedSource = function (t) {\n this.currentSourceOffset = this.bytesWritten, this.currentFile = t.file.name;\n var e = this.streamFiles && !t.file.dir;\n\n if (e) {\n var r = i(t, e, !1, this.currentSourceOffset, this.zipPlatform, this.encodeFileName);\n this.push({\n data: r.fileRecord,\n meta: {\n percent: 0\n }\n });\n } else this.accumulate = !0;\n }, s.prototype.closedSource = function (t) {\n this.accumulate = !1;\n var e = this.streamFiles && !t.file.dir,\n r = i(t, e, !0, this.currentSourceOffset, this.zipPlatform, this.encodeFileName);\n if (this.dirRecords.push(r.dirRecord), e) this.push({\n data: function (t) {\n return R.DATA_DESCRIPTOR + A(t.crc32, 4) + A(t.compressedSize, 4) + A(t.uncompressedSize, 4);\n }(t),\n meta: {\n percent: 100\n }\n });else for (this.push({\n data: r.fileRecord,\n meta: {\n percent: 0\n }\n }); this.contentBuffer.length;) {\n this.push(this.contentBuffer.shift());\n }\n this.currentFile = null;\n }, s.prototype.flush = function () {\n for (var t = this.bytesWritten, e = 0; e < this.dirRecords.length; e++) {\n this.push({\n data: this.dirRecords[e],\n meta: {\n percent: 100\n }\n });\n }\n\n var r = this.bytesWritten - t,\n i = function (t, e, r, i, n) {\n var s = I.transformTo(\"string\", n(i));\n return R.CENTRAL_DIRECTORY_END + \"\\0\\0\\0\\0\" + A(t, 2) + A(t, 2) + A(e, 4) + A(r, 4) + A(s.length, 2) + s;\n }(this.dirRecords.length, r, t, this.zipComment, this.encodeFileName);\n\n this.push({\n data: i,\n meta: {\n percent: 100\n }\n });\n }, s.prototype.prepareNextSource = function () {\n this.previous = this._sources.shift(), this.openedSource(this.previous.streamInfo), this.isPaused ? this.previous.pause() : this.previous.resume();\n }, s.prototype.registerPrevious = function (t) {\n this._sources.push(t);\n\n var e = this;\n return t.on(\"data\", function (t) {\n e.processChunk(t);\n }), t.on(\"end\", function () {\n e.closedSource(e.previous.streamInfo), e._sources.length ? e.prepareNextSource() : e.end();\n }), t.on(\"error\", function (t) {\n e.error(t);\n }), this;\n }, s.prototype.resume = function () {\n return !!n.prototype.resume.call(this) && (!this.previous && this._sources.length ? (this.prepareNextSource(), !0) : this.previous || this._sources.length || this.generatedError ? void 0 : (this.end(), !0));\n }, s.prototype.error = function (t) {\n var e = this._sources;\n if (!n.prototype.error.call(this, t)) return !1;\n\n for (var r = 0; r < e.length; r++) {\n try {\n e[r].error(t);\n } catch (t) {}\n }\n\n return !0;\n }, s.prototype.lock = function () {\n n.prototype.lock.call(this);\n\n for (var t = this._sources, e = 0; e < t.length; e++) {\n t[e].lock();\n }\n }, e.exports = s;\n }, {\n \"../crc32\": 4,\n \"../signature\": 23,\n \"../stream/GenericWorker\": 28,\n \"../utf8\": 31,\n \"../utils\": 32\n }],\n 9: [function (t, e, r) {\n \"use strict\";\n\n var u = t(\"../compressions\"),\n i = t(\"./ZipFileWorker\");\n\n r.generateWorker = function (t, a, e) {\n var o = new i(a.streamFiles, e, a.platform, a.encodeFileName),\n h = 0;\n\n try {\n t.forEach(function (t, e) {\n h++;\n\n var r = function (t, e) {\n var r = t || e,\n i = u[r];\n if (!i) throw new Error(r + \" is not a valid compression method !\");\n return i;\n }(e.options.compression, a.compression),\n i = e.options.compressionOptions || a.compressionOptions || {},\n n = e.dir,\n s = e.date;\n\n e._compressWorker(r, i).withStreamInfo(\"file\", {\n name: t,\n dir: n,\n date: s,\n comment: e.comment || \"\",\n unixPermissions: e.unixPermissions,\n dosPermissions: e.dosPermissions\n }).pipe(o);\n }), o.entriesCount = h;\n } catch (t) {\n o.error(t);\n }\n\n return o;\n };\n }, {\n \"../compressions\": 3,\n \"./ZipFileWorker\": 8\n }],\n 10: [function (t, e, r) {\n \"use strict\";\n\n function i() {\n if (!(this instanceof i)) return new i();\n if (arguments.length) throw new Error(\"The constructor with parameters has been removed in JSZip 3.0, please check the upgrade guide.\");\n this.files = Object.create(null), this.comment = null, this.root = \"\", this.clone = function () {\n var t = new i();\n\n for (var e in this) {\n \"function\" != typeof this[e] && (t[e] = this[e]);\n }\n\n return t;\n };\n }\n\n (i.prototype = t(\"./object\")).loadAsync = t(\"./load\"), i.support = t(\"./support\"), i.defaults = t(\"./defaults\"), i.version = \"3.7.1\", i.loadAsync = function (t, e) {\n return new i().loadAsync(t, e);\n }, i.external = t(\"./external\"), e.exports = i;\n }, {\n \"./defaults\": 5,\n \"./external\": 6,\n \"./load\": 11,\n \"./object\": 15,\n \"./support\": 30\n }],\n 11: [function (t, e, r) {\n \"use strict\";\n\n var i = t(\"./utils\"),\n n = t(\"./external\"),\n o = t(\"./utf8\"),\n h = t(\"./zipEntries\"),\n s = t(\"./stream/Crc32Probe\"),\n u = t(\"./nodejsUtils\");\n\n function l(i) {\n return new n.Promise(function (t, e) {\n var r = i.decompressed.getContentWorker().pipe(new s());\n r.on(\"error\", function (t) {\n e(t);\n }).on(\"end\", function () {\n r.streamInfo.crc32 !== i.decompressed.crc32 ? e(new Error(\"Corrupted zip : CRC32 mismatch\")) : t();\n }).resume();\n });\n }\n\n e.exports = function (t, s) {\n var a = this;\n return s = i.extend(s || {}, {\n base64: !1,\n checkCRC32: !1,\n optimizedBinaryString: !1,\n createFolders: !1,\n decodeFileName: o.utf8decode\n }), u.isNode && u.isStream(t) ? n.Promise.reject(new Error(\"JSZip can't accept a stream when loading a zip file.\")) : i.prepareContent(\"the loaded zip file\", t, !0, s.optimizedBinaryString, s.base64).then(function (t) {\n var e = new h(s);\n return e.load(t), e;\n }).then(function (t) {\n var e = [n.Promise.resolve(t)],\n r = t.files;\n if (s.checkCRC32) for (var i = 0; i < r.length; i++) {\n e.push(l(r[i]));\n }\n return n.Promise.all(e);\n }).then(function (t) {\n for (var e = t.shift(), r = e.files, i = 0; i < r.length; i++) {\n var n = r[i];\n a.file(n.fileNameStr, n.decompressed, {\n binary: !0,\n optimizedBinaryString: !0,\n date: n.date,\n dir: n.dir,\n comment: n.fileCommentStr.length ? n.fileCommentStr : null,\n unixPermissions: n.unixPermissions,\n dosPermissions: n.dosPermissions,\n createFolders: s.createFolders\n });\n }\n\n return e.zipComment.length && (a.comment = e.zipComment), a;\n });\n };\n }, {\n \"./external\": 6,\n \"./nodejsUtils\": 14,\n \"./stream/Crc32Probe\": 25,\n \"./utf8\": 31,\n \"./utils\": 32,\n \"./zipEntries\": 33\n }],\n 12: [function (t, e, r) {\n \"use strict\";\n\n var i = t(\"../utils\"),\n n = t(\"../stream/GenericWorker\");\n\n function s(t, e) {\n n.call(this, \"Nodejs stream input adapter for \" + t), this._upstreamEnded = !1, this._bindStream(e);\n }\n\n i.inherits(s, n), s.prototype._bindStream = function (t) {\n var e = this;\n (this._stream = t).pause(), t.on(\"data\", function (t) {\n e.push({\n data: t,\n meta: {\n percent: 0\n }\n });\n }).on(\"error\", function (t) {\n e.isPaused ? this.generatedError = t : e.error(t);\n }).on(\"end\", function () {\n e.isPaused ? e._upstreamEnded = !0 : e.end();\n });\n }, s.prototype.pause = function () {\n return !!n.prototype.pause.call(this) && (this._stream.pause(), !0);\n }, s.prototype.resume = function () {\n return !!n.prototype.resume.call(this) && (this._upstreamEnded ? this.end() : this._stream.resume(), !0);\n }, e.exports = s;\n }, {\n \"../stream/GenericWorker\": 28,\n \"../utils\": 32\n }],\n 13: [function (t, e, r) {\n \"use strict\";\n\n var n = t(\"readable-stream\").Readable;\n\n function i(t, e, r) {\n n.call(this, e), this._helper = t;\n var i = this;\n t.on(\"data\", function (t, e) {\n i.push(t) || i._helper.pause(), r && r(e);\n }).on(\"error\", function (t) {\n i.emit(\"error\", t);\n }).on(\"end\", function () {\n i.push(null);\n });\n }\n\n t(\"../utils\").inherits(i, n), i.prototype._read = function () {\n this._helper.resume();\n }, e.exports = i;\n }, {\n \"../utils\": 32,\n \"readable-stream\": 16\n }],\n 14: [function (t, e, r) {\n \"use strict\";\n\n e.exports = {\n isNode: \"undefined\" != typeof Buffer,\n newBufferFrom: function newBufferFrom(t, e) {\n if (Buffer.from && Buffer.from !== Uint8Array.from) return Buffer.from(t, e);\n if (\"number\" == typeof t) throw new Error('The \"data\" argument must not be a number');\n return new Buffer(t, e);\n },\n allocBuffer: function allocBuffer(t) {\n if (Buffer.alloc) return Buffer.alloc(t);\n var e = new Buffer(t);\n return e.fill(0), e;\n },\n isBuffer: function isBuffer(t) {\n return Buffer.isBuffer(t);\n },\n isStream: function isStream(t) {\n return t && \"function\" == typeof t.on && \"function\" == typeof t.pause && \"function\" == typeof t.resume;\n }\n };\n }, {}],\n 15: [function (t, e, r) {\n \"use strict\";\n\n function s(t, e, r) {\n var i,\n n = u.getTypeOf(e),\n s = u.extend(r || {}, f);\n s.date = s.date || new Date(), null !== s.compression && (s.compression = s.compression.toUpperCase()), \"string\" == typeof s.unixPermissions && (s.unixPermissions = parseInt(s.unixPermissions, 8)), s.unixPermissions && 16384 & s.unixPermissions && (s.dir = !0), s.dosPermissions && 16 & s.dosPermissions && (s.dir = !0), s.dir && (t = g(t)), s.createFolders && (i = _(t)) && b.call(this, i, !0);\n var a = \"string\" === n && !1 === s.binary && !1 === s.base64;\n r && void 0 !== r.binary || (s.binary = !a), (e instanceof d && 0 === e.uncompressedSize || s.dir || !e || 0 === e.length) && (s.base64 = !1, s.binary = !0, e = \"\", s.compression = \"STORE\", n = \"string\");\n var o = null;\n o = e instanceof d || e instanceof l ? e : p.isNode && p.isStream(e) ? new m(t, e) : u.prepareContent(t, e, s.binary, s.optimizedBinaryString, s.base64);\n var h = new c(t, o, s);\n this.files[t] = h;\n }\n\n var n = t(\"./utf8\"),\n u = t(\"./utils\"),\n l = t(\"./stream/GenericWorker\"),\n a = t(\"./stream/StreamHelper\"),\n f = t(\"./defaults\"),\n d = t(\"./compressedObject\"),\n c = t(\"./zipObject\"),\n o = t(\"./generate\"),\n p = t(\"./nodejsUtils\"),\n m = t(\"./nodejs/NodejsStreamInputAdapter\"),\n _ = function _(t) {\n \"/\" === t.slice(-1) && (t = t.substring(0, t.length - 1));\n var e = t.lastIndexOf(\"/\");\n return 0 < e ? t.substring(0, e) : \"\";\n },\n g = function g(t) {\n return \"/\" !== t.slice(-1) && (t += \"/\"), t;\n },\n b = function b(t, e) {\n return e = void 0 !== e ? e : f.createFolders, t = g(t), this.files[t] || s.call(this, t, null, {\n dir: !0,\n createFolders: e\n }), this.files[t];\n };\n\n function h(t) {\n return \"[object RegExp]\" === Object.prototype.toString.call(t);\n }\n\n var i = {\n load: function load() {\n throw new Error(\"This method has been removed in JSZip 3.0, please check the upgrade guide.\");\n },\n forEach: function forEach(t) {\n var e, r, i;\n\n for (e in this.files) {\n i = this.files[e], (r = e.slice(this.root.length, e.length)) && e.slice(0, this.root.length) === this.root && t(r, i);\n }\n },\n filter: function filter(r) {\n var i = [];\n return this.forEach(function (t, e) {\n r(t, e) && i.push(e);\n }), i;\n },\n file: function file(t, e, r) {\n if (1 !== arguments.length) return t = this.root + t, s.call(this, t, e, r), this;\n\n if (h(t)) {\n var i = t;\n return this.filter(function (t, e) {\n return !e.dir && i.test(t);\n });\n }\n\n var n = this.files[this.root + t];\n return n && !n.dir ? n : null;\n },\n folder: function folder(r) {\n if (!r) return this;\n if (h(r)) return this.filter(function (t, e) {\n return e.dir && r.test(t);\n });\n var t = this.root + r,\n e = b.call(this, t),\n i = this.clone();\n return i.root = e.name, i;\n },\n remove: function remove(r) {\n r = this.root + r;\n var t = this.files[r];\n if (t || (\"/\" !== r.slice(-1) && (r += \"/\"), t = this.files[r]), t && !t.dir) delete this.files[r];else for (var e = this.filter(function (t, e) {\n return e.name.slice(0, r.length) === r;\n }), i = 0; i < e.length; i++) {\n delete this.files[e[i].name];\n }\n return this;\n },\n generate: function generate(t) {\n throw new Error(\"This method has been removed in JSZip 3.0, please check the upgrade guide.\");\n },\n generateInternalStream: function generateInternalStream(t) {\n var e,\n r = {};\n\n try {\n if ((r = u.extend(t || {}, {\n streamFiles: !1,\n compression: \"STORE\",\n compressionOptions: null,\n type: \"\",\n platform: \"DOS\",\n comment: null,\n mimeType: \"application/zip\",\n encodeFileName: n.utf8encode\n })).type = r.type.toLowerCase(), r.compression = r.compression.toUpperCase(), \"binarystring\" === r.type && (r.type = \"string\"), !r.type) throw new Error(\"No output type specified.\");\n u.checkSupport(r.type), \"darwin\" !== r.platform && \"freebsd\" !== r.platform && \"linux\" !== r.platform && \"sunos\" !== r.platform || (r.platform = \"UNIX\"), \"win32\" === r.platform && (r.platform = \"DOS\");\n var i = r.comment || this.comment || \"\";\n e = o.generateWorker(this, r, i);\n } catch (t) {\n (e = new l(\"error\")).error(t);\n }\n\n return new a(e, r.type || \"string\", r.mimeType);\n },\n generateAsync: function generateAsync(t, e) {\n return this.generateInternalStream(t).accumulate(e);\n },\n generateNodeStream: function generateNodeStream(t, e) {\n return (t = t || {}).type || (t.type = \"nodebuffer\"), this.generateInternalStream(t).toNodejsStream(e);\n }\n };\n e.exports = i;\n }, {\n \"./compressedObject\": 2,\n \"./defaults\": 5,\n \"./generate\": 9,\n \"./nodejs/NodejsStreamInputAdapter\": 12,\n \"./nodejsUtils\": 14,\n \"./stream/GenericWorker\": 28,\n \"./stream/StreamHelper\": 29,\n \"./utf8\": 31,\n \"./utils\": 32,\n \"./zipObject\": 35\n }],\n 16: [function (t, e, r) {\n e.exports = t(\"stream\");\n }, {\n stream: void 0\n }],\n 17: [function (t, e, r) {\n \"use strict\";\n\n var i = t(\"./DataReader\");\n\n function n(t) {\n i.call(this, t);\n\n for (var e = 0; e < this.data.length; e++) {\n t[e] = 255 & t[e];\n }\n }\n\n t(\"../utils\").inherits(n, i), n.prototype.byteAt = function (t) {\n return this.data[this.zero + t];\n }, n.prototype.lastIndexOfSignature = function (t) {\n for (var e = t.charCodeAt(0), r = t.charCodeAt(1), i = t.charCodeAt(2), n = t.charCodeAt(3), s = this.length - 4; 0 <= s; --s) {\n if (this.data[s] === e && this.data[s + 1] === r && this.data[s + 2] === i && this.data[s + 3] === n) return s - this.zero;\n }\n\n return -1;\n }, n.prototype.readAndCheckSignature = function (t) {\n var e = t.charCodeAt(0),\n r = t.charCodeAt(1),\n i = t.charCodeAt(2),\n n = t.charCodeAt(3),\n s = this.readData(4);\n return e === s[0] && r === s[1] && i === s[2] && n === s[3];\n }, n.prototype.readData = function (t) {\n if (this.checkOffset(t), 0 === t) return [];\n var e = this.data.slice(this.zero + this.index, this.zero + this.index + t);\n return this.index += t, e;\n }, e.exports = n;\n }, {\n \"../utils\": 32,\n \"./DataReader\": 18\n }],\n 18: [function (t, e, r) {\n \"use strict\";\n\n var i = t(\"../utils\");\n\n function n(t) {\n this.data = t, this.length = t.length, this.index = 0, this.zero = 0;\n }\n\n n.prototype = {\n checkOffset: function checkOffset(t) {\n this.checkIndex(this.index + t);\n },\n checkIndex: function checkIndex(t) {\n if (this.length < this.zero + t || t < 0) throw new Error(\"End of data reached (data length = \" + this.length + \", asked index = \" + t + \"). Corrupted zip ?\");\n },\n setIndex: function setIndex(t) {\n this.checkIndex(t), this.index = t;\n },\n skip: function skip(t) {\n this.setIndex(this.index + t);\n },\n byteAt: function byteAt(t) {},\n readInt: function readInt(t) {\n var e,\n r = 0;\n\n for (this.checkOffset(t), e = this.index + t - 1; e >= this.index; e--) {\n r = (r << 8) + this.byteAt(e);\n }\n\n return this.index += t, r;\n },\n readString: function readString(t) {\n return i.transformTo(\"string\", this.readData(t));\n },\n readData: function readData(t) {},\n lastIndexOfSignature: function lastIndexOfSignature(t) {},\n readAndCheckSignature: function readAndCheckSignature(t) {},\n readDate: function readDate() {\n var t = this.readInt(4);\n return new Date(Date.UTC(1980 + (t >> 25 & 127), (t >> 21 & 15) - 1, t >> 16 & 31, t >> 11 & 31, t >> 5 & 63, (31 & t) << 1));\n }\n }, e.exports = n;\n }, {\n \"../utils\": 32\n }],\n 19: [function (t, e, r) {\n \"use strict\";\n\n var i = t(\"./Uint8ArrayReader\");\n\n function n(t) {\n i.call(this, t);\n }\n\n t(\"../utils\").inherits(n, i), n.prototype.readData = function (t) {\n this.checkOffset(t);\n var e = this.data.slice(this.zero + this.index, this.zero + this.index + t);\n return this.index += t, e;\n }, e.exports = n;\n }, {\n \"../utils\": 32,\n \"./Uint8ArrayReader\": 21\n }],\n 20: [function (t, e, r) {\n \"use strict\";\n\n var i = t(\"./DataReader\");\n\n function n(t) {\n i.call(this, t);\n }\n\n t(\"../utils\").inherits(n, i), n.prototype.byteAt = function (t) {\n return this.data.charCodeAt(this.zero + t);\n }, n.prototype.lastIndexOfSignature = function (t) {\n return this.data.lastIndexOf(t) - this.zero;\n }, n.prototype.readAndCheckSignature = function (t) {\n return t === this.readData(4);\n }, n.prototype.readData = function (t) {\n this.checkOffset(t);\n var e = this.data.slice(this.zero + this.index, this.zero + this.index + t);\n return this.index += t, e;\n }, e.exports = n;\n }, {\n \"../utils\": 32,\n \"./DataReader\": 18\n }],\n 21: [function (t, e, r) {\n \"use strict\";\n\n var i = t(\"./ArrayReader\");\n\n function n(t) {\n i.call(this, t);\n }\n\n t(\"../utils\").inherits(n, i), n.prototype.readData = function (t) {\n if (this.checkOffset(t), 0 === t) return new Uint8Array(0);\n var e = this.data.subarray(this.zero + this.index, this.zero + this.index + t);\n return this.index += t, e;\n }, e.exports = n;\n }, {\n \"../utils\": 32,\n \"./ArrayReader\": 17\n }],\n 22: [function (t, e, r) {\n \"use strict\";\n\n var i = t(\"../utils\"),\n n = t(\"../support\"),\n s = t(\"./ArrayReader\"),\n a = t(\"./StringReader\"),\n o = t(\"./NodeBufferReader\"),\n h = t(\"./Uint8ArrayReader\");\n\n e.exports = function (t) {\n var e = i.getTypeOf(t);\n return i.checkSupport(e), \"string\" !== e || n.uint8array ? \"nodebuffer\" === e ? new o(t) : n.uint8array ? new h(i.transformTo(\"uint8array\", t)) : new s(i.transformTo(\"array\", t)) : new a(t);\n };\n }, {\n \"../support\": 30,\n \"../utils\": 32,\n \"./ArrayReader\": 17,\n \"./NodeBufferReader\": 19,\n \"./StringReader\": 20,\n \"./Uint8ArrayReader\": 21\n }],\n 23: [function (t, e, r) {\n \"use strict\";\n\n r.LOCAL_FILE_HEADER = \"PK\u0003\u0004\", r.CENTRAL_FILE_HEADER = \"PK\u0001\u0002\", r.CENTRAL_DIRECTORY_END = \"PK\u0005\u0006\", r.ZIP64_CENTRAL_DIRECTORY_LOCATOR = \"PK\u0006\u0007\", r.ZIP64_CENTRAL_DIRECTORY_END = \"PK\u0006\u0006\", r.DATA_DESCRIPTOR = \"PK\u0007\\b\";\n }, {}],\n 24: [function (t, e, r) {\n \"use strict\";\n\n var i = t(\"./GenericWorker\"),\n n = t(\"../utils\");\n\n function s(t) {\n i.call(this, \"ConvertWorker to \" + t), this.destType = t;\n }\n\n n.inherits(s, i), s.prototype.processChunk = function (t) {\n this.push({\n data: n.transformTo(this.destType, t.data),\n meta: t.meta\n });\n }, e.exports = s;\n }, {\n \"../utils\": 32,\n \"./GenericWorker\": 28\n }],\n 25: [function (t, e, r) {\n \"use strict\";\n\n var i = t(\"./GenericWorker\"),\n n = t(\"../crc32\");\n\n function s() {\n i.call(this, \"Crc32Probe\"), this.withStreamInfo(\"crc32\", 0);\n }\n\n t(\"../utils\").inherits(s, i), s.prototype.processChunk = function (t) {\n this.streamInfo.crc32 = n(t.data, this.streamInfo.crc32 || 0), this.push(t);\n }, e.exports = s;\n }, {\n \"../crc32\": 4,\n \"../utils\": 32,\n \"./GenericWorker\": 28\n }],\n 26: [function (t, e, r) {\n \"use strict\";\n\n var i = t(\"../utils\"),\n n = t(\"./GenericWorker\");\n\n function s(t) {\n n.call(this, \"DataLengthProbe for \" + t), this.propName = t, this.withStreamInfo(t, 0);\n }\n\n i.inherits(s, n), s.prototype.processChunk = function (t) {\n if (t) {\n var e = this.streamInfo[this.propName] || 0;\n this.streamInfo[this.propName] = e + t.data.length;\n }\n\n n.prototype.processChunk.call(this, t);\n }, e.exports = s;\n }, {\n \"../utils\": 32,\n \"./GenericWorker\": 28\n }],\n 27: [function (t, e, r) {\n \"use strict\";\n\n var i = t(\"../utils\"),\n n = t(\"./GenericWorker\");\n\n function s(t) {\n n.call(this, \"DataWorker\");\n var e = this;\n this.dataIsReady = !1, this.index = 0, this.max = 0, this.data = null, this.type = \"\", this._tickScheduled = !1, t.then(function (t) {\n e.dataIsReady = !0, e.data = t, e.max = t && t.length || 0, e.type = i.getTypeOf(t), e.isPaused || e._tickAndRepeat();\n }, function (t) {\n e.error(t);\n });\n }\n\n i.inherits(s, n), s.prototype.cleanUp = function () {\n n.prototype.cleanUp.call(this), this.data = null;\n }, s.prototype.resume = function () {\n return !!n.prototype.resume.call(this) && (!this._tickScheduled && this.dataIsReady && (this._tickScheduled = !0, i.delay(this._tickAndRepeat, [], this)), !0);\n }, s.prototype._tickAndRepeat = function () {\n this._tickScheduled = !1, this.isPaused || this.isFinished || (this._tick(), this.isFinished || (i.delay(this._tickAndRepeat, [], this), this._tickScheduled = !0));\n }, s.prototype._tick = function () {\n if (this.isPaused || this.isFinished) return !1;\n var t = null,\n e = Math.min(this.max, this.index + 16384);\n if (this.index >= this.max) return this.end();\n\n switch (this.type) {\n case \"string\":\n t = this.data.substring(this.index, e);\n break;\n\n case \"uint8array\":\n t = this.data.subarray(this.index, e);\n break;\n\n case \"array\":\n case \"nodebuffer\":\n t = this.data.slice(this.index, e);\n }\n\n return this.index = e, this.push({\n data: t,\n meta: {\n percent: this.max ? this.index / this.max * 100 : 0\n }\n });\n }, e.exports = s;\n }, {\n \"../utils\": 32,\n \"./GenericWorker\": 28\n }],\n 28: [function (t, e, r) {\n \"use strict\";\n\n function i(t) {\n this.name = t || \"default\", this.streamInfo = {}, this.generatedError = null, this.extraStreamInfo = {}, this.isPaused = !0, this.isFinished = !1, this.isLocked = !1, this._listeners = {\n data: [],\n end: [],\n error: []\n }, this.previous = null;\n }\n\n i.prototype = {\n push: function push(t) {\n this.emit(\"data\", t);\n },\n end: function end() {\n if (this.isFinished) return !1;\n this.flush();\n\n try {\n this.emit(\"end\"), this.cleanUp(), this.isFinished = !0;\n } catch (t) {\n this.emit(\"error\", t);\n }\n\n return !0;\n },\n error: function error(t) {\n return !this.isFinished && (this.isPaused ? this.generatedError = t : (this.isFinished = !0, this.emit(\"error\", t), this.previous && this.previous.error(t), this.cleanUp()), !0);\n },\n on: function on(t, e) {\n return this._listeners[t].push(e), this;\n },\n cleanUp: function cleanUp() {\n this.streamInfo = this.generatedError = this.extraStreamInfo = null, this._listeners = [];\n },\n emit: function emit(t, e) {\n if (this._listeners[t]) for (var r = 0; r < this._listeners[t].length; r++) {\n this._listeners[t][r].call(this, e);\n }\n },\n pipe: function pipe(t) {\n return t.registerPrevious(this);\n },\n registerPrevious: function registerPrevious(t) {\n if (this.isLocked) throw new Error(\"The stream '\" + this + \"' has already been used.\");\n this.streamInfo = t.streamInfo, this.mergeStreamInfo(), this.previous = t;\n var e = this;\n return t.on(\"data\", function (t) {\n e.processChunk(t);\n }), t.on(\"end\", function () {\n e.end();\n }), t.on(\"error\", function (t) {\n e.error(t);\n }), this;\n },\n pause: function pause() {\n return !this.isPaused && !this.isFinished && (this.isPaused = !0, this.previous && this.previous.pause(), !0);\n },\n resume: function resume() {\n if (!this.isPaused || this.isFinished) return !1;\n var t = this.isPaused = !1;\n return this.generatedError && (this.error(this.generatedError), t = !0), this.previous && this.previous.resume(), !t;\n },\n flush: function flush() {},\n processChunk: function processChunk(t) {\n this.push(t);\n },\n withStreamInfo: function withStreamInfo(t, e) {\n return this.extraStreamInfo[t] = e, this.mergeStreamInfo(), this;\n },\n mergeStreamInfo: function mergeStreamInfo() {\n for (var t in this.extraStreamInfo) {\n this.extraStreamInfo.hasOwnProperty(t) && (this.streamInfo[t] = this.extraStreamInfo[t]);\n }\n },\n lock: function lock() {\n if (this.isLocked) throw new Error(\"The stream '\" + this + \"' has already been used.\");\n this.isLocked = !0, this.previous && this.previous.lock();\n },\n toString: function toString() {\n var t = \"Worker \" + this.name;\n return this.previous ? this.previous + \" -> \" + t : t;\n }\n }, e.exports = i;\n }, {}],\n 29: [function (t, e, r) {\n \"use strict\";\n\n var h = t(\"../utils\"),\n n = t(\"./ConvertWorker\"),\n s = t(\"./GenericWorker\"),\n u = t(\"../base64\"),\n i = t(\"../support\"),\n a = t(\"../external\"),\n o = null;\n if (i.nodestream) try {\n o = t(\"../nodejs/NodejsStreamOutputAdapter\");\n } catch (t) {}\n\n function l(t, o) {\n return new a.Promise(function (e, r) {\n var i = [],\n n = t._internalType,\n s = t._outputType,\n a = t._mimeType;\n t.on(\"data\", function (t, e) {\n i.push(t), o && o(e);\n }).on(\"error\", function (t) {\n i = [], r(t);\n }).on(\"end\", function () {\n try {\n var t = function (t, e, r) {\n switch (t) {\n case \"blob\":\n return h.newBlob(h.transformTo(\"arraybuffer\", e), r);\n\n case \"base64\":\n return u.encode(e);\n\n default:\n return h.transformTo(t, e);\n }\n }(s, function (t, e) {\n var r,\n i = 0,\n n = null,\n s = 0;\n\n for (r = 0; r < e.length; r++) {\n s += e[r].length;\n }\n\n switch (t) {\n case \"string\":\n return e.join(\"\");\n\n case \"array\":\n return Array.prototype.concat.apply([], e);\n\n case \"uint8array\":\n for (n = new Uint8Array(s), r = 0; r < e.length; r++) {\n n.set(e[r], i), i += e[r].length;\n }\n\n return n;\n\n case \"nodebuffer\":\n return Buffer.concat(e);\n\n default:\n throw new Error(\"concat : unsupported type '\" + t + \"'\");\n }\n }(n, i), a);\n\n e(t);\n } catch (t) {\n r(t);\n }\n\n i = [];\n }).resume();\n });\n }\n\n function f(t, e, r) {\n var i = e;\n\n switch (e) {\n case \"blob\":\n case \"arraybuffer\":\n i = \"uint8array\";\n break;\n\n case \"base64\":\n i = \"string\";\n }\n\n try {\n this._internalType = i, this._outputType = e, this._mimeType = r, h.checkSupport(i), this._worker = t.pipe(new n(i)), t.lock();\n } catch (t) {\n this._worker = new s(\"error\"), this._worker.error(t);\n }\n }\n\n f.prototype = {\n accumulate: function accumulate(t) {\n return l(this, t);\n },\n on: function on(t, e) {\n var r = this;\n return \"data\" === t ? this._worker.on(t, function (t) {\n e.call(r, t.data, t.meta);\n }) : this._worker.on(t, function () {\n h.delay(e, arguments, r);\n }), this;\n },\n resume: function resume() {\n return h.delay(this._worker.resume, [], this._worker), this;\n },\n pause: function pause() {\n return this._worker.pause(), this;\n },\n toNodejsStream: function toNodejsStream(t) {\n if (h.checkSupport(\"nodestream\"), \"nodebuffer\" !== this._outputType) throw new Error(this._outputType + \" is not supported by this method\");\n return new o(this, {\n objectMode: \"nodebuffer\" !== this._outputType\n }, t);\n }\n }, e.exports = f;\n }, {\n \"../base64\": 1,\n \"../external\": 6,\n \"../nodejs/NodejsStreamOutputAdapter\": 13,\n \"../support\": 30,\n \"../utils\": 32,\n \"./ConvertWorker\": 24,\n \"./GenericWorker\": 28\n }],\n 30: [function (t, e, r) {\n \"use strict\";\n\n if (r.base64 = !0, r.array = !0, r.string = !0, r.arraybuffer = \"undefined\" != typeof ArrayBuffer && \"undefined\" != typeof Uint8Array, r.nodebuffer = \"undefined\" != typeof Buffer, r.uint8array = \"undefined\" != typeof Uint8Array, \"undefined\" == typeof ArrayBuffer) r.blob = !1;else {\n var i = new ArrayBuffer(0);\n\n try {\n r.blob = 0 === new Blob([i], {\n type: \"application/zip\"\n }).size;\n } catch (t) {\n try {\n var n = new (self.BlobBuilder || self.WebKitBlobBuilder || self.MozBlobBuilder || self.MSBlobBuilder)();\n n.append(i), r.blob = 0 === n.getBlob(\"application/zip\").size;\n } catch (t) {\n r.blob = !1;\n }\n }\n }\n\n try {\n r.nodestream = !!t(\"readable-stream\").Readable;\n } catch (t) {\n r.nodestream = !1;\n }\n }, {\n \"readable-stream\": 16\n }],\n 31: [function (t, e, s) {\n \"use strict\";\n\n for (var o = t(\"./utils\"), h = t(\"./support\"), r = t(\"./nodejsUtils\"), i = t(\"./stream/GenericWorker\"), u = new Array(256), n = 0; n < 256; n++) {\n u[n] = 252 <= n ? 6 : 248 <= n ? 5 : 240 <= n ? 4 : 224 <= n ? 3 : 192 <= n ? 2 : 1;\n }\n\n u[254] = u[254] = 1;\n\n function a() {\n i.call(this, \"utf-8 decode\"), this.leftOver = null;\n }\n\n function l() {\n i.call(this, \"utf-8 encode\");\n }\n\n s.utf8encode = function (t) {\n return h.nodebuffer ? r.newBufferFrom(t, \"utf-8\") : function (t) {\n var e,\n r,\n i,\n n,\n s,\n a = t.length,\n o = 0;\n\n for (n = 0; n < a; n++) {\n 55296 == (64512 & (r = t.charCodeAt(n))) && n + 1 < a && 56320 == (64512 & (i = t.charCodeAt(n + 1))) && (r = 65536 + (r - 55296 << 10) + (i - 56320), n++), o += r < 128 ? 1 : r < 2048 ? 2 : r < 65536 ? 3 : 4;\n }\n\n for (e = h.uint8array ? new Uint8Array(o) : new Array(o), n = s = 0; s < o; n++) {\n 55296 == (64512 & (r = t.charCodeAt(n))) && n + 1 < a && 56320 == (64512 & (i = t.charCodeAt(n + 1))) && (r = 65536 + (r - 55296 << 10) + (i - 56320), n++), r < 128 ? e[s++] = r : (r < 2048 ? e[s++] = 192 | r >>> 6 : (r < 65536 ? e[s++] = 224 | r >>> 12 : (e[s++] = 240 | r >>> 18, e[s++] = 128 | r >>> 12 & 63), e[s++] = 128 | r >>> 6 & 63), e[s++] = 128 | 63 & r);\n }\n\n return e;\n }(t);\n }, s.utf8decode = function (t) {\n return h.nodebuffer ? o.transformTo(\"nodebuffer\", t).toString(\"utf-8\") : function (t) {\n var e,\n r,\n i,\n n,\n s = t.length,\n a = new Array(2 * s);\n\n for (e = r = 0; e < s;) {\n if ((i = t[e++]) < 128) a[r++] = i;else if (4 < (n = u[i])) a[r++] = 65533, e += n - 1;else {\n for (i &= 2 === n ? 31 : 3 === n ? 15 : 7; 1 < n && e < s;) {\n i = i << 6 | 63 & t[e++], n--;\n }\n\n 1 < n ? a[r++] = 65533 : i < 65536 ? a[r++] = i : (i -= 65536, a[r++] = 55296 | i >> 10 & 1023, a[r++] = 56320 | 1023 & i);\n }\n }\n\n return a.length !== r && (a.subarray ? a = a.subarray(0, r) : a.length = r), o.applyFromCharCode(a);\n }(t = o.transformTo(h.uint8array ? \"uint8array\" : \"array\", t));\n }, o.inherits(a, i), a.prototype.processChunk = function (t) {\n var e = o.transformTo(h.uint8array ? \"uint8array\" : \"array\", t.data);\n\n if (this.leftOver && this.leftOver.length) {\n if (h.uint8array) {\n var r = e;\n (e = new Uint8Array(r.length + this.leftOver.length)).set(this.leftOver, 0), e.set(r, this.leftOver.length);\n } else e = this.leftOver.concat(e);\n\n this.leftOver = null;\n }\n\n var i = function (t, e) {\n var r;\n\n for ((e = e || t.length) > t.length && (e = t.length), r = e - 1; 0 <= r && 128 == (192 & t[r]);) {\n r--;\n }\n\n return r < 0 ? e : 0 === r ? e : r + u[t[r]] > e ? r : e;\n }(e),\n n = e;\n\n i !== e.length && (h.uint8array ? (n = e.subarray(0, i), this.leftOver = e.subarray(i, e.length)) : (n = e.slice(0, i), this.leftOver = e.slice(i, e.length))), this.push({\n data: s.utf8decode(n),\n meta: t.meta\n });\n }, a.prototype.flush = function () {\n this.leftOver && this.leftOver.length && (this.push({\n data: s.utf8decode(this.leftOver),\n meta: {}\n }), this.leftOver = null);\n }, s.Utf8DecodeWorker = a, o.inherits(l, i), l.prototype.processChunk = function (t) {\n this.push({\n data: s.utf8encode(t.data),\n meta: t.meta\n });\n }, s.Utf8EncodeWorker = l;\n }, {\n \"./nodejsUtils\": 14,\n \"./stream/GenericWorker\": 28,\n \"./support\": 30,\n \"./utils\": 32\n }],\n 32: [function (t, e, a) {\n \"use strict\";\n\n var o = t(\"./support\"),\n h = t(\"./base64\"),\n r = t(\"./nodejsUtils\"),\n i = t(\"set-immediate-shim\"),\n u = t(\"./external\");\n\n function n(t) {\n return t;\n }\n\n function l(t, e) {\n for (var r = 0; r < t.length; ++r) {\n e[r] = 255 & t.charCodeAt(r);\n }\n\n return e;\n }\n\n a.newBlob = function (e, r) {\n a.checkSupport(\"blob\");\n\n try {\n return new Blob([e], {\n type: r\n });\n } catch (t) {\n try {\n var i = new (self.BlobBuilder || self.WebKitBlobBuilder || self.MozBlobBuilder || self.MSBlobBuilder)();\n return i.append(e), i.getBlob(r);\n } catch (t) {\n throw new Error(\"Bug : can't construct the Blob.\");\n }\n }\n };\n\n var s = {\n stringifyByChunk: function stringifyByChunk(t, e, r) {\n var i = [],\n n = 0,\n s = t.length;\n if (s <= r) return String.fromCharCode.apply(null, t);\n\n for (; n < s;) {\n \"array\" === e || \"nodebuffer\" === e ? i.push(String.fromCharCode.apply(null, t.slice(n, Math.min(n + r, s)))) : i.push(String.fromCharCode.apply(null, t.subarray(n, Math.min(n + r, s)))), n += r;\n }\n\n return i.join(\"\");\n },\n stringifyByChar: function stringifyByChar(t) {\n for (var e = \"\", r = 0; r < t.length; r++) {\n e += String.fromCharCode(t[r]);\n }\n\n return e;\n },\n applyCanBeUsed: {\n uint8array: function () {\n try {\n return o.uint8array && 1 === String.fromCharCode.apply(null, new Uint8Array(1)).length;\n } catch (t) {\n return !1;\n }\n }(),\n nodebuffer: function () {\n try {\n return o.nodebuffer && 1 === String.fromCharCode.apply(null, r.allocBuffer(1)).length;\n } catch (t) {\n return !1;\n }\n }()\n }\n };\n\n function f(t) {\n var e = 65536,\n r = a.getTypeOf(t),\n i = !0;\n if (\"uint8array\" === r ? i = s.applyCanBeUsed.uint8array : \"nodebuffer\" === r && (i = s.applyCanBeUsed.nodebuffer), i) for (; 1 < e;) {\n try {\n return s.stringifyByChunk(t, r, e);\n } catch (t) {\n e = Math.floor(e / 2);\n }\n }\n return s.stringifyByChar(t);\n }\n\n function d(t, e) {\n for (var r = 0; r < t.length; r++) {\n e[r] = t[r];\n }\n\n return e;\n }\n\n a.applyFromCharCode = f;\n var c = {};\n c.string = {\n string: n,\n array: function array(t) {\n return l(t, new Array(t.length));\n },\n arraybuffer: function arraybuffer(t) {\n return c.string.uint8array(t).buffer;\n },\n uint8array: function uint8array(t) {\n return l(t, new Uint8Array(t.length));\n },\n nodebuffer: function nodebuffer(t) {\n return l(t, r.allocBuffer(t.length));\n }\n }, c.array = {\n string: f,\n array: n,\n arraybuffer: function arraybuffer(t) {\n return new Uint8Array(t).buffer;\n },\n uint8array: function uint8array(t) {\n return new Uint8Array(t);\n },\n nodebuffer: function nodebuffer(t) {\n return r.newBufferFrom(t);\n }\n }, c.arraybuffer = {\n string: function string(t) {\n return f(new Uint8Array(t));\n },\n array: function array(t) {\n return d(new Uint8Array(t), new Array(t.byteLength));\n },\n arraybuffer: n,\n uint8array: function uint8array(t) {\n return new Uint8Array(t);\n },\n nodebuffer: function nodebuffer(t) {\n return r.newBufferFrom(new Uint8Array(t));\n }\n }, c.uint8array = {\n string: f,\n array: function array(t) {\n return d(t, new Array(t.length));\n },\n arraybuffer: function arraybuffer(t) {\n return t.buffer;\n },\n uint8array: n,\n nodebuffer: function nodebuffer(t) {\n return r.newBufferFrom(t);\n }\n }, c.nodebuffer = {\n string: f,\n array: function array(t) {\n return d(t, new Array(t.length));\n },\n arraybuffer: function arraybuffer(t) {\n return c.nodebuffer.uint8array(t).buffer;\n },\n uint8array: function uint8array(t) {\n return d(t, new Uint8Array(t.length));\n },\n nodebuffer: n\n }, a.transformTo = function (t, e) {\n if (e = e || \"\", !t) return e;\n a.checkSupport(t);\n var r = a.getTypeOf(e);\n return c[r][t](e);\n }, a.getTypeOf = function (t) {\n return \"string\" == typeof t ? \"string\" : \"[object Array]\" === Object.prototype.toString.call(t) ? \"array\" : o.nodebuffer && r.isBuffer(t) ? \"nodebuffer\" : o.uint8array && t instanceof Uint8Array ? \"uint8array\" : o.arraybuffer && t instanceof ArrayBuffer ? \"arraybuffer\" : void 0;\n }, a.checkSupport = function (t) {\n if (!o[t.toLowerCase()]) throw new Error(t + \" is not supported by this platform\");\n }, a.MAX_VALUE_16BITS = 65535, a.MAX_VALUE_32BITS = -1, a.pretty = function (t) {\n var e,\n r,\n i = \"\";\n\n for (r = 0; r < (t || \"\").length; r++) {\n i += \"\\\\x\" + ((e = t.charCodeAt(r)) < 16 ? \"0\" : \"\") + e.toString(16).toUpperCase();\n }\n\n return i;\n }, a.delay = function (t, e, r) {\n i(function () {\n t.apply(r || null, e || []);\n });\n }, a.inherits = function (t, e) {\n function r() {}\n\n r.prototype = e.prototype, t.prototype = new r();\n }, a.extend = function () {\n var t,\n e,\n r = {};\n\n for (t = 0; t < arguments.length; t++) {\n for (e in arguments[t]) {\n arguments[t].hasOwnProperty(e) && void 0 === r[e] && (r[e] = arguments[t][e]);\n }\n }\n\n return r;\n }, a.prepareContent = function (r, t, i, n, s) {\n return u.Promise.resolve(t).then(function (i) {\n return o.blob && (i instanceof Blob || -1 !== [\"[object File]\", \"[object Blob]\"].indexOf(Object.prototype.toString.call(i))) && \"undefined\" != typeof FileReader ? new u.Promise(function (e, r) {\n var t = new FileReader();\n t.onload = function (t) {\n e(t.target.result);\n }, t.onerror = function (t) {\n r(t.target.error);\n }, t.readAsArrayBuffer(i);\n }) : i;\n }).then(function (t) {\n var e = a.getTypeOf(t);\n return e ? (\"arraybuffer\" === e ? t = a.transformTo(\"uint8array\", t) : \"string\" === e && (s ? t = h.decode(t) : i && !0 !== n && (t = function (t) {\n return l(t, o.uint8array ? new Uint8Array(t.length) : new Array(t.length));\n }(t))), t) : u.Promise.reject(new Error(\"Can't read the data of '\" + r + \"'. Is it in a supported JavaScript type (String, Blob, ArrayBuffer, etc) ?\"));\n });\n };\n }, {\n \"./base64\": 1,\n \"./external\": 6,\n \"./nodejsUtils\": 14,\n \"./support\": 30,\n \"set-immediate-shim\": 54\n }],\n 33: [function (t, e, r) {\n \"use strict\";\n\n var i = t(\"./reader/readerFor\"),\n n = t(\"./utils\"),\n s = t(\"./signature\"),\n a = t(\"./zipEntry\"),\n o = (t(\"./utf8\"), t(\"./support\"));\n\n function h(t) {\n this.files = [], this.loadOptions = t;\n }\n\n h.prototype = {\n checkSignature: function checkSignature(t) {\n if (!this.reader.readAndCheckSignature(t)) {\n this.reader.index -= 4;\n var e = this.reader.readString(4);\n throw new Error(\"Corrupted zip or bug: unexpected signature (\" + n.pretty(e) + \", expected \" + n.pretty(t) + \")\");\n }\n },\n isSignature: function isSignature(t, e) {\n var r = this.reader.index;\n this.reader.setIndex(t);\n var i = this.reader.readString(4) === e;\n return this.reader.setIndex(r), i;\n },\n readBlockEndOfCentral: function readBlockEndOfCentral() {\n this.diskNumber = this.reader.readInt(2), this.diskWithCentralDirStart = this.reader.readInt(2), this.centralDirRecordsOnThisDisk = this.reader.readInt(2), this.centralDirRecords = this.reader.readInt(2), this.centralDirSize = this.reader.readInt(4), this.centralDirOffset = this.reader.readInt(4), this.zipCommentLength = this.reader.readInt(2);\n var t = this.reader.readData(this.zipCommentLength),\n e = o.uint8array ? \"uint8array\" : \"array\",\n r = n.transformTo(e, t);\n this.zipComment = this.loadOptions.decodeFileName(r);\n },\n readBlockZip64EndOfCentral: function readBlockZip64EndOfCentral() {\n this.zip64EndOfCentralSize = this.reader.readInt(8), this.reader.skip(4), this.diskNumber = this.reader.readInt(4), this.diskWithCentralDirStart = this.reader.readInt(4), this.centralDirRecordsOnThisDisk = this.reader.readInt(8), this.centralDirRecords = this.reader.readInt(8), this.centralDirSize = this.reader.readInt(8), this.centralDirOffset = this.reader.readInt(8), this.zip64ExtensibleData = {};\n\n for (var t, e, r, i = this.zip64EndOfCentralSize - 44; 0 < i;) {\n t = this.reader.readInt(2), e = this.reader.readInt(4), r = this.reader.readData(e), this.zip64ExtensibleData[t] = {\n id: t,\n length: e,\n value: r\n };\n }\n },\n readBlockZip64EndOfCentralLocator: function readBlockZip64EndOfCentralLocator() {\n if (this.diskWithZip64CentralDirStart = this.reader.readInt(4), this.relativeOffsetEndOfZip64CentralDir = this.reader.readInt(8), this.disksCount = this.reader.readInt(4), 1 < this.disksCount) throw new Error(\"Multi-volumes zip are not supported\");\n },\n readLocalFiles: function readLocalFiles() {\n var t, e;\n\n for (t = 0; t < this.files.length; t++) {\n e = this.files[t], this.reader.setIndex(e.localHeaderOffset), this.checkSignature(s.LOCAL_FILE_HEADER), e.readLocalPart(this.reader), e.handleUTF8(), e.processAttributes();\n }\n },\n readCentralDir: function readCentralDir() {\n var t;\n\n for (this.reader.setIndex(this.centralDirOffset); this.reader.readAndCheckSignature(s.CENTRAL_FILE_HEADER);) {\n (t = new a({\n zip64: this.zip64\n }, this.loadOptions)).readCentralPart(this.reader), this.files.push(t);\n }\n\n if (this.centralDirRecords !== this.files.length && 0 !== this.centralDirRecords && 0 === this.files.length) throw new Error(\"Corrupted zip or bug: expected \" + this.centralDirRecords + \" records in central dir, got \" + this.files.length);\n },\n readEndOfCentral: function readEndOfCentral() {\n var t = this.reader.lastIndexOfSignature(s.CENTRAL_DIRECTORY_END);\n if (t < 0) throw !this.isSignature(0, s.LOCAL_FILE_HEADER) ? new Error(\"Can't find end of central directory : is this a zip file ? If it is, see https://stuk.github.io/jszip/documentation/howto/read_zip.html\") : new Error(\"Corrupted zip: can't find end of central directory\");\n this.reader.setIndex(t);\n var e = t;\n\n if (this.checkSignature(s.CENTRAL_DIRECTORY_END), this.readBlockEndOfCentral(), this.diskNumber === n.MAX_VALUE_16BITS || this.diskWithCentralDirStart === n.MAX_VALUE_16BITS || this.centralDirRecordsOnThisDisk === n.MAX_VALUE_16BITS || this.centralDirRecords === n.MAX_VALUE_16BITS || this.centralDirSize === n.MAX_VALUE_32BITS || this.centralDirOffset === n.MAX_VALUE_32BITS) {\n if (this.zip64 = !0, (t = this.reader.lastIndexOfSignature(s.ZIP64_CENTRAL_DIRECTORY_LOCATOR)) < 0) throw new Error(\"Corrupted zip: can't find the ZIP64 end of central directory locator\");\n if (this.reader.setIndex(t), this.checkSignature(s.ZIP64_CENTRAL_DIRECTORY_LOCATOR), this.readBlockZip64EndOfCentralLocator(), !this.isSignature(this.relativeOffsetEndOfZip64CentralDir, s.ZIP64_CENTRAL_DIRECTORY_END) && (this.relativeOffsetEndOfZip64CentralDir = this.reader.lastIndexOfSignature(s.ZIP64_CENTRAL_DIRECTORY_END), this.relativeOffsetEndOfZip64CentralDir < 0)) throw new Error(\"Corrupted zip: can't find the ZIP64 end of central directory\");\n this.reader.setIndex(this.relativeOffsetEndOfZip64CentralDir), this.checkSignature(s.ZIP64_CENTRAL_DIRECTORY_END), this.readBlockZip64EndOfCentral();\n }\n\n var r = this.centralDirOffset + this.centralDirSize;\n this.zip64 && (r += 20, r += 12 + this.zip64EndOfCentralSize);\n var i = e - r;\n if (0 < i) this.isSignature(e, s.CENTRAL_FILE_HEADER) || (this.reader.zero = i);else if (i < 0) throw new Error(\"Corrupted zip: missing \" + Math.abs(i) + \" bytes.\");\n },\n prepareReader: function prepareReader(t) {\n this.reader = i(t);\n },\n load: function load(t) {\n this.prepareReader(t), this.readEndOfCentral(), this.readCentralDir(), this.readLocalFiles();\n }\n }, e.exports = h;\n }, {\n \"./reader/readerFor\": 22,\n \"./signature\": 23,\n \"./support\": 30,\n \"./utf8\": 31,\n \"./utils\": 32,\n \"./zipEntry\": 34\n }],\n 34: [function (t, e, r) {\n \"use strict\";\n\n var i = t(\"./reader/readerFor\"),\n s = t(\"./utils\"),\n n = t(\"./compressedObject\"),\n a = t(\"./crc32\"),\n o = t(\"./utf8\"),\n h = t(\"./compressions\"),\n u = t(\"./support\");\n\n function l(t, e) {\n this.options = t, this.loadOptions = e;\n }\n\n l.prototype = {\n isEncrypted: function isEncrypted() {\n return 1 == (1 & this.bitFlag);\n },\n useUTF8: function useUTF8() {\n return 2048 == (2048 & this.bitFlag);\n },\n readLocalPart: function readLocalPart(t) {\n var e, r;\n if (t.skip(22), this.fileNameLength = t.readInt(2), r = t.readInt(2), this.fileName = t.readData(this.fileNameLength), t.skip(r), -1 === this.compressedSize || -1 === this.uncompressedSize) throw new Error(\"Bug or corrupted zip : didn't get enough information from the central directory (compressedSize === -1 || uncompressedSize === -1)\");\n if (null === (e = function (t) {\n for (var e in h) {\n if (h.hasOwnProperty(e) && h[e].magic === t) return h[e];\n }\n\n return null;\n }(this.compressionMethod))) throw new Error(\"Corrupted zip : compression \" + s.pretty(this.compressionMethod) + \" unknown (inner file : \" + s.transformTo(\"string\", this.fileName) + \")\");\n this.decompressed = new n(this.compressedSize, this.uncompressedSize, this.crc32, e, t.readData(this.compressedSize));\n },\n readCentralPart: function readCentralPart(t) {\n this.versionMadeBy = t.readInt(2), t.skip(2), this.bitFlag = t.readInt(2), this.compressionMethod = t.readString(2), this.date = t.readDate(), this.crc32 = t.readInt(4), this.compressedSize = t.readInt(4), this.uncompressedSize = t.readInt(4);\n var e = t.readInt(2);\n if (this.extraFieldsLength = t.readInt(2), this.fileCommentLength = t.readInt(2), this.diskNumberStart = t.readInt(2), this.internalFileAttributes = t.readInt(2), this.externalFileAttributes = t.readInt(4), this.localHeaderOffset = t.readInt(4), this.isEncrypted()) throw new Error(\"Encrypted zip are not supported\");\n t.skip(e), this.readExtraFields(t), this.parseZIP64ExtraField(t), this.fileComment = t.readData(this.fileCommentLength);\n },\n processAttributes: function processAttributes() {\n this.unixPermissions = null, this.dosPermissions = null;\n var t = this.versionMadeBy >> 8;\n this.dir = !!(16 & this.externalFileAttributes), 0 == t && (this.dosPermissions = 63 & this.externalFileAttributes), 3 == t && (this.unixPermissions = this.externalFileAttributes >> 16 & 65535), this.dir || \"/\" !== this.fileNameStr.slice(-1) || (this.dir = !0);\n },\n parseZIP64ExtraField: function parseZIP64ExtraField(t) {\n if (this.extraFields[1]) {\n var e = i(this.extraFields[1].value);\n this.uncompressedSize === s.MAX_VALUE_32BITS && (this.uncompressedSize = e.readInt(8)), this.compressedSize === s.MAX_VALUE_32BITS && (this.compressedSize = e.readInt(8)), this.localHeaderOffset === s.MAX_VALUE_32BITS && (this.localHeaderOffset = e.readInt(8)), this.diskNumberStart === s.MAX_VALUE_32BITS && (this.diskNumberStart = e.readInt(4));\n }\n },\n readExtraFields: function readExtraFields(t) {\n var e,\n r,\n i,\n n = t.index + this.extraFieldsLength;\n\n for (this.extraFields || (this.extraFields = {}); t.index + 4 < n;) {\n e = t.readInt(2), r = t.readInt(2), i = t.readData(r), this.extraFields[e] = {\n id: e,\n length: r,\n value: i\n };\n }\n\n t.setIndex(n);\n },\n handleUTF8: function handleUTF8() {\n var t = u.uint8array ? \"uint8array\" : \"array\";\n if (this.useUTF8()) this.fileNameStr = o.utf8decode(this.fileName), this.fileCommentStr = o.utf8decode(this.fileComment);else {\n var e = this.findExtraFieldUnicodePath();\n if (null !== e) this.fileNameStr = e;else {\n var r = s.transformTo(t, this.fileName);\n this.fileNameStr = this.loadOptions.decodeFileName(r);\n }\n var i = this.findExtraFieldUnicodeComment();\n if (null !== i) this.fileCommentStr = i;else {\n var n = s.transformTo(t, this.fileComment);\n this.fileCommentStr = this.loadOptions.decodeFileName(n);\n }\n }\n },\n findExtraFieldUnicodePath: function findExtraFieldUnicodePath() {\n var t = this.extraFields[28789];\n\n if (t) {\n var e = i(t.value);\n return 1 !== e.readInt(1) ? null : a(this.fileName) !== e.readInt(4) ? null : o.utf8decode(e.readData(t.length - 5));\n }\n\n return null;\n },\n findExtraFieldUnicodeComment: function findExtraFieldUnicodeComment() {\n var t = this.extraFields[25461];\n\n if (t) {\n var e = i(t.value);\n return 1 !== e.readInt(1) ? null : a(this.fileComment) !== e.readInt(4) ? null : o.utf8decode(e.readData(t.length - 5));\n }\n\n return null;\n }\n }, e.exports = l;\n }, {\n \"./compressedObject\": 2,\n \"./compressions\": 3,\n \"./crc32\": 4,\n \"./reader/readerFor\": 22,\n \"./support\": 30,\n \"./utf8\": 31,\n \"./utils\": 32\n }],\n 35: [function (t, e, r) {\n \"use strict\";\n\n function i(t, e, r) {\n this.name = t, this.dir = r.dir, this.date = r.date, this.comment = r.comment, this.unixPermissions = r.unixPermissions, this.dosPermissions = r.dosPermissions, this._data = e, this._dataBinary = r.binary, this.options = {\n compression: r.compression,\n compressionOptions: r.compressionOptions\n };\n }\n\n var s = t(\"./stream/StreamHelper\"),\n n = t(\"./stream/DataWorker\"),\n a = t(\"./utf8\"),\n o = t(\"./compressedObject\"),\n h = t(\"./stream/GenericWorker\");\n i.prototype = {\n internalStream: function internalStream(t) {\n var e = null,\n r = \"string\";\n\n try {\n if (!t) throw new Error(\"No output type specified.\");\n var i = \"string\" === (r = t.toLowerCase()) || \"text\" === r;\n \"binarystring\" !== r && \"text\" !== r || (r = \"string\"), e = this._decompressWorker();\n var n = !this._dataBinary;\n n && !i && (e = e.pipe(new a.Utf8EncodeWorker())), !n && i && (e = e.pipe(new a.Utf8DecodeWorker()));\n } catch (t) {\n (e = new h(\"error\")).error(t);\n }\n\n return new s(e, r, \"\");\n },\n async: function async(t, e) {\n return this.internalStream(t).accumulate(e);\n },\n nodeStream: function nodeStream(t, e) {\n return this.internalStream(t || \"nodebuffer\").toNodejsStream(e);\n },\n _compressWorker: function _compressWorker(t, e) {\n if (this._data instanceof o && this._data.compression.magic === t.magic) return this._data.getCompressedWorker();\n\n var r = this._decompressWorker();\n\n return this._dataBinary || (r = r.pipe(new a.Utf8EncodeWorker())), o.createWorkerFrom(r, t, e);\n },\n _decompressWorker: function _decompressWorker() {\n return this._data instanceof o ? this._data.getContentWorker() : this._data instanceof h ? this._data : new n(this._data);\n }\n };\n\n for (var u = [\"asText\", \"asBinary\", \"asNodeBuffer\", \"asUint8Array\", \"asArrayBuffer\"], l = function l() {\n throw new Error(\"This method has been removed in JSZip 3.0, please check the upgrade guide.\");\n }, f = 0; f < u.length; f++) {\n i.prototype[u[f]] = l;\n }\n\n e.exports = i;\n }, {\n \"./compressedObject\": 2,\n \"./stream/DataWorker\": 27,\n \"./stream/GenericWorker\": 28,\n \"./stream/StreamHelper\": 29,\n \"./utf8\": 31\n }],\n 36: [function (t, l, e) {\n (function (e) {\n \"use strict\";\n\n var r,\n i,\n t = e.MutationObserver || e.WebKitMutationObserver;\n\n if (t) {\n var n = 0,\n s = new t(u),\n a = e.document.createTextNode(\"\");\n s.observe(a, {\n characterData: !0\n }), r = function r() {\n a.data = n = ++n % 2;\n };\n } else if (e.setImmediate || void 0 === e.MessageChannel) r = \"document\" in e && \"onreadystatechange\" in e.document.createElement(\"script\") ? function () {\n var t = e.document.createElement(\"script\");\n t.onreadystatechange = function () {\n u(), t.onreadystatechange = null, t.parentNode.removeChild(t), t = null;\n }, e.document.documentElement.appendChild(t);\n } : function () {\n setTimeout(u, 0);\n };else {\n var o = new e.MessageChannel();\n o.port1.onmessage = u, r = function r() {\n o.port2.postMessage(0);\n };\n }\n\n var h = [];\n\n function u() {\n var t, e;\n i = !0;\n\n for (var r = h.length; r;) {\n for (e = h, h = [], t = -1; ++t < r;) {\n e[t]();\n }\n\n r = h.length;\n }\n\n i = !1;\n }\n\n l.exports = function (t) {\n 1 !== h.push(t) || i || r();\n };\n }).call(this, \"undefined\" != typeof global ? global : \"undefined\" != typeof self ? self : \"undefined\" != typeof window ? window : {});\n }, {}],\n 37: [function (t, e, r) {\n \"use strict\";\n\n var n = t(\"immediate\");\n\n function u() {}\n\n var l = {},\n s = [\"REJECTED\"],\n a = [\"FULFILLED\"],\n i = [\"PENDING\"];\n\n function o(t) {\n if (\"function\" != typeof t) throw new TypeError(\"resolver must be a function\");\n this.state = i, this.queue = [], this.outcome = void 0, t !== u && c(this, t);\n }\n\n function h(t, e, r) {\n this.promise = t, \"function\" == typeof e && (this.onFulfilled = e, this.callFulfilled = this.otherCallFulfilled), \"function\" == typeof r && (this.onRejected = r, this.callRejected = this.otherCallRejected);\n }\n\n function f(e, r, i) {\n n(function () {\n var t;\n\n try {\n t = r(i);\n } catch (t) {\n return l.reject(e, t);\n }\n\n t === e ? l.reject(e, new TypeError(\"Cannot resolve promise with itself\")) : l.resolve(e, t);\n });\n }\n\n function d(t) {\n var e = t && t.then;\n if (t && (\"object\" == _typeof(t) || \"function\" == typeof t) && \"function\" == typeof e) return function () {\n e.apply(t, arguments);\n };\n }\n\n function c(e, t) {\n var r = !1;\n\n function i(t) {\n r || (r = !0, l.reject(e, t));\n }\n\n function n(t) {\n r || (r = !0, l.resolve(e, t));\n }\n\n var s = p(function () {\n t(n, i);\n });\n \"error\" === s.status && i(s.value);\n }\n\n function p(t, e) {\n var r = {};\n\n try {\n r.value = t(e), r.status = \"success\";\n } catch (t) {\n r.status = \"error\", r.value = t;\n }\n\n return r;\n }\n\n (e.exports = o).prototype.finally = function (e) {\n if (\"function\" != typeof e) return this;\n var r = this.constructor;\n return this.then(function (t) {\n return r.resolve(e()).then(function () {\n return t;\n });\n }, function (t) {\n return r.resolve(e()).then(function () {\n throw t;\n });\n });\n }, o.prototype.catch = function (t) {\n return this.then(null, t);\n }, o.prototype.then = function (t, e) {\n if (\"function\" != typeof t && this.state === a || \"function\" != typeof e && this.state === s) return this;\n var r = new this.constructor(u);\n this.state !== i ? f(r, this.state === a ? t : e, this.outcome) : this.queue.push(new h(r, t, e));\n return r;\n }, h.prototype.callFulfilled = function (t) {\n l.resolve(this.promise, t);\n }, h.prototype.otherCallFulfilled = function (t) {\n f(this.promise, this.onFulfilled, t);\n }, h.prototype.callRejected = function (t) {\n l.reject(this.promise, t);\n }, h.prototype.otherCallRejected = function (t) {\n f(this.promise, this.onRejected, t);\n }, l.resolve = function (t, e) {\n var r = p(d, e);\n if (\"error\" === r.status) return l.reject(t, r.value);\n var i = r.value;\n if (i) c(t, i);else {\n t.state = a, t.outcome = e;\n\n for (var n = -1, s = t.queue.length; ++n < s;) {\n t.queue[n].callFulfilled(e);\n }\n }\n return t;\n }, l.reject = function (t, e) {\n t.state = s, t.outcome = e;\n\n for (var r = -1, i = t.queue.length; ++r < i;) {\n t.queue[r].callRejected(e);\n }\n\n return t;\n }, o.resolve = function (t) {\n if (t instanceof this) return t;\n return l.resolve(new this(u), t);\n }, o.reject = function (t) {\n var e = new this(u);\n return l.reject(e, t);\n }, o.all = function (t) {\n var r = this;\n if (\"[object Array]\" !== Object.prototype.toString.call(t)) return this.reject(new TypeError(\"must be an array\"));\n var i = t.length,\n n = !1;\n if (!i) return this.resolve([]);\n var s = new Array(i),\n a = 0,\n e = -1,\n o = new this(u);\n\n for (; ++e < i;) {\n h(t[e], e);\n }\n\n return o;\n\n function h(t, e) {\n r.resolve(t).then(function (t) {\n s[e] = t, ++a !== i || n || (n = !0, l.resolve(o, s));\n }, function (t) {\n n || (n = !0, l.reject(o, t));\n });\n }\n }, o.race = function (t) {\n var e = this;\n if (\"[object Array]\" !== Object.prototype.toString.call(t)) return this.reject(new TypeError(\"must be an array\"));\n var r = t.length,\n i = !1;\n if (!r) return this.resolve([]);\n var n = -1,\n s = new this(u);\n\n for (; ++n < r;) {\n a = t[n], e.resolve(a).then(function (t) {\n i || (i = !0, l.resolve(s, t));\n }, function (t) {\n i || (i = !0, l.reject(s, t));\n });\n }\n\n var a;\n return s;\n };\n }, {\n immediate: 36\n }],\n 38: [function (t, e, r) {\n \"use strict\";\n\n var i = {};\n (0, t(\"./lib/utils/common\").assign)(i, t(\"./lib/deflate\"), t(\"./lib/inflate\"), t(\"./lib/zlib/constants\")), e.exports = i;\n }, {\n \"./lib/deflate\": 39,\n \"./lib/inflate\": 40,\n \"./lib/utils/common\": 41,\n \"./lib/zlib/constants\": 44\n }],\n 39: [function (t, e, r) {\n \"use strict\";\n\n var a = t(\"./zlib/deflate\"),\n o = t(\"./utils/common\"),\n h = t(\"./utils/strings\"),\n n = t(\"./zlib/messages\"),\n s = t(\"./zlib/zstream\"),\n u = Object.prototype.toString,\n l = 0,\n f = -1,\n d = 0,\n c = 8;\n\n function p(t) {\n if (!(this instanceof p)) return new p(t);\n this.options = o.assign({\n level: f,\n method: c,\n chunkSize: 16384,\n windowBits: 15,\n memLevel: 8,\n strategy: d,\n to: \"\"\n }, t || {});\n var e = this.options;\n e.raw && 0 < e.windowBits ? e.windowBits = -e.windowBits : e.gzip && 0 < e.windowBits && e.windowBits < 16 && (e.windowBits += 16), this.err = 0, this.msg = \"\", this.ended = !1, this.chunks = [], this.strm = new s(), this.strm.avail_out = 0;\n var r = a.deflateInit2(this.strm, e.level, e.method, e.windowBits, e.memLevel, e.strategy);\n if (r !== l) throw new Error(n[r]);\n\n if (e.header && a.deflateSetHeader(this.strm, e.header), e.dictionary) {\n var i;\n if (i = \"string\" == typeof e.dictionary ? h.string2buf(e.dictionary) : \"[object ArrayBuffer]\" === u.call(e.dictionary) ? new Uint8Array(e.dictionary) : e.dictionary, (r = a.deflateSetDictionary(this.strm, i)) !== l) throw new Error(n[r]);\n this._dict_set = !0;\n }\n }\n\n function i(t, e) {\n var r = new p(e);\n if (r.push(t, !0), r.err) throw r.msg || n[r.err];\n return r.result;\n }\n\n p.prototype.push = function (t, e) {\n var r,\n i,\n n = this.strm,\n s = this.options.chunkSize;\n if (this.ended) return !1;\n i = e === ~~e ? e : !0 === e ? 4 : 0, \"string\" == typeof t ? n.input = h.string2buf(t) : \"[object ArrayBuffer]\" === u.call(t) ? n.input = new Uint8Array(t) : n.input = t, n.next_in = 0, n.avail_in = n.input.length;\n\n do {\n if (0 === n.avail_out && (n.output = new o.Buf8(s), n.next_out = 0, n.avail_out = s), 1 !== (r = a.deflate(n, i)) && r !== l) return this.onEnd(r), !(this.ended = !0);\n 0 !== n.avail_out && (0 !== n.avail_in || 4 !== i && 2 !== i) || (\"string\" === this.options.to ? this.onData(h.buf2binstring(o.shrinkBuf(n.output, n.next_out))) : this.onData(o.shrinkBuf(n.output, n.next_out)));\n } while ((0 < n.avail_in || 0 === n.avail_out) && 1 !== r);\n\n return 4 === i ? (r = a.deflateEnd(this.strm), this.onEnd(r), this.ended = !0, r === l) : 2 !== i || (this.onEnd(l), !(n.avail_out = 0));\n }, p.prototype.onData = function (t) {\n this.chunks.push(t);\n }, p.prototype.onEnd = function (t) {\n t === l && (\"string\" === this.options.to ? this.result = this.chunks.join(\"\") : this.result = o.flattenChunks(this.chunks)), this.chunks = [], this.err = t, this.msg = this.strm.msg;\n }, r.Deflate = p, r.deflate = i, r.deflateRaw = function (t, e) {\n return (e = e || {}).raw = !0, i(t, e);\n }, r.gzip = function (t, e) {\n return (e = e || {}).gzip = !0, i(t, e);\n };\n }, {\n \"./utils/common\": 41,\n \"./utils/strings\": 42,\n \"./zlib/deflate\": 46,\n \"./zlib/messages\": 51,\n \"./zlib/zstream\": 53\n }],\n 40: [function (t, e, r) {\n \"use strict\";\n\n var d = t(\"./zlib/inflate\"),\n c = t(\"./utils/common\"),\n p = t(\"./utils/strings\"),\n m = t(\"./zlib/constants\"),\n i = t(\"./zlib/messages\"),\n n = t(\"./zlib/zstream\"),\n s = t(\"./zlib/gzheader\"),\n _ = Object.prototype.toString;\n\n function a(t) {\n if (!(this instanceof a)) return new a(t);\n this.options = c.assign({\n chunkSize: 16384,\n windowBits: 0,\n to: \"\"\n }, t || {});\n var e = this.options;\n e.raw && 0 <= e.windowBits && e.windowBits < 16 && (e.windowBits = -e.windowBits, 0 === e.windowBits && (e.windowBits = -15)), !(0 <= e.windowBits && e.windowBits < 16) || t && t.windowBits || (e.windowBits += 32), 15 < e.windowBits && e.windowBits < 48 && 0 == (15 & e.windowBits) && (e.windowBits |= 15), this.err = 0, this.msg = \"\", this.ended = !1, this.chunks = [], this.strm = new n(), this.strm.avail_out = 0;\n var r = d.inflateInit2(this.strm, e.windowBits);\n if (r !== m.Z_OK) throw new Error(i[r]);\n this.header = new s(), d.inflateGetHeader(this.strm, this.header);\n }\n\n function o(t, e) {\n var r = new a(e);\n if (r.push(t, !0), r.err) throw r.msg || i[r.err];\n return r.result;\n }\n\n a.prototype.push = function (t, e) {\n var r,\n i,\n n,\n s,\n a,\n o,\n h = this.strm,\n u = this.options.chunkSize,\n l = this.options.dictionary,\n f = !1;\n if (this.ended) return !1;\n i = e === ~~e ? e : !0 === e ? m.Z_FINISH : m.Z_NO_FLUSH, \"string\" == typeof t ? h.input = p.binstring2buf(t) : \"[object ArrayBuffer]\" === _.call(t) ? h.input = new Uint8Array(t) : h.input = t, h.next_in = 0, h.avail_in = h.input.length;\n\n do {\n if (0 === h.avail_out && (h.output = new c.Buf8(u), h.next_out = 0, h.avail_out = u), (r = d.inflate(h, m.Z_NO_FLUSH)) === m.Z_NEED_DICT && l && (o = \"string\" == typeof l ? p.string2buf(l) : \"[object ArrayBuffer]\" === _.call(l) ? new Uint8Array(l) : l, r = d.inflateSetDictionary(this.strm, o)), r === m.Z_BUF_ERROR && !0 === f && (r = m.Z_OK, f = !1), r !== m.Z_STREAM_END && r !== m.Z_OK) return this.onEnd(r), !(this.ended = !0);\n h.next_out && (0 !== h.avail_out && r !== m.Z_STREAM_END && (0 !== h.avail_in || i !== m.Z_FINISH && i !== m.Z_SYNC_FLUSH) || (\"string\" === this.options.to ? (n = p.utf8border(h.output, h.next_out), s = h.next_out - n, a = p.buf2string(h.output, n), h.next_out = s, h.avail_out = u - s, s && c.arraySet(h.output, h.output, n, s, 0), this.onData(a)) : this.onData(c.shrinkBuf(h.output, h.next_out)))), 0 === h.avail_in && 0 === h.avail_out && (f = !0);\n } while ((0 < h.avail_in || 0 === h.avail_out) && r !== m.Z_STREAM_END);\n\n return r === m.Z_STREAM_END && (i = m.Z_FINISH), i === m.Z_FINISH ? (r = d.inflateEnd(this.strm), this.onEnd(r), this.ended = !0, r === m.Z_OK) : i !== m.Z_SYNC_FLUSH || (this.onEnd(m.Z_OK), !(h.avail_out = 0));\n }, a.prototype.onData = function (t) {\n this.chunks.push(t);\n }, a.prototype.onEnd = function (t) {\n t === m.Z_OK && (\"string\" === this.options.to ? this.result = this.chunks.join(\"\") : this.result = c.flattenChunks(this.chunks)), this.chunks = [], this.err = t, this.msg = this.strm.msg;\n }, r.Inflate = a, r.inflate = o, r.inflateRaw = function (t, e) {\n return (e = e || {}).raw = !0, o(t, e);\n }, r.ungzip = o;\n }, {\n \"./utils/common\": 41,\n \"./utils/strings\": 42,\n \"./zlib/constants\": 44,\n \"./zlib/gzheader\": 47,\n \"./zlib/inflate\": 49,\n \"./zlib/messages\": 51,\n \"./zlib/zstream\": 53\n }],\n 41: [function (t, e, r) {\n \"use strict\";\n\n var i = \"undefined\" != typeof Uint8Array && \"undefined\" != typeof Uint16Array && \"undefined\" != typeof Int32Array;\n r.assign = function (t) {\n for (var e = Array.prototype.slice.call(arguments, 1); e.length;) {\n var r = e.shift();\n\n if (r) {\n if (\"object\" != _typeof(r)) throw new TypeError(r + \"must be non-object\");\n\n for (var i in r) {\n r.hasOwnProperty(i) && (t[i] = r[i]);\n }\n }\n }\n\n return t;\n }, r.shrinkBuf = function (t, e) {\n return t.length === e ? t : t.subarray ? t.subarray(0, e) : (t.length = e, t);\n };\n var n = {\n arraySet: function arraySet(t, e, r, i, n) {\n if (e.subarray && t.subarray) t.set(e.subarray(r, r + i), n);else for (var s = 0; s < i; s++) {\n t[n + s] = e[r + s];\n }\n },\n flattenChunks: function flattenChunks(t) {\n var e, r, i, n, s, a;\n\n for (e = i = 0, r = t.length; e < r; e++) {\n i += t[e].length;\n }\n\n for (a = new Uint8Array(i), e = n = 0, r = t.length; e < r; e++) {\n s = t[e], a.set(s, n), n += s.length;\n }\n\n return a;\n }\n },\n s = {\n arraySet: function arraySet(t, e, r, i, n) {\n for (var s = 0; s < i; s++) {\n t[n + s] = e[r + s];\n }\n },\n flattenChunks: function flattenChunks(t) {\n return [].concat.apply([], t);\n }\n };\n r.setTyped = function (t) {\n t ? (r.Buf8 = Uint8Array, r.Buf16 = Uint16Array, r.Buf32 = Int32Array, r.assign(r, n)) : (r.Buf8 = Array, r.Buf16 = Array, r.Buf32 = Array, r.assign(r, s));\n }, r.setTyped(i);\n }, {}],\n 42: [function (t, e, r) {\n \"use strict\";\n\n var h = t(\"./common\"),\n n = !0,\n s = !0;\n\n try {\n String.fromCharCode.apply(null, [0]);\n } catch (t) {\n n = !1;\n }\n\n try {\n String.fromCharCode.apply(null, new Uint8Array(1));\n } catch (t) {\n s = !1;\n }\n\n for (var u = new h.Buf8(256), i = 0; i < 256; i++) {\n u[i] = 252 <= i ? 6 : 248 <= i ? 5 : 240 <= i ? 4 : 224 <= i ? 3 : 192 <= i ? 2 : 1;\n }\n\n function l(t, e) {\n if (e < 65537 && (t.subarray && s || !t.subarray && n)) return String.fromCharCode.apply(null, h.shrinkBuf(t, e));\n\n for (var r = \"\", i = 0; i < e; i++) {\n r += String.fromCharCode(t[i]);\n }\n\n return r;\n }\n\n u[254] = u[254] = 1, r.string2buf = function (t) {\n var e,\n r,\n i,\n n,\n s,\n a = t.length,\n o = 0;\n\n for (n = 0; n < a; n++) {\n 55296 == (64512 & (r = t.charCodeAt(n))) && n + 1 < a && 56320 == (64512 & (i = t.charCodeAt(n + 1))) && (r = 65536 + (r - 55296 << 10) + (i - 56320), n++), o += r < 128 ? 1 : r < 2048 ? 2 : r < 65536 ? 3 : 4;\n }\n\n for (e = new h.Buf8(o), n = s = 0; s < o; n++) {\n 55296 == (64512 & (r = t.charCodeAt(n))) && n + 1 < a && 56320 == (64512 & (i = t.charCodeAt(n + 1))) && (r = 65536 + (r - 55296 << 10) + (i - 56320), n++), r < 128 ? e[s++] = r : (r < 2048 ? e[s++] = 192 | r >>> 6 : (r < 65536 ? e[s++] = 224 | r >>> 12 : (e[s++] = 240 | r >>> 18, e[s++] = 128 | r >>> 12 & 63), e[s++] = 128 | r >>> 6 & 63), e[s++] = 128 | 63 & r);\n }\n\n return e;\n }, r.buf2binstring = function (t) {\n return l(t, t.length);\n }, r.binstring2buf = function (t) {\n for (var e = new h.Buf8(t.length), r = 0, i = e.length; r < i; r++) {\n e[r] = t.charCodeAt(r);\n }\n\n return e;\n }, r.buf2string = function (t, e) {\n var r,\n i,\n n,\n s,\n a = e || t.length,\n o = new Array(2 * a);\n\n for (r = i = 0; r < a;) {\n if ((n = t[r++]) < 128) o[i++] = n;else if (4 < (s = u[n])) o[i++] = 65533, r += s - 1;else {\n for (n &= 2 === s ? 31 : 3 === s ? 15 : 7; 1 < s && r < a;) {\n n = n << 6 | 63 & t[r++], s--;\n }\n\n 1 < s ? o[i++] = 65533 : n < 65536 ? o[i++] = n : (n -= 65536, o[i++] = 55296 | n >> 10 & 1023, o[i++] = 56320 | 1023 & n);\n }\n }\n\n return l(o, i);\n }, r.utf8border = function (t, e) {\n var r;\n\n for ((e = e || t.length) > t.length && (e = t.length), r = e - 1; 0 <= r && 128 == (192 & t[r]);) {\n r--;\n }\n\n return r < 0 ? e : 0 === r ? e : r + u[t[r]] > e ? r : e;\n };\n }, {\n \"./common\": 41\n }],\n 43: [function (t, e, r) {\n \"use strict\";\n\n e.exports = function (t, e, r, i) {\n for (var n = 65535 & t | 0, s = t >>> 16 & 65535 | 0, a = 0; 0 !== r;) {\n for (r -= a = 2e3 < r ? 2e3 : r; s = s + (n = n + e[i++] | 0) | 0, --a;) {\n ;\n }\n\n n %= 65521, s %= 65521;\n }\n\n return n | s << 16 | 0;\n };\n }, {}],\n 44: [function (t, e, r) {\n \"use strict\";\n\n e.exports = {\n Z_NO_FLUSH: 0,\n Z_PARTIAL_FLUSH: 1,\n Z_SYNC_FLUSH: 2,\n Z_FULL_FLUSH: 3,\n Z_FINISH: 4,\n Z_BLOCK: 5,\n Z_TREES: 6,\n Z_OK: 0,\n Z_STREAM_END: 1,\n Z_NEED_DICT: 2,\n Z_ERRNO: -1,\n Z_STREAM_ERROR: -2,\n Z_DATA_ERROR: -3,\n Z_BUF_ERROR: -5,\n Z_NO_COMPRESSION: 0,\n Z_BEST_SPEED: 1,\n Z_BEST_COMPRESSION: 9,\n Z_DEFAULT_COMPRESSION: -1,\n Z_FILTERED: 1,\n Z_HUFFMAN_ONLY: 2,\n Z_RLE: 3,\n Z_FIXED: 4,\n Z_DEFAULT_STRATEGY: 0,\n Z_BINARY: 0,\n Z_TEXT: 1,\n Z_UNKNOWN: 2,\n Z_DEFLATED: 8\n };\n }, {}],\n 45: [function (t, e, r) {\n \"use strict\";\n\n var o = function () {\n for (var t, e = [], r = 0; r < 256; r++) {\n t = r;\n\n for (var i = 0; i < 8; i++) {\n t = 1 & t ? 3988292384 ^ t >>> 1 : t >>> 1;\n }\n\n e[r] = t;\n }\n\n return e;\n }();\n\n e.exports = function (t, e, r, i) {\n var n = o,\n s = i + r;\n t ^= -1;\n\n for (var a = i; a < s; a++) {\n t = t >>> 8 ^ n[255 & (t ^ e[a])];\n }\n\n return -1 ^ t;\n };\n }, {}],\n 46: [function (t, e, r) {\n \"use strict\";\n\n var h,\n d = t(\"../utils/common\"),\n u = t(\"./trees\"),\n c = t(\"./adler32\"),\n p = t(\"./crc32\"),\n i = t(\"./messages\"),\n l = 0,\n f = 4,\n m = 0,\n _ = -2,\n g = -1,\n b = 4,\n n = 2,\n v = 8,\n y = 9,\n s = 286,\n a = 30,\n o = 19,\n w = 2 * s + 1,\n k = 15,\n x = 3,\n S = 258,\n z = S + x + 1,\n C = 42,\n E = 113,\n A = 1,\n I = 2,\n O = 3,\n B = 4;\n\n function R(t, e) {\n return t.msg = i[e], e;\n }\n\n function T(t) {\n return (t << 1) - (4 < t ? 9 : 0);\n }\n\n function D(t) {\n for (var e = t.length; 0 <= --e;) {\n t[e] = 0;\n }\n }\n\n function F(t) {\n var e = t.state,\n r = e.pending;\n r > t.avail_out && (r = t.avail_out), 0 !== r && (d.arraySet(t.output, e.pending_buf, e.pending_out, r, t.next_out), t.next_out += r, e.pending_out += r, t.total_out += r, t.avail_out -= r, e.pending -= r, 0 === e.pending && (e.pending_out = 0));\n }\n\n function N(t, e) {\n u._tr_flush_block(t, 0 <= t.block_start ? t.block_start : -1, t.strstart - t.block_start, e), t.block_start = t.strstart, F(t.strm);\n }\n\n function U(t, e) {\n t.pending_buf[t.pending++] = e;\n }\n\n function P(t, e) {\n t.pending_buf[t.pending++] = e >>> 8 & 255, t.pending_buf[t.pending++] = 255 & e;\n }\n\n function L(t, e) {\n var r,\n i,\n n = t.max_chain_length,\n s = t.strstart,\n a = t.prev_length,\n o = t.nice_match,\n h = t.strstart > t.w_size - z ? t.strstart - (t.w_size - z) : 0,\n u = t.window,\n l = t.w_mask,\n f = t.prev,\n d = t.strstart + S,\n c = u[s + a - 1],\n p = u[s + a];\n t.prev_length >= t.good_match && (n >>= 2), o > t.lookahead && (o = t.lookahead);\n\n do {\n if (u[(r = e) + a] === p && u[r + a - 1] === c && u[r] === u[s] && u[++r] === u[s + 1]) {\n s += 2, r++;\n\n do {} while (u[++s] === u[++r] && u[++s] === u[++r] && u[++s] === u[++r] && u[++s] === u[++r] && u[++s] === u[++r] && u[++s] === u[++r] && u[++s] === u[++r] && u[++s] === u[++r] && s < d);\n\n if (i = S - (d - s), s = d - S, a < i) {\n if (t.match_start = e, o <= (a = i)) break;\n c = u[s + a - 1], p = u[s + a];\n }\n }\n } while ((e = f[e & l]) > h && 0 != --n);\n\n return a <= t.lookahead ? a : t.lookahead;\n }\n\n function j(t) {\n var e,\n r,\n i,\n n,\n s,\n a,\n o,\n h,\n u,\n l,\n f = t.w_size;\n\n do {\n if (n = t.window_size - t.lookahead - t.strstart, t.strstart >= f + (f - z)) {\n for (d.arraySet(t.window, t.window, f, f, 0), t.match_start -= f, t.strstart -= f, t.block_start -= f, e = r = t.hash_size; i = t.head[--e], t.head[e] = f <= i ? i - f : 0, --r;) {\n ;\n }\n\n for (e = r = f; i = t.prev[--e], t.prev[e] = f <= i ? i - f : 0, --r;) {\n ;\n }\n\n n += f;\n }\n\n if (0 === t.strm.avail_in) break;\n if (a = t.strm, o = t.window, h = t.strstart + t.lookahead, u = n, l = void 0, l = a.avail_in, u < l && (l = u), r = 0 === l ? 0 : (a.avail_in -= l, d.arraySet(o, a.input, a.next_in, l, h), 1 === a.state.wrap ? a.adler = c(a.adler, o, l, h) : 2 === a.state.wrap && (a.adler = p(a.adler, o, l, h)), a.next_in += l, a.total_in += l, l), t.lookahead += r, t.lookahead + t.insert >= x) for (s = t.strstart - t.insert, t.ins_h = t.window[s], t.ins_h = (t.ins_h << t.hash_shift ^ t.window[s + 1]) & t.hash_mask; t.insert && (t.ins_h = (t.ins_h << t.hash_shift ^ t.window[s + x - 1]) & t.hash_mask, t.prev[s & t.w_mask] = t.head[t.ins_h], t.head[t.ins_h] = s, s++, t.insert--, !(t.lookahead + t.insert < x));) {\n ;\n }\n } while (t.lookahead < z && 0 !== t.strm.avail_in);\n }\n\n function Z(t, e) {\n for (var r, i;;) {\n if (t.lookahead < z) {\n if (j(t), t.lookahead < z && e === l) return A;\n if (0 === t.lookahead) break;\n }\n\n if (r = 0, t.lookahead >= x && (t.ins_h = (t.ins_h << t.hash_shift ^ t.window[t.strstart + x - 1]) & t.hash_mask, r = t.prev[t.strstart & t.w_mask] = t.head[t.ins_h], t.head[t.ins_h] = t.strstart), 0 !== r && t.strstart - r <= t.w_size - z && (t.match_length = L(t, r)), t.match_length >= x) {\n if (i = u._tr_tally(t, t.strstart - t.match_start, t.match_length - x), t.lookahead -= t.match_length, t.match_length <= t.max_lazy_match && t.lookahead >= x) {\n for (t.match_length--; t.strstart++, t.ins_h = (t.ins_h << t.hash_shift ^ t.window[t.strstart + x - 1]) & t.hash_mask, r = t.prev[t.strstart & t.w_mask] = t.head[t.ins_h], t.head[t.ins_h] = t.strstart, 0 != --t.match_length;) {\n ;\n }\n\n t.strstart++;\n } else t.strstart += t.match_length, t.match_length = 0, t.ins_h = t.window[t.strstart], t.ins_h = (t.ins_h << t.hash_shift ^ t.window[t.strstart + 1]) & t.hash_mask;\n } else i = u._tr_tally(t, 0, t.window[t.strstart]), t.lookahead--, t.strstart++;\n if (i && (N(t, !1), 0 === t.strm.avail_out)) return A;\n }\n\n return t.insert = t.strstart < x - 1 ? t.strstart : x - 1, e === f ? (N(t, !0), 0 === t.strm.avail_out ? O : B) : t.last_lit && (N(t, !1), 0 === t.strm.avail_out) ? A : I;\n }\n\n function W(t, e) {\n for (var r, i, n;;) {\n if (t.lookahead < z) {\n if (j(t), t.lookahead < z && e === l) return A;\n if (0 === t.lookahead) break;\n }\n\n if (r = 0, t.lookahead >= x && (t.ins_h = (t.ins_h << t.hash_shift ^ t.window[t.strstart + x - 1]) & t.hash_mask, r = t.prev[t.strstart & t.w_mask] = t.head[t.ins_h], t.head[t.ins_h] = t.strstart), t.prev_length = t.match_length, t.prev_match = t.match_start, t.match_length = x - 1, 0 !== r && t.prev_length < t.max_lazy_match && t.strstart - r <= t.w_size - z && (t.match_length = L(t, r), t.match_length <= 5 && (1 === t.strategy || t.match_length === x && 4096 < t.strstart - t.match_start) && (t.match_length = x - 1)), t.prev_length >= x && t.match_length <= t.prev_length) {\n for (n = t.strstart + t.lookahead - x, i = u._tr_tally(t, t.strstart - 1 - t.prev_match, t.prev_length - x), t.lookahead -= t.prev_length - 1, t.prev_length -= 2; ++t.strstart <= n && (t.ins_h = (t.ins_h << t.hash_shift ^ t.window[t.strstart + x - 1]) & t.hash_mask, r = t.prev[t.strstart & t.w_mask] = t.head[t.ins_h], t.head[t.ins_h] = t.strstart), 0 != --t.prev_length;) {\n ;\n }\n\n if (t.match_available = 0, t.match_length = x - 1, t.strstart++, i && (N(t, !1), 0 === t.strm.avail_out)) return A;\n } else if (t.match_available) {\n if ((i = u._tr_tally(t, 0, t.window[t.strstart - 1])) && N(t, !1), t.strstart++, t.lookahead--, 0 === t.strm.avail_out) return A;\n } else t.match_available = 1, t.strstart++, t.lookahead--;\n }\n\n return t.match_available && (i = u._tr_tally(t, 0, t.window[t.strstart - 1]), t.match_available = 0), t.insert = t.strstart < x - 1 ? t.strstart : x - 1, e === f ? (N(t, !0), 0 === t.strm.avail_out ? O : B) : t.last_lit && (N(t, !1), 0 === t.strm.avail_out) ? A : I;\n }\n\n function M(t, e, r, i, n) {\n this.good_length = t, this.max_lazy = e, this.nice_length = r, this.max_chain = i, this.func = n;\n }\n\n function H() {\n this.strm = null, this.status = 0, this.pending_buf = null, this.pending_buf_size = 0, this.pending_out = 0, this.pending = 0, this.wrap = 0, this.gzhead = null, this.gzindex = 0, this.method = v, this.last_flush = -1, this.w_size = 0, this.w_bits = 0, this.w_mask = 0, this.window = null, this.window_size = 0, this.prev = null, this.head = null, this.ins_h = 0, this.hash_size = 0, this.hash_bits = 0, this.hash_mask = 0, this.hash_shift = 0, this.block_start = 0, this.match_length = 0, this.prev_match = 0, this.match_available = 0, this.strstart = 0, this.match_start = 0, this.lookahead = 0, this.prev_length = 0, this.max_chain_length = 0, this.max_lazy_match = 0, this.level = 0, this.strategy = 0, this.good_match = 0, this.nice_match = 0, this.dyn_ltree = new d.Buf16(2 * w), this.dyn_dtree = new d.Buf16(2 * (2 * a + 1)), this.bl_tree = new d.Buf16(2 * (2 * o + 1)), D(this.dyn_ltree), D(this.dyn_dtree), D(this.bl_tree), this.l_desc = null, this.d_desc = null, this.bl_desc = null, this.bl_count = new d.Buf16(k + 1), this.heap = new d.Buf16(2 * s + 1), D(this.heap), this.heap_len = 0, this.heap_max = 0, this.depth = new d.Buf16(2 * s + 1), D(this.depth), this.l_buf = 0, this.lit_bufsize = 0, this.last_lit = 0, this.d_buf = 0, this.opt_len = 0, this.static_len = 0, this.matches = 0, this.insert = 0, this.bi_buf = 0, this.bi_valid = 0;\n }\n\n function G(t) {\n var e;\n return t && t.state ? (t.total_in = t.total_out = 0, t.data_type = n, (e = t.state).pending = 0, e.pending_out = 0, e.wrap < 0 && (e.wrap = -e.wrap), e.status = e.wrap ? C : E, t.adler = 2 === e.wrap ? 0 : 1, e.last_flush = l, u._tr_init(e), m) : R(t, _);\n }\n\n function K(t) {\n var e = G(t);\n return e === m && function (t) {\n t.window_size = 2 * t.w_size, D(t.head), t.max_lazy_match = h[t.level].max_lazy, t.good_match = h[t.level].good_length, t.nice_match = h[t.level].nice_length, t.max_chain_length = h[t.level].max_chain, t.strstart = 0, t.block_start = 0, t.lookahead = 0, t.insert = 0, t.match_length = t.prev_length = x - 1, t.match_available = 0, t.ins_h = 0;\n }(t.state), e;\n }\n\n function Y(t, e, r, i, n, s) {\n if (!t) return _;\n var a = 1;\n if (e === g && (e = 6), i < 0 ? (a = 0, i = -i) : 15 < i && (a = 2, i -= 16), n < 1 || y < n || r !== v || i < 8 || 15 < i || e < 0 || 9 < e || s < 0 || b < s) return R(t, _);\n 8 === i && (i = 9);\n var o = new H();\n return (t.state = o).strm = t, o.wrap = a, o.gzhead = null, o.w_bits = i, o.w_size = 1 << o.w_bits, o.w_mask = o.w_size - 1, o.hash_bits = n + 7, o.hash_size = 1 << o.hash_bits, o.hash_mask = o.hash_size - 1, o.hash_shift = ~~((o.hash_bits + x - 1) / x), o.window = new d.Buf8(2 * o.w_size), o.head = new d.Buf16(o.hash_size), o.prev = new d.Buf16(o.w_size), o.lit_bufsize = 1 << n + 6, o.pending_buf_size = 4 * o.lit_bufsize, o.pending_buf = new d.Buf8(o.pending_buf_size), o.d_buf = 1 * o.lit_bufsize, o.l_buf = 3 * o.lit_bufsize, o.level = e, o.strategy = s, o.method = r, K(t);\n }\n\n h = [new M(0, 0, 0, 0, function (t, e) {\n var r = 65535;\n\n for (r > t.pending_buf_size - 5 && (r = t.pending_buf_size - 5);;) {\n if (t.lookahead <= 1) {\n if (j(t), 0 === t.lookahead && e === l) return A;\n if (0 === t.lookahead) break;\n }\n\n t.strstart += t.lookahead, t.lookahead = 0;\n var i = t.block_start + r;\n if ((0 === t.strstart || t.strstart >= i) && (t.lookahead = t.strstart - i, t.strstart = i, N(t, !1), 0 === t.strm.avail_out)) return A;\n if (t.strstart - t.block_start >= t.w_size - z && (N(t, !1), 0 === t.strm.avail_out)) return A;\n }\n\n return t.insert = 0, e === f ? (N(t, !0), 0 === t.strm.avail_out ? O : B) : (t.strstart > t.block_start && (N(t, !1), t.strm.avail_out), A);\n }), new M(4, 4, 8, 4, Z), new M(4, 5, 16, 8, Z), new M(4, 6, 32, 32, Z), new M(4, 4, 16, 16, W), new M(8, 16, 32, 32, W), new M(8, 16, 128, 128, W), new M(8, 32, 128, 256, W), new M(32, 128, 258, 1024, W), new M(32, 258, 258, 4096, W)], r.deflateInit = function (t, e) {\n return Y(t, e, v, 15, 8, 0);\n }, r.deflateInit2 = Y, r.deflateReset = K, r.deflateResetKeep = G, r.deflateSetHeader = function (t, e) {\n return t && t.state ? 2 !== t.state.wrap ? _ : (t.state.gzhead = e, m) : _;\n }, r.deflate = function (t, e) {\n var r, i, n, s;\n if (!t || !t.state || 5 < e || e < 0) return t ? R(t, _) : _;\n if (i = t.state, !t.output || !t.input && 0 !== t.avail_in || 666 === i.status && e !== f) return R(t, 0 === t.avail_out ? -5 : _);\n if (i.strm = t, r = i.last_flush, i.last_flush = e, i.status === C) if (2 === i.wrap) t.adler = 0, U(i, 31), U(i, 139), U(i, 8), i.gzhead ? (U(i, (i.gzhead.text ? 1 : 0) + (i.gzhead.hcrc ? 2 : 0) + (i.gzhead.extra ? 4 : 0) + (i.gzhead.name ? 8 : 0) + (i.gzhead.comment ? 16 : 0)), U(i, 255 & i.gzhead.time), U(i, i.gzhead.time >> 8 & 255), U(i, i.gzhead.time >> 16 & 255), U(i, i.gzhead.time >> 24 & 255), U(i, 9 === i.level ? 2 : 2 <= i.strategy || i.level < 2 ? 4 : 0), U(i, 255 & i.gzhead.os), i.gzhead.extra && i.gzhead.extra.length && (U(i, 255 & i.gzhead.extra.length), U(i, i.gzhead.extra.length >> 8 & 255)), i.gzhead.hcrc && (t.adler = p(t.adler, i.pending_buf, i.pending, 0)), i.gzindex = 0, i.status = 69) : (U(i, 0), U(i, 0), U(i, 0), U(i, 0), U(i, 0), U(i, 9 === i.level ? 2 : 2 <= i.strategy || i.level < 2 ? 4 : 0), U(i, 3), i.status = E);else {\n var a = v + (i.w_bits - 8 << 4) << 8;\n a |= (2 <= i.strategy || i.level < 2 ? 0 : i.level < 6 ? 1 : 6 === i.level ? 2 : 3) << 6, 0 !== i.strstart && (a |= 32), a += 31 - a % 31, i.status = E, P(i, a), 0 !== i.strstart && (P(i, t.adler >>> 16), P(i, 65535 & t.adler)), t.adler = 1;\n }\n if (69 === i.status) if (i.gzhead.extra) {\n for (n = i.pending; i.gzindex < (65535 & i.gzhead.extra.length) && (i.pending !== i.pending_buf_size || (i.gzhead.hcrc && i.pending > n && (t.adler = p(t.adler, i.pending_buf, i.pending - n, n)), F(t), n = i.pending, i.pending !== i.pending_buf_size));) {\n U(i, 255 & i.gzhead.extra[i.gzindex]), i.gzindex++;\n }\n\n i.gzhead.hcrc && i.pending > n && (t.adler = p(t.adler, i.pending_buf, i.pending - n, n)), i.gzindex === i.gzhead.extra.length && (i.gzindex = 0, i.status = 73);\n } else i.status = 73;\n if (73 === i.status) if (i.gzhead.name) {\n n = i.pending;\n\n do {\n if (i.pending === i.pending_buf_size && (i.gzhead.hcrc && i.pending > n && (t.adler = p(t.adler, i.pending_buf, i.pending - n, n)), F(t), n = i.pending, i.pending === i.pending_buf_size)) {\n s = 1;\n break;\n }\n\n s = i.gzindex < i.gzhead.name.length ? 255 & i.gzhead.name.charCodeAt(i.gzindex++) : 0, U(i, s);\n } while (0 !== s);\n\n i.gzhead.hcrc && i.pending > n && (t.adler = p(t.adler, i.pending_buf, i.pending - n, n)), 0 === s && (i.gzindex = 0, i.status = 91);\n } else i.status = 91;\n if (91 === i.status) if (i.gzhead.comment) {\n n = i.pending;\n\n do {\n if (i.pending === i.pending_buf_size && (i.gzhead.hcrc && i.pending > n && (t.adler = p(t.adler, i.pending_buf, i.pending - n, n)), F(t), n = i.pending, i.pending === i.pending_buf_size)) {\n s = 1;\n break;\n }\n\n s = i.gzindex < i.gzhead.comment.length ? 255 & i.gzhead.comment.charCodeAt(i.gzindex++) : 0, U(i, s);\n } while (0 !== s);\n\n i.gzhead.hcrc && i.pending > n && (t.adler = p(t.adler, i.pending_buf, i.pending - n, n)), 0 === s && (i.status = 103);\n } else i.status = 103;\n\n if (103 === i.status && (i.gzhead.hcrc ? (i.pending + 2 > i.pending_buf_size && F(t), i.pending + 2 <= i.pending_buf_size && (U(i, 255 & t.adler), U(i, t.adler >> 8 & 255), t.adler = 0, i.status = E)) : i.status = E), 0 !== i.pending) {\n if (F(t), 0 === t.avail_out) return i.last_flush = -1, m;\n } else if (0 === t.avail_in && T(e) <= T(r) && e !== f) return R(t, -5);\n\n if (666 === i.status && 0 !== t.avail_in) return R(t, -5);\n\n if (0 !== t.avail_in || 0 !== i.lookahead || e !== l && 666 !== i.status) {\n var o = 2 === i.strategy ? function (t, e) {\n for (var r;;) {\n if (0 === t.lookahead && (j(t), 0 === t.lookahead)) {\n if (e === l) return A;\n break;\n }\n\n if (t.match_length = 0, r = u._tr_tally(t, 0, t.window[t.strstart]), t.lookahead--, t.strstart++, r && (N(t, !1), 0 === t.strm.avail_out)) return A;\n }\n\n return t.insert = 0, e === f ? (N(t, !0), 0 === t.strm.avail_out ? O : B) : t.last_lit && (N(t, !1), 0 === t.strm.avail_out) ? A : I;\n }(i, e) : 3 === i.strategy ? function (t, e) {\n for (var r, i, n, s, a = t.window;;) {\n if (t.lookahead <= S) {\n if (j(t), t.lookahead <= S && e === l) return A;\n if (0 === t.lookahead) break;\n }\n\n if (t.match_length = 0, t.lookahead >= x && 0 < t.strstart && (i = a[n = t.strstart - 1]) === a[++n] && i === a[++n] && i === a[++n]) {\n s = t.strstart + S;\n\n do {} while (i === a[++n] && i === a[++n] && i === a[++n] && i === a[++n] && i === a[++n] && i === a[++n] && i === a[++n] && i === a[++n] && n < s);\n\n t.match_length = S - (s - n), t.match_length > t.lookahead && (t.match_length = t.lookahead);\n }\n\n if (t.match_length >= x ? (r = u._tr_tally(t, 1, t.match_length - x), t.lookahead -= t.match_length, t.strstart += t.match_length, t.match_length = 0) : (r = u._tr_tally(t, 0, t.window[t.strstart]), t.lookahead--, t.strstart++), r && (N(t, !1), 0 === t.strm.avail_out)) return A;\n }\n\n return t.insert = 0, e === f ? (N(t, !0), 0 === t.strm.avail_out ? O : B) : t.last_lit && (N(t, !1), 0 === t.strm.avail_out) ? A : I;\n }(i, e) : h[i.level].func(i, e);\n if (o !== O && o !== B || (i.status = 666), o === A || o === O) return 0 === t.avail_out && (i.last_flush = -1), m;\n if (o === I && (1 === e ? u._tr_align(i) : 5 !== e && (u._tr_stored_block(i, 0, 0, !1), 3 === e && (D(i.head), 0 === i.lookahead && (i.strstart = 0, i.block_start = 0, i.insert = 0))), F(t), 0 === t.avail_out)) return i.last_flush = -1, m;\n }\n\n return e !== f ? m : i.wrap <= 0 ? 1 : (2 === i.wrap ? (U(i, 255 & t.adler), U(i, t.adler >> 8 & 255), U(i, t.adler >> 16 & 255), U(i, t.adler >> 24 & 255), U(i, 255 & t.total_in), U(i, t.total_in >> 8 & 255), U(i, t.total_in >> 16 & 255), U(i, t.total_in >> 24 & 255)) : (P(i, t.adler >>> 16), P(i, 65535 & t.adler)), F(t), 0 < i.wrap && (i.wrap = -i.wrap), 0 !== i.pending ? m : 1);\n }, r.deflateEnd = function (t) {\n var e;\n return t && t.state ? (e = t.state.status) !== C && 69 !== e && 73 !== e && 91 !== e && 103 !== e && e !== E && 666 !== e ? R(t, _) : (t.state = null, e === E ? R(t, -3) : m) : _;\n }, r.deflateSetDictionary = function (t, e) {\n var r,\n i,\n n,\n s,\n a,\n o,\n h,\n u,\n l = e.length;\n if (!t || !t.state) return _;\n if (2 === (s = (r = t.state).wrap) || 1 === s && r.status !== C || r.lookahead) return _;\n\n for (1 === s && (t.adler = c(t.adler, e, l, 0)), r.wrap = 0, l >= r.w_size && (0 === s && (D(r.head), r.strstart = 0, r.block_start = 0, r.insert = 0), u = new d.Buf8(r.w_size), d.arraySet(u, e, l - r.w_size, r.w_size, 0), e = u, l = r.w_size), a = t.avail_in, o = t.next_in, h = t.input, t.avail_in = l, t.next_in = 0, t.input = e, j(r); r.lookahead >= x;) {\n for (i = r.strstart, n = r.lookahead - (x - 1); r.ins_h = (r.ins_h << r.hash_shift ^ r.window[i + x - 1]) & r.hash_mask, r.prev[i & r.w_mask] = r.head[r.ins_h], r.head[r.ins_h] = i, i++, --n;) {\n ;\n }\n\n r.strstart = i, r.lookahead = x - 1, j(r);\n }\n\n return r.strstart += r.lookahead, r.block_start = r.strstart, r.insert = r.lookahead, r.lookahead = 0, r.match_length = r.prev_length = x - 1, r.match_available = 0, t.next_in = o, t.input = h, t.avail_in = a, r.wrap = s, m;\n }, r.deflateInfo = \"pako deflate (from Nodeca project)\";\n }, {\n \"../utils/common\": 41,\n \"./adler32\": 43,\n \"./crc32\": 45,\n \"./messages\": 51,\n \"./trees\": 52\n }],\n 47: [function (t, e, r) {\n \"use strict\";\n\n e.exports = function () {\n this.text = 0, this.time = 0, this.xflags = 0, this.os = 0, this.extra = null, this.extra_len = 0, this.name = \"\", this.comment = \"\", this.hcrc = 0, this.done = !1;\n };\n }, {}],\n 48: [function (t, e, r) {\n \"use strict\";\n\n e.exports = function (t, e) {\n var r, i, n, s, a, o, h, u, l, f, d, c, p, m, _, g, b, v, y, w, k, x, S, z, C;\n\n r = t.state, i = t.next_in, z = t.input, n = i + (t.avail_in - 5), s = t.next_out, C = t.output, a = s - (e - t.avail_out), o = s + (t.avail_out - 257), h = r.dmax, u = r.wsize, l = r.whave, f = r.wnext, d = r.window, c = r.hold, p = r.bits, m = r.lencode, _ = r.distcode, g = (1 << r.lenbits) - 1, b = (1 << r.distbits) - 1;\n\n t: do {\n p < 15 && (c += z[i++] << p, p += 8, c += z[i++] << p, p += 8), v = m[c & g];\n\n e: for (;;) {\n if (c >>>= y = v >>> 24, p -= y, 0 === (y = v >>> 16 & 255)) C[s++] = 65535 & v;else {\n if (!(16 & y)) {\n if (0 == (64 & y)) {\n v = m[(65535 & v) + (c & (1 << y) - 1)];\n continue e;\n }\n\n if (32 & y) {\n r.mode = 12;\n break t;\n }\n\n t.msg = \"invalid literal/length code\", r.mode = 30;\n break t;\n }\n\n w = 65535 & v, (y &= 15) && (p < y && (c += z[i++] << p, p += 8), w += c & (1 << y) - 1, c >>>= y, p -= y), p < 15 && (c += z[i++] << p, p += 8, c += z[i++] << p, p += 8), v = _[c & b];\n\n r: for (;;) {\n if (c >>>= y = v >>> 24, p -= y, !(16 & (y = v >>> 16 & 255))) {\n if (0 == (64 & y)) {\n v = _[(65535 & v) + (c & (1 << y) - 1)];\n continue r;\n }\n\n t.msg = \"invalid distance code\", r.mode = 30;\n break t;\n }\n\n if (k = 65535 & v, p < (y &= 15) && (c += z[i++] << p, (p += 8) < y && (c += z[i++] << p, p += 8)), h < (k += c & (1 << y) - 1)) {\n t.msg = \"invalid distance too far back\", r.mode = 30;\n break t;\n }\n\n if (c >>>= y, p -= y, (y = s - a) < k) {\n if (l < (y = k - y) && r.sane) {\n t.msg = \"invalid distance too far back\", r.mode = 30;\n break t;\n }\n\n if (S = d, (x = 0) === f) {\n if (x += u - y, y < w) {\n for (w -= y; C[s++] = d[x++], --y;) {\n ;\n }\n\n x = s - k, S = C;\n }\n } else if (f < y) {\n if (x += u + f - y, (y -= f) < w) {\n for (w -= y; C[s++] = d[x++], --y;) {\n ;\n }\n\n if (x = 0, f < w) {\n for (w -= y = f; C[s++] = d[x++], --y;) {\n ;\n }\n\n x = s - k, S = C;\n }\n }\n } else if (x += f - y, y < w) {\n for (w -= y; C[s++] = d[x++], --y;) {\n ;\n }\n\n x = s - k, S = C;\n }\n\n for (; 2 < w;) {\n C[s++] = S[x++], C[s++] = S[x++], C[s++] = S[x++], w -= 3;\n }\n\n w && (C[s++] = S[x++], 1 < w && (C[s++] = S[x++]));\n } else {\n for (x = s - k; C[s++] = C[x++], C[s++] = C[x++], C[s++] = C[x++], 2 < (w -= 3);) {\n ;\n }\n\n w && (C[s++] = C[x++], 1 < w && (C[s++] = C[x++]));\n }\n\n break;\n }\n }\n break;\n }\n } while (i < n && s < o);\n\n i -= w = p >> 3, c &= (1 << (p -= w << 3)) - 1, t.next_in = i, t.next_out = s, t.avail_in = i < n ? n - i + 5 : 5 - (i - n), t.avail_out = s < o ? o - s + 257 : 257 - (s - o), r.hold = c, r.bits = p;\n };\n }, {}],\n 49: [function (t, e, r) {\n \"use strict\";\n\n var I = t(\"../utils/common\"),\n O = t(\"./adler32\"),\n B = t(\"./crc32\"),\n R = t(\"./inffast\"),\n T = t(\"./inftrees\"),\n D = 1,\n F = 2,\n N = 0,\n U = -2,\n P = 1,\n i = 852,\n n = 592;\n\n function L(t) {\n return (t >>> 24 & 255) + (t >>> 8 & 65280) + ((65280 & t) << 8) + ((255 & t) << 24);\n }\n\n function s() {\n this.mode = 0, this.last = !1, this.wrap = 0, this.havedict = !1, this.flags = 0, this.dmax = 0, this.check = 0, this.total = 0, this.head = null, this.wbits = 0, this.wsize = 0, this.whave = 0, this.wnext = 0, this.window = null, this.hold = 0, this.bits = 0, this.length = 0, this.offset = 0, this.extra = 0, this.lencode = null, this.distcode = null, this.lenbits = 0, this.distbits = 0, this.ncode = 0, this.nlen = 0, this.ndist = 0, this.have = 0, this.next = null, this.lens = new I.Buf16(320), this.work = new I.Buf16(288), this.lendyn = null, this.distdyn = null, this.sane = 0, this.back = 0, this.was = 0;\n }\n\n function a(t) {\n var e;\n return t && t.state ? (e = t.state, t.total_in = t.total_out = e.total = 0, t.msg = \"\", e.wrap && (t.adler = 1 & e.wrap), e.mode = P, e.last = 0, e.havedict = 0, e.dmax = 32768, e.head = null, e.hold = 0, e.bits = 0, e.lencode = e.lendyn = new I.Buf32(i), e.distcode = e.distdyn = new I.Buf32(n), e.sane = 1, e.back = -1, N) : U;\n }\n\n function o(t) {\n var e;\n return t && t.state ? ((e = t.state).wsize = 0, e.whave = 0, e.wnext = 0, a(t)) : U;\n }\n\n function h(t, e) {\n var r, i;\n return t && t.state ? (i = t.state, e < 0 ? (r = 0, e = -e) : (r = 1 + (e >> 4), e < 48 && (e &= 15)), e && (e < 8 || 15 < e) ? U : (null !== i.window && i.wbits !== e && (i.window = null), i.wrap = r, i.wbits = e, o(t))) : U;\n }\n\n function u(t, e) {\n var r, i;\n return t ? (i = new s(), (t.state = i).window = null, (r = h(t, e)) !== N && (t.state = null), r) : U;\n }\n\n var l,\n f,\n d = !0;\n\n function j(t) {\n if (d) {\n var e;\n\n for (l = new I.Buf32(512), f = new I.Buf32(32), e = 0; e < 144;) {\n t.lens[e++] = 8;\n }\n\n for (; e < 256;) {\n t.lens[e++] = 9;\n }\n\n for (; e < 280;) {\n t.lens[e++] = 7;\n }\n\n for (; e < 288;) {\n t.lens[e++] = 8;\n }\n\n for (T(D, t.lens, 0, 288, l, 0, t.work, {\n bits: 9\n }), e = 0; e < 32;) {\n t.lens[e++] = 5;\n }\n\n T(F, t.lens, 0, 32, f, 0, t.work, {\n bits: 5\n }), d = !1;\n }\n\n t.lencode = l, t.lenbits = 9, t.distcode = f, t.distbits = 5;\n }\n\n function Z(t, e, r, i) {\n var n,\n s = t.state;\n return null === s.window && (s.wsize = 1 << s.wbits, s.wnext = 0, s.whave = 0, s.window = new I.Buf8(s.wsize)), i >= s.wsize ? (I.arraySet(s.window, e, r - s.wsize, s.wsize, 0), s.wnext = 0, s.whave = s.wsize) : (i < (n = s.wsize - s.wnext) && (n = i), I.arraySet(s.window, e, r - i, n, s.wnext), (i -= n) ? (I.arraySet(s.window, e, r - i, i, 0), s.wnext = i, s.whave = s.wsize) : (s.wnext += n, s.wnext === s.wsize && (s.wnext = 0), s.whave < s.wsize && (s.whave += n))), 0;\n }\n\n r.inflateReset = o, r.inflateReset2 = h, r.inflateResetKeep = a, r.inflateInit = function (t) {\n return u(t, 15);\n }, r.inflateInit2 = u, r.inflate = function (t, e) {\n var r,\n i,\n n,\n s,\n a,\n o,\n h,\n u,\n l,\n f,\n d,\n c,\n p,\n m,\n _,\n g,\n b,\n v,\n y,\n w,\n k,\n x,\n S,\n z,\n C = 0,\n E = new I.Buf8(4),\n A = [16, 17, 18, 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15];\n\n if (!t || !t.state || !t.output || !t.input && 0 !== t.avail_in) return U;\n 12 === (r = t.state).mode && (r.mode = 13), a = t.next_out, n = t.output, h = t.avail_out, s = t.next_in, i = t.input, o = t.avail_in, u = r.hold, l = r.bits, f = o, d = h, x = N;\n\n t: for (;;) {\n switch (r.mode) {\n case P:\n if (0 === r.wrap) {\n r.mode = 13;\n break;\n }\n\n for (; l < 16;) {\n if (0 === o) break t;\n o--, u += i[s++] << l, l += 8;\n }\n\n if (2 & r.wrap && 35615 === u) {\n E[r.check = 0] = 255 & u, E[1] = u >>> 8 & 255, r.check = B(r.check, E, 2, 0), l = u = 0, r.mode = 2;\n break;\n }\n\n if (r.flags = 0, r.head && (r.head.done = !1), !(1 & r.wrap) || (((255 & u) << 8) + (u >> 8)) % 31) {\n t.msg = \"incorrect header check\", r.mode = 30;\n break;\n }\n\n if (8 != (15 & u)) {\n t.msg = \"unknown compression method\", r.mode = 30;\n break;\n }\n\n if (l -= 4, k = 8 + (15 & (u >>>= 4)), 0 === r.wbits) r.wbits = k;else if (k > r.wbits) {\n t.msg = \"invalid window size\", r.mode = 30;\n break;\n }\n r.dmax = 1 << k, t.adler = r.check = 1, r.mode = 512 & u ? 10 : 12, l = u = 0;\n break;\n\n case 2:\n for (; l < 16;) {\n if (0 === o) break t;\n o--, u += i[s++] << l, l += 8;\n }\n\n if (r.flags = u, 8 != (255 & r.flags)) {\n t.msg = \"unknown compression method\", r.mode = 30;\n break;\n }\n\n if (57344 & r.flags) {\n t.msg = \"unknown header flags set\", r.mode = 30;\n break;\n }\n\n r.head && (r.head.text = u >> 8 & 1), 512 & r.flags && (E[0] = 255 & u, E[1] = u >>> 8 & 255, r.check = B(r.check, E, 2, 0)), l = u = 0, r.mode = 3;\n\n case 3:\n for (; l < 32;) {\n if (0 === o) break t;\n o--, u += i[s++] << l, l += 8;\n }\n\n r.head && (r.head.time = u), 512 & r.flags && (E[0] = 255 & u, E[1] = u >>> 8 & 255, E[2] = u >>> 16 & 255, E[3] = u >>> 24 & 255, r.check = B(r.check, E, 4, 0)), l = u = 0, r.mode = 4;\n\n case 4:\n for (; l < 16;) {\n if (0 === o) break t;\n o--, u += i[s++] << l, l += 8;\n }\n\n r.head && (r.head.xflags = 255 & u, r.head.os = u >> 8), 512 & r.flags && (E[0] = 255 & u, E[1] = u >>> 8 & 255, r.check = B(r.check, E, 2, 0)), l = u = 0, r.mode = 5;\n\n case 5:\n if (1024 & r.flags) {\n for (; l < 16;) {\n if (0 === o) break t;\n o--, u += i[s++] << l, l += 8;\n }\n\n r.length = u, r.head && (r.head.extra_len = u), 512 & r.flags && (E[0] = 255 & u, E[1] = u >>> 8 & 255, r.check = B(r.check, E, 2, 0)), l = u = 0;\n } else r.head && (r.head.extra = null);\n\n r.mode = 6;\n\n case 6:\n if (1024 & r.flags && (o < (c = r.length) && (c = o), c && (r.head && (k = r.head.extra_len - r.length, r.head.extra || (r.head.extra = new Array(r.head.extra_len)), I.arraySet(r.head.extra, i, s, c, k)), 512 & r.flags && (r.check = B(r.check, i, c, s)), o -= c, s += c, r.length -= c), r.length)) break t;\n r.length = 0, r.mode = 7;\n\n case 7:\n if (2048 & r.flags) {\n if (0 === o) break t;\n\n for (c = 0; k = i[s + c++], r.head && k && r.length < 65536 && (r.head.name += String.fromCharCode(k)), k && c < o;) {\n ;\n }\n\n if (512 & r.flags && (r.check = B(r.check, i, c, s)), o -= c, s += c, k) break t;\n } else r.head && (r.head.name = null);\n\n r.length = 0, r.mode = 8;\n\n case 8:\n if (4096 & r.flags) {\n if (0 === o) break t;\n\n for (c = 0; k = i[s + c++], r.head && k && r.length < 65536 && (r.head.comment += String.fromCharCode(k)), k && c < o;) {\n ;\n }\n\n if (512 & r.flags && (r.check = B(r.check, i, c, s)), o -= c, s += c, k) break t;\n } else r.head && (r.head.comment = null);\n\n r.mode = 9;\n\n case 9:\n if (512 & r.flags) {\n for (; l < 16;) {\n if (0 === o) break t;\n o--, u += i[s++] << l, l += 8;\n }\n\n if (u !== (65535 & r.check)) {\n t.msg = \"header crc mismatch\", r.mode = 30;\n break;\n }\n\n l = u = 0;\n }\n\n r.head && (r.head.hcrc = r.flags >> 9 & 1, r.head.done = !0), t.adler = r.check = 0, r.mode = 12;\n break;\n\n case 10:\n for (; l < 32;) {\n if (0 === o) break t;\n o--, u += i[s++] << l, l += 8;\n }\n\n t.adler = r.check = L(u), l = u = 0, r.mode = 11;\n\n case 11:\n if (0 === r.havedict) return t.next_out = a, t.avail_out = h, t.next_in = s, t.avail_in = o, r.hold = u, r.bits = l, 2;\n t.adler = r.check = 1, r.mode = 12;\n\n case 12:\n if (5 === e || 6 === e) break t;\n\n case 13:\n if (r.last) {\n u >>>= 7 & l, l -= 7 & l, r.mode = 27;\n break;\n }\n\n for (; l < 3;) {\n if (0 === o) break t;\n o--, u += i[s++] << l, l += 8;\n }\n\n switch (r.last = 1 & u, l -= 1, 3 & (u >>>= 1)) {\n case 0:\n r.mode = 14;\n break;\n\n case 1:\n if (j(r), r.mode = 20, 6 !== e) break;\n u >>>= 2, l -= 2;\n break t;\n\n case 2:\n r.mode = 17;\n break;\n\n case 3:\n t.msg = \"invalid block type\", r.mode = 30;\n }\n\n u >>>= 2, l -= 2;\n break;\n\n case 14:\n for (u >>>= 7 & l, l -= 7 & l; l < 32;) {\n if (0 === o) break t;\n o--, u += i[s++] << l, l += 8;\n }\n\n if ((65535 & u) != (u >>> 16 ^ 65535)) {\n t.msg = \"invalid stored block lengths\", r.mode = 30;\n break;\n }\n\n if (r.length = 65535 & u, l = u = 0, r.mode = 15, 6 === e) break t;\n\n case 15:\n r.mode = 16;\n\n case 16:\n if (c = r.length) {\n if (o < c && (c = o), h < c && (c = h), 0 === c) break t;\n I.arraySet(n, i, s, c, a), o -= c, s += c, h -= c, a += c, r.length -= c;\n break;\n }\n\n r.mode = 12;\n break;\n\n case 17:\n for (; l < 14;) {\n if (0 === o) break t;\n o--, u += i[s++] << l, l += 8;\n }\n\n if (r.nlen = 257 + (31 & u), u >>>= 5, l -= 5, r.ndist = 1 + (31 & u), u >>>= 5, l -= 5, r.ncode = 4 + (15 & u), u >>>= 4, l -= 4, 286 < r.nlen || 30 < r.ndist) {\n t.msg = \"too many length or distance symbols\", r.mode = 30;\n break;\n }\n\n r.have = 0, r.mode = 18;\n\n case 18:\n for (; r.have < r.ncode;) {\n for (; l < 3;) {\n if (0 === o) break t;\n o--, u += i[s++] << l, l += 8;\n }\n\n r.lens[A[r.have++]] = 7 & u, u >>>= 3, l -= 3;\n }\n\n for (; r.have < 19;) {\n r.lens[A[r.have++]] = 0;\n }\n\n if (r.lencode = r.lendyn, r.lenbits = 7, S = {\n bits: r.lenbits\n }, x = T(0, r.lens, 0, 19, r.lencode, 0, r.work, S), r.lenbits = S.bits, x) {\n t.msg = \"invalid code lengths set\", r.mode = 30;\n break;\n }\n\n r.have = 0, r.mode = 19;\n\n case 19:\n for (; r.have < r.nlen + r.ndist;) {\n for (; g = (C = r.lencode[u & (1 << r.lenbits) - 1]) >>> 16 & 255, b = 65535 & C, !((_ = C >>> 24) <= l);) {\n if (0 === o) break t;\n o--, u += i[s++] << l, l += 8;\n }\n\n if (b < 16) u >>>= _, l -= _, r.lens[r.have++] = b;else {\n if (16 === b) {\n for (z = _ + 2; l < z;) {\n if (0 === o) break t;\n o--, u += i[s++] << l, l += 8;\n }\n\n if (u >>>= _, l -= _, 0 === r.have) {\n t.msg = \"invalid bit length repeat\", r.mode = 30;\n break;\n }\n\n k = r.lens[r.have - 1], c = 3 + (3 & u), u >>>= 2, l -= 2;\n } else if (17 === b) {\n for (z = _ + 3; l < z;) {\n if (0 === o) break t;\n o--, u += i[s++] << l, l += 8;\n }\n\n l -= _, k = 0, c = 3 + (7 & (u >>>= _)), u >>>= 3, l -= 3;\n } else {\n for (z = _ + 7; l < z;) {\n if (0 === o) break t;\n o--, u += i[s++] << l, l += 8;\n }\n\n l -= _, k = 0, c = 11 + (127 & (u >>>= _)), u >>>= 7, l -= 7;\n }\n\n if (r.have + c > r.nlen + r.ndist) {\n t.msg = \"invalid bit length repeat\", r.mode = 30;\n break;\n }\n\n for (; c--;) {\n r.lens[r.have++] = k;\n }\n }\n }\n\n if (30 === r.mode) break;\n\n if (0 === r.lens[256]) {\n t.msg = \"invalid code -- missing end-of-block\", r.mode = 30;\n break;\n }\n\n if (r.lenbits = 9, S = {\n bits: r.lenbits\n }, x = T(D, r.lens, 0, r.nlen, r.lencode, 0, r.work, S), r.lenbits = S.bits, x) {\n t.msg = \"invalid literal/lengths set\", r.mode = 30;\n break;\n }\n\n if (r.distbits = 6, r.distcode = r.distdyn, S = {\n bits: r.distbits\n }, x = T(F, r.lens, r.nlen, r.ndist, r.distcode, 0, r.work, S), r.distbits = S.bits, x) {\n t.msg = \"invalid distances set\", r.mode = 30;\n break;\n }\n\n if (r.mode = 20, 6 === e) break t;\n\n case 20:\n r.mode = 21;\n\n case 21:\n if (6 <= o && 258 <= h) {\n t.next_out = a, t.avail_out = h, t.next_in = s, t.avail_in = o, r.hold = u, r.bits = l, R(t, d), a = t.next_out, n = t.output, h = t.avail_out, s = t.next_in, i = t.input, o = t.avail_in, u = r.hold, l = r.bits, 12 === r.mode && (r.back = -1);\n break;\n }\n\n for (r.back = 0; g = (C = r.lencode[u & (1 << r.lenbits) - 1]) >>> 16 & 255, b = 65535 & C, !((_ = C >>> 24) <= l);) {\n if (0 === o) break t;\n o--, u += i[s++] << l, l += 8;\n }\n\n if (g && 0 == (240 & g)) {\n for (v = _, y = g, w = b; g = (C = r.lencode[w + ((u & (1 << v + y) - 1) >> v)]) >>> 16 & 255, b = 65535 & C, !(v + (_ = C >>> 24) <= l);) {\n if (0 === o) break t;\n o--, u += i[s++] << l, l += 8;\n }\n\n u >>>= v, l -= v, r.back += v;\n }\n\n if (u >>>= _, l -= _, r.back += _, r.length = b, 0 === g) {\n r.mode = 26;\n break;\n }\n\n if (32 & g) {\n r.back = -1, r.mode = 12;\n break;\n }\n\n if (64 & g) {\n t.msg = \"invalid literal/length code\", r.mode = 30;\n break;\n }\n\n r.extra = 15 & g, r.mode = 22;\n\n case 22:\n if (r.extra) {\n for (z = r.extra; l < z;) {\n if (0 === o) break t;\n o--, u += i[s++] << l, l += 8;\n }\n\n r.length += u & (1 << r.extra) - 1, u >>>= r.extra, l -= r.extra, r.back += r.extra;\n }\n\n r.was = r.length, r.mode = 23;\n\n case 23:\n for (; g = (C = r.distcode[u & (1 << r.distbits) - 1]) >>> 16 & 255, b = 65535 & C, !((_ = C >>> 24) <= l);) {\n if (0 === o) break t;\n o--, u += i[s++] << l, l += 8;\n }\n\n if (0 == (240 & g)) {\n for (v = _, y = g, w = b; g = (C = r.distcode[w + ((u & (1 << v + y) - 1) >> v)]) >>> 16 & 255, b = 65535 & C, !(v + (_ = C >>> 24) <= l);) {\n if (0 === o) break t;\n o--, u += i[s++] << l, l += 8;\n }\n\n u >>>= v, l -= v, r.back += v;\n }\n\n if (u >>>= _, l -= _, r.back += _, 64 & g) {\n t.msg = \"invalid distance code\", r.mode = 30;\n break;\n }\n\n r.offset = b, r.extra = 15 & g, r.mode = 24;\n\n case 24:\n if (r.extra) {\n for (z = r.extra; l < z;) {\n if (0 === o) break t;\n o--, u += i[s++] << l, l += 8;\n }\n\n r.offset += u & (1 << r.extra) - 1, u >>>= r.extra, l -= r.extra, r.back += r.extra;\n }\n\n if (r.offset > r.dmax) {\n t.msg = \"invalid distance too far back\", r.mode = 30;\n break;\n }\n\n r.mode = 25;\n\n case 25:\n if (0 === h) break t;\n\n if (c = d - h, r.offset > c) {\n if ((c = r.offset - c) > r.whave && r.sane) {\n t.msg = \"invalid distance too far back\", r.mode = 30;\n break;\n }\n\n p = c > r.wnext ? (c -= r.wnext, r.wsize - c) : r.wnext - c, c > r.length && (c = r.length), m = r.window;\n } else m = n, p = a - r.offset, c = r.length;\n\n for (h < c && (c = h), h -= c, r.length -= c; n[a++] = m[p++], --c;) {\n ;\n }\n\n 0 === r.length && (r.mode = 21);\n break;\n\n case 26:\n if (0 === h) break t;\n n[a++] = r.length, h--, r.mode = 21;\n break;\n\n case 27:\n if (r.wrap) {\n for (; l < 32;) {\n if (0 === o) break t;\n o--, u |= i[s++] << l, l += 8;\n }\n\n if (d -= h, t.total_out += d, r.total += d, d && (t.adler = r.check = r.flags ? B(r.check, n, d, a - d) : O(r.check, n, d, a - d)), d = h, (r.flags ? u : L(u)) !== r.check) {\n t.msg = \"incorrect data check\", r.mode = 30;\n break;\n }\n\n l = u = 0;\n }\n\n r.mode = 28;\n\n case 28:\n if (r.wrap && r.flags) {\n for (; l < 32;) {\n if (0 === o) break t;\n o--, u += i[s++] << l, l += 8;\n }\n\n if (u !== (4294967295 & r.total)) {\n t.msg = \"incorrect length check\", r.mode = 30;\n break;\n }\n\n l = u = 0;\n }\n\n r.mode = 29;\n\n case 29:\n x = 1;\n break t;\n\n case 30:\n x = -3;\n break t;\n\n case 31:\n return -4;\n\n case 32:\n default:\n return U;\n }\n }\n\n return t.next_out = a, t.avail_out = h, t.next_in = s, t.avail_in = o, r.hold = u, r.bits = l, (r.wsize || d !== t.avail_out && r.mode < 30 && (r.mode < 27 || 4 !== e)) && Z(t, t.output, t.next_out, d - t.avail_out) ? (r.mode = 31, -4) : (f -= t.avail_in, d -= t.avail_out, t.total_in += f, t.total_out += d, r.total += d, r.wrap && d && (t.adler = r.check = r.flags ? B(r.check, n, d, t.next_out - d) : O(r.check, n, d, t.next_out - d)), t.data_type = r.bits + (r.last ? 64 : 0) + (12 === r.mode ? 128 : 0) + (20 === r.mode || 15 === r.mode ? 256 : 0), (0 == f && 0 === d || 4 === e) && x === N && (x = -5), x);\n }, r.inflateEnd = function (t) {\n if (!t || !t.state) return U;\n var e = t.state;\n return e.window && (e.window = null), t.state = null, N;\n }, r.inflateGetHeader = function (t, e) {\n var r;\n return t && t.state ? 0 == (2 & (r = t.state).wrap) ? U : ((r.head = e).done = !1, N) : U;\n }, r.inflateSetDictionary = function (t, e) {\n var r,\n i = e.length;\n return t && t.state ? 0 !== (r = t.state).wrap && 11 !== r.mode ? U : 11 === r.mode && O(1, e, i, 0) !== r.check ? -3 : Z(t, e, i, i) ? (r.mode = 31, -4) : (r.havedict = 1, N) : U;\n }, r.inflateInfo = \"pako inflate (from Nodeca project)\";\n }, {\n \"../utils/common\": 41,\n \"./adler32\": 43,\n \"./crc32\": 45,\n \"./inffast\": 48,\n \"./inftrees\": 50\n }],\n 50: [function (t, e, r) {\n \"use strict\";\n\n var D = t(\"../utils/common\"),\n F = [3, 4, 5, 6, 7, 8, 9, 10, 11, 13, 15, 17, 19, 23, 27, 31, 35, 43, 51, 59, 67, 83, 99, 115, 131, 163, 195, 227, 258, 0, 0],\n N = [16, 16, 16, 16, 16, 16, 16, 16, 17, 17, 17, 17, 18, 18, 18, 18, 19, 19, 19, 19, 20, 20, 20, 20, 21, 21, 21, 21, 16, 72, 78],\n U = [1, 2, 3, 4, 5, 7, 9, 13, 17, 25, 33, 49, 65, 97, 129, 193, 257, 385, 513, 769, 1025, 1537, 2049, 3073, 4097, 6145, 8193, 12289, 16385, 24577, 0, 0],\n P = [16, 16, 16, 16, 17, 17, 18, 18, 19, 19, 20, 20, 21, 21, 22, 22, 23, 23, 24, 24, 25, 25, 26, 26, 27, 27, 28, 28, 29, 29, 64, 64];\n\n e.exports = function (t, e, r, i, n, s, a, o) {\n var h,\n u,\n l,\n f,\n d,\n c,\n p,\n m,\n _,\n g = o.bits,\n b = 0,\n v = 0,\n y = 0,\n w = 0,\n k = 0,\n x = 0,\n S = 0,\n z = 0,\n C = 0,\n E = 0,\n A = null,\n I = 0,\n O = new D.Buf16(16),\n B = new D.Buf16(16),\n R = null,\n T = 0;\n\n for (b = 0; b <= 15; b++) {\n O[b] = 0;\n }\n\n for (v = 0; v < i; v++) {\n O[e[r + v]]++;\n }\n\n for (k = g, w = 15; 1 <= w && 0 === O[w]; w--) {\n ;\n }\n\n if (w < k && (k = w), 0 === w) return n[s++] = 20971520, n[s++] = 20971520, o.bits = 1, 0;\n\n for (y = 1; y < w && 0 === O[y]; y++) {\n ;\n }\n\n for (k < y && (k = y), b = z = 1; b <= 15; b++) {\n if (z <<= 1, (z -= O[b]) < 0) return -1;\n }\n\n if (0 < z && (0 === t || 1 !== w)) return -1;\n\n for (B[1] = 0, b = 1; b < 15; b++) {\n B[b + 1] = B[b] + O[b];\n }\n\n for (v = 0; v < i; v++) {\n 0 !== e[r + v] && (a[B[e[r + v]]++] = v);\n }\n\n if (c = 0 === t ? (A = R = a, 19) : 1 === t ? (A = F, I -= 257, R = N, T -= 257, 256) : (A = U, R = P, -1), b = y, d = s, S = v = E = 0, l = -1, f = (C = 1 << (x = k)) - 1, 1 === t && 852 < C || 2 === t && 592 < C) return 1;\n\n for (;;) {\n for (p = b - S, _ = a[v] < c ? (m = 0, a[v]) : a[v] > c ? (m = R[T + a[v]], A[I + a[v]]) : (m = 96, 0), h = 1 << b - S, y = u = 1 << x; n[d + (E >> S) + (u -= h)] = p << 24 | m << 16 | _ | 0, 0 !== u;) {\n ;\n }\n\n for (h = 1 << b - 1; E & h;) {\n h >>= 1;\n }\n\n if (0 !== h ? (E &= h - 1, E += h) : E = 0, v++, 0 == --O[b]) {\n if (b === w) break;\n b = e[r + a[v]];\n }\n\n if (k < b && (E & f) !== l) {\n for (0 === S && (S = k), d += y, z = 1 << (x = b - S); x + S < w && !((z -= O[x + S]) <= 0);) {\n x++, z <<= 1;\n }\n\n if (C += 1 << x, 1 === t && 852 < C || 2 === t && 592 < C) return 1;\n n[l = E & f] = k << 24 | x << 16 | d - s | 0;\n }\n }\n\n return 0 !== E && (n[d + E] = b - S << 24 | 64 << 16 | 0), o.bits = k, 0;\n };\n }, {\n \"../utils/common\": 41\n }],\n 51: [function (t, e, r) {\n \"use strict\";\n\n e.exports = {\n 2: \"need dictionary\",\n 1: \"stream end\",\n 0: \"\",\n \"-1\": \"file error\",\n \"-2\": \"stream error\",\n \"-3\": \"data error\",\n \"-4\": \"insufficient memory\",\n \"-5\": \"buffer error\",\n \"-6\": \"incompatible version\"\n };\n }, {}],\n 52: [function (t, e, r) {\n \"use strict\";\n\n var n = t(\"../utils/common\"),\n o = 0,\n h = 1;\n\n function i(t) {\n for (var e = t.length; 0 <= --e;) {\n t[e] = 0;\n }\n }\n\n var s = 0,\n a = 29,\n u = 256,\n l = u + 1 + a,\n f = 30,\n d = 19,\n _ = 2 * l + 1,\n g = 15,\n c = 16,\n p = 7,\n m = 256,\n b = 16,\n v = 17,\n y = 18,\n w = [0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3, 4, 4, 4, 4, 5, 5, 5, 5, 0],\n k = [0, 0, 0, 0, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, 7, 8, 8, 9, 9, 10, 10, 11, 11, 12, 12, 13, 13],\n x = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 3, 7],\n S = [16, 17, 18, 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15],\n z = new Array(2 * (l + 2));\n\n i(z);\n var C = new Array(2 * f);\n i(C);\n var E = new Array(512);\n i(E);\n var A = new Array(256);\n i(A);\n var I = new Array(a);\n i(I);\n var O,\n B,\n R,\n T = new Array(f);\n\n function D(t, e, r, i, n) {\n this.static_tree = t, this.extra_bits = e, this.extra_base = r, this.elems = i, this.max_length = n, this.has_stree = t && t.length;\n }\n\n function F(t, e) {\n this.dyn_tree = t, this.max_code = 0, this.stat_desc = e;\n }\n\n function N(t) {\n return t < 256 ? E[t] : E[256 + (t >>> 7)];\n }\n\n function U(t, e) {\n t.pending_buf[t.pending++] = 255 & e, t.pending_buf[t.pending++] = e >>> 8 & 255;\n }\n\n function P(t, e, r) {\n t.bi_valid > c - r ? (t.bi_buf |= e << t.bi_valid & 65535, U(t, t.bi_buf), t.bi_buf = e >> c - t.bi_valid, t.bi_valid += r - c) : (t.bi_buf |= e << t.bi_valid & 65535, t.bi_valid += r);\n }\n\n function L(t, e, r) {\n P(t, r[2 * e], r[2 * e + 1]);\n }\n\n function j(t, e) {\n for (var r = 0; r |= 1 & t, t >>>= 1, r <<= 1, 0 < --e;) {\n ;\n }\n\n return r >>> 1;\n }\n\n function Z(t, e, r) {\n var i,\n n,\n s = new Array(g + 1),\n a = 0;\n\n for (i = 1; i <= g; i++) {\n s[i] = a = a + r[i - 1] << 1;\n }\n\n for (n = 0; n <= e; n++) {\n var o = t[2 * n + 1];\n 0 !== o && (t[2 * n] = j(s[o]++, o));\n }\n }\n\n function W(t) {\n var e;\n\n for (e = 0; e < l; e++) {\n t.dyn_ltree[2 * e] = 0;\n }\n\n for (e = 0; e < f; e++) {\n t.dyn_dtree[2 * e] = 0;\n }\n\n for (e = 0; e < d; e++) {\n t.bl_tree[2 * e] = 0;\n }\n\n t.dyn_ltree[2 * m] = 1, t.opt_len = t.static_len = 0, t.last_lit = t.matches = 0;\n }\n\n function M(t) {\n 8 < t.bi_valid ? U(t, t.bi_buf) : 0 < t.bi_valid && (t.pending_buf[t.pending++] = t.bi_buf), t.bi_buf = 0, t.bi_valid = 0;\n }\n\n function H(t, e, r, i) {\n var n = 2 * e,\n s = 2 * r;\n return t[n] < t[s] || t[n] === t[s] && i[e] <= i[r];\n }\n\n function G(t, e, r) {\n for (var i = t.heap[r], n = r << 1; n <= t.heap_len && (n < t.heap_len && H(e, t.heap[n + 1], t.heap[n], t.depth) && n++, !H(e, i, t.heap[n], t.depth));) {\n t.heap[r] = t.heap[n], r = n, n <<= 1;\n }\n\n t.heap[r] = i;\n }\n\n function K(t, e, r) {\n var i,\n n,\n s,\n a,\n o = 0;\n if (0 !== t.last_lit) for (; i = t.pending_buf[t.d_buf + 2 * o] << 8 | t.pending_buf[t.d_buf + 2 * o + 1], n = t.pending_buf[t.l_buf + o], o++, 0 === i ? L(t, n, e) : (L(t, (s = A[n]) + u + 1, e), 0 !== (a = w[s]) && P(t, n -= I[s], a), L(t, s = N(--i), r), 0 !== (a = k[s]) && P(t, i -= T[s], a)), o < t.last_lit;) {\n ;\n }\n L(t, m, e);\n }\n\n function Y(t, e) {\n var r,\n i,\n n,\n s = e.dyn_tree,\n a = e.stat_desc.static_tree,\n o = e.stat_desc.has_stree,\n h = e.stat_desc.elems,\n u = -1;\n\n for (t.heap_len = 0, t.heap_max = _, r = 0; r < h; r++) {\n 0 !== s[2 * r] ? (t.heap[++t.heap_len] = u = r, t.depth[r] = 0) : s[2 * r + 1] = 0;\n }\n\n for (; t.heap_len < 2;) {\n s[2 * (n = t.heap[++t.heap_len] = u < 2 ? ++u : 0)] = 1, t.depth[n] = 0, t.opt_len--, o && (t.static_len -= a[2 * n + 1]);\n }\n\n for (e.max_code = u, r = t.heap_len >> 1; 1 <= r; r--) {\n G(t, s, r);\n }\n\n for (n = h; r = t.heap[1], t.heap[1] = t.heap[t.heap_len--], G(t, s, 1), i = t.heap[1], t.heap[--t.heap_max] = r, t.heap[--t.heap_max] = i, s[2 * n] = s[2 * r] + s[2 * i], t.depth[n] = (t.depth[r] >= t.depth[i] ? t.depth[r] : t.depth[i]) + 1, s[2 * r + 1] = s[2 * i + 1] = n, t.heap[1] = n++, G(t, s, 1), 2 <= t.heap_len;) {\n ;\n }\n\n t.heap[--t.heap_max] = t.heap[1], function (t, e) {\n var r,\n i,\n n,\n s,\n a,\n o,\n h = e.dyn_tree,\n u = e.max_code,\n l = e.stat_desc.static_tree,\n f = e.stat_desc.has_stree,\n d = e.stat_desc.extra_bits,\n c = e.stat_desc.extra_base,\n p = e.stat_desc.max_length,\n m = 0;\n\n for (s = 0; s <= g; s++) {\n t.bl_count[s] = 0;\n }\n\n for (h[2 * t.heap[t.heap_max] + 1] = 0, r = t.heap_max + 1; r < _; r++) {\n p < (s = h[2 * h[2 * (i = t.heap[r]) + 1] + 1] + 1) && (s = p, m++), h[2 * i + 1] = s, u < i || (t.bl_count[s]++, a = 0, c <= i && (a = d[i - c]), o = h[2 * i], t.opt_len += o * (s + a), f && (t.static_len += o * (l[2 * i + 1] + a)));\n }\n\n if (0 !== m) {\n do {\n for (s = p - 1; 0 === t.bl_count[s];) {\n s--;\n }\n\n t.bl_count[s]--, t.bl_count[s + 1] += 2, t.bl_count[p]--, m -= 2;\n } while (0 < m);\n\n for (s = p; 0 !== s; s--) {\n for (i = t.bl_count[s]; 0 !== i;) {\n u < (n = t.heap[--r]) || (h[2 * n + 1] !== s && (t.opt_len += (s - h[2 * n + 1]) * h[2 * n], h[2 * n + 1] = s), i--);\n }\n }\n }\n }(t, e), Z(s, u, t.bl_count);\n }\n\n function X(t, e, r) {\n var i,\n n,\n s = -1,\n a = e[1],\n o = 0,\n h = 7,\n u = 4;\n\n for (0 === a && (h = 138, u = 3), e[2 * (r + 1) + 1] = 65535, i = 0; i <= r; i++) {\n n = a, a = e[2 * (i + 1) + 1], ++o < h && n === a || (o < u ? t.bl_tree[2 * n] += o : 0 !== n ? (n !== s && t.bl_tree[2 * n]++, t.bl_tree[2 * b]++) : o <= 10 ? t.bl_tree[2 * v]++ : t.bl_tree[2 * y]++, s = n, u = (o = 0) === a ? (h = 138, 3) : n === a ? (h = 6, 3) : (h = 7, 4));\n }\n }\n\n function V(t, e, r) {\n var i,\n n,\n s = -1,\n a = e[1],\n o = 0,\n h = 7,\n u = 4;\n\n for (0 === a && (h = 138, u = 3), i = 0; i <= r; i++) {\n if (n = a, a = e[2 * (i + 1) + 1], !(++o < h && n === a)) {\n if (o < u) for (; L(t, n, t.bl_tree), 0 != --o;) {\n ;\n } else 0 !== n ? (n !== s && (L(t, n, t.bl_tree), o--), L(t, b, t.bl_tree), P(t, o - 3, 2)) : o <= 10 ? (L(t, v, t.bl_tree), P(t, o - 3, 3)) : (L(t, y, t.bl_tree), P(t, o - 11, 7));\n s = n, u = (o = 0) === a ? (h = 138, 3) : n === a ? (h = 6, 3) : (h = 7, 4);\n }\n }\n }\n\n i(T);\n var q = !1;\n\n function J(t, e, r, i) {\n P(t, (s << 1) + (i ? 1 : 0), 3), function (t, e, r, i) {\n M(t), i && (U(t, r), U(t, ~r)), n.arraySet(t.pending_buf, t.window, e, r, t.pending), t.pending += r;\n }(t, e, r, !0);\n }\n\n r._tr_init = function (t) {\n q || (function () {\n var t,\n e,\n r,\n i,\n n,\n s = new Array(g + 1);\n\n for (i = r = 0; i < a - 1; i++) {\n for (I[i] = r, t = 0; t < 1 << w[i]; t++) {\n A[r++] = i;\n }\n }\n\n for (A[r - 1] = i, i = n = 0; i < 16; i++) {\n for (T[i] = n, t = 0; t < 1 << k[i]; t++) {\n E[n++] = i;\n }\n }\n\n for (n >>= 7; i < f; i++) {\n for (T[i] = n << 7, t = 0; t < 1 << k[i] - 7; t++) {\n E[256 + n++] = i;\n }\n }\n\n for (e = 0; e <= g; e++) {\n s[e] = 0;\n }\n\n for (t = 0; t <= 143;) {\n z[2 * t + 1] = 8, t++, s[8]++;\n }\n\n for (; t <= 255;) {\n z[2 * t + 1] = 9, t++, s[9]++;\n }\n\n for (; t <= 279;) {\n z[2 * t + 1] = 7, t++, s[7]++;\n }\n\n for (; t <= 287;) {\n z[2 * t + 1] = 8, t++, s[8]++;\n }\n\n for (Z(z, l + 1, s), t = 0; t < f; t++) {\n C[2 * t + 1] = 5, C[2 * t] = j(t, 5);\n }\n\n O = new D(z, w, u + 1, l, g), B = new D(C, k, 0, f, g), R = new D(new Array(0), x, 0, d, p);\n }(), q = !0), t.l_desc = new F(t.dyn_ltree, O), t.d_desc = new F(t.dyn_dtree, B), t.bl_desc = new F(t.bl_tree, R), t.bi_buf = 0, t.bi_valid = 0, W(t);\n }, r._tr_stored_block = J, r._tr_flush_block = function (t, e, r, i) {\n var n,\n s,\n a = 0;\n 0 < t.level ? (2 === t.strm.data_type && (t.strm.data_type = function (t) {\n var e,\n r = 4093624447;\n\n for (e = 0; e <= 31; e++, r >>>= 1) {\n if (1 & r && 0 !== t.dyn_ltree[2 * e]) return o;\n }\n\n if (0 !== t.dyn_ltree[18] || 0 !== t.dyn_ltree[20] || 0 !== t.dyn_ltree[26]) return h;\n\n for (e = 32; e < u; e++) {\n if (0 !== t.dyn_ltree[2 * e]) return h;\n }\n\n return o;\n }(t)), Y(t, t.l_desc), Y(t, t.d_desc), a = function (t) {\n var e;\n\n for (X(t, t.dyn_ltree, t.l_desc.max_code), X(t, t.dyn_dtree, t.d_desc.max_code), Y(t, t.bl_desc), e = d - 1; 3 <= e && 0 === t.bl_tree[2 * S[e] + 1]; e--) {\n ;\n }\n\n return t.opt_len += 3 * (e + 1) + 5 + 5 + 4, e;\n }(t), n = t.opt_len + 3 + 7 >>> 3, (s = t.static_len + 3 + 7 >>> 3) <= n && (n = s)) : n = s = r + 5, r + 4 <= n && -1 !== e ? J(t, e, r, i) : 4 === t.strategy || s === n ? (P(t, 2 + (i ? 1 : 0), 3), K(t, z, C)) : (P(t, 4 + (i ? 1 : 0), 3), function (t, e, r, i) {\n var n;\n\n for (P(t, e - 257, 5), P(t, r - 1, 5), P(t, i - 4, 4), n = 0; n < i; n++) {\n P(t, t.bl_tree[2 * S[n] + 1], 3);\n }\n\n V(t, t.dyn_ltree, e - 1), V(t, t.dyn_dtree, r - 1);\n }(t, t.l_desc.max_code + 1, t.d_desc.max_code + 1, a + 1), K(t, t.dyn_ltree, t.dyn_dtree)), W(t), i && M(t);\n }, r._tr_tally = function (t, e, r) {\n return t.pending_buf[t.d_buf + 2 * t.last_lit] = e >>> 8 & 255, t.pending_buf[t.d_buf + 2 * t.last_lit + 1] = 255 & e, t.pending_buf[t.l_buf + t.last_lit] = 255 & r, t.last_lit++, 0 === e ? t.dyn_ltree[2 * r]++ : (t.matches++, e--, t.dyn_ltree[2 * (A[r] + u + 1)]++, t.dyn_dtree[2 * N(e)]++), t.last_lit === t.lit_bufsize - 1;\n }, r._tr_align = function (t) {\n P(t, 2, 3), L(t, m, z), function (t) {\n 16 === t.bi_valid ? (U(t, t.bi_buf), t.bi_buf = 0, t.bi_valid = 0) : 8 <= t.bi_valid && (t.pending_buf[t.pending++] = 255 & t.bi_buf, t.bi_buf >>= 8, t.bi_valid -= 8);\n }(t);\n };\n }, {\n \"../utils/common\": 41\n }],\n 53: [function (t, e, r) {\n \"use strict\";\n\n e.exports = function () {\n this.input = null, this.next_in = 0, this.avail_in = 0, this.total_in = 0, this.output = null, this.next_out = 0, this.avail_out = 0, this.total_out = 0, this.msg = \"\", this.state = null, this.data_type = 2, this.adler = 0;\n };\n }, {}],\n 54: [function (t, e, r) {\n \"use strict\";\n\n e.exports = \"function\" == typeof setImmediate ? setImmediate : function () {\n var t = [].slice.apply(arguments);\n t.splice(1, 0, 0), setTimeout.apply(null, t);\n };\n }, {}]\n }, {}, [10])(10);\n});","/*!\n * The buffer module from node.js, for the browser.\n *\n * @author Feross Aboukhadijeh \n * @license MIT\n */\n\n/* eslint-disable no-proto */\n'use strict';\n\nvar base64 = require('base64-js');\n\nvar ieee754 = require('ieee754');\n\nvar isArray = require('isarray');\n\nexports.Buffer = Buffer;\nexports.SlowBuffer = SlowBuffer;\nexports.INSPECT_MAX_BYTES = 50;\n/**\n * If `Buffer.TYPED_ARRAY_SUPPORT`:\n * === true Use Uint8Array implementation (fastest)\n * === false Use Object implementation (most compatible, even IE6)\n *\n * Browsers that support typed arrays are IE 10+, Firefox 4+, Chrome 7+, Safari 5.1+,\n * Opera 11.6+, iOS 4.2+.\n *\n * Due to various browser bugs, sometimes the Object implementation will be used even\n * when the browser supports typed arrays.\n *\n * Note:\n *\n * - Firefox 4-29 lacks support for adding new properties to `Uint8Array` instances,\n * See: https://bugzilla.mozilla.org/show_bug.cgi?id=695438.\n *\n * - Chrome 9-10 is missing the `TypedArray.prototype.subarray` function.\n *\n * - IE10 has a broken `TypedArray.prototype.subarray` function which returns arrays of\n * incorrect length in some situations.\n\n * We detect these buggy browsers and set `Buffer.TYPED_ARRAY_SUPPORT` to `false` so they\n * get the Object implementation, which is slower but behaves correctly.\n */\n\nBuffer.TYPED_ARRAY_SUPPORT = global.TYPED_ARRAY_SUPPORT !== undefined ? global.TYPED_ARRAY_SUPPORT : typedArraySupport();\n/*\n * Export kMaxLength after typed array support is determined.\n */\n\nexports.kMaxLength = kMaxLength();\n\nfunction typedArraySupport() {\n try {\n var arr = new Uint8Array(1);\n arr.__proto__ = {\n __proto__: Uint8Array.prototype,\n foo: function foo() {\n return 42;\n }\n };\n return arr.foo() === 42 && // typed array instances can be augmented\n typeof arr.subarray === 'function' && // chrome 9-10 lack `subarray`\n arr.subarray(1, 1).byteLength === 0; // ie10 has broken `subarray`\n } catch (e) {\n return false;\n }\n}\n\nfunction kMaxLength() {\n return Buffer.TYPED_ARRAY_SUPPORT ? 0x7fffffff : 0x3fffffff;\n}\n\nfunction createBuffer(that, length) {\n if (kMaxLength() < length) {\n throw new RangeError('Invalid typed array length');\n }\n\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n // Return an augmented `Uint8Array` instance, for best performance\n that = new Uint8Array(length);\n that.__proto__ = Buffer.prototype;\n } else {\n // Fallback: Return an object instance of the Buffer class\n if (that === null) {\n that = new Buffer(length);\n }\n\n that.length = length;\n }\n\n return that;\n}\n/**\n * The Buffer constructor returns instances of `Uint8Array` that have their\n * prototype changed to `Buffer.prototype`. Furthermore, `Buffer` is a subclass of\n * `Uint8Array`, so the returned instances will have all the node `Buffer` methods\n * and the `Uint8Array` methods. Square bracket notation works as expected -- it\n * returns a single octet.\n *\n * The `Uint8Array` prototype remains unmodified.\n */\n\n\nfunction Buffer(arg, encodingOrOffset, length) {\n if (!Buffer.TYPED_ARRAY_SUPPORT && !(this instanceof Buffer)) {\n return new Buffer(arg, encodingOrOffset, length);\n } // Common case.\n\n\n if (typeof arg === 'number') {\n if (typeof encodingOrOffset === 'string') {\n throw new Error('If encoding is specified then the first argument must be a string');\n }\n\n return allocUnsafe(this, arg);\n }\n\n return from(this, arg, encodingOrOffset, length);\n}\n\nBuffer.poolSize = 8192; // not used by this implementation\n// TODO: Legacy, not needed anymore. Remove in next major version.\n\nBuffer._augment = function (arr) {\n arr.__proto__ = Buffer.prototype;\n return arr;\n};\n\nfunction from(that, value, encodingOrOffset, length) {\n if (typeof value === 'number') {\n throw new TypeError('\"value\" argument must not be a number');\n }\n\n if (typeof ArrayBuffer !== 'undefined' && value instanceof ArrayBuffer) {\n return fromArrayBuffer(that, value, encodingOrOffset, length);\n }\n\n if (typeof value === 'string') {\n return fromString(that, value, encodingOrOffset);\n }\n\n return fromObject(that, value);\n}\n/**\n * Functionally equivalent to Buffer(arg, encoding) but throws a TypeError\n * if value is a number.\n * Buffer.from(str[, encoding])\n * Buffer.from(array)\n * Buffer.from(buffer)\n * Buffer.from(arrayBuffer[, byteOffset[, length]])\n **/\n\n\nBuffer.from = function (value, encodingOrOffset, length) {\n return from(null, value, encodingOrOffset, length);\n};\n\nif (Buffer.TYPED_ARRAY_SUPPORT) {\n Buffer.prototype.__proto__ = Uint8Array.prototype;\n Buffer.__proto__ = Uint8Array;\n\n if (typeof Symbol !== 'undefined' && Symbol.species && Buffer[Symbol.species] === Buffer) {\n // Fix subarray() in ES2016. See: https://github.com/feross/buffer/pull/97\n Object.defineProperty(Buffer, Symbol.species, {\n value: null,\n configurable: true\n });\n }\n}\n\nfunction assertSize(size) {\n if (typeof size !== 'number') {\n throw new TypeError('\"size\" argument must be a number');\n } else if (size < 0) {\n throw new RangeError('\"size\" argument must not be negative');\n }\n}\n\nfunction alloc(that, size, fill, encoding) {\n assertSize(size);\n\n if (size <= 0) {\n return createBuffer(that, size);\n }\n\n if (fill !== undefined) {\n // Only pay attention to encoding if it's a string. This\n // prevents accidentally sending in a number that would\n // be interpretted as a start offset.\n return typeof encoding === 'string' ? createBuffer(that, size).fill(fill, encoding) : createBuffer(that, size).fill(fill);\n }\n\n return createBuffer(that, size);\n}\n/**\n * Creates a new filled Buffer instance.\n * alloc(size[, fill[, encoding]])\n **/\n\n\nBuffer.alloc = function (size, fill, encoding) {\n return alloc(null, size, fill, encoding);\n};\n\nfunction allocUnsafe(that, size) {\n assertSize(size);\n that = createBuffer(that, size < 0 ? 0 : checked(size) | 0);\n\n if (!Buffer.TYPED_ARRAY_SUPPORT) {\n for (var i = 0; i < size; ++i) {\n that[i] = 0;\n }\n }\n\n return that;\n}\n/**\n * Equivalent to Buffer(num), by default creates a non-zero-filled Buffer instance.\n * */\n\n\nBuffer.allocUnsafe = function (size) {\n return allocUnsafe(null, size);\n};\n/**\n * Equivalent to SlowBuffer(num), by default creates a non-zero-filled Buffer instance.\n */\n\n\nBuffer.allocUnsafeSlow = function (size) {\n return allocUnsafe(null, size);\n};\n\nfunction fromString(that, string, encoding) {\n if (typeof encoding !== 'string' || encoding === '') {\n encoding = 'utf8';\n }\n\n if (!Buffer.isEncoding(encoding)) {\n throw new TypeError('\"encoding\" must be a valid string encoding');\n }\n\n var length = byteLength(string, encoding) | 0;\n that = createBuffer(that, length);\n var actual = that.write(string, encoding);\n\n if (actual !== length) {\n // Writing a hex string, for example, that contains invalid characters will\n // cause everything after the first invalid character to be ignored. (e.g.\n // 'abxxcd' will be treated as 'ab')\n that = that.slice(0, actual);\n }\n\n return that;\n}\n\nfunction fromArrayLike(that, array) {\n var length = array.length < 0 ? 0 : checked(array.length) | 0;\n that = createBuffer(that, length);\n\n for (var i = 0; i < length; i += 1) {\n that[i] = array[i] & 255;\n }\n\n return that;\n}\n\nfunction fromArrayBuffer(that, array, byteOffset, length) {\n array.byteLength; // this throws if `array` is not a valid ArrayBuffer\n\n if (byteOffset < 0 || array.byteLength < byteOffset) {\n throw new RangeError('\\'offset\\' is out of bounds');\n }\n\n if (array.byteLength < byteOffset + (length || 0)) {\n throw new RangeError('\\'length\\' is out of bounds');\n }\n\n if (byteOffset === undefined && length === undefined) {\n array = new Uint8Array(array);\n } else if (length === undefined) {\n array = new Uint8Array(array, byteOffset);\n } else {\n array = new Uint8Array(array, byteOffset, length);\n }\n\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n // Return an augmented `Uint8Array` instance, for best performance\n that = array;\n that.__proto__ = Buffer.prototype;\n } else {\n // Fallback: Return an object instance of the Buffer class\n that = fromArrayLike(that, array);\n }\n\n return that;\n}\n\nfunction fromObject(that, obj) {\n if (Buffer.isBuffer(obj)) {\n var len = checked(obj.length) | 0;\n that = createBuffer(that, len);\n\n if (that.length === 0) {\n return that;\n }\n\n obj.copy(that, 0, 0, len);\n return that;\n }\n\n if (obj) {\n if (typeof ArrayBuffer !== 'undefined' && obj.buffer instanceof ArrayBuffer || 'length' in obj) {\n if (typeof obj.length !== 'number' || isnan(obj.length)) {\n return createBuffer(that, 0);\n }\n\n return fromArrayLike(that, obj);\n }\n\n if (obj.type === 'Buffer' && isArray(obj.data)) {\n return fromArrayLike(that, obj.data);\n }\n }\n\n throw new TypeError('First argument must be a string, Buffer, ArrayBuffer, Array, or array-like object.');\n}\n\nfunction checked(length) {\n // Note: cannot use `length < kMaxLength()` here because that fails when\n // length is NaN (which is otherwise coerced to zero.)\n if (length >= kMaxLength()) {\n throw new RangeError('Attempt to allocate Buffer larger than maximum ' + 'size: 0x' + kMaxLength().toString(16) + ' bytes');\n }\n\n return length | 0;\n}\n\nfunction SlowBuffer(length) {\n if (+length != length) {\n // eslint-disable-line eqeqeq\n length = 0;\n }\n\n return Buffer.alloc(+length);\n}\n\nBuffer.isBuffer = function isBuffer(b) {\n return !!(b != null && b._isBuffer);\n};\n\nBuffer.compare = function compare(a, b) {\n if (!Buffer.isBuffer(a) || !Buffer.isBuffer(b)) {\n throw new TypeError('Arguments must be Buffers');\n }\n\n if (a === b) return 0;\n var x = a.length;\n var y = b.length;\n\n for (var i = 0, len = Math.min(x, y); i < len; ++i) {\n if (a[i] !== b[i]) {\n x = a[i];\n y = b[i];\n break;\n }\n }\n\n if (x < y) return -1;\n if (y < x) return 1;\n return 0;\n};\n\nBuffer.isEncoding = function isEncoding(encoding) {\n switch (String(encoding).toLowerCase()) {\n case 'hex':\n case 'utf8':\n case 'utf-8':\n case 'ascii':\n case 'latin1':\n case 'binary':\n case 'base64':\n case 'ucs2':\n case 'ucs-2':\n case 'utf16le':\n case 'utf-16le':\n return true;\n\n default:\n return false;\n }\n};\n\nBuffer.concat = function concat(list, length) {\n if (!isArray(list)) {\n throw new TypeError('\"list\" argument must be an Array of Buffers');\n }\n\n if (list.length === 0) {\n return Buffer.alloc(0);\n }\n\n var i;\n\n if (length === undefined) {\n length = 0;\n\n for (i = 0; i < list.length; ++i) {\n length += list[i].length;\n }\n }\n\n var buffer = Buffer.allocUnsafe(length);\n var pos = 0;\n\n for (i = 0; i < list.length; ++i) {\n var buf = list[i];\n\n if (!Buffer.isBuffer(buf)) {\n throw new TypeError('\"list\" argument must be an Array of Buffers');\n }\n\n buf.copy(buffer, pos);\n pos += buf.length;\n }\n\n return buffer;\n};\n\nfunction byteLength(string, encoding) {\n if (Buffer.isBuffer(string)) {\n return string.length;\n }\n\n if (typeof ArrayBuffer !== 'undefined' && typeof ArrayBuffer.isView === 'function' && (ArrayBuffer.isView(string) || string instanceof ArrayBuffer)) {\n return string.byteLength;\n }\n\n if (typeof string !== 'string') {\n string = '' + string;\n }\n\n var len = string.length;\n if (len === 0) return 0; // Use a for loop to avoid recursion\n\n var loweredCase = false;\n\n for (;;) {\n switch (encoding) {\n case 'ascii':\n case 'latin1':\n case 'binary':\n return len;\n\n case 'utf8':\n case 'utf-8':\n case undefined:\n return utf8ToBytes(string).length;\n\n case 'ucs2':\n case 'ucs-2':\n case 'utf16le':\n case 'utf-16le':\n return len * 2;\n\n case 'hex':\n return len >>> 1;\n\n case 'base64':\n return base64ToBytes(string).length;\n\n default:\n if (loweredCase) return utf8ToBytes(string).length; // assume utf8\n\n encoding = ('' + encoding).toLowerCase();\n loweredCase = true;\n }\n }\n}\n\nBuffer.byteLength = byteLength;\n\nfunction slowToString(encoding, start, end) {\n var loweredCase = false; // No need to verify that \"this.length <= MAX_UINT32\" since it's a read-only\n // property of a typed array.\n // This behaves neither like String nor Uint8Array in that we set start/end\n // to their upper/lower bounds if the value passed is out of range.\n // undefined is handled specially as per ECMA-262 6th Edition,\n // Section 13.3.3.7 Runtime Semantics: KeyedBindingInitialization.\n\n if (start === undefined || start < 0) {\n start = 0;\n } // Return early if start > this.length. Done here to prevent potential uint32\n // coercion fail below.\n\n\n if (start > this.length) {\n return '';\n }\n\n if (end === undefined || end > this.length) {\n end = this.length;\n }\n\n if (end <= 0) {\n return '';\n } // Force coersion to uint32. This will also coerce falsey/NaN values to 0.\n\n\n end >>>= 0;\n start >>>= 0;\n\n if (end <= start) {\n return '';\n }\n\n if (!encoding) encoding = 'utf8';\n\n while (true) {\n switch (encoding) {\n case 'hex':\n return hexSlice(this, start, end);\n\n case 'utf8':\n case 'utf-8':\n return utf8Slice(this, start, end);\n\n case 'ascii':\n return asciiSlice(this, start, end);\n\n case 'latin1':\n case 'binary':\n return latin1Slice(this, start, end);\n\n case 'base64':\n return base64Slice(this, start, end);\n\n case 'ucs2':\n case 'ucs-2':\n case 'utf16le':\n case 'utf-16le':\n return utf16leSlice(this, start, end);\n\n default:\n if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding);\n encoding = (encoding + '').toLowerCase();\n loweredCase = true;\n }\n }\n} // The property is used by `Buffer.isBuffer` and `is-buffer` (in Safari 5-7) to detect\n// Buffer instances.\n\n\nBuffer.prototype._isBuffer = true;\n\nfunction swap(b, n, m) {\n var i = b[n];\n b[n] = b[m];\n b[m] = i;\n}\n\nBuffer.prototype.swap16 = function swap16() {\n var len = this.length;\n\n if (len % 2 !== 0) {\n throw new RangeError('Buffer size must be a multiple of 16-bits');\n }\n\n for (var i = 0; i < len; i += 2) {\n swap(this, i, i + 1);\n }\n\n return this;\n};\n\nBuffer.prototype.swap32 = function swap32() {\n var len = this.length;\n\n if (len % 4 !== 0) {\n throw new RangeError('Buffer size must be a multiple of 32-bits');\n }\n\n for (var i = 0; i < len; i += 4) {\n swap(this, i, i + 3);\n swap(this, i + 1, i + 2);\n }\n\n return this;\n};\n\nBuffer.prototype.swap64 = function swap64() {\n var len = this.length;\n\n if (len % 8 !== 0) {\n throw new RangeError('Buffer size must be a multiple of 64-bits');\n }\n\n for (var i = 0; i < len; i += 8) {\n swap(this, i, i + 7);\n swap(this, i + 1, i + 6);\n swap(this, i + 2, i + 5);\n swap(this, i + 3, i + 4);\n }\n\n return this;\n};\n\nBuffer.prototype.toString = function toString() {\n var length = this.length | 0;\n if (length === 0) return '';\n if (arguments.length === 0) return utf8Slice(this, 0, length);\n return slowToString.apply(this, arguments);\n};\n\nBuffer.prototype.equals = function equals(b) {\n if (!Buffer.isBuffer(b)) throw new TypeError('Argument must be a Buffer');\n if (this === b) return true;\n return Buffer.compare(this, b) === 0;\n};\n\nBuffer.prototype.inspect = function inspect() {\n var str = '';\n var max = exports.INSPECT_MAX_BYTES;\n\n if (this.length > 0) {\n str = this.toString('hex', 0, max).match(/.{2}/g).join(' ');\n if (this.length > max) str += ' ... ';\n }\n\n return '';\n};\n\nBuffer.prototype.compare = function compare(target, start, end, thisStart, thisEnd) {\n if (!Buffer.isBuffer(target)) {\n throw new TypeError('Argument must be a Buffer');\n }\n\n if (start === undefined) {\n start = 0;\n }\n\n if (end === undefined) {\n end = target ? target.length : 0;\n }\n\n if (thisStart === undefined) {\n thisStart = 0;\n }\n\n if (thisEnd === undefined) {\n thisEnd = this.length;\n }\n\n if (start < 0 || end > target.length || thisStart < 0 || thisEnd > this.length) {\n throw new RangeError('out of range index');\n }\n\n if (thisStart >= thisEnd && start >= end) {\n return 0;\n }\n\n if (thisStart >= thisEnd) {\n return -1;\n }\n\n if (start >= end) {\n return 1;\n }\n\n start >>>= 0;\n end >>>= 0;\n thisStart >>>= 0;\n thisEnd >>>= 0;\n if (this === target) return 0;\n var x = thisEnd - thisStart;\n var y = end - start;\n var len = Math.min(x, y);\n var thisCopy = this.slice(thisStart, thisEnd);\n var targetCopy = target.slice(start, end);\n\n for (var i = 0; i < len; ++i) {\n if (thisCopy[i] !== targetCopy[i]) {\n x = thisCopy[i];\n y = targetCopy[i];\n break;\n }\n }\n\n if (x < y) return -1;\n if (y < x) return 1;\n return 0;\n}; // Finds either the first index of `val` in `buffer` at offset >= `byteOffset`,\n// OR the last index of `val` in `buffer` at offset <= `byteOffset`.\n//\n// Arguments:\n// - buffer - a Buffer to search\n// - val - a string, Buffer, or number\n// - byteOffset - an index into `buffer`; will be clamped to an int32\n// - encoding - an optional encoding, relevant is val is a string\n// - dir - true for indexOf, false for lastIndexOf\n\n\nfunction bidirectionalIndexOf(buffer, val, byteOffset, encoding, dir) {\n // Empty buffer means no match\n if (buffer.length === 0) return -1; // Normalize byteOffset\n\n if (typeof byteOffset === 'string') {\n encoding = byteOffset;\n byteOffset = 0;\n } else if (byteOffset > 0x7fffffff) {\n byteOffset = 0x7fffffff;\n } else if (byteOffset < -0x80000000) {\n byteOffset = -0x80000000;\n }\n\n byteOffset = +byteOffset; // Coerce to Number.\n\n if (isNaN(byteOffset)) {\n // byteOffset: it it's undefined, null, NaN, \"foo\", etc, search whole buffer\n byteOffset = dir ? 0 : buffer.length - 1;\n } // Normalize byteOffset: negative offsets start from the end of the buffer\n\n\n if (byteOffset < 0) byteOffset = buffer.length + byteOffset;\n\n if (byteOffset >= buffer.length) {\n if (dir) return -1;else byteOffset = buffer.length - 1;\n } else if (byteOffset < 0) {\n if (dir) byteOffset = 0;else return -1;\n } // Normalize val\n\n\n if (typeof val === 'string') {\n val = Buffer.from(val, encoding);\n } // Finally, search either indexOf (if dir is true) or lastIndexOf\n\n\n if (Buffer.isBuffer(val)) {\n // Special case: looking for empty string/buffer always fails\n if (val.length === 0) {\n return -1;\n }\n\n return arrayIndexOf(buffer, val, byteOffset, encoding, dir);\n } else if (typeof val === 'number') {\n val = val & 0xFF; // Search for a byte value [0-255]\n\n if (Buffer.TYPED_ARRAY_SUPPORT && typeof Uint8Array.prototype.indexOf === 'function') {\n if (dir) {\n return Uint8Array.prototype.indexOf.call(buffer, val, byteOffset);\n } else {\n return Uint8Array.prototype.lastIndexOf.call(buffer, val, byteOffset);\n }\n }\n\n return arrayIndexOf(buffer, [val], byteOffset, encoding, dir);\n }\n\n throw new TypeError('val must be string, number or Buffer');\n}\n\nfunction arrayIndexOf(arr, val, byteOffset, encoding, dir) {\n var indexSize = 1;\n var arrLength = arr.length;\n var valLength = val.length;\n\n if (encoding !== undefined) {\n encoding = String(encoding).toLowerCase();\n\n if (encoding === 'ucs2' || encoding === 'ucs-2' || encoding === 'utf16le' || encoding === 'utf-16le') {\n if (arr.length < 2 || val.length < 2) {\n return -1;\n }\n\n indexSize = 2;\n arrLength /= 2;\n valLength /= 2;\n byteOffset /= 2;\n }\n }\n\n function read(buf, i) {\n if (indexSize === 1) {\n return buf[i];\n } else {\n return buf.readUInt16BE(i * indexSize);\n }\n }\n\n var i;\n\n if (dir) {\n var foundIndex = -1;\n\n for (i = byteOffset; i < arrLength; i++) {\n if (read(arr, i) === read(val, foundIndex === -1 ? 0 : i - foundIndex)) {\n if (foundIndex === -1) foundIndex = i;\n if (i - foundIndex + 1 === valLength) return foundIndex * indexSize;\n } else {\n if (foundIndex !== -1) i -= i - foundIndex;\n foundIndex = -1;\n }\n }\n } else {\n if (byteOffset + valLength > arrLength) byteOffset = arrLength - valLength;\n\n for (i = byteOffset; i >= 0; i--) {\n var found = true;\n\n for (var j = 0; j < valLength; j++) {\n if (read(arr, i + j) !== read(val, j)) {\n found = false;\n break;\n }\n }\n\n if (found) return i;\n }\n }\n\n return -1;\n}\n\nBuffer.prototype.includes = function includes(val, byteOffset, encoding) {\n return this.indexOf(val, byteOffset, encoding) !== -1;\n};\n\nBuffer.prototype.indexOf = function indexOf(val, byteOffset, encoding) {\n return bidirectionalIndexOf(this, val, byteOffset, encoding, true);\n};\n\nBuffer.prototype.lastIndexOf = function lastIndexOf(val, byteOffset, encoding) {\n return bidirectionalIndexOf(this, val, byteOffset, encoding, false);\n};\n\nfunction hexWrite(buf, string, offset, length) {\n offset = Number(offset) || 0;\n var remaining = buf.length - offset;\n\n if (!length) {\n length = remaining;\n } else {\n length = Number(length);\n\n if (length > remaining) {\n length = remaining;\n }\n } // must be an even number of digits\n\n\n var strLen = string.length;\n if (strLen % 2 !== 0) throw new TypeError('Invalid hex string');\n\n if (length > strLen / 2) {\n length = strLen / 2;\n }\n\n for (var i = 0; i < length; ++i) {\n var parsed = parseInt(string.substr(i * 2, 2), 16);\n if (isNaN(parsed)) return i;\n buf[offset + i] = parsed;\n }\n\n return i;\n}\n\nfunction utf8Write(buf, string, offset, length) {\n return blitBuffer(utf8ToBytes(string, buf.length - offset), buf, offset, length);\n}\n\nfunction asciiWrite(buf, string, offset, length) {\n return blitBuffer(asciiToBytes(string), buf, offset, length);\n}\n\nfunction latin1Write(buf, string, offset, length) {\n return asciiWrite(buf, string, offset, length);\n}\n\nfunction base64Write(buf, string, offset, length) {\n return blitBuffer(base64ToBytes(string), buf, offset, length);\n}\n\nfunction ucs2Write(buf, string, offset, length) {\n return blitBuffer(utf16leToBytes(string, buf.length - offset), buf, offset, length);\n}\n\nBuffer.prototype.write = function write(string, offset, length, encoding) {\n // Buffer#write(string)\n if (offset === undefined) {\n encoding = 'utf8';\n length = this.length;\n offset = 0; // Buffer#write(string, encoding)\n } else if (length === undefined && typeof offset === 'string') {\n encoding = offset;\n length = this.length;\n offset = 0; // Buffer#write(string, offset[, length][, encoding])\n } else if (isFinite(offset)) {\n offset = offset | 0;\n\n if (isFinite(length)) {\n length = length | 0;\n if (encoding === undefined) encoding = 'utf8';\n } else {\n encoding = length;\n length = undefined;\n } // legacy write(string, encoding, offset, length) - remove in v0.13\n\n } else {\n throw new Error('Buffer.write(string, encoding, offset[, length]) is no longer supported');\n }\n\n var remaining = this.length - offset;\n if (length === undefined || length > remaining) length = remaining;\n\n if (string.length > 0 && (length < 0 || offset < 0) || offset > this.length) {\n throw new RangeError('Attempt to write outside buffer bounds');\n }\n\n if (!encoding) encoding = 'utf8';\n var loweredCase = false;\n\n for (;;) {\n switch (encoding) {\n case 'hex':\n return hexWrite(this, string, offset, length);\n\n case 'utf8':\n case 'utf-8':\n return utf8Write(this, string, offset, length);\n\n case 'ascii':\n return asciiWrite(this, string, offset, length);\n\n case 'latin1':\n case 'binary':\n return latin1Write(this, string, offset, length);\n\n case 'base64':\n // Warning: maxLength not taken into account in base64Write\n return base64Write(this, string, offset, length);\n\n case 'ucs2':\n case 'ucs-2':\n case 'utf16le':\n case 'utf-16le':\n return ucs2Write(this, string, offset, length);\n\n default:\n if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding);\n encoding = ('' + encoding).toLowerCase();\n loweredCase = true;\n }\n }\n};\n\nBuffer.prototype.toJSON = function toJSON() {\n return {\n type: 'Buffer',\n data: Array.prototype.slice.call(this._arr || this, 0)\n };\n};\n\nfunction base64Slice(buf, start, end) {\n if (start === 0 && end === buf.length) {\n return base64.fromByteArray(buf);\n } else {\n return base64.fromByteArray(buf.slice(start, end));\n }\n}\n\nfunction utf8Slice(buf, start, end) {\n end = Math.min(buf.length, end);\n var res = [];\n var i = start;\n\n while (i < end) {\n var firstByte = buf[i];\n var codePoint = null;\n var bytesPerSequence = firstByte > 0xEF ? 4 : firstByte > 0xDF ? 3 : firstByte > 0xBF ? 2 : 1;\n\n if (i + bytesPerSequence <= end) {\n var secondByte, thirdByte, fourthByte, tempCodePoint;\n\n switch (bytesPerSequence) {\n case 1:\n if (firstByte < 0x80) {\n codePoint = firstByte;\n }\n\n break;\n\n case 2:\n secondByte = buf[i + 1];\n\n if ((secondByte & 0xC0) === 0x80) {\n tempCodePoint = (firstByte & 0x1F) << 0x6 | secondByte & 0x3F;\n\n if (tempCodePoint > 0x7F) {\n codePoint = tempCodePoint;\n }\n }\n\n break;\n\n case 3:\n secondByte = buf[i + 1];\n thirdByte = buf[i + 2];\n\n if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80) {\n tempCodePoint = (firstByte & 0xF) << 0xC | (secondByte & 0x3F) << 0x6 | thirdByte & 0x3F;\n\n if (tempCodePoint > 0x7FF && (tempCodePoint < 0xD800 || tempCodePoint > 0xDFFF)) {\n codePoint = tempCodePoint;\n }\n }\n\n break;\n\n case 4:\n secondByte = buf[i + 1];\n thirdByte = buf[i + 2];\n fourthByte = buf[i + 3];\n\n if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80 && (fourthByte & 0xC0) === 0x80) {\n tempCodePoint = (firstByte & 0xF) << 0x12 | (secondByte & 0x3F) << 0xC | (thirdByte & 0x3F) << 0x6 | fourthByte & 0x3F;\n\n if (tempCodePoint > 0xFFFF && tempCodePoint < 0x110000) {\n codePoint = tempCodePoint;\n }\n }\n\n }\n }\n\n if (codePoint === null) {\n // we did not generate a valid codePoint so insert a\n // replacement char (U+FFFD) and advance only 1 byte\n codePoint = 0xFFFD;\n bytesPerSequence = 1;\n } else if (codePoint > 0xFFFF) {\n // encode to utf16 (surrogate pair dance)\n codePoint -= 0x10000;\n res.push(codePoint >>> 10 & 0x3FF | 0xD800);\n codePoint = 0xDC00 | codePoint & 0x3FF;\n }\n\n res.push(codePoint);\n i += bytesPerSequence;\n }\n\n return decodeCodePointsArray(res);\n} // Based on http://stackoverflow.com/a/22747272/680742, the browser with\n// the lowest limit is Chrome, with 0x10000 args.\n// We go 1 magnitude less, for safety\n\n\nvar MAX_ARGUMENTS_LENGTH = 0x1000;\n\nfunction decodeCodePointsArray(codePoints) {\n var len = codePoints.length;\n\n if (len <= MAX_ARGUMENTS_LENGTH) {\n return String.fromCharCode.apply(String, codePoints); // avoid extra slice()\n } // Decode in chunks to avoid \"call stack size exceeded\".\n\n\n var res = '';\n var i = 0;\n\n while (i < len) {\n res += String.fromCharCode.apply(String, codePoints.slice(i, i += MAX_ARGUMENTS_LENGTH));\n }\n\n return res;\n}\n\nfunction asciiSlice(buf, start, end) {\n var ret = '';\n end = Math.min(buf.length, end);\n\n for (var i = start; i < end; ++i) {\n ret += String.fromCharCode(buf[i] & 0x7F);\n }\n\n return ret;\n}\n\nfunction latin1Slice(buf, start, end) {\n var ret = '';\n end = Math.min(buf.length, end);\n\n for (var i = start; i < end; ++i) {\n ret += String.fromCharCode(buf[i]);\n }\n\n return ret;\n}\n\nfunction hexSlice(buf, start, end) {\n var len = buf.length;\n if (!start || start < 0) start = 0;\n if (!end || end < 0 || end > len) end = len;\n var out = '';\n\n for (var i = start; i < end; ++i) {\n out += toHex(buf[i]);\n }\n\n return out;\n}\n\nfunction utf16leSlice(buf, start, end) {\n var bytes = buf.slice(start, end);\n var res = '';\n\n for (var i = 0; i < bytes.length; i += 2) {\n res += String.fromCharCode(bytes[i] + bytes[i + 1] * 256);\n }\n\n return res;\n}\n\nBuffer.prototype.slice = function slice(start, end) {\n var len = this.length;\n start = ~~start;\n end = end === undefined ? len : ~~end;\n\n if (start < 0) {\n start += len;\n if (start < 0) start = 0;\n } else if (start > len) {\n start = len;\n }\n\n if (end < 0) {\n end += len;\n if (end < 0) end = 0;\n } else if (end > len) {\n end = len;\n }\n\n if (end < start) end = start;\n var newBuf;\n\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n newBuf = this.subarray(start, end);\n newBuf.__proto__ = Buffer.prototype;\n } else {\n var sliceLen = end - start;\n newBuf = new Buffer(sliceLen, undefined);\n\n for (var i = 0; i < sliceLen; ++i) {\n newBuf[i] = this[i + start];\n }\n }\n\n return newBuf;\n};\n/*\n * Need to make sure that buffer isn't trying to write out of bounds.\n */\n\n\nfunction checkOffset(offset, ext, length) {\n if (offset % 1 !== 0 || offset < 0) throw new RangeError('offset is not uint');\n if (offset + ext > length) throw new RangeError('Trying to access beyond buffer length');\n}\n\nBuffer.prototype.readUIntLE = function readUIntLE(offset, byteLength, noAssert) {\n offset = offset | 0;\n byteLength = byteLength | 0;\n if (!noAssert) checkOffset(offset, byteLength, this.length);\n var val = this[offset];\n var mul = 1;\n var i = 0;\n\n while (++i < byteLength && (mul *= 0x100)) {\n val += this[offset + i] * mul;\n }\n\n return val;\n};\n\nBuffer.prototype.readUIntBE = function readUIntBE(offset, byteLength, noAssert) {\n offset = offset | 0;\n byteLength = byteLength | 0;\n\n if (!noAssert) {\n checkOffset(offset, byteLength, this.length);\n }\n\n var val = this[offset + --byteLength];\n var mul = 1;\n\n while (byteLength > 0 && (mul *= 0x100)) {\n val += this[offset + --byteLength] * mul;\n }\n\n return val;\n};\n\nBuffer.prototype.readUInt8 = function readUInt8(offset, noAssert) {\n if (!noAssert) checkOffset(offset, 1, this.length);\n return this[offset];\n};\n\nBuffer.prototype.readUInt16LE = function readUInt16LE(offset, noAssert) {\n if (!noAssert) checkOffset(offset, 2, this.length);\n return this[offset] | this[offset + 1] << 8;\n};\n\nBuffer.prototype.readUInt16BE = function readUInt16BE(offset, noAssert) {\n if (!noAssert) checkOffset(offset, 2, this.length);\n return this[offset] << 8 | this[offset + 1];\n};\n\nBuffer.prototype.readUInt32LE = function readUInt32LE(offset, noAssert) {\n if (!noAssert) checkOffset(offset, 4, this.length);\n return (this[offset] | this[offset + 1] << 8 | this[offset + 2] << 16) + this[offset + 3] * 0x1000000;\n};\n\nBuffer.prototype.readUInt32BE = function readUInt32BE(offset, noAssert) {\n if (!noAssert) checkOffset(offset, 4, this.length);\n return this[offset] * 0x1000000 + (this[offset + 1] << 16 | this[offset + 2] << 8 | this[offset + 3]);\n};\n\nBuffer.prototype.readIntLE = function readIntLE(offset, byteLength, noAssert) {\n offset = offset | 0;\n byteLength = byteLength | 0;\n if (!noAssert) checkOffset(offset, byteLength, this.length);\n var val = this[offset];\n var mul = 1;\n var i = 0;\n\n while (++i < byteLength && (mul *= 0x100)) {\n val += this[offset + i] * mul;\n }\n\n mul *= 0x80;\n if (val >= mul) val -= Math.pow(2, 8 * byteLength);\n return val;\n};\n\nBuffer.prototype.readIntBE = function readIntBE(offset, byteLength, noAssert) {\n offset = offset | 0;\n byteLength = byteLength | 0;\n if (!noAssert) checkOffset(offset, byteLength, this.length);\n var i = byteLength;\n var mul = 1;\n var val = this[offset + --i];\n\n while (i > 0 && (mul *= 0x100)) {\n val += this[offset + --i] * mul;\n }\n\n mul *= 0x80;\n if (val >= mul) val -= Math.pow(2, 8 * byteLength);\n return val;\n};\n\nBuffer.prototype.readInt8 = function readInt8(offset, noAssert) {\n if (!noAssert) checkOffset(offset, 1, this.length);\n if (!(this[offset] & 0x80)) return this[offset];\n return (0xff - this[offset] + 1) * -1;\n};\n\nBuffer.prototype.readInt16LE = function readInt16LE(offset, noAssert) {\n if (!noAssert) checkOffset(offset, 2, this.length);\n var val = this[offset] | this[offset + 1] << 8;\n return val & 0x8000 ? val | 0xFFFF0000 : val;\n};\n\nBuffer.prototype.readInt16BE = function readInt16BE(offset, noAssert) {\n if (!noAssert) checkOffset(offset, 2, this.length);\n var val = this[offset + 1] | this[offset] << 8;\n return val & 0x8000 ? val | 0xFFFF0000 : val;\n};\n\nBuffer.prototype.readInt32LE = function readInt32LE(offset, noAssert) {\n if (!noAssert) checkOffset(offset, 4, this.length);\n return this[offset] | this[offset + 1] << 8 | this[offset + 2] << 16 | this[offset + 3] << 24;\n};\n\nBuffer.prototype.readInt32BE = function readInt32BE(offset, noAssert) {\n if (!noAssert) checkOffset(offset, 4, this.length);\n return this[offset] << 24 | this[offset + 1] << 16 | this[offset + 2] << 8 | this[offset + 3];\n};\n\nBuffer.prototype.readFloatLE = function readFloatLE(offset, noAssert) {\n if (!noAssert) checkOffset(offset, 4, this.length);\n return ieee754.read(this, offset, true, 23, 4);\n};\n\nBuffer.prototype.readFloatBE = function readFloatBE(offset, noAssert) {\n if (!noAssert) checkOffset(offset, 4, this.length);\n return ieee754.read(this, offset, false, 23, 4);\n};\n\nBuffer.prototype.readDoubleLE = function readDoubleLE(offset, noAssert) {\n if (!noAssert) checkOffset(offset, 8, this.length);\n return ieee754.read(this, offset, true, 52, 8);\n};\n\nBuffer.prototype.readDoubleBE = function readDoubleBE(offset, noAssert) {\n if (!noAssert) checkOffset(offset, 8, this.length);\n return ieee754.read(this, offset, false, 52, 8);\n};\n\nfunction checkInt(buf, value, offset, ext, max, min) {\n if (!Buffer.isBuffer(buf)) throw new TypeError('\"buffer\" argument must be a Buffer instance');\n if (value > max || value < min) throw new RangeError('\"value\" argument is out of bounds');\n if (offset + ext > buf.length) throw new RangeError('Index out of range');\n}\n\nBuffer.prototype.writeUIntLE = function writeUIntLE(value, offset, byteLength, noAssert) {\n value = +value;\n offset = offset | 0;\n byteLength = byteLength | 0;\n\n if (!noAssert) {\n var maxBytes = Math.pow(2, 8 * byteLength) - 1;\n checkInt(this, value, offset, byteLength, maxBytes, 0);\n }\n\n var mul = 1;\n var i = 0;\n this[offset] = value & 0xFF;\n\n while (++i < byteLength && (mul *= 0x100)) {\n this[offset + i] = value / mul & 0xFF;\n }\n\n return offset + byteLength;\n};\n\nBuffer.prototype.writeUIntBE = function writeUIntBE(value, offset, byteLength, noAssert) {\n value = +value;\n offset = offset | 0;\n byteLength = byteLength | 0;\n\n if (!noAssert) {\n var maxBytes = Math.pow(2, 8 * byteLength) - 1;\n checkInt(this, value, offset, byteLength, maxBytes, 0);\n }\n\n var i = byteLength - 1;\n var mul = 1;\n this[offset + i] = value & 0xFF;\n\n while (--i >= 0 && (mul *= 0x100)) {\n this[offset + i] = value / mul & 0xFF;\n }\n\n return offset + byteLength;\n};\n\nBuffer.prototype.writeUInt8 = function writeUInt8(value, offset, noAssert) {\n value = +value;\n offset = offset | 0;\n if (!noAssert) checkInt(this, value, offset, 1, 0xff, 0);\n if (!Buffer.TYPED_ARRAY_SUPPORT) value = Math.floor(value);\n this[offset] = value & 0xff;\n return offset + 1;\n};\n\nfunction objectWriteUInt16(buf, value, offset, littleEndian) {\n if (value < 0) value = 0xffff + value + 1;\n\n for (var i = 0, j = Math.min(buf.length - offset, 2); i < j; ++i) {\n buf[offset + i] = (value & 0xff << 8 * (littleEndian ? i : 1 - i)) >>> (littleEndian ? i : 1 - i) * 8;\n }\n}\n\nBuffer.prototype.writeUInt16LE = function writeUInt16LE(value, offset, noAssert) {\n value = +value;\n offset = offset | 0;\n if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0);\n\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n this[offset] = value & 0xff;\n this[offset + 1] = value >>> 8;\n } else {\n objectWriteUInt16(this, value, offset, true);\n }\n\n return offset + 2;\n};\n\nBuffer.prototype.writeUInt16BE = function writeUInt16BE(value, offset, noAssert) {\n value = +value;\n offset = offset | 0;\n if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0);\n\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n this[offset] = value >>> 8;\n this[offset + 1] = value & 0xff;\n } else {\n objectWriteUInt16(this, value, offset, false);\n }\n\n return offset + 2;\n};\n\nfunction objectWriteUInt32(buf, value, offset, littleEndian) {\n if (value < 0) value = 0xffffffff + value + 1;\n\n for (var i = 0, j = Math.min(buf.length - offset, 4); i < j; ++i) {\n buf[offset + i] = value >>> (littleEndian ? i : 3 - i) * 8 & 0xff;\n }\n}\n\nBuffer.prototype.writeUInt32LE = function writeUInt32LE(value, offset, noAssert) {\n value = +value;\n offset = offset | 0;\n if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0);\n\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n this[offset + 3] = value >>> 24;\n this[offset + 2] = value >>> 16;\n this[offset + 1] = value >>> 8;\n this[offset] = value & 0xff;\n } else {\n objectWriteUInt32(this, value, offset, true);\n }\n\n return offset + 4;\n};\n\nBuffer.prototype.writeUInt32BE = function writeUInt32BE(value, offset, noAssert) {\n value = +value;\n offset = offset | 0;\n if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0);\n\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n this[offset] = value >>> 24;\n this[offset + 1] = value >>> 16;\n this[offset + 2] = value >>> 8;\n this[offset + 3] = value & 0xff;\n } else {\n objectWriteUInt32(this, value, offset, false);\n }\n\n return offset + 4;\n};\n\nBuffer.prototype.writeIntLE = function writeIntLE(value, offset, byteLength, noAssert) {\n value = +value;\n offset = offset | 0;\n\n if (!noAssert) {\n var limit = Math.pow(2, 8 * byteLength - 1);\n checkInt(this, value, offset, byteLength, limit - 1, -limit);\n }\n\n var i = 0;\n var mul = 1;\n var sub = 0;\n this[offset] = value & 0xFF;\n\n while (++i < byteLength && (mul *= 0x100)) {\n if (value < 0 && sub === 0 && this[offset + i - 1] !== 0) {\n sub = 1;\n }\n\n this[offset + i] = (value / mul >> 0) - sub & 0xFF;\n }\n\n return offset + byteLength;\n};\n\nBuffer.prototype.writeIntBE = function writeIntBE(value, offset, byteLength, noAssert) {\n value = +value;\n offset = offset | 0;\n\n if (!noAssert) {\n var limit = Math.pow(2, 8 * byteLength - 1);\n checkInt(this, value, offset, byteLength, limit - 1, -limit);\n }\n\n var i = byteLength - 1;\n var mul = 1;\n var sub = 0;\n this[offset + i] = value & 0xFF;\n\n while (--i >= 0 && (mul *= 0x100)) {\n if (value < 0 && sub === 0 && this[offset + i + 1] !== 0) {\n sub = 1;\n }\n\n this[offset + i] = (value / mul >> 0) - sub & 0xFF;\n }\n\n return offset + byteLength;\n};\n\nBuffer.prototype.writeInt8 = function writeInt8(value, offset, noAssert) {\n value = +value;\n offset = offset | 0;\n if (!noAssert) checkInt(this, value, offset, 1, 0x7f, -0x80);\n if (!Buffer.TYPED_ARRAY_SUPPORT) value = Math.floor(value);\n if (value < 0) value = 0xff + value + 1;\n this[offset] = value & 0xff;\n return offset + 1;\n};\n\nBuffer.prototype.writeInt16LE = function writeInt16LE(value, offset, noAssert) {\n value = +value;\n offset = offset | 0;\n if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000);\n\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n this[offset] = value & 0xff;\n this[offset + 1] = value >>> 8;\n } else {\n objectWriteUInt16(this, value, offset, true);\n }\n\n return offset + 2;\n};\n\nBuffer.prototype.writeInt16BE = function writeInt16BE(value, offset, noAssert) {\n value = +value;\n offset = offset | 0;\n if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000);\n\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n this[offset] = value >>> 8;\n this[offset + 1] = value & 0xff;\n } else {\n objectWriteUInt16(this, value, offset, false);\n }\n\n return offset + 2;\n};\n\nBuffer.prototype.writeInt32LE = function writeInt32LE(value, offset, noAssert) {\n value = +value;\n offset = offset | 0;\n if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000);\n\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n this[offset] = value & 0xff;\n this[offset + 1] = value >>> 8;\n this[offset + 2] = value >>> 16;\n this[offset + 3] = value >>> 24;\n } else {\n objectWriteUInt32(this, value, offset, true);\n }\n\n return offset + 4;\n};\n\nBuffer.prototype.writeInt32BE = function writeInt32BE(value, offset, noAssert) {\n value = +value;\n offset = offset | 0;\n if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000);\n if (value < 0) value = 0xffffffff + value + 1;\n\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n this[offset] = value >>> 24;\n this[offset + 1] = value >>> 16;\n this[offset + 2] = value >>> 8;\n this[offset + 3] = value & 0xff;\n } else {\n objectWriteUInt32(this, value, offset, false);\n }\n\n return offset + 4;\n};\n\nfunction checkIEEE754(buf, value, offset, ext, max, min) {\n if (offset + ext > buf.length) throw new RangeError('Index out of range');\n if (offset < 0) throw new RangeError('Index out of range');\n}\n\nfunction writeFloat(buf, value, offset, littleEndian, noAssert) {\n if (!noAssert) {\n checkIEEE754(buf, value, offset, 4, 3.4028234663852886e+38, -3.4028234663852886e+38);\n }\n\n ieee754.write(buf, value, offset, littleEndian, 23, 4);\n return offset + 4;\n}\n\nBuffer.prototype.writeFloatLE = function writeFloatLE(value, offset, noAssert) {\n return writeFloat(this, value, offset, true, noAssert);\n};\n\nBuffer.prototype.writeFloatBE = function writeFloatBE(value, offset, noAssert) {\n return writeFloat(this, value, offset, false, noAssert);\n};\n\nfunction writeDouble(buf, value, offset, littleEndian, noAssert) {\n if (!noAssert) {\n checkIEEE754(buf, value, offset, 8, 1.7976931348623157E+308, -1.7976931348623157E+308);\n }\n\n ieee754.write(buf, value, offset, littleEndian, 52, 8);\n return offset + 8;\n}\n\nBuffer.prototype.writeDoubleLE = function writeDoubleLE(value, offset, noAssert) {\n return writeDouble(this, value, offset, true, noAssert);\n};\n\nBuffer.prototype.writeDoubleBE = function writeDoubleBE(value, offset, noAssert) {\n return writeDouble(this, value, offset, false, noAssert);\n}; // copy(targetBuffer, targetStart=0, sourceStart=0, sourceEnd=buffer.length)\n\n\nBuffer.prototype.copy = function copy(target, targetStart, start, end) {\n if (!start) start = 0;\n if (!end && end !== 0) end = this.length;\n if (targetStart >= target.length) targetStart = target.length;\n if (!targetStart) targetStart = 0;\n if (end > 0 && end < start) end = start; // Copy 0 bytes; we're done\n\n if (end === start) return 0;\n if (target.length === 0 || this.length === 0) return 0; // Fatal error conditions\n\n if (targetStart < 0) {\n throw new RangeError('targetStart out of bounds');\n }\n\n if (start < 0 || start >= this.length) throw new RangeError('sourceStart out of bounds');\n if (end < 0) throw new RangeError('sourceEnd out of bounds'); // Are we oob?\n\n if (end > this.length) end = this.length;\n\n if (target.length - targetStart < end - start) {\n end = target.length - targetStart + start;\n }\n\n var len = end - start;\n var i;\n\n if (this === target && start < targetStart && targetStart < end) {\n // descending copy from end\n for (i = len - 1; i >= 0; --i) {\n target[i + targetStart] = this[i + start];\n }\n } else if (len < 1000 || !Buffer.TYPED_ARRAY_SUPPORT) {\n // ascending copy from start\n for (i = 0; i < len; ++i) {\n target[i + targetStart] = this[i + start];\n }\n } else {\n Uint8Array.prototype.set.call(target, this.subarray(start, start + len), targetStart);\n }\n\n return len;\n}; // Usage:\n// buffer.fill(number[, offset[, end]])\n// buffer.fill(buffer[, offset[, end]])\n// buffer.fill(string[, offset[, end]][, encoding])\n\n\nBuffer.prototype.fill = function fill(val, start, end, encoding) {\n // Handle string cases:\n if (typeof val === 'string') {\n if (typeof start === 'string') {\n encoding = start;\n start = 0;\n end = this.length;\n } else if (typeof end === 'string') {\n encoding = end;\n end = this.length;\n }\n\n if (val.length === 1) {\n var code = val.charCodeAt(0);\n\n if (code < 256) {\n val = code;\n }\n }\n\n if (encoding !== undefined && typeof encoding !== 'string') {\n throw new TypeError('encoding must be a string');\n }\n\n if (typeof encoding === 'string' && !Buffer.isEncoding(encoding)) {\n throw new TypeError('Unknown encoding: ' + encoding);\n }\n } else if (typeof val === 'number') {\n val = val & 255;\n } // Invalid ranges are not set to a default, so can range check early.\n\n\n if (start < 0 || this.length < start || this.length < end) {\n throw new RangeError('Out of range index');\n }\n\n if (end <= start) {\n return this;\n }\n\n start = start >>> 0;\n end = end === undefined ? this.length : end >>> 0;\n if (!val) val = 0;\n var i;\n\n if (typeof val === 'number') {\n for (i = start; i < end; ++i) {\n this[i] = val;\n }\n } else {\n var bytes = Buffer.isBuffer(val) ? val : utf8ToBytes(new Buffer(val, encoding).toString());\n var len = bytes.length;\n\n for (i = 0; i < end - start; ++i) {\n this[i + start] = bytes[i % len];\n }\n }\n\n return this;\n}; // HELPER FUNCTIONS\n// ================\n\n\nvar INVALID_BASE64_RE = /[^+\\/0-9A-Za-z-_]/g;\n\nfunction base64clean(str) {\n // Node strips out invalid characters like \\n and \\t from the string, base64-js does not\n str = stringtrim(str).replace(INVALID_BASE64_RE, ''); // Node converts strings with length < 2 to ''\n\n if (str.length < 2) return ''; // Node allows for non-padded base64 strings (missing trailing ===), base64-js does not\n\n while (str.length % 4 !== 0) {\n str = str + '=';\n }\n\n return str;\n}\n\nfunction stringtrim(str) {\n if (str.trim) return str.trim();\n return str.replace(/^\\s+|\\s+$/g, '');\n}\n\nfunction toHex(n) {\n if (n < 16) return '0' + n.toString(16);\n return n.toString(16);\n}\n\nfunction utf8ToBytes(string, units) {\n units = units || Infinity;\n var codePoint;\n var length = string.length;\n var leadSurrogate = null;\n var bytes = [];\n\n for (var i = 0; i < length; ++i) {\n codePoint = string.charCodeAt(i); // is surrogate component\n\n if (codePoint > 0xD7FF && codePoint < 0xE000) {\n // last char was a lead\n if (!leadSurrogate) {\n // no lead yet\n if (codePoint > 0xDBFF) {\n // unexpected trail\n if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD);\n continue;\n } else if (i + 1 === length) {\n // unpaired lead\n if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD);\n continue;\n } // valid lead\n\n\n leadSurrogate = codePoint;\n continue;\n } // 2 leads in a row\n\n\n if (codePoint < 0xDC00) {\n if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD);\n leadSurrogate = codePoint;\n continue;\n } // valid surrogate pair\n\n\n codePoint = (leadSurrogate - 0xD800 << 10 | codePoint - 0xDC00) + 0x10000;\n } else if (leadSurrogate) {\n // valid bmp char, but last char was a lead\n if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD);\n }\n\n leadSurrogate = null; // encode utf8\n\n if (codePoint < 0x80) {\n if ((units -= 1) < 0) break;\n bytes.push(codePoint);\n } else if (codePoint < 0x800) {\n if ((units -= 2) < 0) break;\n bytes.push(codePoint >> 0x6 | 0xC0, codePoint & 0x3F | 0x80);\n } else if (codePoint < 0x10000) {\n if ((units -= 3) < 0) break;\n bytes.push(codePoint >> 0xC | 0xE0, codePoint >> 0x6 & 0x3F | 0x80, codePoint & 0x3F | 0x80);\n } else if (codePoint < 0x110000) {\n if ((units -= 4) < 0) break;\n bytes.push(codePoint >> 0x12 | 0xF0, codePoint >> 0xC & 0x3F | 0x80, codePoint >> 0x6 & 0x3F | 0x80, codePoint & 0x3F | 0x80);\n } else {\n throw new Error('Invalid code point');\n }\n }\n\n return bytes;\n}\n\nfunction asciiToBytes(str) {\n var byteArray = [];\n\n for (var i = 0; i < str.length; ++i) {\n // Node's code seems to be doing this and not & 0x7F..\n byteArray.push(str.charCodeAt(i) & 0xFF);\n }\n\n return byteArray;\n}\n\nfunction utf16leToBytes(str, units) {\n var c, hi, lo;\n var byteArray = [];\n\n for (var i = 0; i < str.length; ++i) {\n if ((units -= 2) < 0) break;\n c = str.charCodeAt(i);\n hi = c >> 8;\n lo = c % 256;\n byteArray.push(lo);\n byteArray.push(hi);\n }\n\n return byteArray;\n}\n\nfunction base64ToBytes(str) {\n return base64.toByteArray(base64clean(str));\n}\n\nfunction blitBuffer(src, dst, offset, length) {\n for (var i = 0; i < length; ++i) {\n if (i + offset >= dst.length || i >= src.length) break;\n dst[i + offset] = src[i];\n }\n\n return i;\n}\n\nfunction isnan(val) {\n return val !== val; // eslint-disable-line no-self-compare\n}","'use strict';\n\nexports.byteLength = byteLength;\nexports.toByteArray = toByteArray;\nexports.fromByteArray = fromByteArray;\nvar lookup = [];\nvar revLookup = [];\nvar Arr = typeof Uint8Array !== 'undefined' ? Uint8Array : Array;\nvar code = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';\n\nfor (var i = 0, len = code.length; i < len; ++i) {\n lookup[i] = code[i];\n revLookup[code.charCodeAt(i)] = i;\n} // Support decoding URL-safe base64 strings, as Node.js does.\n// See: https://en.wikipedia.org/wiki/Base64#URL_applications\n\n\nrevLookup['-'.charCodeAt(0)] = 62;\nrevLookup['_'.charCodeAt(0)] = 63;\n\nfunction getLens(b64) {\n var len = b64.length;\n\n if (len % 4 > 0) {\n throw new Error('Invalid string. Length must be a multiple of 4');\n } // Trim off extra bytes after placeholder bytes are found\n // See: https://github.com/beatgammit/base64-js/issues/42\n\n\n var validLen = b64.indexOf('=');\n if (validLen === -1) validLen = len;\n var placeHoldersLen = validLen === len ? 0 : 4 - validLen % 4;\n return [validLen, placeHoldersLen];\n} // base64 is 4/3 + up to two characters of the original data\n\n\nfunction byteLength(b64) {\n var lens = getLens(b64);\n var validLen = lens[0];\n var placeHoldersLen = lens[1];\n return (validLen + placeHoldersLen) * 3 / 4 - placeHoldersLen;\n}\n\nfunction _byteLength(b64, validLen, placeHoldersLen) {\n return (validLen + placeHoldersLen) * 3 / 4 - placeHoldersLen;\n}\n\nfunction toByteArray(b64) {\n var tmp;\n var lens = getLens(b64);\n var validLen = lens[0];\n var placeHoldersLen = lens[1];\n var arr = new Arr(_byteLength(b64, validLen, placeHoldersLen));\n var curByte = 0; // if there are placeholders, only get up to the last complete 4 chars\n\n var len = placeHoldersLen > 0 ? validLen - 4 : validLen;\n var i;\n\n for (i = 0; i < len; i += 4) {\n tmp = revLookup[b64.charCodeAt(i)] << 18 | revLookup[b64.charCodeAt(i + 1)] << 12 | revLookup[b64.charCodeAt(i + 2)] << 6 | revLookup[b64.charCodeAt(i + 3)];\n arr[curByte++] = tmp >> 16 & 0xFF;\n arr[curByte++] = tmp >> 8 & 0xFF;\n arr[curByte++] = tmp & 0xFF;\n }\n\n if (placeHoldersLen === 2) {\n tmp = revLookup[b64.charCodeAt(i)] << 2 | revLookup[b64.charCodeAt(i + 1)] >> 4;\n arr[curByte++] = tmp & 0xFF;\n }\n\n if (placeHoldersLen === 1) {\n tmp = revLookup[b64.charCodeAt(i)] << 10 | revLookup[b64.charCodeAt(i + 1)] << 4 | revLookup[b64.charCodeAt(i + 2)] >> 2;\n arr[curByte++] = tmp >> 8 & 0xFF;\n arr[curByte++] = tmp & 0xFF;\n }\n\n return arr;\n}\n\nfunction tripletToBase64(num) {\n return lookup[num >> 18 & 0x3F] + lookup[num >> 12 & 0x3F] + lookup[num >> 6 & 0x3F] + lookup[num & 0x3F];\n}\n\nfunction encodeChunk(uint8, start, end) {\n var tmp;\n var output = [];\n\n for (var i = start; i < end; i += 3) {\n tmp = (uint8[i] << 16 & 0xFF0000) + (uint8[i + 1] << 8 & 0xFF00) + (uint8[i + 2] & 0xFF);\n output.push(tripletToBase64(tmp));\n }\n\n return output.join('');\n}\n\nfunction fromByteArray(uint8) {\n var tmp;\n var len = uint8.length;\n var extraBytes = len % 3; // if we have 1 byte left, pad 2 bytes\n\n var parts = [];\n var maxChunkLength = 16383; // must be multiple of 3\n // go through the array every three bytes, we'll deal with trailing stuff later\n\n for (var i = 0, len2 = len - extraBytes; i < len2; i += maxChunkLength) {\n parts.push(encodeChunk(uint8, i, i + maxChunkLength > len2 ? len2 : i + maxChunkLength));\n } // pad the end with zeros, but make sure to not forget the extra bytes\n\n\n if (extraBytes === 1) {\n tmp = uint8[len - 1];\n parts.push(lookup[tmp >> 2] + lookup[tmp << 4 & 0x3F] + '==');\n } else if (extraBytes === 2) {\n tmp = (uint8[len - 2] << 8) + uint8[len - 1];\n parts.push(lookup[tmp >> 10] + lookup[tmp >> 4 & 0x3F] + lookup[tmp << 2 & 0x3F] + '=');\n }\n\n return parts.join('');\n}","/*! ieee754. BSD-3-Clause License. Feross Aboukhadijeh */\nexports.read = function (buffer, offset, isLE, mLen, nBytes) {\n var e, m;\n var eLen = nBytes * 8 - mLen - 1;\n var eMax = (1 << eLen) - 1;\n var eBias = eMax >> 1;\n var nBits = -7;\n var i = isLE ? nBytes - 1 : 0;\n var d = isLE ? -1 : 1;\n var s = buffer[offset + i];\n i += d;\n e = s & (1 << -nBits) - 1;\n s >>= -nBits;\n nBits += eLen;\n\n for (; nBits > 0; e = e * 256 + buffer[offset + i], i += d, nBits -= 8) {}\n\n m = e & (1 << -nBits) - 1;\n e >>= -nBits;\n nBits += mLen;\n\n for (; nBits > 0; m = m * 256 + buffer[offset + i], i += d, nBits -= 8) {}\n\n if (e === 0) {\n e = 1 - eBias;\n } else if (e === eMax) {\n return m ? NaN : (s ? -1 : 1) * Infinity;\n } else {\n m = m + Math.pow(2, mLen);\n e = e - eBias;\n }\n\n return (s ? -1 : 1) * m * Math.pow(2, e - mLen);\n};\n\nexports.write = function (buffer, value, offset, isLE, mLen, nBytes) {\n var e, m, c;\n var eLen = nBytes * 8 - mLen - 1;\n var eMax = (1 << eLen) - 1;\n var eBias = eMax >> 1;\n var rt = mLen === 23 ? Math.pow(2, -24) - Math.pow(2, -77) : 0;\n var i = isLE ? 0 : nBytes - 1;\n var d = isLE ? 1 : -1;\n var s = value < 0 || value === 0 && 1 / value < 0 ? 1 : 0;\n value = Math.abs(value);\n\n if (isNaN(value) || value === Infinity) {\n m = isNaN(value) ? 1 : 0;\n e = eMax;\n } else {\n e = Math.floor(Math.log(value) / Math.LN2);\n\n if (value * (c = Math.pow(2, -e)) < 1) {\n e--;\n c *= 2;\n }\n\n if (e + eBias >= 1) {\n value += rt / c;\n } else {\n value += rt * Math.pow(2, 1 - eBias);\n }\n\n if (value * c >= 2) {\n e++;\n c /= 2;\n }\n\n if (e + eBias >= eMax) {\n m = 0;\n e = eMax;\n } else if (e + eBias >= 1) {\n m = (value * c - 1) * Math.pow(2, mLen);\n e = e + eBias;\n } else {\n m = value * Math.pow(2, eBias - 1) * Math.pow(2, mLen);\n e = 0;\n }\n }\n\n for (; mLen >= 8; buffer[offset + i] = m & 0xff, i += d, m /= 256, mLen -= 8) {}\n\n e = e << mLen | m;\n eLen += mLen;\n\n for (; eLen > 0; buffer[offset + i] = e & 0xff, i += d, e /= 256, eLen -= 8) {}\n\n buffer[offset + i - d] |= s * 128;\n};","var toString = {}.toString;\n\nmodule.exports = Array.isArray || function (arr) {\n return toString.call(arr) == '[object Array]';\n};","var scope = typeof global !== \"undefined\" && global || typeof self !== \"undefined\" && self || window;\nvar apply = Function.prototype.apply; // DOM APIs, for completeness\n\nexports.setTimeout = function () {\n return new Timeout(apply.call(setTimeout, scope, arguments), clearTimeout);\n};\n\nexports.setInterval = function () {\n return new Timeout(apply.call(setInterval, scope, arguments), clearInterval);\n};\n\nexports.clearTimeout = exports.clearInterval = function (timeout) {\n if (timeout) {\n timeout.close();\n }\n};\n\nfunction Timeout(id, clearFn) {\n this._id = id;\n this._clearFn = clearFn;\n}\n\nTimeout.prototype.unref = Timeout.prototype.ref = function () {};\n\nTimeout.prototype.close = function () {\n this._clearFn.call(scope, this._id);\n}; // Does not start the time, just sets up the members needed.\n\n\nexports.enroll = function (item, msecs) {\n clearTimeout(item._idleTimeoutId);\n item._idleTimeout = msecs;\n};\n\nexports.unenroll = function (item) {\n clearTimeout(item._idleTimeoutId);\n item._idleTimeout = -1;\n};\n\nexports._unrefActive = exports.active = function (item) {\n clearTimeout(item._idleTimeoutId);\n var msecs = item._idleTimeout;\n\n if (msecs >= 0) {\n item._idleTimeoutId = setTimeout(function onTimeout() {\n if (item._onTimeout) item._onTimeout();\n }, msecs);\n }\n}; // setimmediate attaches itself to the global object\n\n\nrequire(\"setimmediate\"); // On some exotic environments, it's not clear which object `setimmediate` was\n// able to install onto. Search each possibility in the same order as the\n// `setimmediate` library.\n\n\nexports.setImmediate = typeof self !== \"undefined\" && self.setImmediate || typeof global !== \"undefined\" && global.setImmediate || this && this.setImmediate;\nexports.clearImmediate = typeof self !== \"undefined\" && self.clearImmediate || typeof global !== \"undefined\" && global.clearImmediate || this && this.clearImmediate;","(function (global, undefined) {\n \"use strict\";\n\n if (global.setImmediate) {\n return;\n }\n\n var nextHandle = 1; // Spec says greater than zero\n\n var tasksByHandle = {};\n var currentlyRunningATask = false;\n var doc = global.document;\n var registerImmediate;\n\n function setImmediate(callback) {\n // Callback can either be a function or a string\n if (typeof callback !== \"function\") {\n callback = new Function(\"\" + callback);\n } // Copy function arguments\n\n\n var args = new Array(arguments.length - 1);\n\n for (var i = 0; i < args.length; i++) {\n args[i] = arguments[i + 1];\n } // Store and register the task\n\n\n var task = {\n callback: callback,\n args: args\n };\n tasksByHandle[nextHandle] = task;\n registerImmediate(nextHandle);\n return nextHandle++;\n }\n\n function clearImmediate(handle) {\n delete tasksByHandle[handle];\n }\n\n function run(task) {\n var callback = task.callback;\n var args = task.args;\n\n switch (args.length) {\n case 0:\n callback();\n break;\n\n case 1:\n callback(args[0]);\n break;\n\n case 2:\n callback(args[0], args[1]);\n break;\n\n case 3:\n callback(args[0], args[1], args[2]);\n break;\n\n default:\n callback.apply(undefined, args);\n break;\n }\n }\n\n function runIfPresent(handle) {\n // From the spec: \"Wait until any invocations of this algorithm started before this one have completed.\"\n // So if we're currently running a task, we'll need to delay this invocation.\n if (currentlyRunningATask) {\n // Delay by doing a setTimeout. setImmediate was tried instead, but in Firefox 7 it generated a\n // \"too much recursion\" error.\n setTimeout(runIfPresent, 0, handle);\n } else {\n var task = tasksByHandle[handle];\n\n if (task) {\n currentlyRunningATask = true;\n\n try {\n run(task);\n } finally {\n clearImmediate(handle);\n currentlyRunningATask = false;\n }\n }\n }\n }\n\n function installNextTickImplementation() {\n registerImmediate = function registerImmediate(handle) {\n process.nextTick(function () {\n runIfPresent(handle);\n });\n };\n }\n\n function canUsePostMessage() {\n // The test against `importScripts` prevents this implementation from being installed inside a web worker,\n // where `global.postMessage` means something completely different and can't be used for this purpose.\n if (global.postMessage && !global.importScripts) {\n var postMessageIsAsynchronous = true;\n var oldOnMessage = global.onmessage;\n\n global.onmessage = function () {\n postMessageIsAsynchronous = false;\n };\n\n global.postMessage(\"\", \"*\");\n global.onmessage = oldOnMessage;\n return postMessageIsAsynchronous;\n }\n }\n\n function installPostMessageImplementation() {\n // Installs an event handler on `global` for the `message` event: see\n // * https://developer.mozilla.org/en/DOM/window.postMessage\n // * http://www.whatwg.org/specs/web-apps/current-work/multipage/comms.html#crossDocumentMessages\n var messagePrefix = \"setImmediate$\" + Math.random() + \"$\";\n\n var onGlobalMessage = function onGlobalMessage(event) {\n if (event.source === global && typeof event.data === \"string\" && event.data.indexOf(messagePrefix) === 0) {\n runIfPresent(+event.data.slice(messagePrefix.length));\n }\n };\n\n if (global.addEventListener) {\n global.addEventListener(\"message\", onGlobalMessage, false);\n } else {\n global.attachEvent(\"onmessage\", onGlobalMessage);\n }\n\n registerImmediate = function registerImmediate(handle) {\n global.postMessage(messagePrefix + handle, \"*\");\n };\n }\n\n function installMessageChannelImplementation() {\n var channel = new MessageChannel();\n\n channel.port1.onmessage = function (event) {\n var handle = event.data;\n runIfPresent(handle);\n };\n\n registerImmediate = function registerImmediate(handle) {\n channel.port2.postMessage(handle);\n };\n }\n\n function installReadyStateChangeImplementation() {\n var html = doc.documentElement;\n\n registerImmediate = function registerImmediate(handle) {\n // Create a